diff --git a/.github/workflows/build-ripunzip.yml b/.github/workflows/build-ripunzip.yml index 3e32b868985..6f1f95ddf8c 100644 --- a/.github/workflows/build-ripunzip.yml +++ b/.github/workflows/build-ripunzip.yml @@ -20,7 +20,7 @@ jobs: os: [ubuntu-22.04, macos-13, windows-2022] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: repository: google/ripunzip ref: ${{ inputs.ripunzip-version }} @@ -28,7 +28,7 @@ jobs: # see https://github.com/sfackler/rust-openssl/issues/183 - if: runner.os == 'Linux' name: checkout openssl - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: openssl/openssl path: openssl diff --git a/.github/workflows/buildifier.yml b/.github/workflows/buildifier.yml index f3fbf97854c..ac344df588e 100644 --- a/.github/workflows/buildifier.yml +++ b/.github/workflows/buildifier.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Check bazel formatting uses: pre-commit/action@646c83fcd040023954eafda54b4db0192ce70507 with: diff --git a/.github/workflows/check-implicit-this.yml b/.github/workflows/check-implicit-this.yml index f58db399ccb..a109f4bfe55 100644 --- a/.github/workflows/check-implicit-this.yml +++ b/.github/workflows/check-implicit-this.yml @@ -16,7 +16,7 @@ jobs: check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check that implicit this warnings is enabled for all packs shell: bash run: | diff --git a/.github/workflows/check-overlay-annotations.yml b/.github/workflows/check-overlay-annotations.yml index 5369dfd49d0..849cad113c4 100644 --- a/.github/workflows/check-overlay-annotations.yml +++ b/.github/workflows/check-overlay-annotations.yml @@ -17,7 +17,7 @@ jobs: sync: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check overlay annotations run: python config/add-overlay-annotations.py --check java diff --git a/.github/workflows/check-qldoc.yml b/.github/workflows/check-qldoc.yml index f10e0dc90b9..8fe47bf50f7 100644 --- a/.github/workflows/check-qldoc.yml +++ b/.github/workflows/check-qldoc.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 2 diff --git a/.github/workflows/check-query-ids.yml b/.github/workflows/check-query-ids.yml index 8ae19cc3e5f..14d597d44cb 100644 --- a/.github/workflows/check-query-ids.yml +++ b/.github/workflows/check-query-ids.yml @@ -19,6 +19,6 @@ jobs: name: Check query IDs runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check for duplicate query IDs run: python3 misc/scripts/check-query-ids.py diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index ba384245e0e..a32732ab6e6 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -37,7 +37,7 @@ jobs: dotnet-version: 9.0.100 - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/compile-queries.yml b/.github/workflows/compile-queries.yml index 945515c0c53..36171543cac 100644 --- a/.github/workflows/compile-queries.yml +++ b/.github/workflows/compile-queries.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest-xl steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup CodeQL uses: ./.github/actions/fetch-codeql with: diff --git a/.github/workflows/cpp-swift-analysis.yml b/.github/workflows/cpp-swift-analysis.yml index 18c2708d7b4..f72c13cdd70 100644 --- a/.github/workflows/cpp-swift-analysis.yml +++ b/.github/workflows/cpp-swift-analysis.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/csharp-qltest.yml b/.github/workflows/csharp-qltest.yml index ef0b93c50c8..580861af17b 100644 --- a/.github/workflows/csharp-qltest.yml +++ b/.github/workflows/csharp-qltest.yml @@ -39,7 +39,7 @@ jobs: os: [ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup dotnet uses: actions/setup-dotnet@v4 with: @@ -55,7 +55,7 @@ jobs: stubgentest: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./csharp/actions/create-extractor-pack - name: Run stub generator tests run: | diff --git a/.github/workflows/csv-coverage-metrics.yml b/.github/workflows/csv-coverage-metrics.yml index 08f0e9883ef..c9ec9e602d2 100644 --- a/.github/workflows/csv-coverage-metrics.yml +++ b/.github/workflows/csv-coverage-metrics.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup CodeQL uses: ./.github/actions/fetch-codeql - name: Create empty database @@ -51,7 +51,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup CodeQL uses: ./.github/actions/fetch-codeql - name: Create empty database diff --git a/.github/workflows/csv-coverage-pr-artifacts.yml b/.github/workflows/csv-coverage-pr-artifacts.yml index cbd92dd47d7..c62de00535e 100644 --- a/.github/workflows/csv-coverage-pr-artifacts.yml +++ b/.github/workflows/csv-coverage-pr-artifacts.yml @@ -35,11 +35,11 @@ jobs: GITHUB_CONTEXT: ${{ toJSON(github.event) }} run: echo "$GITHUB_CONTEXT" - name: Clone self (github/codeql) - MERGE - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: merge - name: Clone self (github/codeql) - BASE - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 2 path: base diff --git a/.github/workflows/csv-coverage-pr-comment.yml b/.github/workflows/csv-coverage-pr-comment.yml index cf01ef063ac..534725815b4 100644 --- a/.github/workflows/csv-coverage-pr-comment.yml +++ b/.github/workflows/csv-coverage-pr-comment.yml @@ -24,7 +24,7 @@ jobs: GITHUB_CONTEXT: ${{ toJSON(github.event) }} run: echo "$GITHUB_CONTEXT" - name: Clone self (github/codeql) - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set up Python 3.8 uses: actions/setup-python@v4 with: diff --git a/.github/workflows/csv-coverage-timeseries.yml b/.github/workflows/csv-coverage-timeseries.yml index 13dc99b162c..11bc06bee60 100644 --- a/.github/workflows/csv-coverage-timeseries.yml +++ b/.github/workflows/csv-coverage-timeseries.yml @@ -12,11 +12,11 @@ jobs: steps: - name: Clone self (github/codeql) - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: script - name: Clone self (github/codeql) for analysis - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: codeqlModels fetch-depth: 0 diff --git a/.github/workflows/csv-coverage-update.yml b/.github/workflows/csv-coverage-update.yml index 6b73bff820d..9f7a0b778da 100644 --- a/.github/workflows/csv-coverage-update.yml +++ b/.github/workflows/csv-coverage-update.yml @@ -21,7 +21,7 @@ jobs: GITHUB_CONTEXT: ${{ toJSON(github.event) }} run: echo "$GITHUB_CONTEXT" - name: Clone self (github/codeql) - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: ql fetch-depth: 0 diff --git a/.github/workflows/csv-coverage.yml b/.github/workflows/csv-coverage.yml index 525f4bfb64c..a1224456410 100644 --- a/.github/workflows/csv-coverage.yml +++ b/.github/workflows/csv-coverage.yml @@ -16,11 +16,11 @@ jobs: steps: - name: Clone self (github/codeql) - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: script - name: Clone self (github/codeql) for analysis - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: codeqlModels ref: ${{ github.event.inputs.qlModelShaOverride || github.ref }} diff --git a/.github/workflows/fast-forward.yml b/.github/workflows/fast-forward.yml index dd8fefbc529..d71f8be20f9 100644 --- a/.github/workflows/fast-forward.yml +++ b/.github/workflows/fast-forward.yml @@ -26,7 +26,7 @@ jobs: exit 1 - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Git config shell: bash diff --git a/.github/workflows/go-tests.yml b/.github/workflows/go-tests.yml index c30abdd9e5d..6578f09b8df 100644 --- a/.github/workflows/go-tests.yml +++ b/.github/workflows/go-tests.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest-xl steps: - name: Check out code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Run tests uses: ./go/actions/test with: diff --git a/.github/workflows/kotlin-build.yml b/.github/workflows/kotlin-build.yml index 565c3d3a8ba..71a9f8b525c 100644 --- a/.github/workflows/kotlin-build.yml +++ b/.github/workflows/kotlin-build.yml @@ -20,7 +20,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - run: | bazel query //java/kotlin-extractor/... # only build the default version as a quick check that we can build from `codeql` diff --git a/.github/workflows/mad_modelDiff.yml b/.github/workflows/mad_modelDiff.yml index b0e4a20f2b8..3b96d903e23 100644 --- a/.github/workflows/mad_modelDiff.yml +++ b/.github/workflows/mad_modelDiff.yml @@ -28,12 +28,12 @@ jobs: slug: ${{fromJson(github.event.inputs.projects || '["apache/commons-codec", "apache/commons-io", "apache/commons-beanutils", "apache/commons-logging", "apache/commons-fileupload", "apache/commons-lang", "apache/commons-validator", "apache/commons-csv", "apache/dubbo"]' )}} steps: - name: Clone github/codeql from PR - uses: actions/checkout@v4 + uses: actions/checkout@v5 if: github.event.pull_request with: path: codeql-pr - name: Clone github/codeql from main - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: codeql-main ref: main diff --git a/.github/workflows/mad_regenerate-models.yml b/.github/workflows/mad_regenerate-models.yml index 61e4f986243..402dd957331 100644 --- a/.github/workflows/mad_regenerate-models.yml +++ b/.github/workflows/mad_regenerate-models.yml @@ -30,11 +30,11 @@ jobs: ref: "placeholder" steps: - name: Clone self (github/codeql) - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup CodeQL binaries uses: ./.github/actions/fetch-codeql - name: Clone repositories - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: repos/${{ matrix.ref }} ref: ${{ matrix.ref }} diff --git a/.github/workflows/python-tooling.yml b/.github/workflows/python-tooling.yml index 19059070878..bab1277dd03 100644 --- a/.github/workflows/python-tooling.yml +++ b/.github/workflows/python-tooling.yml @@ -21,7 +21,7 @@ jobs: check-python-tooling: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-python@v5 with: python-version: '3.12' diff --git a/.github/workflows/qhelp-pr-preview.yml b/.github/workflows/qhelp-pr-preview.yml index be5a42096bb..a152eb7cc09 100644 --- a/.github/workflows/qhelp-pr-preview.yml +++ b/.github/workflows/qhelp-pr-preview.yml @@ -43,7 +43,7 @@ jobs: if-no-files-found: error retention-days: 1 - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 2 persist-credentials: false diff --git a/.github/workflows/ql-for-ql-build.yml b/.github/workflows/ql-for-ql-build.yml index 73833da0549..9c568a9b572 100644 --- a/.github/workflows/ql-for-ql-build.yml +++ b/.github/workflows/ql-for-ql-build.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest-xl steps: ### Build the queries ### - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 - name: Find codeql diff --git a/.github/workflows/ql-for-ql-dataset_measure.yml b/.github/workflows/ql-for-ql-dataset_measure.yml index c3441ffa407..b4561c04a96 100644 --- a/.github/workflows/ql-for-ql-dataset_measure.yml +++ b/.github/workflows/ql-for-ql-dataset_measure.yml @@ -25,7 +25,7 @@ jobs: - github/codeql runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Find codeql id: find-codeql @@ -46,7 +46,7 @@ jobs: env: CODEQL: ${{ steps.find-codeql.outputs.codeql-path }} - name: Checkout ${{ matrix.repo }} - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: ${{ matrix.repo }} path: ${{ github.workspace }}/repo @@ -75,7 +75,7 @@ jobs: runs-on: ubuntu-latest needs: measure steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/download-artifact@v4 with: name: measurements diff --git a/.github/workflows/ql-for-ql-tests.yml b/.github/workflows/ql-for-ql-tests.yml index 4502dded53f..fdb9da284ce 100644 --- a/.github/workflows/ql-for-ql-tests.yml +++ b/.github/workflows/ql-for-ql-tests.yml @@ -24,7 +24,7 @@ jobs: qltest: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Find codeql id: find-codeql uses: github/codeql-action/init@main @@ -64,7 +64,7 @@ jobs: needs: [qltest] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Install GNU tar if: runner.os == 'macOS' run: | diff --git a/.github/workflows/query-list.yml b/.github/workflows/query-list.yml index a286b9b846b..8c736379f8a 100644 --- a/.github/workflows/query-list.yml +++ b/.github/workflows/query-list.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Clone self (github/codeql) - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: codeql - name: Set up Python 3.8 @@ -31,7 +31,7 @@ jobs: with: python-version: 3.8 - name: Download CodeQL CLI - # Look under the `codeql` directory, as this is where we checked out the `github/codeql` repo + # Look under the `codeql` directory, as this is where we checked out the `github/codeql` repo uses: ./codeql/.github/actions/fetch-codeql - name: Build code scanning query list run: | diff --git a/.github/workflows/ruby-build.yml b/.github/workflows/ruby-build.yml index 343e896151c..39aadef0913 100644 --- a/.github/workflows/ruby-build.yml +++ b/.github/workflows/ruby-build.yml @@ -47,7 +47,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Install GNU tar if: runner.os == 'macOS' run: | @@ -113,7 +113,7 @@ jobs: if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Fetch CodeQL uses: ./.github/actions/fetch-codeql - name: Cache compilation cache @@ -146,7 +146,7 @@ jobs: runs-on: ubuntu-latest needs: [build, compile-queries] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/download-artifact@v4 with: name: ruby.dbscheme @@ -209,7 +209,7 @@ jobs: runs-on: ${{ matrix.os }} needs: [package] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Fetch CodeQL uses: ./.github/actions/fetch-codeql diff --git a/.github/workflows/ruby-dataset-measure.yml b/.github/workflows/ruby-dataset-measure.yml index e3229b15806..a88b23bf3a1 100644 --- a/.github/workflows/ruby-dataset-measure.yml +++ b/.github/workflows/ruby-dataset-measure.yml @@ -30,14 +30,14 @@ jobs: repo: [rails/rails, discourse/discourse, spree/spree, ruby/ruby] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./.github/actions/fetch-codeql - uses: ./ruby/actions/create-extractor-pack - name: Checkout ${{ matrix.repo }} - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: ${{ matrix.repo }} path: ${{ github.workspace }}/repo @@ -62,7 +62,7 @@ jobs: runs-on: ubuntu-latest needs: measure steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/download-artifact@v4 with: path: stats diff --git a/.github/workflows/ruby-qltest-rtjo.yml b/.github/workflows/ruby-qltest-rtjo.yml index c2ae9c0cef1..1d57c465538 100644 --- a/.github/workflows/ruby-qltest-rtjo.yml +++ b/.github/workflows/ruby-qltest-rtjo.yml @@ -25,7 +25,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./.github/actions/fetch-codeql - uses: ./ruby/actions/create-extractor-pack - name: Cache compilation cache diff --git a/.github/workflows/ruby-qltest.yml b/.github/workflows/ruby-qltest.yml index d1518205dab..e178a5dfb6e 100644 --- a/.github/workflows/ruby-qltest.yml +++ b/.github/workflows/ruby-qltest.yml @@ -36,7 +36,7 @@ jobs: qlupgrade: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./.github/actions/fetch-codeql - name: Check DB upgrade scripts run: | @@ -58,7 +58,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./.github/actions/fetch-codeql - uses: ./ruby/actions/create-extractor-pack - name: Cache compilation cache diff --git a/.github/workflows/rust-analysis.yml b/.github/workflows/rust-analysis.yml index 04028ad594b..397aa2fba51 100644 --- a/.github/workflows/rust-analysis.yml +++ b/.github/workflows/rust-analysis.yml @@ -35,7 +35,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Query latest nightly CodeQL bundle shell: bash diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index cc880072555..34f5efb74ba 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -30,7 +30,7 @@ jobs: working-directory: rust/ast-generator steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Inject sources shell: bash run: | @@ -53,7 +53,7 @@ jobs: working-directory: rust/extractor steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Format shell: bash run: | @@ -69,7 +69,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install CodeQL uses: ./.github/actions/fetch-codeql - name: Code generation diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index df610a96702..4a5613f988e 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -36,7 +36,7 @@ jobs: fail-fast: false runs-on: ${{ matrix.runner }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup (Linux) if: runner.os == 'Linux' run: | @@ -53,7 +53,7 @@ jobs: clang-format: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: pre-commit/action@646c83fcd040023954eafda54b4db0192ce70507 name: Check that python code is properly formatted with: @@ -61,7 +61,7 @@ jobs: codegen: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./.github/actions/fetch-codeql - uses: pre-commit/action@646c83fcd040023954eafda54b4db0192ce70507 name: Check that QL generated code was checked in @@ -77,6 +77,6 @@ jobs: check-no-override: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check that no override is present in load.bzl run: bazel test ... --test_tag_filters=override --test_output=errors diff --git a/.github/workflows/sync-files.yml b/.github/workflows/sync-files.yml index 1ed49ac3ecf..f7f42f2e5af 100644 --- a/.github/workflows/sync-files.yml +++ b/.github/workflows/sync-files.yml @@ -17,7 +17,7 @@ jobs: sync: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check synchronized files run: python config/sync-files.py - name: Check dbscheme fragments diff --git a/.github/workflows/tree-sitter-extractor-test.yml b/.github/workflows/tree-sitter-extractor-test.yml index 9a71e1fc7c5..da5834a7f9f 100644 --- a/.github/workflows/tree-sitter-extractor-test.yml +++ b/.github/workflows/tree-sitter-extractor-test.yml @@ -30,7 +30,7 @@ jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check formatting run: cargo fmt -- --check - name: Run tests @@ -38,12 +38,12 @@ jobs: fmt: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check formatting run: cargo fmt --check clippy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Run clippy run: cargo clippy -- --no-deps -D warnings -A clippy::new_without_default -A clippy::too_many_arguments diff --git a/.github/workflows/validate-change-notes.yml b/.github/workflows/validate-change-notes.yml index 42784b661fc..6812d8ff0f6 100644 --- a/.github/workflows/validate-change-notes.yml +++ b/.github/workflows/validate-change-notes.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup CodeQL uses: ./.github/actions/fetch-codeql diff --git a/.github/workflows/zipmerge-test.yml b/.github/workflows/zipmerge-test.yml index edae93a90a0..1e7ac195b5a 100644 --- a/.github/workflows/zipmerge-test.yml +++ b/.github/workflows/zipmerge-test.yml @@ -18,6 +18,6 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - run: | bazel test //misc/bazel/internal/zipmerge:test --test_output=all diff --git a/actions/extractor/codeql-extractor.yml b/actions/extractor/codeql-extractor.yml index b8c6f7ed97b..376abe32597 100644 --- a/actions/extractor/codeql-extractor.yml +++ b/actions/extractor/codeql-extractor.yml @@ -1,11 +1,12 @@ name: "actions" -aliases: [] display_name: "GitHub Actions" version: 0.0.1 column_kind: "utf16" unicode_newlines: true build_modes: - none +default_queries: + - codeql/actions-queries # Actions workflows are not reported separately by the GitHub API, so we can't # associate them with a specific language. github_api_languages: [] diff --git a/actions/ql/lib/CHANGELOG.md b/actions/ql/lib/CHANGELOG.md index bd6b24ef487..5009104e9af 100644 --- a/actions/ql/lib/CHANGELOG.md +++ b/actions/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.16 + +No user-facing changes. + ## 0.4.15 No user-facing changes. diff --git a/actions/ql/lib/change-notes/released/0.4.16.md b/actions/ql/lib/change-notes/released/0.4.16.md new file mode 100644 index 00000000000..d2472bd981f --- /dev/null +++ b/actions/ql/lib/change-notes/released/0.4.16.md @@ -0,0 +1,3 @@ +## 0.4.16 + +No user-facing changes. diff --git a/actions/ql/lib/codeql-pack.release.yml b/actions/ql/lib/codeql-pack.release.yml index 613c98e4872..0664e01a1dd 100644 --- a/actions/ql/lib/codeql-pack.release.yml +++ b/actions/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.4.15 +lastReleaseVersion: 0.4.16 diff --git a/actions/ql/lib/codeql/Locations.qll b/actions/ql/lib/codeql/Locations.qll index 96b5d45f18e..24c6ae9cda1 100644 --- a/actions/ql/lib/codeql/Locations.qll +++ b/actions/ql/lib/codeql/Locations.qll @@ -70,8 +70,8 @@ class Location extends TLocation, TBaseLocation { /** * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. + * The location spans column `sc` of line `sl` to + * column `ec` of line `el` in file `p`. * For more information, see * [Providing locations in CodeQL queries](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ diff --git a/actions/ql/lib/codeql/actions/Ast.qll b/actions/ql/lib/codeql/actions/Ast.qll index ae19a7a7e8c..6e76e4cd665 100644 --- a/actions/ql/lib/codeql/actions/Ast.qll +++ b/actions/ql/lib/codeql/actions/Ast.qll @@ -261,7 +261,7 @@ class If extends AstNode instanceof IfImpl { } /** - * An Environemnt node representing a deployment environment. + * An Environment node representing a deployment environment. */ class Environment extends AstNode instanceof EnvironmentImpl { string getName() { result = super.getName() } diff --git a/actions/ql/lib/codeql/actions/ast/internal/Ast.qll b/actions/ql/lib/codeql/actions/ast/internal/Ast.qll index b0cbb8a1d79..b922214e21c 100644 --- a/actions/ql/lib/codeql/actions/ast/internal/Ast.qll +++ b/actions/ql/lib/codeql/actions/ast/internal/Ast.qll @@ -125,12 +125,11 @@ abstract class AstNodeImpl extends TAstNode { * Gets the enclosing Step. */ StepImpl getEnclosingStep() { - if this instanceof StepImpl - then result = this - else - if this instanceof ScalarValueImpl - then result.getAChildNode*() = this.getParentNode() - else none() + this instanceof StepImpl and + result = this + or + this instanceof ScalarValueImpl and + result.getAChildNode*() = this.getParentNode() } /** @@ -1416,9 +1415,8 @@ class ExternalJobImpl extends JobImpl, UsesImpl { override string getVersion() { exists(YamlString name | n.lookup("uses") = name and - if not name.getValue().matches("\\.%") - then result = name.getValue().regexpCapture(repoUsesParser(), 4) - else none() + not name.getValue().matches("\\.%") and + result = name.getValue().regexpCapture(repoUsesParser(), 4) ) } } diff --git a/actions/ql/lib/codeql/actions/controlflow/BasicBlocks.qll b/actions/ql/lib/codeql/actions/controlflow/BasicBlocks.qll index af5e0f62552..2dcfd81a47d 100644 --- a/actions/ql/lib/codeql/actions/controlflow/BasicBlocks.qll +++ b/actions/ql/lib/codeql/actions/controlflow/BasicBlocks.qll @@ -286,7 +286,7 @@ private module Cached { /** * Holds if `cfn` is the `i`th node in basic block `bb`. * - * In other words, `i` is the shortest distance from a node `bb` + * In other words, `i` is the shortest distance from a node `bbStart` * that starts a basic block to `cfn` along the `intraBBSucc` relation. */ cached diff --git a/actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll b/actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll index 06295e3d88d..38ce9e7e03d 100644 --- a/actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll +++ b/actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll @@ -3,6 +3,8 @@ private import codeql.controlflow.Cfg as CfgShared private import codeql.Locations module Completion { + import codeql.controlflow.SuccessorType + private newtype TCompletion = TSimpleCompletion() or TBooleanCompletion(boolean b) { b in [false, true] } or @@ -25,7 +27,7 @@ module Completion { override predicate isValidFor(AstNode e) { not any(Completion c).isValidForSpecific(e) } - override NormalSuccessor getAMatchingSuccessorType() { any() } + override DirectSuccessor getAMatchingSuccessorType() { any() } } class BooleanCompletion extends NormalCompletion, TBooleanCompletion { @@ -49,34 +51,6 @@ module Completion { override ReturnSuccessor getAMatchingSuccessorType() { any() } } - - cached - private newtype TSuccessorType = - TNormalSuccessor() or - TBooleanSuccessor(boolean b) { b in [false, true] } or - TReturnSuccessor() - - class SuccessorType extends TSuccessorType { - string toString() { none() } - } - - class NormalSuccessor extends SuccessorType, TNormalSuccessor { - override string toString() { result = "successor" } - } - - class BooleanSuccessor extends SuccessorType, TBooleanSuccessor { - boolean value; - - BooleanSuccessor() { this = TBooleanSuccessor(value) } - - override string toString() { result = value.toString() } - - boolean getValue() { result = value } - } - - class ReturnSuccessor extends SuccessorType, TReturnSuccessor { - override string toString() { result = "return" } - } } module CfgScope { @@ -127,14 +101,8 @@ private module Implementation implements CfgShared::InputSig { last(scope.(CompositeAction), e, c) } - predicate successorTypeIsSimple(SuccessorType t) { t instanceof NormalSuccessor } - - predicate successorTypeIsCondition(SuccessorType t) { t instanceof BooleanSuccessor } - SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } - predicate isAbnormalExitType(SuccessorType t) { none() } - int idOfAstNode(AstNode node) { none() } int idOfCfgScope(CfgScope scope) { none() } diff --git a/actions/ql/lib/codeql/actions/dataflow/ExternalFlow.qll b/actions/ql/lib/codeql/actions/dataflow/ExternalFlow.qll index 2914dac5f0a..9667c6e525e 100644 --- a/actions/ql/lib/codeql/actions/dataflow/ExternalFlow.qll +++ b/actions/ql/lib/codeql/actions/dataflow/ExternalFlow.qll @@ -63,10 +63,10 @@ predicate madSource(DataFlow::Node source, string kind, string fieldName) { ( if fieldName.trim().matches("env.%") then source.asExpr() = uses.getInScopeEnvVarExpr(fieldName.trim().replaceAll("env.", "")) - else - if fieldName.trim().matches("output.%") - then source.asExpr() = uses - else none() + else ( + fieldName.trim().matches("output.%") and + source.asExpr() = uses + ) ) ) } diff --git a/actions/ql/lib/codeql/actions/dataflow/FlowSources.qll b/actions/ql/lib/codeql/actions/dataflow/FlowSources.qll index df3d513d005..18cc4322c81 100644 --- a/actions/ql/lib/codeql/actions/dataflow/FlowSources.qll +++ b/actions/ql/lib/codeql/actions/dataflow/FlowSources.qll @@ -31,14 +31,14 @@ abstract class RemoteFlowSource extends SourceNode { class GitHubCtxSource extends RemoteFlowSource { string flag; string event; - GitHubExpression e; GitHubCtxSource() { - this.asExpr() = e and - // github.head_ref - e.getFieldName() = "head_ref" and - flag = "branch" and - ( + exists(GitHubExpression e | + this.asExpr() = e and + // github.head_ref + e.getFieldName() = "head_ref" and + flag = "branch" + | event = e.getATriggerEvent().getName() and event = "pull_request_target" or @@ -148,7 +148,6 @@ class GhCLICommandSource extends RemoteFlowSource, CommandSource { class GitHubEventPathSource extends RemoteFlowSource, CommandSource { string cmd; string flag; - string access_path; Run run; // Examples @@ -163,7 +162,7 @@ class GitHubEventPathSource extends RemoteFlowSource, CommandSource { run.getScript().getACommand() = cmd and cmd.matches("jq%") and cmd.matches("%GITHUB_EVENT_PATH%") and - exists(string regexp | + exists(string regexp, string access_path | untrustedEventPropertiesDataModel(regexp, flag) and not flag = "json" and access_path = "github.event" + cmd.regexpCapture(".*\\s+([^\\s]+)\\s+.*", 1) and diff --git a/actions/ql/lib/codeql/actions/security/ArgumentInjectionQuery.qll b/actions/ql/lib/codeql/actions/security/ArgumentInjectionQuery.qll index 679b8977cf9..1795e9493cb 100644 --- a/actions/ql/lib/codeql/actions/security/ArgumentInjectionQuery.qll +++ b/actions/ql/lib/codeql/actions/security/ArgumentInjectionQuery.qll @@ -19,7 +19,6 @@ abstract class ArgumentInjectionSink extends DataFlow::Node { */ class ArgumentInjectionFromEnvVarSink extends ArgumentInjectionSink { string command; - string argument; ArgumentInjectionFromEnvVarSink() { exists(Run run, string var | @@ -28,7 +27,7 @@ class ArgumentInjectionFromEnvVarSink extends ArgumentInjectionSink { exists(run.getInScopeEnvVarExpr(var)) or var = "GITHUB_HEAD_REF" ) and - run.getScript().getAnEnvReachingArgumentInjectionSink(var, command, argument) + run.getScript().getAnEnvReachingArgumentInjectionSink(var, command, _) ) } @@ -44,13 +43,12 @@ class ArgumentInjectionFromEnvVarSink extends ArgumentInjectionSink { */ class ArgumentInjectionFromCommandSink extends ArgumentInjectionSink { string command; - string argument; ArgumentInjectionFromCommandSink() { exists(CommandSource source, Run run | run = source.getEnclosingRun() and this.asExpr() = run.getScript() and - run.getScript().getACmdReachingArgumentInjectionSink(source.getCommand(), command, argument) + run.getScript().getACmdReachingArgumentInjectionSink(source.getCommand(), command, _) ) } diff --git a/actions/ql/lib/codeql/actions/security/ArtifactPoisoningQuery.qll b/actions/ql/lib/codeql/actions/security/ArtifactPoisoningQuery.qll index 76025a9ba0d..9f3ed33db96 100644 --- a/actions/ql/lib/codeql/actions/security/ArtifactPoisoningQuery.qll +++ b/actions/ql/lib/codeql/actions/security/ArtifactPoisoningQuery.qll @@ -125,8 +125,6 @@ class LegitLabsDownloadArtifactActionStep extends UntrustedArtifactDownloadStep, } class ActionsGitHubScriptDownloadStep extends UntrustedArtifactDownloadStep, UsesStep { - string script; - ActionsGitHubScriptDownloadStep() { // eg: // - uses: actions/github-script@v6 @@ -149,12 +147,14 @@ class ActionsGitHubScriptDownloadStep extends UntrustedArtifactDownloadStep, Use // var fs = require('fs'); // fs.writeFileSync('${{github.workspace}}/test-results.zip', Buffer.from(download.data)); this.getCallee() = "actions/github-script" and - this.getArgument("script") = script and - script.matches("%listWorkflowRunArtifacts(%") and - script.matches("%downloadArtifact(%") and - script.matches("%writeFileSync(%") and - // Filter out artifacts that were created by pull-request. - not script.matches("%exclude_pull_requests: true%") + exists(string script | + this.getArgument("script") = script and + script.matches("%listWorkflowRunArtifacts(%") and + script.matches("%downloadArtifact(%") and + script.matches("%writeFileSync(%") and + // Filter out artifacts that were created by pull-request. + not script.matches("%exclude_pull_requests: true%") + ) } override string getPath() { @@ -171,10 +171,10 @@ class ActionsGitHubScriptDownloadStep extends UntrustedArtifactDownloadStep, Use .getScript() .getACommand() .regexpCapture(unzipRegexp() + unzipDirArgRegexp(), 3))) - else - if this.getAFollowingStep().(Run).getScript().getACommand().regexpMatch(unzipRegexp()) - then result = "GITHUB_WORKSPACE/" - else none() + else ( + this.getAFollowingStep().(Run).getScript().getACommand().regexpMatch(unzipRegexp()) and + result = "GITHUB_WORKSPACE/" + ) } } @@ -207,12 +207,13 @@ class GHRunArtifactDownloadStep extends UntrustedArtifactDownloadStep, Run { .getScript() .getACommand() .regexpCapture(unzipRegexp() + unzipDirArgRegexp(), 3))) - else - if + else ( + ( this.getAFollowingStep().(Run).getScript().getACommand().regexpMatch(unzipRegexp()) or this.getScript().getACommand().regexpMatch(unzipRegexp()) - then result = "GITHUB_WORKSPACE/" - else none() + ) and + result = "GITHUB_WORKSPACE/" + ) } } @@ -259,15 +260,15 @@ class DirectArtifactDownloadStep extends UntrustedArtifactDownloadStep, Run { class ArtifactPoisoningSink extends DataFlow::Node { UntrustedArtifactDownloadStep download; - PoisonableStep poisonable; ArtifactPoisoningSink() { - download.getAFollowingStep() = poisonable and - // excluding artifacts downloaded to the temporary directory - not download.getPath().regexpMatch("^/tmp.*") and - not download.getPath().regexpMatch("^\\$\\{\\{\\s*runner\\.temp\\s*}}.*") and - not download.getPath().regexpMatch("^\\$RUNNER_TEMP.*") and - ( + exists(PoisonableStep poisonable | + download.getAFollowingStep() = poisonable and + // excluding artifacts downloaded to the temporary directory + not download.getPath().regexpMatch("^/tmp.*") and + not download.getPath().regexpMatch("^\\$\\{\\{\\s*runner\\.temp\\s*}}.*") and + not download.getPath().regexpMatch("^\\$RUNNER_TEMP.*") + | poisonable.(Run).getScript() = this.asExpr() and ( // Check if the poisonable step is a local script execution step diff --git a/actions/ql/lib/codeql/actions/security/ControlChecks.qll b/actions/ql/lib/codeql/actions/security/ControlChecks.qll index 244c04310d6..41f512abbc3 100644 --- a/actions/ql/lib/codeql/actions/security/ControlChecks.qll +++ b/actions/ql/lib/codeql/actions/security/ControlChecks.qll @@ -159,11 +159,8 @@ abstract class CommentVsHeadDateCheck extends ControlCheck { /* Specific implementations of control checks */ class LabelIfCheck extends LabelCheck instanceof If { - string condition; - LabelIfCheck() { - condition = normalizeExpr(this.getCondition()) and - ( + exists(string condition | condition = normalizeExpr(this.getCondition()) | // eg: contains(github.event.pull_request.labels.*.name, 'safe to test') condition.regexpMatch(".*(^|[^!])contains\\(\\s*github\\.event\\.pull_request\\.labels\\b.*") or diff --git a/actions/ql/lib/codeql/actions/security/EnvVarInjectionQuery.qll b/actions/ql/lib/codeql/actions/security/EnvVarInjectionQuery.qll index 2022e3dca99..ea8a800ef3f 100644 --- a/actions/ql/lib/codeql/actions/security/EnvVarInjectionQuery.qll +++ b/actions/ql/lib/codeql/actions/security/EnvVarInjectionQuery.qll @@ -55,12 +55,8 @@ class EnvVarInjectionFromFileReadSink extends EnvVarInjectionSink { * echo "COMMIT_MESSAGE=${COMMIT_MESSAGE}" >> $GITHUB_ENV */ class EnvVarInjectionFromCommandSink extends EnvVarInjectionSink { - CommandSource inCommand; - string injectedVar; - string command; - EnvVarInjectionFromCommandSink() { - exists(Run run | + exists(Run run, CommandSource inCommand, string injectedVar, string command | this.asExpr() = inCommand.getEnclosingRun().getScript() and run = inCommand.getEnclosingRun() and run.getScript().getACmdReachingGitHubEnvWrite(inCommand.getCommand(), injectedVar) and @@ -86,12 +82,8 @@ class EnvVarInjectionFromCommandSink extends EnvVarInjectionSink { * echo "FOO=$BODY" >> $GITHUB_ENV */ class EnvVarInjectionFromEnvVarSink extends EnvVarInjectionSink { - string inVar; - string injectedVar; - string command; - EnvVarInjectionFromEnvVarSink() { - exists(Run run | + exists(Run run, string inVar, string injectedVar, string command | run.getScript() = this.asExpr() and exists(run.getInScopeEnvVarExpr(inVar)) and run.getScript().getAnEnvReachingGitHubEnvWrite(inVar, injectedVar) and diff --git a/actions/ql/lib/codeql/actions/security/OutputClobberingQuery.qll b/actions/ql/lib/codeql/actions/security/OutputClobberingQuery.qll index c67d2876b09..4454a5496a2 100644 --- a/actions/ql/lib/codeql/actions/security/OutputClobberingQuery.qll +++ b/actions/ql/lib/codeql/actions/security/OutputClobberingQuery.qll @@ -99,18 +99,14 @@ class OutputClobberingFromEnvVarSink extends OutputClobberingSink { * echo $BODY */ class WorkflowCommandClobberingFromEnvVarSink extends OutputClobberingSink { - string clobbering_var; - string clobbered_value; - WorkflowCommandClobberingFromEnvVarSink() { - exists(Run run, string workflow_cmd_stmt, string clobbering_stmt | + exists(Run run, string workflow_cmd_stmt, string clobbering_stmt, string clobbering_var | run.getScript() = this.asExpr() and run.getScript().getAStmt() = clobbering_stmt and clobbering_stmt.regexpMatch("echo\\s+(-e\\s+)?(\"|')?\\$(\\{)?" + clobbering_var + ".*") and exists(run.getInScopeEnvVarExpr(clobbering_var)) and run.getScript().getAStmt() = workflow_cmd_stmt and - clobbered_value = - trimQuotes(workflow_cmd_stmt.regexpCapture(".*::set-output\\s+name=.*::(.*)", 1)) + exists(trimQuotes(workflow_cmd_stmt.regexpCapture(".*::set-output\\s+name=.*::(.*)", 1))) ) } } diff --git a/actions/ql/lib/codeql/actions/security/UseOfUnversionedImmutableAction.qll b/actions/ql/lib/codeql/actions/security/UseOfUnversionedImmutableAction.qll index ef258fce2e5..8595cd1086d 100644 --- a/actions/ql/lib/codeql/actions/security/UseOfUnversionedImmutableAction.qll +++ b/actions/ql/lib/codeql/actions/security/UseOfUnversionedImmutableAction.qll @@ -1,10 +1,8 @@ import actions class UnversionedImmutableAction extends UsesStep { - string immutable_action; - UnversionedImmutableAction() { - isImmutableAction(this, immutable_action) and + isImmutableAction(this, _) and not isSemVer(this.getVersion()) } } diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index c10bedbaef6..311ef4d5ef6 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.16-dev +version: 0.4.17-dev library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/CHANGELOG.md b/actions/ql/src/CHANGELOG.md index 769ce155451..265e67e6a89 100644 --- a/actions/ql/src/CHANGELOG.md +++ b/actions/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.8 + +No user-facing changes. + ## 0.6.7 No user-facing changes. diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md index de3307550ad..6060354b134 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md @@ -32,7 +32,7 @@ jobs: - uses: actions/setup-node@v1 - run: | - npm install # scripts in package.json from PR would be executed here + npm install # scripts in package.json from PR would be executed here npm build - uses: completely/fakeaction@v2 diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md index de3307550ad..6060354b134 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md @@ -32,7 +32,7 @@ jobs: - uses: actions/setup-node@v1 - run: | - npm install # scripts in package.json from PR would be executed here + npm install # scripts in package.json from PR would be executed here npm build - uses: completely/fakeaction@v2 diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md index de3307550ad..6060354b134 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md @@ -32,7 +32,7 @@ jobs: - uses: actions/setup-node@v1 - run: | - npm install # scripts in package.json from PR would be executed here + npm install # scripts in package.json from PR would be executed here npm build - uses: completely/fakeaction@v2 diff --git a/actions/ql/src/change-notes/released/0.6.8.md b/actions/ql/src/change-notes/released/0.6.8.md new file mode 100644 index 00000000000..9984c422a37 --- /dev/null +++ b/actions/ql/src/change-notes/released/0.6.8.md @@ -0,0 +1,3 @@ +## 0.6.8 + +No user-facing changes. diff --git a/actions/ql/src/codeql-pack.release.yml b/actions/ql/src/codeql-pack.release.yml index a6d2952e5fb..cad7cba6ce3 100644 --- a/actions/ql/src/codeql-pack.release.yml +++ b/actions/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.7 +lastReleaseVersion: 0.6.8 diff --git a/actions/ql/src/experimental/Security/CWE-829/ArtifactPoisoningPathTraversal.ql b/actions/ql/src/experimental/Security/CWE-829/ArtifactPoisoningPathTraversal.ql index 519437ddb22..517a9d1eaad 100644 --- a/actions/ql/src/experimental/Security/CWE-829/ArtifactPoisoningPathTraversal.ql +++ b/actions/ql/src/experimental/Security/CWE-829/ArtifactPoisoningPathTraversal.ql @@ -37,8 +37,6 @@ where ) or // upload artifact is not used in the same workflow - not exists(UsesStep upload | - download.getEnclosingWorkflow().getAJob().(LocalJob).getAStep() = upload - ) + not download.getEnclosingWorkflow().getAJob().(LocalJob).getAStep() instanceof UsesStep ) select download, "Potential artifact poisoning" diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index 11e5bb790b7..4eae56a5c13 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.8-dev +version: 0.6.9-dev library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 7abedf38ee1..705432b565d 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 5.5.0 + +### New Features + +* Added a new class `PchFile` representing precompiled header (PCH) files used during project compilation. + +### Minor Analysis Improvements + +* Added flow summaries for the `Microsoft::WRL::ComPtr` member functions. +* The new dataflow/taint-tracking library (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now resolves virtual function calls more precisely. This results in fewer false positives when running dataflow/taint-tracking queries on C++ projects. + ## 5.4.1 ### Minor Analysis Improvements diff --git a/cpp/ql/lib/Options.qll b/cpp/ql/lib/Options.qll index a0a13881a94..c4652e3f6ca 100644 --- a/cpp/ql/lib/Options.qll +++ b/cpp/ql/lib/Options.qll @@ -35,7 +35,7 @@ class CustomOptions extends Options { override predicate returnsNull(Call call) { Options.super.returnsNull(call) } /** - * Holds if a call to this function will never return. + * Holds if a call to the function `f` will never return. * * By default, this holds for `exit`, `_exit`, `abort`, `__assert_fail`, * `longjmp`, `error`, `__builtin_unreachable` and any function with a diff --git a/cpp/ql/lib/change-notes/2025-08-19-virtual-dispatch.md b/cpp/ql/lib/change-notes/2025-08-19-virtual-dispatch.md deleted file mode 100644 index 4342bb7f62d..00000000000 --- a/cpp/ql/lib/change-notes/2025-08-19-virtual-dispatch.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The new dataflow/taint-tracking library (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now resolves virtual function calls more precisely. This results in fewer false positives when running dataflow/taint-tracking queries on C++ projects. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2025-08-27-pch.md b/cpp/ql/lib/change-notes/2025-08-27-pch.md deleted file mode 100644 index c4a59f112c5..00000000000 --- a/cpp/ql/lib/change-notes/2025-08-27-pch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: feature ---- -* Added a new class `PchFile` representing precompiled header (PCH) files used during project compilation. - diff --git a/cpp/ql/lib/change-notes/2025-08-28-comptr.md b/cpp/ql/lib/change-notes/2025-08-28-comptr.md deleted file mode 100644 index 9ce6fde50cb..00000000000 --- a/cpp/ql/lib/change-notes/2025-08-28-comptr.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added flow summaries for the `Microsoft::WRL::ComPtr` member functions. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2025-09-02-vla.md b/cpp/ql/lib/change-notes/2025-09-02-vla.md new file mode 100644 index 00000000000..e59e3ef5ffe --- /dev/null +++ b/cpp/ql/lib/change-notes/2025-09-02-vla.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added predicates `getTransitiveNumberOfVlaDimensionStmts`, `getTransitiveVlaDimensionStmt`, and `getParentVlaDecl` to `VlaDeclStmt` for handling `VlaDeclStmt`s whose base type defined in terms of an other `VlaDeclStmt` via a `typedef`. diff --git a/cpp/ql/lib/change-notes/2025-09-03-rename-api.md b/cpp/ql/lib/change-notes/2025-09-03-rename-api.md new file mode 100644 index 00000000000..23c9fa3c046 --- /dev/null +++ b/cpp/ql/lib/change-notes/2025-09-03-rename-api.md @@ -0,0 +1,4 @@ +--- +category: deprecated +--- +* The predicate `getAContructorCall` in the class `SslContextClass` has been deprecated. Use `getAConstructorCall` instead. diff --git a/cpp/ql/lib/change-notes/released/5.5.0.md b/cpp/ql/lib/change-notes/released/5.5.0.md new file mode 100644 index 00000000000..aad060fdd59 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/5.5.0.md @@ -0,0 +1,10 @@ +## 5.5.0 + +### New Features + +* Added a new class `PchFile` representing precompiled header (PCH) files used during project compilation. + +### Minor Analysis Improvements + +* Added flow summaries for the `Microsoft::WRL::ComPtr` member functions. +* The new dataflow/taint-tracking library (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now resolves virtual function calls more precisely. This results in fewer false positives when running dataflow/taint-tracking queries on C++ projects. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 7adcb16ea28..4b8cf9533c1 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.4.1 +lastReleaseVersion: 5.5.0 diff --git a/cpp/ql/lib/experimental/cryptography/CryptoArtifact.qll b/cpp/ql/lib/experimental/cryptography/CryptoArtifact.qll index 0bb22d688ed..296b97f66f2 100644 --- a/cpp/ql/lib/experimental/cryptography/CryptoArtifact.qll +++ b/cpp/ql/lib/experimental/cryptography/CryptoArtifact.qll @@ -127,7 +127,7 @@ abstract class CryptographicAlgorithm extends CryptographicArtifact { /** * Normalizes a raw name into a normalized name as found in `CryptoAlgorithmNames.qll`. * Subclassess should override for more api-specific normalization. - * By deafult, converts a raw name to upper-case with no hyphen, underscore, hash, or space. + * By default, converts a raw name to upper-case with no hyphen, underscore, hash, or space. */ bindingset[s] string normalizeName(string s) { diff --git a/cpp/ql/lib/experimental/cryptography/modules/OpenSSL.qll b/cpp/ql/lib/experimental/cryptography/modules/OpenSSL.qll index 0a52fa5bb81..6b6338a4926 100644 --- a/cpp/ql/lib/experimental/cryptography/modules/OpenSSL.qll +++ b/cpp/ql/lib/experimental/cryptography/modules/OpenSSL.qll @@ -652,14 +652,14 @@ module KeyGeneration { * Trace from EVP_PKEY_CTX* at algorithm sink to keygen, * users can then extrapolatae the matching algorithm from the alg sink to the keygen */ - module EVP_PKEY_CTX_Ptr_Source_to_KeyGenOperationWithNoSize implements DataFlow::ConfigSig { + module EVP_PKEY_CTX_Ptr_Source_to_KeyGenOperationWithNoSizeConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { isEVP_PKEY_CTX_Source(source, _) } predicate isSink(DataFlow::Node sink) { isKeyGen_EVP_PKEY_CTX_Sink(sink, _) } } module EVP_PKEY_CTX_Ptr_Source_to_KeyGenOperationWithNoSize_Flow = - DataFlow::Global; + DataFlow::Global; /** * UNKNOWN key sizes to general purpose key generation functions (i.e., that take in no key size and assume diff --git a/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/CryptoFunction.qll b/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/CryptoFunction.qll index 2c46a7c0674..1e0f3b6dfbf 100644 --- a/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/CryptoFunction.qll +++ b/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/CryptoFunction.qll @@ -59,7 +59,7 @@ private string privateNormalizeFunctionName(Function f, string algType) { * * The predicate attempts to restrict normalization to what looks like an openssl * library by looking for functions only in an openssl path (see `isPossibleOpenSSLFunction`). - * This may give false postive functions if a directory erronously appears to be openssl; + * This may give false positive functions if a directory erronously appears to be openssl; * however, we take the stance that if a function * exists strongly mapping to a known function name in a directory such as these, * regardless of whether its actually a part of openSSL or not, we will analyze it as though it were. diff --git a/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/DataBuilders.qll b/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/DataBuilders.qll index ba83de34597..54121c36766 100644 --- a/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/DataBuilders.qll +++ b/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/DataBuilders.qll @@ -49,7 +49,7 @@ private string privateNormalizeFunctionName(Function f, string algType) { * * The predicate attempts to restrict normalization to what looks like an openssl * library by looking for functions only in an openssl path (see `isPossibleOpenSSLFunction`). - * This may give false postive functions if a directory erronously appears to be openssl; + * This may give false positive functions if a directory erronously appears to be openssl; * however, we take the stance that if a function * exists strongly mapping to a known function name in a directory such as these, * regardless of whether its actually a part of openSSL or not, we will analyze it as though it were. diff --git a/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/PassthroughFunction.qll b/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/PassthroughFunction.qll index f772f85afb1..e1e64f78e3e 100644 --- a/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/PassthroughFunction.qll +++ b/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/PassthroughFunction.qll @@ -31,7 +31,7 @@ predicate knownPassthroughFunction(Function f, int inInd, int outInd) { /** * `c` is a call to a function that preserves the algorithm but changes its form. - * `onExpr` is the input argument passing through to, `outExpr` is the next expression in a dataflow step associated with `c` + * `inExpr` is the input argument passing through to, `outExpr` is the next expression in a dataflow step associated with `c` */ predicate knownPassthoughCall(Call c, Expr inExpr, Expr outExpr) { exists(int inInd, int outInd | diff --git a/cpp/ql/lib/experimental/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll b/cpp/ql/lib/experimental/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll index e5de44b396d..e026c4dbe4b 100644 --- a/cpp/ql/lib/experimental/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll +++ b/cpp/ql/lib/experimental/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll @@ -298,10 +298,11 @@ private predicate boundFlowStep(Instruction i, NonPhiOperand op, int delta, bool else if strictlyNegative(x) then upper = true and delta = -1 - else - if negative(x) - then upper = true and delta = 0 - else none() + else ( + negative(x) and + upper = true and + delta = 0 + ) ) or exists(Operand x | @@ -321,10 +322,11 @@ private predicate boundFlowStep(Instruction i, NonPhiOperand op, int delta, bool else if strictlyNegative(x) then upper = false and delta = 1 - else - if negative(x) - then upper = false and delta = 0 - else none() + else ( + negative(x) and + upper = false and + delta = 0 + ) ) or i.(RemInstruction).getRightOperand() = op and positive(op) and delta = -1 and upper = true diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 68f412126f4..2b9af14a4b3 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 5.4.2-dev +version: 5.5.1-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/lib/semmle/code/cpp/Concept.qll b/cpp/ql/lib/semmle/code/cpp/Concept.qll index 1770c1965ed..6e66bca9823 100644 --- a/cpp/ql/lib/semmle/code/cpp/Concept.qll +++ b/cpp/ql/lib/semmle/code/cpp/Concept.qll @@ -198,7 +198,7 @@ class ConceptIdExpr extends Expr, @concept_id { final Locatable getATemplateArgumentKind() { result = this.getTemplateArgumentKind(_) } /** - * Gets the `i`th template argument passed to the concept. + * Gets template argument at index `index` passed to the concept, if any. * * For example, if: * ```cpp @@ -219,7 +219,7 @@ class ConceptIdExpr extends Expr, @concept_id { } /** - * Gets the kind of the `i`th template argument value passed to the concept. + * Gets the kind of the template argument value at index `index` passed to the concept, if any. * * For example, if: * ```cpp diff --git a/cpp/ql/lib/semmle/code/cpp/Declaration.qll b/cpp/ql/lib/semmle/code/cpp/Declaration.qll index cedacca4dfe..6f791234b63 100644 --- a/cpp/ql/lib/semmle/code/cpp/Declaration.qll +++ b/cpp/ql/lib/semmle/code/cpp/Declaration.qll @@ -223,8 +223,8 @@ class Declaration extends Locatable, @declaration { final Locatable getATemplateArgumentKind() { result = this.getTemplateArgumentKind(_) } /** - * Gets the `i`th template argument used to instantiate this declaration from a - * template. + * Gets the template argument at index `index` used to instantiate this declaration from a + * template, if any. * * For example: * @@ -245,9 +245,9 @@ class Declaration extends Locatable, @declaration { } /** - * Gets the `i`th template argument value used to instantiate this declaration - * from a template. When called on a template, this will return the `i`th template - * parameter value if it exists. + * Gets the template argument value at index `index` used to instantiate this declaration + * from a template. When called on a template, this will return the template + * parameter value at index `index` if it exists. * * For example: * diff --git a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll index 51d2e294b36..023ce09c5c1 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll @@ -877,7 +877,7 @@ class FormatLiteral extends Literal instanceof StringLiteral { } /** - * Gets the char type required by the nth conversion specifier. + * Gets the char type required by the `n`th conversion specifier. * - in the base case this is the default for the formatting function * (e.g. `char` for `printf`, `char` or `wchar_t` for `wprintf`). * - the `%C` format character reverses wideness. @@ -922,7 +922,7 @@ class FormatLiteral extends Literal instanceof StringLiteral { } /** - * Gets the string type required by the nth conversion specifier. + * Gets the string type required by the `n`th conversion specifier. * - in the base case this is the default for the formatting function * (e.g. `char *` for `printf`, `char *` or `wchar_t *` for `wprintf`). * - the `%S` format character reverses wideness on some platforms. diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/Dominance.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/Dominance.qll index 424e615f3ea..a8a4b867ba6 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/Dominance.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/Dominance.qll @@ -101,7 +101,7 @@ predicate postDominates(ControlFlowNode postDominator, ControlFlowNode node) { */ /** - * Holds if `dominator` is an immediate dominator of `node` in the control-flow + * Holds if `dom` is an immediate dominator of `node` in the control-flow * graph of basic blocks. */ predicate bbIDominates(BasicBlock dom, BasicBlock node) = @@ -117,7 +117,7 @@ private predicate bb_predecessor(BasicBlock succ, BasicBlock pred) { bb_successo private predicate bb_exit(ExitBasicBlock exit) { any() } /** - * Holds if `postDominator` is an immediate post-dominator of `node` in the control-flow + * Holds if `pDom` is an immediate post-dominator of `node` in the control-flow * graph of basic blocks. */ predicate bbIPostDominates(BasicBlock pDom, BasicBlock node) = diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll index 05eafe28275..23ef5859221 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll @@ -1042,8 +1042,8 @@ private predicate subEdgeIncludingDestructors(Pos p1, Node n1, Node n2, Pos p2) * - `MicrosoftTryFinallyStmt`: On the edge following the `__finally` block for * the case where an exception was thrown and needs to be propagated. */ -DestructorCall getSynthesisedDestructorCallAfterNode(Node n, int i) { - synthetic_destructor_call(n, i, result) +DestructorCall getSynthesisedDestructorCallAfterNode(Node node, int index) { + synthetic_destructor_call(node, index, result) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll index 72e742f13aa..e6d53f8bf64 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll @@ -834,8 +834,10 @@ class ContentSet instanceof Content { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { - super.hasLocationInfo(path, sl, sc, el, ec) + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } 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 3aa8994a449..582391e81cc 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 @@ -1880,9 +1880,7 @@ module IteratorFlow { } } - private module SsaInput implements SsaImpl::InputSig { - import Ssa::InputSigCommon - + private module SsaInput implements SsaImpl::InputSig { class SourceVariable = IteratorFlow::SourceVariable; /** A call to function that dereferences an iterator. */ @@ -1960,7 +1958,7 @@ module IteratorFlow { * Holds if `(bb, i)` contains a write to an iterator that may have been obtained * by calling `begin` (or related functions) on the variable `v`. */ - predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableWrite(IRCfg::BasicBlock bb, int i, SourceVariable v, boolean certain) { certain = false and exists(GetsIteratorCall beginCall, Instruction writeToDeref, IRBlock bbQual, int iQual | isIteratorStoreInstruction(beginCall, writeToDeref) and @@ -1971,12 +1969,12 @@ module IteratorFlow { } /** Holds if `(bb, i)` reads the container variable `v`. */ - predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableRead(IRCfg::BasicBlock bb, int i, SourceVariable v, boolean certain) { Ssa::variableRead(bb, i, v, certain) } } - private module IteratorSsa = SsaImpl::Make; + private module IteratorSsa = SsaImpl::Make; private module DataFlowIntegrationInput implements IteratorSsa::DataFlowIntegrationInputSig { private import codeql.util.Void @@ -1989,7 +1987,7 @@ module IteratorFlow { ) } - predicate hasCfgNode(SsaInput::BasicBlock bb, int i) { bb.getInstruction(i) = this } + predicate hasCfgNode(IRCfg::BasicBlock bb, int i) { bb.getInstruction(i) = this } } predicate ssaDefHasSource(IteratorSsa::WriteDefinition def) { none() } @@ -1999,20 +1997,16 @@ module IteratorFlow { class GuardValue = Void; class Guard extends Void { - predicate hasValueBranchEdge( - SsaInput::BasicBlock bb1, SsaInput::BasicBlock bb2, GuardValue val - ) { + predicate hasValueBranchEdge(IRCfg::BasicBlock bb1, IRCfg::BasicBlock bb2, GuardValue val) { none() } - predicate valueControlsBranchEdge( - SsaInput::BasicBlock bb1, SsaInput::BasicBlock bb2, GuardValue val - ) { + predicate valueControlsBranchEdge(IRCfg::BasicBlock bb1, IRCfg::BasicBlock bb2, GuardValue val) { none() } } - predicate guardDirectlyControlsBlock(Guard guard, SsaInput::BasicBlock bb, GuardValue val) { + predicate guardDirectlyControlsBlock(Guard guard, IRCfg::BasicBlock bb, GuardValue val) { none() } 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 ef4051171af..82dcd43e136 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 @@ -2273,8 +2273,10 @@ class ContentSet instanceof Content { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { - super.hasLocationInfo(path, sl, sc, el, ec) + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll index 1cf45439d8b..d48a48dfb44 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll @@ -891,15 +891,14 @@ private predicate baseSourceVariableIsGlobal( ) } -private module SsaInput implements Ssa::InputSig { - import InputSigCommon +private module SsaInput implements Ssa::InputSig { import SourceVariables /** * Holds if the `i`'th write in block `bb` writes to the variable `v`. * `certain` is `true` if the write is guaranteed to overwrite the entire variable. */ - predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableWrite(IRCfg::BasicBlock bb, int i, SourceVariable v, boolean certain) { DataFlowImplCommon::forceCachingInSameStage() and ( exists(DefImpl def | def.hasIndexInBlock(v, bb, i) | @@ -917,7 +916,7 @@ private module SsaInput implements Ssa::InputSig { * Holds if the `i`'th read in block `bb` reads to the variable `v`. * `certain` is `true` if the read is guaranteed. For C++, this is always the case. */ - predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableRead(IRCfg::BasicBlock bb, int i, SourceVariable v, boolean certain) { exists(UseImpl use | use.hasIndexInBlock(bb, i, v) | if use.isCertain() then certain = true else certain = false ) @@ -965,7 +964,7 @@ class GlobalDef extends Definition { GlobalLikeVariable getVariable() { result = impl.getVariable() } } -private module SsaImpl = Ssa::Make; +private module SsaImpl = Ssa::Make; private module DataFlowIntegrationInput implements SsaImpl::DataFlowIntegrationInputSig { private import codeql.util.Boolean @@ -978,7 +977,7 @@ private module DataFlowIntegrationInput implements SsaImpl::DataFlowIntegrationI ) } - predicate hasCfgNode(SsaInput::BasicBlock bb, int i) { bb.getInstruction(i) = this } + predicate hasCfgNode(IRCfg::BasicBlock bb, int i) { bb.getInstruction(i) = this } } Expr getARead(SsaImpl::Definition def) { @@ -1006,9 +1005,7 @@ private module DataFlowIntegrationInput implements SsaImpl::DataFlowIntegrationI class Guard instanceof IRGuards::IRGuardCondition { string toString() { result = super.toString() } - predicate hasValueBranchEdge( - SsaInput::BasicBlock bb1, SsaInput::BasicBlock bb2, GuardValue branch - ) { + predicate hasValueBranchEdge(IRCfg::BasicBlock bb1, IRCfg::BasicBlock bb2, GuardValue branch) { exists(EdgeKind kind | super.getBlock() = bb1 and kind = getConditionalEdge(branch) and @@ -1017,13 +1014,13 @@ private module DataFlowIntegrationInput implements SsaImpl::DataFlowIntegrationI } predicate valueControlsBranchEdge( - SsaInput::BasicBlock bb1, SsaInput::BasicBlock bb2, GuardValue branch + IRCfg::BasicBlock bb1, IRCfg::BasicBlock bb2, GuardValue branch ) { this.hasValueBranchEdge(bb1, bb2, branch) } } - predicate guardDirectlyControlsBlock(Guard guard, SsaInput::BasicBlock bb, GuardValue branch) { + predicate guardDirectlyControlsBlock(Guard guard, IRCfg::BasicBlock bb, GuardValue branch) { guard.(IRGuards::IRGuardCondition).controls(bb, branch) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll index 617e2be8cc3..552f504b84b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll @@ -768,21 +768,3 @@ private module Cached { } import Cached - -/** - * Inputs to the shared SSA library's parameterized module that is shared - * between the SSA pruning stage, and the final SSA stage. - */ -module InputSigCommon { - class BasicBlock extends IRBlock { - ControlFlowNode getNode(int i) { result = this.getInstruction(i) } - - int length() { result = this.getInstructionCount() } - } - - class ControlFlowNode = Instruction; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result.immediatelyDominates(bb) } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll index 0a0703fe16f..c7ab5edf624 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll @@ -2,6 +2,7 @@ * Provides classes that specify the conditions under which control flows along a given edge. */ +private import codeql.controlflow.SuccessorType private import internal.EdgeKindInternal private newtype TEdgeKind = @@ -28,6 +29,21 @@ abstract private class EdgeKindImpl extends TEdgeKind { final class EdgeKind = EdgeKindImpl; +private SuccessorType getAMatchingSpecificSuccessorType(EdgeKind k) { + result.(BooleanSuccessor).getValue() = true and k instanceof TrueEdge + or + result.(BooleanSuccessor).getValue() = false and k instanceof FalseEdge + or + result instanceof ExceptionSuccessor and k instanceof ExceptionEdge +} + +SuccessorType getAMatchingSuccessorType(EdgeKind k) { + result = getAMatchingSpecificSuccessorType(k) + or + not exists(getAMatchingSpecificSuccessorType(k)) and + result instanceof DirectSuccessor +} + /** * A "goto" edge, representing the unconditional successor of an `Instruction` * or `IRBlock`. diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll index 50395db47e7..7f7c5cd0a4d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll @@ -7,6 +7,7 @@ import Instruction private import internal.IRBlockImports as Imports import Imports::EdgeKind private import Cached +private import codeql.controlflow.BasicBlock as BB /** * Holds if `block` is a block in `func` and `sortOverride`, `sortKey1`, and `sortKey2` are the @@ -263,6 +264,54 @@ private predicate isEntryBlock(TIRBlock block) { block = MkIRBlock(any(EnterFunctionInstruction enter)) } +module IRCfg implements BB::CfgSig { + private import codeql.controlflow.SuccessorType + + class ControlFlowNode = Instruction; + + final private class FinalIRBlock = IRBlock; + + class BasicBlock extends FinalIRBlock { + ControlFlowNode getNode(int i) { result = this.getInstruction(i) } + + ControlFlowNode getLastNode() { result = super.getLastInstruction() } + + int length() { result = this.getInstructionCount() } + + BasicBlock getASuccessor() { result = super.getASuccessor() } + + BasicBlock getASuccessor(SuccessorType t) { + exists(EdgeKind k | + result = super.getSuccessor(k) and + t = getAMatchingSuccessorType(k) + ) + } + + predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } + + predicate dominates(BasicBlock bb) { super.dominates(bb) } + + BasicBlock getImmediateDominator() { result.immediatelyDominates(this) } + + predicate inDominanceFrontier(BasicBlock df) { super.dominanceFrontier() = df } + + predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } + + predicate postDominates(BasicBlock bb) { super.postDominates(bb) } + } + + class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { isEntryBlock(this) } + } + + pragma[nomagic] + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + bb1.getASuccessor() = bb2 and + bb1 = bb2.getImmediateDominator() and + forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred)) + } +} + cached private module Cached { cached diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRBlock.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRBlock.qll index 50395db47e7..7f7c5cd0a4d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRBlock.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRBlock.qll @@ -7,6 +7,7 @@ import Instruction private import internal.IRBlockImports as Imports import Imports::EdgeKind private import Cached +private import codeql.controlflow.BasicBlock as BB /** * Holds if `block` is a block in `func` and `sortOverride`, `sortKey1`, and `sortKey2` are the @@ -263,6 +264,54 @@ private predicate isEntryBlock(TIRBlock block) { block = MkIRBlock(any(EnterFunctionInstruction enter)) } +module IRCfg implements BB::CfgSig { + private import codeql.controlflow.SuccessorType + + class ControlFlowNode = Instruction; + + final private class FinalIRBlock = IRBlock; + + class BasicBlock extends FinalIRBlock { + ControlFlowNode getNode(int i) { result = this.getInstruction(i) } + + ControlFlowNode getLastNode() { result = super.getLastInstruction() } + + int length() { result = this.getInstructionCount() } + + BasicBlock getASuccessor() { result = super.getASuccessor() } + + BasicBlock getASuccessor(SuccessorType t) { + exists(EdgeKind k | + result = super.getSuccessor(k) and + t = getAMatchingSuccessorType(k) + ) + } + + predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } + + predicate dominates(BasicBlock bb) { super.dominates(bb) } + + BasicBlock getImmediateDominator() { result.immediatelyDominates(this) } + + predicate inDominanceFrontier(BasicBlock df) { super.dominanceFrontier() = df } + + predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } + + predicate postDominates(BasicBlock bb) { super.postDominates(bb) } + } + + class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { isEntryBlock(this) } + } + + pragma[nomagic] + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + bb1.getASuccessor() = bb2 and + bb1 = bb2.getImmediateDominator() and + forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred)) + } +} + cached private module Cached { cached diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll index d864e86aa04..be3f680aa16 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll @@ -97,7 +97,14 @@ newtype TInstructionTag = exists(Stmt s | exists(s.getImplicitDestructorCall(index))) } or CoAwaitBranchTag() or - BoolToIntConversionTag() + BoolToIntConversionTag() or + SizeofVlaBaseSizeTag() or + SizeofVlaConversionTag(int index) { + exists(VlaDeclStmt v | exists(v.getTransitiveVlaDimensionStmt(index))) + } or + SizeofVlaDimensionTag(int index) { + exists(VlaDeclStmt v | exists(v.getTransitiveVlaDimensionStmt(index))) + } class InstructionTag extends TInstructionTag { final string toString() { result = getInstructionTagId(this) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index e1314035437..330362f5560 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -123,13 +123,16 @@ private predicate ignoreExprAndDescendants(Expr expr) { // or ignoreExprAndDescendants(getRealParent(expr)) // recursive case or - // va_start doesn't evaluate its argument, so we don't need to translate it. + // va_start does not evaluate its argument, so we do not need to translate it. exists(BuiltInVarArgsStart vaStartExpr | vaStartExpr.getLastNamedParameter().getFullyConverted() = expr ) or + // sizeof does not evaluate its argument, so we do not need to translate it. + exists(SizeofExprOperator sizeofExpr | sizeofExpr.getExprOperand().getFullyConverted() = expr) + or // The children of C11 _Generic expressions are just surface syntax. - exists(C11GenericExpr generic | generic.getAChild() = expr) + exists(C11GenericExpr generic | generic.getAChild().getFullyConverted() = expr) or // Do not translate implicit destructor calls for unnamed temporary variables that are // conditionally constructed (until we have a mechanism for calling these only when the diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index f749f8b7502..6024a881c5f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -187,7 +187,7 @@ Variable getEnclosingVariable(Expr e) { } /** - * The IR translation of the "core" part of an expression. This is the part of + * The IR translation of the "core" part of an expression. This is the part of * the expression that produces the result value of the expression, before any * lvalue-to-rvalue conversion on the result. Every expression has a single * `TranslatedCoreExpr`. @@ -4094,6 +4094,155 @@ class TranslatedStmtExpr extends TranslatedNonConstantExpr { TranslatedStmt getStmt() { result = getTranslatedStmt(expr.getStmt()) } } +private VlaDeclStmt getVlaDeclStmt(Expr expr, int pointerDerefCount) { + expr.(VariableAccess).getTarget() = result.getVariable() and + pointerDerefCount = 0 + or + not expr.(PointerDereferenceExpr).getOperand() instanceof AddressOfExpr and + result = getVlaDeclStmt(expr.(PointerDereferenceExpr).getOperand(), pointerDerefCount - 1) + or + // Skip sequences of the form `*&...` + result = + getVlaDeclStmt(expr.(PointerDereferenceExpr).getOperand().(AddressOfExpr).getOperand(), + pointerDerefCount) + or + result = getVlaDeclStmt(expr.(ArrayExpr).getArrayBase(), pointerDerefCount - 1) +} + +/** + * The IR translation of `SizeofExprOperator` when its result is non-constant, i.e., + * when the operand expression refers to a variable length array. + */ +class TranslatedSizeofExpr extends TranslatedNonConstantExpr { + override SizeofExprOperator expr; + VlaDeclStmt vlaDeclStmt; + int vlaDimensions; + int pointerDerefCount; + + TranslatedSizeofExpr() { + vlaDeclStmt = getVlaDeclStmt(expr.getExprOperand(), pointerDerefCount) and + vlaDimensions = vlaDeclStmt.getTransitiveNumberOfVlaDimensionStmts() and + pointerDerefCount < vlaDimensions + } + + final override Instruction getFirstInstruction(EdgeKind kind) { + result = this.getInstruction(SizeofVlaBaseSizeTag()) and + kind instanceof GotoEdge + } + + override Instruction getALastInstructionInternal() { + result = this.getInstruction(SizeofVlaDimensionTag(vlaDimensions - 1)) + } + + final override TranslatedElement getChildInternal(int id) { none() } + + final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + opcode instanceof Opcode::Constant and + tag = SizeofVlaBaseSizeTag() and + resultType = this.getResultType() + or + exists(int n, Type dimType | + pointerDerefCount <= n and + n < vlaDimensions and + dimType = this.getDimensionExpr(n).getUnderlyingType() and + tag = SizeofVlaConversionTag(n) + | + ( + expr.getUnderlyingType() = dimType and + opcode instanceof Opcode::CopyValue + or + not expr.getUnderlyingType() = dimType and + opcode instanceof Opcode::Convert + ) + ) and + resultType = this.getResultType() + or + opcode instanceof Opcode::Mul and + exists(int n | pointerDerefCount <= n and n < vlaDimensions | tag = SizeofVlaDimensionTag(n)) and + resultType = this.getResultType() + } + + final override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { + tag = SizeofVlaBaseSizeTag() and + result = this.getInstruction(SizeofVlaConversionTag(pointerDerefCount)) and + kind instanceof GotoEdge + or + exists(int n | pointerDerefCount <= n and n < vlaDimensions | + tag = SizeofVlaConversionTag(n) and + result = this.getInstruction(SizeofVlaDimensionTag(n)) + ) and + kind instanceof GotoEdge + or + exists(int n | pointerDerefCount <= n and n < vlaDimensions - 1 | + tag = SizeofVlaDimensionTag(n) and + result = this.getInstruction(SizeofVlaConversionTag(n + 1)) + ) and + kind instanceof GotoEdge + or + tag = SizeofVlaDimensionTag(vlaDimensions - 1) and + result = this.getParent().getChildSuccessor(this, kind) + } + + override string getInstructionConstantValue(InstructionTag tag) { + tag = SizeofVlaBaseSizeTag() and + result = this.getBaseType(vlaDeclStmt).getSize().toString() + } + + private Type getBaseType(VlaDeclStmt v) { + not exists(v.getParentVlaDecl()) and + ( + result = + this.getBaseType(v.getVariable().getUnderlyingType(), v.getNumberOfVlaDimensionStmts()) + or + result = this.getBaseType(v.getType().getUnderlyingType(), v.getNumberOfVlaDimensionStmts()) + ) + or + result = this.getBaseType(v.getParentVlaDecl()) + } + + private Type getBaseType(Type type, int n) { + n = 0 and + result = type + or + result = this.getBaseType(type.(DerivedType).getBaseType(), n - 1) + } + + override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { + exists(int n | pointerDerefCount <= n and n < vlaDimensions | + tag = SizeofVlaConversionTag(n) and + ( + operandTag instanceof UnaryOperandTag and + result = getTranslatedExpr(this.getDimensionExpr(n)).getResult() + ) + ) + or + exists(int n | pointerDerefCount <= n and n < vlaDimensions | + tag = SizeofVlaDimensionTag(n) and + ( + operandTag instanceof LeftOperandTag and + ( + n - 1 >= pointerDerefCount and + result = this.getInstruction(SizeofVlaDimensionTag(n - 1)) + or + n - 1 < pointerDerefCount and + result = this.getInstruction(SizeofVlaBaseSizeTag()) + ) + or + operandTag instanceof RightOperandTag and + result = this.getInstruction(SizeofVlaConversionTag(n)) + ) + ) + } + + private Expr getDimensionExpr(int n) { + result = vlaDeclStmt.getTransitiveVlaDimensionStmt(n).getDimensionExpr().getFullyConverted() + } + + final override Instruction getResult() { + result = this.getInstruction(SizeofVlaDimensionTag(vlaDimensions - 1)) + } +} + class TranslatedErrorExpr extends TranslatedSingleInstructionExpr { override ErrorExpr expr; diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll index 83736ae98d0..26f5393db10 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll @@ -50,7 +50,7 @@ CppType getEllipsisVariablePRValueType() { CppType getEllipsisVariableGLValueType() { result = getTypeForGLValue(any(UnknownType t)) } /** - * Holds if the function returns a value, as opposed to returning `void`. + * Holds if the function `func` returns a value, as opposed to returning `void`. */ predicate hasReturnValue(Function func) { not func.getUnspecifiedType() instanceof VoidType } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll index 3914c5e8e59..9dccf7752aa 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll @@ -601,7 +601,7 @@ class TranslatedReturnVoidStmt extends TranslatedReturnStmt { * The IR translation of an implicit `return` statement generated by the extractor to handle control * flow that reaches the end of a non-`void`-returning function body. Such control flow * produces undefined behavior in C++ but not in C. However even in C using the return value is - * undefined behaviour. We make it return uninitialized memory to get as much flow as possible. + * undefined behavior. We make it return uninitialized memory to get as much flow as possible. */ class TranslatedNoValueReturnStmt extends TranslatedReturnStmt, TranslatedVariableInitialization { TranslatedNoValueReturnStmt() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRBlock.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRBlock.qll index 50395db47e7..7f7c5cd0a4d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRBlock.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRBlock.qll @@ -7,6 +7,7 @@ import Instruction private import internal.IRBlockImports as Imports import Imports::EdgeKind private import Cached +private import codeql.controlflow.BasicBlock as BB /** * Holds if `block` is a block in `func` and `sortOverride`, `sortKey1`, and `sortKey2` are the @@ -263,6 +264,54 @@ private predicate isEntryBlock(TIRBlock block) { block = MkIRBlock(any(EnterFunctionInstruction enter)) } +module IRCfg implements BB::CfgSig { + private import codeql.controlflow.SuccessorType + + class ControlFlowNode = Instruction; + + final private class FinalIRBlock = IRBlock; + + class BasicBlock extends FinalIRBlock { + ControlFlowNode getNode(int i) { result = this.getInstruction(i) } + + ControlFlowNode getLastNode() { result = super.getLastInstruction() } + + int length() { result = this.getInstructionCount() } + + BasicBlock getASuccessor() { result = super.getASuccessor() } + + BasicBlock getASuccessor(SuccessorType t) { + exists(EdgeKind k | + result = super.getSuccessor(k) and + t = getAMatchingSuccessorType(k) + ) + } + + predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } + + predicate dominates(BasicBlock bb) { super.dominates(bb) } + + BasicBlock getImmediateDominator() { result.immediatelyDominates(this) } + + predicate inDominanceFrontier(BasicBlock df) { super.dominanceFrontier() = df } + + predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } + + predicate postDominates(BasicBlock bb) { super.postDominates(bb) } + } + + class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { isEntryBlock(this) } + } + + pragma[nomagic] + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + bb1.getASuccessor() = bb2 and + bb1 = bb2.getImmediateDominator() and + forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred)) + } +} + cached private module Cached { cached diff --git a/cpp/ql/lib/semmle/code/cpp/ir/internal/IRUtilities.qll b/cpp/ql/lib/semmle/code/cpp/ir/internal/IRUtilities.qll index bfd850384ac..c42f734a62a 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/internal/IRUtilities.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/internal/IRUtilities.qll @@ -49,7 +49,8 @@ Type getVariableType(Variable v) { } /** - * Holds if the database contains a `case` label with the specified minimum and maximum value. + * Holds if the database contains a `switchCase` label with the specified minimum `minValue` + * and maximum `maxValue` value. */ predicate hasCaseEdge(SwitchCase switchCase, string minValue, string maxValue) { minValue = switchCase.getExpr().getFullyConverted().getValue() and diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FunctionInputsAndOutputs.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FunctionInputsAndOutputs.qll index 9c8ee43b52a..d81bc960988 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FunctionInputsAndOutputs.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FunctionInputsAndOutputs.qll @@ -371,7 +371,7 @@ class FunctionOutput extends TFunctionOutput { /** * Holds if this is the output value pointed to by a pointer parameter to a function, or the * output value referred to by a reference parameter to a function, where the parameter has - * index `index`. + * index `i`. * * Example: * ``` @@ -389,7 +389,7 @@ class FunctionOutput extends TFunctionOutput { /** * Holds if this is the output value pointed to by a pointer parameter (through `ind` number * of indirections) to a function, or the output value referred to by a reference parameter to - * a function, where the parameter has index `index`. + * a function, where the parameter has index `i`. * * Example: * ``` diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticExpr.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticExpr.qll index 668d9b52659..f269d0dfff2 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticExpr.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticExpr.qll @@ -307,13 +307,12 @@ class SemStoreExpr extends SemUnaryExpr { } class SemConditionalExpr extends SemKnownExpr { - SemExpr condition; SemExpr trueResult; SemExpr falseResult; SemConditionalExpr() { opcode instanceof Opcode::Conditional and - Specific::conditionalExpr(this, type, condition, trueResult, falseResult) + Specific::conditionalExpr(this, type, any(SemExpr condition), trueResult, falseResult) } final SemExpr getBranchExpr(boolean branch) { diff --git a/cpp/ql/lib/semmle/code/cpp/security/FileWrite.qll b/cpp/ql/lib/semmle/code/cpp/security/FileWrite.qll index dc421e8f3ae..6c0552a7d18 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/FileWrite.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/FileWrite.qll @@ -21,7 +21,9 @@ class FileWrite extends Expr { Expr getDest() { fileWrite(this, _, result) } /** - * Gets the conversion character for this write, if it exists and is known. For example in the following code the write of `value1` has conversion character `"s"`, whereas the write of `value2` has no conversion specifier. + * Gets the conversion character from `source` for this write, if it exists and is known. + * For example in the following code the write of `value1` has conversion character `"s"`, whereas + * the write of `value2` has no conversion specifier. * ``` * fprintf(file, "%s", value1); * stream << value2; diff --git a/cpp/ql/lib/semmle/code/cpp/security/boostorg/asio/protocols.qll b/cpp/ql/lib/semmle/code/cpp/security/boostorg/asio/protocols.qll index 559ebd444f3..984bd874ae5 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/boostorg/asio/protocols.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/boostorg/asio/protocols.qll @@ -191,11 +191,19 @@ module BoostorgAsio { class SslContextClass extends Class { SslContextClass() { this.getQualifiedName() = "boost::asio::ssl::context" } - ConstructorCall getAContructorCall() { + /** + * Gets a constructor call, if any. + */ + ConstructorCall getAConstructorCall() { this.getAConstructor().getACallToThisFunction() = result and not result.getLocation().getFile().toString().matches("%/boost/asio/%") and result.fromSource() } + + /** + * DEPRECATED: Use `getAConstructorCall` instead. + */ + deprecated ConstructorCall getAContructorCall() { result = this.getAConstructorCall() } } /** @@ -368,7 +376,7 @@ module BoostorgAsio { */ default predicate isSink(DataFlow::Node sink) { exists(ConstructorCall cc, SslContextClass c, Expr e | e = sink.asExpr() | - c.getAContructorCall() = cc and + c.getAConstructorCall() = cc and cc.getArgument(0) = e ) } @@ -468,7 +476,7 @@ module BoostorgAsio { predicate isSource(DataFlow::Node source) { exists(SslContextClass c, ConstructorCall cc | cc = source.asExpr() and - c.getAContructorCall() = cc + c.getAConstructorCall() = cc ) } diff --git a/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll b/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll index 5305c8ca58f..bd3a54c6159 100644 --- a/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll +++ b/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll @@ -2355,6 +2355,20 @@ class VlaDeclStmt extends Stmt, @stmt_vla_decl { ) } + /** + * Gets the number of VLA dimension statements in this VLA declaration + * statement and transitively of the VLA declaration used to define its + * base type. if any. + */ + int getTransitiveNumberOfVlaDimensionStmts() { + not exists(this.getParentVlaDecl()) and + result = this.getNumberOfVlaDimensionStmts() + or + result = + this.getNumberOfVlaDimensionStmts() + + this.getParentVlaDecl().getTransitiveNumberOfVlaDimensionStmts() + } + /** * Gets the `i`th VLA dimension statement in this VLA * declaration statement. @@ -2367,6 +2381,19 @@ class VlaDeclStmt extends Stmt, @stmt_vla_decl { ) } + /** + * Gets the `i`th VLA dimension statement in this VLA declaration + * statement or transitively of the VLA declaration used to define + * its base type. + */ + VlaDimensionStmt getTransitiveVlaDimensionStmt(int i) { + i < this.getNumberOfVlaDimensionStmts() and + result = this.getVlaDimensionStmt(i) + or + result = + this.getParentVlaDecl().getTransitiveVlaDimensionStmt(i - this.getNumberOfVlaDimensionStmts()) + } + /** * Gets the type that this VLA declaration statement relates to, * if any. @@ -2378,4 +2405,31 @@ class VlaDeclStmt extends Stmt, @stmt_vla_decl { * if any. */ Variable getVariable() { variable_vla(unresolveElement(result), underlyingElement(this)) } + + /** + * Get the VLA declaration used to define the base type of + * this VLA declaration, if any. + */ + VlaDeclStmt getParentVlaDecl() { + exists(Variable v, Type baseType | + v = this.getVariable() and + baseType = this.getBaseType(v.getType(), this.getNumberOfVlaDimensionStmts()) + | + result.getType() = baseType + ) + or + exists(Type t, Type baseType | + t = this.getType().(TypedefType).getBaseType() and + baseType = this.getBaseType(t, this.getNumberOfVlaDimensionStmts()) + | + result.getType() = baseType + ) + } + + private Type getBaseType(Type type, int n) { + n = 0 and + result = type + or + result = this.getBaseType(type.(DerivedType).getBaseType(), n - 1) + } } diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 0943aadd694..42cff5d8d16 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 12642 + 12643 @externalDataElement @@ -10,11 +10,11 @@ @file - 65207 + 65212 @folder - 12388 + 12389 @diagnostic @@ -22,7 +22,7 @@ @location_default - 46945184 + 46945087 @pch @@ -30,7 +30,7 @@ @macro_expansion - 40256666 + 40256583 @other_macro_reference @@ -38,7 +38,7 @@ @normal_function - 2738028 + 2738022 @unknown_function @@ -46,7 +46,7 @@ @constructor - 698700 + 698728 @destructor @@ -58,7 +58,7 @@ @operator - 652446 + 652444 @user_defined_literal @@ -70,27 +70,27 @@ @fun_decl - 4202975 + 4202967 @var_decl - 9383123 + 9383104 @type_decl - 1633485 + 1633482 @namespace_decl - 407776 + 407775 @using_declaration - 267925 + 267822 @using_directive - 6472 + 6473 @using_enum_declaration @@ -98,27 +98,27 @@ @static_assert - 173263 + 173262 @parameter - 7019846 + 7019832 @membervariable - 1497677 + 1497674 @globalvariable - 488149 + 488148 @localvariable - 726313 + 726300 @enumconstant - 347817 + 347816 @errortype @@ -366,11 +366,11 @@ @pointer - 452470 + 452469 @type_with_specifiers - 693239 + 693238 @array @@ -378,11 +378,11 @@ @routineptr - 684085 + 684112 @reference - 967316 + 967314 @gnu_vector @@ -394,7 +394,7 @@ @rvalue_reference - 291043 + 291042 @block @@ -404,6 +404,10 @@ @scalable_vector 1 + + @decltype + 102349 + @typeof 816 @@ -484,13 +488,9 @@ @remove_reference 5723 - - @decltype - 102349 - @struct - 979805 + 979892 @union @@ -502,11 +502,11 @@ @template_parameter - 867019 + 867095 @alias - 1762205 + 1762360 @unknown_usertype @@ -514,7 +514,7 @@ @class - 324975 + 324974 @template_template_parameter @@ -522,7 +522,7 @@ @proxy_class - 48435 + 48439 @scoped_enum @@ -530,7 +530,7 @@ @template_struct - 212065 + 212084 @template_class @@ -542,11 +542,11 @@ @mangledname - 6364281 + 6364268 @type_mention - 5903906 + 5903894 @concept_template @@ -554,11 +554,11 @@ @routinetype - 604298 + 604322 @ptrtomember - 9727 + 9728 @specifier @@ -574,7 +574,7 @@ @declspec - 330282 + 330281 @msattribute @@ -582,7 +582,7 @@ @alignas - 2165 + 2164 @attribute_arg_token @@ -590,7 +590,7 @@ @attribute_arg_constant_expr - 71712 + 71856 @attribute_arg_expr @@ -610,19 +610,19 @@ @derivation - 476883 + 476902 @frienddecl - 700403 + 700465 @comment - 11233426 + 11233402 @namespace - 8649 + 8650 @specialnamequalifyingelement @@ -630,15 +630,15 @@ @namequalifier - 3041831 + 3041979 @value - 13474629 + 13474601 @initialiser - 2251326 + 2251321 @address_of @@ -646,19 +646,19 @@ @indirect - 404154 + 404153 @array_to_pointer - 1953754 + 1953750 @parexpr - 4915216 + 4915206 @arithnegexpr - 586535 + 586534 @unaryplusexpr @@ -666,11 +666,11 @@ @complementexpr - 38200 + 38199 @notexpr - 355765 + 355764 @postincrexpr @@ -690,19 +690,19 @@ @conditionalexpr - 897881 + 897879 @addexpr - 571554 + 571552 @subexpr - 466800 + 466799 @mulexpr - 435794 + 435793 @divexpr @@ -710,7 +710,7 @@ @remexpr - 16011 + 16012 @paddexpr @@ -726,19 +726,19 @@ @lshiftexpr - 551697 + 551696 @rshiftexpr - 200555 + 200554 @andexpr - 481219 + 481218 @orexpr - 194056 + 194055 @xorexpr @@ -746,11 +746,11 @@ @eqexpr - 643373 + 643372 @neexpr - 411871 + 411870 @gtexpr @@ -770,7 +770,7 @@ @assignexpr - 1281147 + 1281144 @assignaddexpr @@ -782,7 +782,7 @@ @assignmulexpr - 11184 + 11185 @assigndivexpr @@ -826,7 +826,7 @@ @orlogicalexpr - 1103525 + 1103522 @commaexpr @@ -834,11 +834,11 @@ @subscriptexpr - 435143 + 435142 @callexpr - 239770 + 239780 @vastartexpr @@ -858,15 +858,15 @@ @varaccess - 8254646 + 8254629 @runtime_sizeof - 402048 + 402047 @runtime_alignof - 49875 + 49877 @expr_stmt @@ -874,11 +874,11 @@ @routineexpr - 5732184 + 5732444 @type_operand - 1405365 + 1405362 @offsetofexpr @@ -886,11 +886,11 @@ @typescompexpr - 701935 + 701934 @literal - 7967037 + 7966299 @aggregateliteral @@ -898,23 +898,23 @@ @c_style_cast - 6026986 + 6026987 @temp_init - 992080 + 992173 @errorexpr - 45685 + 45686 @reference_to - 1903026 + 1903138 @ref_indirect - 2107241 + 2107325 @vacuous_destructor_call @@ -974,23 +974,23 @@ @thisaccess - 1558281 + 1558277 @new_expr - 46196 + 46198 @delete_expr - 11480 + 11481 @throw_expr - 24156 + 24178 @condition_decl - 408903 + 408920 @braced_init_list @@ -998,7 +998,7 @@ @type_id - 47899 + 47901 @sizeof_pack @@ -1106,7 +1106,7 @@ @ctordirectinit - 112833 + 112837 @ctorvirtualinit @@ -1122,19 +1122,19 @@ @dtordirectdestruct - 39450 + 39452 @dtorvirtualdestruct - 3985 + 3986 @dtorfielddestruct - 39825 + 39827 @static_cast - 348054 + 348053 @reinterpret_cast @@ -1142,7 +1142,7 @@ @const_cast - 24460 + 24461 @dynamic_cast @@ -1154,7 +1154,7 @@ @param_ref - 163949 + 164066 @noopexpr @@ -1254,11 +1254,11 @@ @isfinalexpr - 9402 + 9403 @noexceptexpr - 28344 + 28465 @builtinshufflevector @@ -1430,7 +1430,7 @@ @reuseexpr - 847004 + 847039 @istriviallycopyassignable @@ -1530,7 +1530,7 @@ @requires_expr - 16502 + 16503 @nested_requirement @@ -1542,7 +1542,7 @@ @concept_id - 90430 + 90433 @lambdacapture @@ -1550,31 +1550,31 @@ @stmt_expr - 2031618 + 2031613 @stmt_if - 990216 + 990214 @stmt_while - 39648 + 39647 @stmt_goto - 157895 + 157909 @stmt_label - 78018 + 78025 @stmt_return - 1241679 + 1241788 @stmt_block - 1728670 + 1728666 @stmt_end_test_while @@ -1586,11 +1586,11 @@ @stmt_switch_case - 836117 + 836152 @stmt_switch - 411851 + 411868 @stmt_asm @@ -1598,11 +1598,11 @@ @stmt_decl - 772426 + 772425 @stmt_empty - 429386 + 429404 @stmt_continue @@ -1614,7 +1614,7 @@ @stmt_try_block - 26748 + 26740 @stmt_microsoft_try @@ -1638,11 +1638,11 @@ @stmt_handler - 43790 + 43781 @stmt_constexpr_if - 106038 + 106037 @stmt_co_return @@ -1662,11 +1662,11 @@ @ppd_if - 590944 + 590942 @ppd_ifdef - 214364 + 214363 @ppd_ifndef @@ -1674,7 +1674,7 @@ @ppd_elif - 21915 + 21917 @ppd_else @@ -1682,15 +1682,15 @@ @ppd_endif - 888973 + 888971 @ppd_plain_include - 318536 + 318564 @ppd_define - 2750129 + 2750123 @ppd_undef @@ -1698,7 +1698,7 @@ @ppd_pragma - 406188 + 406187 @ppd_include_next @@ -1764,11 +1764,11 @@ compilations - 12642 + 12643 id - 12642 + 12643 cwd @@ -1786,7 +1786,7 @@ 1 2 - 12642 + 12643 @@ -1812,11 +1812,11 @@ compilation_args - 1012124 + 1012213 id - 12642 + 12643 num @@ -1824,7 +1824,7 @@ arg - 29266 + 29268 @@ -2152,12 +2152,12 @@ 1 2 - 13402 + 13403 2 3 - 12684 + 12685 3 @@ -2183,12 +2183,12 @@ 1 2 - 19380 + 19382 2 3 - 8723 + 8724 3 @@ -2203,15 +2203,15 @@ compilation_build_mode - 12642 + 2 id - 12642 + 2 mode - 10 + 2 @@ -2225,7 +2225,7 @@ 1 2 - 12642 + 2 @@ -2239,9 +2239,9 @@ 12 - 1197 - 1198 - 10 + 1 + 2 + 2 @@ -2513,7 +2513,7 @@ seconds - 12634 + 13396 @@ -2594,47 +2594,47 @@ 3 4 - 980 + 816 4 5 - 381 + 544 - 5 - 8 - 217 + 6 + 7 + 163 8 - 10 + 9 163 10 11 - 108 + 217 11 - 12 + 15 217 - 14 - 17 + 15 + 19 217 - 17 - 22 + 19 + 26 217 - 25 - 93 - 217 + 42 + 92 + 163 @@ -2699,6 +2699,11 @@ 12 + + 2 + 3 + 54 + 3 4 @@ -2707,7 +2712,7 @@ 4 5 - 1034 + 980 5 @@ -2717,32 +2722,32 @@ 6 7 - 490 + 544 7 8 - 217 + 163 8 9 - 326 + 272 9 - 17 + 14 381 - 23 - 48 + 17 + 44 381 - 83 - 84 - 54 + 49 + 87 + 108 @@ -2798,13 +2803,13 @@ 54 - 129 - 130 + 144 + 145 54 - 150 - 151 + 149 + 150 54 @@ -2821,27 +2826,27 @@ 1 2 - 6643 + 6807 2 3 - 2069 + 3376 3 4 - 2014 + 1633 4 5 - 1198 + 1034 5 - 46 - 707 + 45 + 544 @@ -2857,32 +2862,32 @@ 1 2 - 6480 + 6208 2 3 - 1797 + 2668 3 4 - 1361 + 2069 4 5 - 1198 + 925 5 - 7 - 1143 + 8 + 1198 - 7 - 77 - 653 + 8 + 74 + 326 @@ -2898,12 +2903,17 @@ 1 2 - 9693 + 10510 2 3 - 2940 + 2831 + + + 3 + 4 + 54 @@ -3159,19 +3169,19 @@ compilation_finished - 12642 + 12643 id - 12642 + 12643 cpu_seconds - 9537 + 9379 elapsed_seconds - 221 + 232 @@ -3185,7 +3195,7 @@ 1 2 - 12642 + 12643 @@ -3201,7 +3211,7 @@ 1 2 - 12642 + 12643 @@ -3217,17 +3227,17 @@ 1 2 - 8026 + 7763 2 3 - 1056 + 1172 3 - 28 - 454 + 29 + 443 @@ -3243,12 +3253,12 @@ 1 2 - 8945 + 8735 2 3 - 591 + 644 @@ -3264,7 +3274,7 @@ 1 2 - 42 + 63 2 @@ -3273,72 +3283,37 @@ 3 - 4 - 10 - - - 4 5 - 10 - - - 5 - 6 - 10 - - - 6 - 7 - 10 + 21 8 9 - 10 + 31 - 9 - 10 - 10 - - - 14 + 12 15 - 10 - - - 15 - 16 21 - 34 - 35 - 10 + 15 + 37 + 21 - 61 - 62 - 10 + 51 + 177 + 21 - 172 - 173 - 10 + 241 + 286 + 21 - 230 - 231 - 10 - - - 300 - 301 - 10 - - - 313 - 314 + 326 + 327 10 @@ -3355,7 +3330,7 @@ 1 2 - 42 + 63 2 @@ -3364,72 +3339,37 @@ 3 - 4 - 10 - - - 4 5 - 10 - - - 5 - 6 - 10 - - - 6 - 7 - 10 + 21 8 9 - 10 + 31 - 9 - 10 - 10 - - - 14 + 12 15 21 15 - 16 - 10 + 37 + 21 - 33 - 34 - 10 - - - 58 - 59 - 10 - - - 156 - 157 - 10 - - - 161 + 48 162 - 10 + 21 - 218 - 219 - 10 + 165 + 221 + 21 - 247 - 248 + 237 + 238 10 @@ -3667,11 +3607,11 @@ locations_default - 46945184 + 46945087 id - 46945184 + 46945087 file @@ -3679,7 +3619,7 @@ beginLine - 7500635 + 7500620 beginColumn @@ -3687,7 +3627,7 @@ endLine - 7501758 + 7501742 endColumn @@ -3705,7 +3645,7 @@ 1 2 - 46945184 + 46945087 @@ -3721,7 +3661,7 @@ 1 2 - 46945184 + 46945087 @@ -3737,7 +3677,7 @@ 1 2 - 46945184 + 46945087 @@ -3753,7 +3693,7 @@ 1 2 - 46945184 + 46945087 @@ -3769,7 +3709,7 @@ 1 2 - 46945184 + 46945087 @@ -4170,27 +4110,27 @@ 1 2 - 4957467 + 4957457 2 3 - 779068 + 779066 3 4 - 543913 + 543911 4 12 - 570360 + 570359 12 97 - 563374 + 563372 97 @@ -4211,22 +4151,22 @@ 1 2 - 5019469 + 5019458 2 3 - 1221309 + 1221306 3 6 - 639971 + 639969 6 57 - 563249 + 563248 57 @@ -4247,22 +4187,22 @@ 1 2 - 5641351 + 5641339 2 3 - 483159 + 483158 3 7 - 582086 + 582085 7 25 - 565245 + 565244 25 @@ -4283,12 +4223,12 @@ 1 2 - 7034567 + 7034552 2 85 - 466068 + 466067 @@ -4304,27 +4244,27 @@ 1 2 - 5026455 + 5026444 2 3 - 739397 + 739395 3 4 - 539796 + 539795 4 12 - 586952 + 586950 12 72 - 564122 + 564121 72 @@ -4725,27 +4665,27 @@ 1 2 - 4955347 + 4955336 2 3 - 781563 + 781561 3 4 - 544786 + 544785 4 12 - 567865 + 567864 12 95 - 563498 + 563497 95 @@ -4766,22 +4706,22 @@ 1 2 - 5016599 + 5016589 2 3 - 1223804 + 1223801 3 6 - 633359 + 633357 6 52 - 564122 + 564121 52 @@ -4802,12 +4742,12 @@ 1 2 - 7051657 + 7051643 2 15 - 450100 + 450099 @@ -4823,22 +4763,22 @@ 1 2 - 5640478 + 5640466 2 3 - 480539 + 480538 3 7 - 587076 + 587075 7 25 - 568863 + 568862 25 @@ -4859,27 +4799,27 @@ 1 2 - 5025082 + 5025072 2 3 - 743763 + 743762 3 4 - 539546 + 539545 4 12 - 587575 + 587574 12 72 - 562750 + 562749 72 @@ -5199,15 +5139,15 @@ files - 65207 + 65212 id - 65207 + 65212 name - 65207 + 65212 @@ -5221,7 +5161,7 @@ 1 2 - 65207 + 65212 @@ -5237,7 +5177,7 @@ 1 2 - 65207 + 65212 @@ -5247,15 +5187,15 @@ folders - 12388 + 12389 id - 12388 + 12389 name - 12388 + 12389 @@ -5269,7 +5209,7 @@ 1 2 - 12388 + 12389 @@ -5285,7 +5225,7 @@ 1 2 - 12388 + 12389 @@ -5295,15 +5235,15 @@ containerparent - 77574 + 77581 parent - 12388 + 12389 child - 77574 + 77581 @@ -5317,7 +5257,7 @@ 1 2 - 6030 + 6031 2 @@ -5368,7 +5308,7 @@ 1 2 - 77574 + 77581 @@ -5378,11 +5318,11 @@ numlines - 807885 + 807883 element_id - 806762 + 806761 num_lines @@ -5408,7 +5348,7 @@ 1 2 - 805640 + 805638 2 @@ -5429,7 +5369,7 @@ 1 2 - 805640 + 805638 2 @@ -5450,7 +5390,7 @@ 1 2 - 806513 + 806511 2 @@ -6801,11 +6741,11 @@ fileannotations - 4200182 + 4200551 id - 5766 + 5767 kind @@ -6813,11 +6753,11 @@ name - 58711 + 58716 value - 39510 + 39514 @@ -6836,7 +6776,7 @@ 2 3 - 5565 + 5566 @@ -7062,22 +7002,22 @@ 1 2 - 11026 + 11027 2 3 - 4361 + 4362 3 5 - 5058 + 5059 5 7 - 4097 + 4098 7 @@ -7092,7 +7032,7 @@ 16 19 - 4889 + 4890 19 @@ -7107,17 +7047,17 @@ 47 128 - 4921 + 4922 128 459 - 4625 + 4626 459 546 - 1710 + 1711 @@ -7133,7 +7073,7 @@ 1 2 - 58711 + 58716 @@ -7149,17 +7089,17 @@ 1 2 - 11586 + 11587 2 3 - 7688 + 7689 3 4 - 4097 + 4098 4 @@ -7169,7 +7109,7 @@ 6 8 - 3421 + 3422 8 @@ -7179,17 +7119,17 @@ 11 17 - 5396 + 5397 17 23 - 4699 + 4700 23 41 - 4678 + 4679 41 @@ -7230,12 +7170,12 @@ 5 8 - 2460 + 2461 8 14 - 2967 + 2968 14 @@ -7265,7 +7205,7 @@ 81 151 - 3083 + 3084 151 @@ -7280,7 +7220,7 @@ 473 547 - 2312 + 2313 @@ -7296,7 +7236,7 @@ 1 2 - 39500 + 39503 2 @@ -7317,7 +7257,7 @@ 1 2 - 3400 + 3401 2 @@ -7332,7 +7272,7 @@ 5 8 - 2481 + 2482 8 @@ -7362,7 +7302,7 @@ 41 66 - 2988 + 2989 66 @@ -7372,7 +7312,7 @@ 92 113 - 2988 + 2989 113 @@ -7392,15 +7332,15 @@ inmacroexpansion - 149996213 + 149995903 id - 24670919 + 24670868 inv - 3705278 + 3705270 @@ -7414,37 +7354,37 @@ 1 3 - 2209403 + 2209399 3 5 - 1474980 + 1474977 5 6 - 1620372 + 1620368 6 7 - 6582556 + 6582542 7 8 - 8719015 + 8718997 8 9 - 3557055 + 3557047 9 22 - 507535 + 507534 @@ -7460,17 +7400,17 @@ 1 2 - 531662 + 531661 2 3 - 743209 + 743208 3 4 - 481513 + 481512 4 @@ -7480,12 +7420,12 @@ 7 8 - 282153 + 282152 8 9 - 330247 + 330246 9 @@ -7495,17 +7435,17 @@ 10 11 - 444651 + 444650 11 337 - 307799 + 307798 339 423 - 281756 + 281755 423 @@ -7520,15 +7460,15 @@ affectedbymacroexpansion - 48735923 + 48735823 id - 7044754 + 7044739 inv - 3803128 + 3803120 @@ -7542,32 +7482,32 @@ 1 2 - 3846717 + 3846709 2 3 - 766306 + 766304 3 4 - 361842 + 361841 4 5 - 772737 + 772736 5 12 - 535161 + 535160 12 50 - 556268 + 556267 50 @@ -7588,27 +7528,27 @@ 1 4 - 313249 + 313248 4 7 - 316608 + 316607 7 9 - 301088 + 301087 9 12 - 342939 + 342938 12 13 - 456005 + 456004 13 @@ -7618,7 +7558,7 @@ 14 15 - 408039 + 408038 15 @@ -7628,17 +7568,17 @@ 16 17 - 377678 + 377677 17 18 - 200637 + 200636 18 20 - 344256 + 344255 20 @@ -7658,11 +7598,11 @@ macroinvocations - 40337807 + 40337724 id - 40337807 + 40337724 macro_id @@ -7670,7 +7610,7 @@ location - 5912946 + 5912934 kind @@ -7688,7 +7628,7 @@ 1 2 - 40337807 + 40337724 @@ -7704,7 +7644,7 @@ 1 2 - 40337807 + 40337724 @@ -7720,7 +7660,7 @@ 1 2 - 40337807 + 40337724 @@ -7736,7 +7676,7 @@ 1 2 - 60774 + 60773 2 @@ -7864,12 +7804,12 @@ 1 2 - 5256194 + 5256183 2 4 - 422314 + 422313 4 @@ -7890,12 +7830,12 @@ 1 2 - 5890782 + 5890770 2 37 - 22164 + 22163 @@ -7911,7 +7851,7 @@ 1 2 - 5912946 + 5912934 @@ -7984,15 +7924,15 @@ macroparent - 33655219 + 33655149 id - 33655219 + 33655149 parent_id - 15926236 + 15926203 @@ -8006,7 +7946,7 @@ 1 2 - 33655219 + 33655149 @@ -8022,27 +7962,27 @@ 1 2 - 7806472 + 7806456 2 3 - 1595482 + 1595479 3 4 - 4702965 + 4702955 4 5 - 1295315 + 1295312 5 205 - 526000 + 525999 @@ -8052,15 +7992,15 @@ macrolocationbind - 6041019 + 6040022 id - 4222263 + 4221190 location - 2279211 + 2279306 @@ -8074,12 +8014,12 @@ 1 2 - 3296060 + 3294948 2 3 - 491244 + 491264 3 @@ -8089,7 +8029,7 @@ 4 5 - 413873 + 413891 5 @@ -8110,12 +8050,12 @@ 1 2 - 1336957 + 1337013 2 3 - 482121 + 482141 3 @@ -8125,12 +8065,12 @@ 4 5 - 428203 + 428221 5 522 - 24118 + 24119 @@ -8140,11 +8080,11 @@ macro_argument_unexpanded - 82490730 + 82495572 invocation - 26282743 + 26282637 argument_index @@ -8152,7 +8092,7 @@ text - 343239 + 343270 @@ -8166,22 +8106,22 @@ 1 2 - 9681332 + 9679766 2 3 - 9769775 + 9770635 3 4 - 5001825 + 5002265 4 67 - 1829810 + 1829971 @@ -8197,22 +8137,22 @@ 1 2 - 9863952 + 9862401 2 3 - 9787317 + 9788179 3 4 - 4845176 + 4845602 4 67 - 1786296 + 1786453 @@ -8237,7 +8177,7 @@ 646840 - 2488531 + 2488302 31 @@ -8280,52 +8220,52 @@ 1 2 - 39700 + 39704 2 3 - 62323 + 62329 3 4 - 21028 + 21029 4 5 - 34578 + 34581 5 6 - 39246 + 39250 6 9 - 30871 + 30874 9 15 - 28980 + 28983 15 26 - 25886 + 25888 26 57 - 27143 + 27145 57 517 - 25991 + 25994 518 @@ -8346,12 +8286,12 @@ 1 2 - 243158 + 243180 2 3 - 89868 + 89876 3 @@ -8366,11 +8306,11 @@ macro_argument_expanded - 82490730 + 82495572 invocation - 26282743 + 26282637 argument_index @@ -8378,7 +8318,7 @@ text - 207914 + 207933 @@ -8392,22 +8332,22 @@ 1 2 - 9681332 + 9679766 2 3 - 9769775 + 9770635 3 4 - 5001825 + 5002265 4 67 - 1829810 + 1829971 @@ -8423,22 +8363,22 @@ 1 2 - 12639750 + 12638444 2 3 - 8427729 + 8428470 3 4 - 4224959 + 4225331 4 9 - 990304 + 990391 @@ -8463,7 +8403,7 @@ 646840 - 2488531 + 2488302 31 @@ -8506,22 +8446,22 @@ 1 2 - 21830 + 21832 2 3 - 26858 + 26860 3 4 - 43492 + 43496 4 5 - 15905 + 15907 5 @@ -8531,32 +8471,32 @@ 6 7 - 18398 + 18399 7 10 - 18968 + 18970 10 19 - 18324 + 18325 19 51 - 15778 + 15780 51 252 - 15599 + 15600 252 - 1169434 - 9494 + 1169205 + 9495 @@ -8572,17 +8512,17 @@ 1 2 - 105076 + 105086 2 3 - 88907 + 88914 3 66 - 13930 + 13931 @@ -8592,15 +8532,15 @@ functions - 4049407 + 4049399 id - 4049407 + 4049399 name - 1693365 + 1693362 kind @@ -8618,7 +8558,7 @@ 1 2 - 4049407 + 4049399 @@ -8634,7 +8574,7 @@ 1 2 - 4049407 + 4049399 @@ -8650,12 +8590,12 @@ 1 2 - 1447232 + 1447229 2 4 - 138972 + 138971 4 @@ -8676,7 +8616,7 @@ 1 2 - 1690496 + 1690493 2 @@ -8783,26 +8723,26 @@ builtin_functions - 30924 + 30926 id - 30924 + 30926 function_entry_point - 1141516 + 1141561 id - 1137768 + 1137813 entry_point - 1141516 + 1141561 @@ -8816,7 +8756,7 @@ 1 2 - 1134566 + 1134611 2 @@ -8837,7 +8777,7 @@ 1 2 - 1141516 + 1141561 @@ -8847,15 +8787,15 @@ function_return_type - 4066872 + 4066864 id - 4049407 + 4049399 return_type - 619262 + 619261 @@ -8869,7 +8809,7 @@ 1 2 - 4031942 + 4031934 2 @@ -8900,12 +8840,12 @@ 3 5 - 48029 + 48028 5 365 - 46532 + 46531 432 @@ -9190,44 +9130,44 @@ purefunctions - 131704 + 131703 id - 131704 + 131703 function_deleted - 88084 + 88088 id - 88084 + 88088 function_defaulted - 51680 + 51682 id - 51680 + 51682 function_prototyped - 4047910 + 4047902 id - 4047910 + 4047902 @@ -9307,15 +9247,15 @@ member_function_this_type - 674152 + 674151 id - 674152 + 674151 this_type - 176023 + 176022 @@ -9329,7 +9269,7 @@ 1 2 - 674152 + 674151 @@ -9385,27 +9325,27 @@ fun_decls - 4208963 + 4208955 id - 4202975 + 4202967 function - 4024831 + 4024823 type_id - 611278 + 611277 name - 1691868 + 1691865 location - 2813252 + 2813247 @@ -9419,7 +9359,7 @@ 1 2 - 4202975 + 4202967 @@ -9435,7 +9375,7 @@ 1 2 - 4196987 + 4196979 2 @@ -9456,7 +9396,7 @@ 1 2 - 4202975 + 4202967 @@ -9472,7 +9412,7 @@ 1 2 - 4202975 + 4202967 @@ -9488,12 +9428,12 @@ 1 2 - 3861283 + 3861275 2 5 - 163548 + 163547 @@ -9509,7 +9449,7 @@ 1 2 - 4006368 + 4006360 2 @@ -9530,7 +9470,7 @@ 1 2 - 4024831 + 4024823 @@ -9546,12 +9486,12 @@ 1 2 - 3881742 + 3881734 2 4 - 143089 + 143088 @@ -9567,12 +9507,12 @@ 1 2 - 295160 + 295159 2 3 - 220559 + 220558 3 @@ -9613,7 +9553,7 @@ 3 5 - 48029 + 48028 5 @@ -9639,7 +9579,7 @@ 1 2 - 491517 + 491516 2 @@ -9670,17 +9610,17 @@ 1 2 - 454965 + 454964 2 3 - 69486 + 69485 3 6 - 56013 + 56012 6 @@ -9701,17 +9641,17 @@ 1 2 - 1331339 + 1331336 2 3 - 194486 + 194485 3 11 - 129491 + 129490 11 @@ -9732,12 +9672,12 @@ 1 2 - 1446733 + 1446730 2 4 - 139471 + 139470 4 @@ -9758,7 +9698,7 @@ 1 2 - 1602048 + 1602045 2 @@ -9779,7 +9719,7 @@ 1 2 - 1367267 + 1367264 2 @@ -9805,17 +9745,17 @@ 1 2 - 2420288 + 2420283 2 3 - 251497 + 251496 3 211 - 141467 + 141466 @@ -9831,7 +9771,7 @@ 1 2 - 2439000 + 2438995 2 @@ -9841,7 +9781,7 @@ 3 211 - 140968 + 140967 @@ -9857,7 +9797,7 @@ 1 2 - 2698856 + 2698851 2 @@ -9878,7 +9818,7 @@ 1 2 - 2774081 + 2774075 2 @@ -9893,11 +9833,11 @@ fun_def - 1422282 + 1422279 id - 1422282 + 1422279 @@ -9926,11 +9866,11 @@ fun_decl_specifiers - 4279697 + 4279688 id - 1748256 + 1748252 name @@ -9958,7 +9898,7 @@ 3 4 - 1100176 + 1100174 4 @@ -10160,26 +10100,26 @@ fun_decl_empty_throws - 420912 + 420911 fun_decl - 420912 + 420911 fun_decl_noexcept - 141825 + 141830 fun_decl - 141825 + 141830 constant - 141348 + 141353 @@ -10193,7 +10133,7 @@ 1 2 - 141825 + 141830 @@ -10209,7 +10149,7 @@ 1 2 - 140905 + 140910 2 @@ -10224,11 +10164,11 @@ fun_decl_empty_noexcept - 1163674 + 1163672 fun_decl - 1163674 + 1163672 @@ -10333,7 +10273,7 @@ fun_requires - 29110 + 29111 id @@ -10345,7 +10285,7 @@ constraint - 28873 + 28875 @@ -10359,7 +10299,7 @@ 1 2 - 10047 + 10048 2 @@ -10463,7 +10403,7 @@ 1 2 - 28637 + 28638 2 @@ -10484,7 +10424,7 @@ 1 2 - 28873 + 28875 @@ -10494,11 +10434,11 @@ param_decl_bind - 7310390 + 7310375 id - 7310390 + 7310375 index @@ -10506,7 +10446,7 @@ fun_decl - 3531692 + 3531684 @@ -10520,7 +10460,7 @@ 1 2 - 7310390 + 7310375 @@ -10536,7 +10476,7 @@ 1 2 - 7310390 + 7310375 @@ -10634,22 +10574,22 @@ 1 2 - 1508984 + 1508981 2 3 - 976298 + 976296 3 4 - 602046 + 602045 4 5 - 290669 + 290668 5 @@ -10670,22 +10610,22 @@ 1 2 - 1508984 + 1508981 2 3 - 976298 + 976296 3 4 - 602046 + 602045 4 5 - 290669 + 290668 5 @@ -10700,27 +10640,27 @@ var_decls - 9389985 + 9389965 id - 9383123 + 9383104 variable - 9034695 + 9034676 type_id - 1456464 + 1456461 name - 852546 + 852544 location - 6274585 + 6274572 @@ -10734,7 +10674,7 @@ 1 2 - 9383123 + 9383104 @@ -10750,7 +10690,7 @@ 1 2 - 9376262 + 9376243 2 @@ -10771,7 +10711,7 @@ 1 2 - 9383123 + 9383104 @@ -10787,7 +10727,7 @@ 1 2 - 9383123 + 9383104 @@ -10803,12 +10743,12 @@ 1 2 - 8703731 + 8703713 2 5 - 330963 + 330962 @@ -10824,12 +10764,12 @@ 1 2 - 8981176 + 8981158 2 3 - 53518 + 53517 @@ -10845,7 +10785,7 @@ 1 2 - 8929280 + 8929262 2 @@ -10866,12 +10806,12 @@ 1 2 - 8783072 + 8783054 2 4 - 251622 + 251621 @@ -10887,12 +10827,12 @@ 1 2 - 849926 + 849924 2 3 - 284057 + 284056 3 @@ -10923,12 +10863,12 @@ 1 2 - 870759 + 870758 2 3 - 269087 + 269086 3 @@ -10938,7 +10878,7 @@ 5 11 - 113024 + 113023 11 @@ -10959,12 +10899,12 @@ 1 2 - 1119512 + 1119510 2 3 - 192615 + 192614 3 @@ -10990,12 +10930,12 @@ 1 2 - 985405 + 985403 2 3 - 219062 + 219061 3 @@ -11026,7 +10966,7 @@ 1 2 - 465943 + 465942 2 @@ -11067,12 +11007,12 @@ 1 2 - 478917 + 478916 2 3 - 165045 + 165044 3 @@ -11108,7 +11048,7 @@ 1 2 - 654691 + 654690 2 @@ -11118,7 +11058,7 @@ 3 11 - 65494 + 65493 11 @@ -11139,7 +11079,7 @@ 1 2 - 493763 + 493762 2 @@ -11154,7 +11094,7 @@ 4 8 - 64995 + 64994 8 @@ -11175,12 +11115,12 @@ 1 2 - 5774834 + 5774822 2 21 - 472306 + 472305 21 @@ -11201,12 +11141,12 @@ 1 2 - 5855673 + 5855660 2 2935 - 418912 + 418911 @@ -11222,12 +11162,12 @@ 1 2 - 5976057 + 5976045 2 2555 - 298528 + 298527 @@ -11243,7 +11183,7 @@ 1 2 - 6262235 + 6262222 2 @@ -11258,11 +11198,11 @@ var_def - 3766972 + 3766964 id - 3766972 + 3766964 @@ -11280,11 +11220,11 @@ var_decl_specifiers - 489895 + 489894 id - 489895 + 489894 name @@ -11302,7 +11242,7 @@ 1 2 - 489895 + 489894 @@ -11412,19 +11352,19 @@ type_decls - 1633485 + 1633482 id - 1633485 + 1633482 type_id - 1614523 + 1614520 location - 1547407 + 1547404 @@ -11438,7 +11378,7 @@ 1 2 - 1633485 + 1633482 @@ -11454,7 +11394,7 @@ 1 2 - 1633485 + 1633482 @@ -11470,7 +11410,7 @@ 1 2 - 1598181 + 1598177 2 @@ -11491,7 +11431,7 @@ 1 2 - 1598305 + 1598302 2 @@ -11512,7 +11452,7 @@ 1 2 - 1525326 + 1525323 2 @@ -11533,7 +11473,7 @@ 1 2 - 1525451 + 1525448 2 @@ -11548,22 +11488,22 @@ type_def - 1095560 + 1095558 id - 1095560 + 1095558 type_decl_top - 673960 + 673959 type_decl - 673960 + 673959 @@ -11574,7 +11514,7 @@ id - 2043 + 2044 constraint @@ -11643,11 +11583,11 @@ namespace_decls - 407776 + 407775 id - 407776 + 407775 namespace_id @@ -11655,11 +11595,11 @@ location - 407776 + 407775 bodylocation - 407776 + 407775 @@ -11673,7 +11613,7 @@ 1 2 - 407776 + 407775 @@ -11689,7 +11629,7 @@ 1 2 - 407776 + 407775 @@ -11705,7 +11645,7 @@ 1 2 - 407776 + 407775 @@ -11919,7 +11859,7 @@ 1 2 - 407776 + 407775 @@ -11935,7 +11875,7 @@ 1 2 - 407776 + 407775 @@ -11951,7 +11891,7 @@ 1 2 - 407776 + 407775 @@ -11967,7 +11907,7 @@ 1 2 - 407776 + 407775 @@ -11983,7 +11923,7 @@ 1 2 - 407776 + 407775 @@ -11999,7 +11939,7 @@ 1 2 - 407776 + 407775 @@ -12009,19 +11949,19 @@ usings - 272076 + 271973 id - 272076 + 271973 element_id - 59060 + 58938 location - 26847 + 26849 kind @@ -12039,7 +11979,7 @@ 1 2 - 272076 + 271973 @@ -12055,7 +11995,7 @@ 1 2 - 272076 + 271973 @@ -12071,7 +12011,7 @@ 1 2 - 272076 + 271973 @@ -12087,7 +12027,7 @@ 1 2 - 51329 + 51206 2 @@ -12113,7 +12053,7 @@ 1 2 - 51329 + 51206 2 @@ -12139,7 +12079,7 @@ 1 2 - 59060 + 58938 @@ -12155,17 +12095,17 @@ 1 2 - 21175 + 21177 2 4 - 2291 + 2292 4 132 - 1953 + 1954 145 @@ -12186,17 +12126,17 @@ 1 2 - 21175 + 21177 2 4 - 2291 + 2292 4 132 - 1953 + 1954 145 @@ -12217,7 +12157,7 @@ 1 2 - 26847 + 26849 @@ -12236,8 +12176,8 @@ 10 - 25368 - 25369 + 25356 + 25357 10 @@ -12257,8 +12197,8 @@ 10 - 5378 - 5379 + 5366 + 5367 10 @@ -12290,15 +12230,15 @@ using_container - 580125 + 580049 parent - 21894 + 21874 child - 272076 + 271973 @@ -12312,12 +12252,12 @@ 1 2 - 10371 + 10372 2 3 - 1615 + 1616 3 @@ -12327,7 +12267,7 @@ 6 7 - 2291 + 2270 7 @@ -12363,27 +12303,27 @@ 1 2 - 96606 + 96488 2 3 - 120274 + 120285 3 4 - 20098 + 20100 4 5 - 26710 + 26712 5 65 - 8385 + 8386 @@ -12393,15 +12333,15 @@ static_asserts - 173263 + 173262 id - 173263 + 173262 condition - 173263 + 173262 message @@ -12427,7 +12367,7 @@ 1 2 - 173263 + 173262 @@ -12443,7 +12383,7 @@ 1 2 - 173263 + 173262 @@ -12459,7 +12399,7 @@ 1 2 - 173263 + 173262 @@ -12475,7 +12415,7 @@ 1 2 - 173263 + 173262 @@ -12491,7 +12431,7 @@ 1 2 - 173263 + 173262 @@ -12507,7 +12447,7 @@ 1 2 - 173263 + 173262 @@ -12523,7 +12463,7 @@ 1 2 - 173263 + 173262 @@ -12539,7 +12479,7 @@ 1 2 - 173263 + 173262 @@ -13001,15 +12941,15 @@ params - 7060764 + 7060750 id - 7019846 + 7019832 function - 3404945 + 3404938 index @@ -13017,7 +12957,7 @@ type_id - 1220311 + 1220308 @@ -13031,7 +12971,7 @@ 1 2 - 7019846 + 7019832 @@ -13047,7 +12987,7 @@ 1 2 - 7019846 + 7019832 @@ -13063,7 +13003,7 @@ 1 2 - 6978928 + 6978913 2 @@ -13084,17 +13024,17 @@ 1 2 - 1473180 + 1473177 2 3 - 926273 + 926272 3 4 - 578718 + 578717 4 @@ -13120,17 +13060,17 @@ 1 2 - 1473180 + 1473177 2 3 - 926273 + 926272 3 4 - 578718 + 578717 4 @@ -13156,22 +13096,22 @@ 1 2 - 1781689 + 1781685 2 3 - 1030690 + 1030688 3 4 - 437500 + 437499 4 11 - 155065 + 155064 @@ -13310,7 +13250,7 @@ 1 2 - 737526 + 737524 2 @@ -13346,12 +13286,12 @@ 1 2 - 819612 + 819610 2 3 - 179641 + 179640 3 @@ -13382,7 +13322,7 @@ 1 2 - 995136 + 995134 2 @@ -13406,7 +13346,7 @@ new - 151070 + 151069 old @@ -13424,7 +13364,7 @@ 1 2 - 142370 + 142369 2 @@ -13480,19 +13420,19 @@ membervariables - 1500128 + 1500125 id - 1497677 + 1497674 type_id - 456186 + 456185 name - 642157 + 642156 @@ -13506,7 +13446,7 @@ 1 2 - 1495336 + 1495333 2 @@ -13527,7 +13467,7 @@ 1 2 - 1497677 + 1497674 @@ -13543,7 +13483,7 @@ 1 2 - 338450 + 338449 2 @@ -13558,7 +13498,7 @@ 10 4445 - 10129 + 10128 @@ -13574,7 +13514,7 @@ 1 2 - 356040 + 356039 2 @@ -13605,7 +13545,7 @@ 1 2 - 421497 + 421496 2 @@ -13636,7 +13576,7 @@ 1 2 - 524421 + 524420 2 @@ -13656,11 +13596,11 @@ globalvariables - 488149 + 488148 id - 488149 + 488148 type_id @@ -13668,7 +13608,7 @@ name - 112525 + 112524 @@ -13682,7 +13622,7 @@ 1 2 - 488149 + 488148 @@ -13698,7 +13638,7 @@ 1 2 - 488149 + 488148 @@ -13842,19 +13782,19 @@ localvariables - 726313 + 726300 id - 726313 + 726300 type_id - 53445 + 53440 name - 101635 + 101634 @@ -13868,7 +13808,7 @@ 1 2 - 726313 + 726300 @@ -13884,7 +13824,7 @@ 1 2 - 726313 + 726300 @@ -13900,7 +13840,7 @@ 1 2 - 28869 + 28865 2 @@ -13946,7 +13886,7 @@ 1 2 - 38374 + 38369 2 @@ -13977,7 +13917,7 @@ 1 2 - 62541 + 62540 2 @@ -13987,7 +13927,7 @@ 3 4 - 6531 + 6530 4 @@ -14018,7 +13958,7 @@ 1 2 - 84587 + 84586 2 @@ -14043,11 +13983,11 @@ autoderivation - 229167 + 229166 var - 229167 + 229166 derivation_type @@ -14065,7 +14005,7 @@ 1 2 - 229167 + 229166 @@ -14111,15 +14051,15 @@ orphaned_variables - 44322 + 44324 var - 44322 + 44324 function - 41051 + 41053 @@ -14133,7 +14073,7 @@ 1 2 - 44322 + 44324 @@ -14149,7 +14089,7 @@ 1 2 - 40200 + 40201 2 @@ -14164,11 +14104,11 @@ enumconstants - 347817 + 347816 id - 347817 + 347816 parent @@ -14176,7 +14116,7 @@ index - 13941 + 13940 type_id @@ -14188,7 +14128,7 @@ location - 320425 + 320424 @@ -14202,7 +14142,7 @@ 1 2 - 347817 + 347816 @@ -14218,7 +14158,7 @@ 1 2 - 347817 + 347816 @@ -14234,7 +14174,7 @@ 1 2 - 347817 + 347816 @@ -14250,7 +14190,7 @@ 1 2 - 347817 + 347816 @@ -14266,7 +14206,7 @@ 1 2 - 347817 + 347816 @@ -14674,7 +14614,7 @@ 1 2 - 13941 + 13940 @@ -14977,7 +14917,7 @@ 1 2 - 319390 + 319389 2 @@ -14998,7 +14938,7 @@ 1 2 - 320425 + 320424 @@ -15014,7 +14954,7 @@ 1 2 - 319390 + 319389 2 @@ -15035,7 +14975,7 @@ 1 2 - 320425 + 320424 @@ -15051,7 +14991,7 @@ 1 2 - 319390 + 319389 2 @@ -15743,15 +15683,15 @@ derivedtypes - 3030942 + 3030936 id - 3030942 + 3030936 name - 1460581 + 1460578 kind @@ -15759,7 +15699,7 @@ type_id - 1946734 + 1946730 @@ -15773,7 +15713,7 @@ 1 2 - 3030942 + 3030936 @@ -15789,7 +15729,7 @@ 1 2 - 3030942 + 3030936 @@ -15805,7 +15745,7 @@ 1 2 - 3030942 + 3030936 @@ -15821,7 +15761,7 @@ 1 2 - 1344064 + 1344061 2 @@ -15847,7 +15787,7 @@ 1 2 - 1460581 + 1460578 @@ -15863,7 +15803,7 @@ 1 2 - 1344188 + 1344185 2 @@ -16012,7 +15952,7 @@ 1 2 - 1317492 + 1317489 2 @@ -16043,7 +15983,7 @@ 1 2 - 1318989 + 1318986 2 @@ -16074,17 +16014,17 @@ 1 2 - 1319363 + 1319360 2 3 - 376497 + 376496 3 4 - 123503 + 123502 4 @@ -16099,11 +16039,11 @@ pointerishsize - 2247383 + 2247379 id - 2247383 + 2247379 size @@ -16125,7 +16065,7 @@ 1 2 - 2247383 + 2247379 @@ -16141,7 +16081,7 @@ 1 2 - 2247383 + 2247379 @@ -16664,15 +16604,15 @@ typedefbase - 1762205 + 1762360 id - 1762205 + 1762360 type_id - 837964 + 838037 @@ -16686,7 +16626,7 @@ 1 2 - 1762205 + 1762360 @@ -16702,22 +16642,22 @@ 1 2 - 662494 + 662552 2 3 - 80933 + 80940 3 6 - 64172 + 64177 6 4526 - 30364 + 30367 @@ -16727,7 +16667,7 @@ decltypes - 814477 + 814475 id @@ -16735,7 +16675,7 @@ expr - 814477 + 814475 kind @@ -16865,7 +16805,7 @@ 1 2 - 814477 + 814475 @@ -16881,7 +16821,7 @@ 1 2 - 814477 + 814475 @@ -16897,7 +16837,7 @@ 1 2 - 814477 + 814475 @@ -16913,7 +16853,7 @@ 1 2 - 814477 + 814475 @@ -17175,11 +17115,11 @@ type_operators - 7960 + 7961 id - 7960 + 7961 arg_type @@ -17191,7 +17131,7 @@ base_type - 5249 + 5250 @@ -17205,7 +17145,7 @@ 1 2 - 7960 + 7961 @@ -17221,7 +17161,7 @@ 1 2 - 7960 + 7961 @@ -17237,7 +17177,7 @@ 1 2 - 7960 + 7961 @@ -17471,7 +17411,7 @@ 1 2 - 4087 + 4088 2 @@ -17491,15 +17431,15 @@ usertypes - 4151345 + 4151710 id - 4151345 + 4151710 name - 918453 + 918534 kind @@ -17517,7 +17457,7 @@ 1 2 - 4151345 + 4151710 @@ -17533,7 +17473,7 @@ 1 2 - 4151345 + 4151710 @@ -17549,22 +17489,22 @@ 1 2 - 654203 + 654261 2 3 - 158655 + 158669 3 8 - 70561 + 70567 8 32669 - 35032 + 35035 @@ -17580,12 +17520,12 @@ 1 2 - 866712 + 866789 2 10 - 51741 + 51745 @@ -17737,11 +17677,11 @@ usertypesize - 1363697 + 1363817 id - 1363697 + 1363817 size @@ -17763,7 +17703,7 @@ 1 2 - 1363697 + 1363817 @@ -17779,7 +17719,7 @@ 1 2 - 1363697 + 1363817 @@ -18037,11 +17977,11 @@ usertype_alias_kind - 1762205 + 1762360 id - 1762205 + 1762360 alias_kind @@ -18059,7 +17999,7 @@ 1 2 - 1762205 + 1762360 @@ -18090,26 +18030,26 @@ nontype_template_parameters - 766257 + 766287 id - 766257 + 766287 type_template_type_constraint - 27152 + 27153 id - 13382 + 13383 constraint - 26012 + 26013 @@ -18123,7 +18063,7 @@ 1 2 - 10219 + 10220 2 @@ -18159,7 +18099,7 @@ 1 2 - 24872 + 24873 2 @@ -18174,15 +18114,15 @@ mangled_name - 7852432 + 7852416 id - 7852432 + 7852416 mangled_name - 6364281 + 6364268 is_complete @@ -18200,7 +18140,7 @@ 1 2 - 7852432 + 7852416 @@ -18216,7 +18156,7 @@ 1 2 - 7852432 + 7852416 @@ -18232,12 +18172,12 @@ 1 2 - 6036187 + 6036174 2 1120 - 328094 + 328093 @@ -18253,7 +18193,7 @@ 1 2 - 6364281 + 6364268 @@ -18305,59 +18245,59 @@ is_pod_class - 593736 + 593760 id - 593736 + 593760 is_standard_layout_class - 1124319 + 1124418 id - 1124319 + 1124418 is_complete - 1346175 + 1346294 id - 1346175 + 1346294 is_class_template - 232153 + 232173 id - 232153 + 232173 class_instantiation - 1125977 + 1126076 to - 1122936 + 1123034 from - 71797 + 71803 @@ -18371,7 +18311,7 @@ 1 2 - 1120802 + 1120901 2 @@ -18392,42 +18332,42 @@ 1 2 - 20499 + 20501 2 3 - 12885 + 12886 3 4 - 7107 + 7108 4 5 - 4657 + 4658 5 7 - 6072 + 6073 7 10 - 5713 + 5714 10 17 - 5903 + 5904 17 51 - 5396 + 5397 51 @@ -18442,11 +18382,11 @@ class_template_argument - 2898417 + 2898672 type_id - 1366992 + 1367112 index @@ -18454,7 +18394,7 @@ arg_type - 822026 + 822099 @@ -18468,27 +18408,27 @@ 1 2 - 579311 + 579362 2 3 - 410252 + 410289 3 4 - 251027 + 251049 4 7 - 103091 + 103100 7 113 - 23309 + 23311 @@ -18504,22 +18444,22 @@ 1 2 - 607849 + 607902 2 3 - 424257 + 424294 3 4 - 251861 + 251883 4 113 - 83024 + 83031 @@ -18627,27 +18567,27 @@ 1 2 - 513671 + 513716 2 3 - 167632 + 167647 3 5 - 75082 + 75088 5 47 - 61732 + 61737 47 12618 - 3907 + 3908 @@ -18663,17 +18603,17 @@ 1 2 - 723751 + 723815 2 3 - 79908 + 79915 3 22 - 18366 + 18368 @@ -18683,11 +18623,11 @@ class_template_argument_value - 510065 + 510086 type_id - 205804 + 205812 index @@ -18695,7 +18635,7 @@ arg_value - 509929 + 509949 @@ -18709,12 +18649,12 @@ 1 2 - 155792 + 155799 2 3 - 43368 + 43370 3 @@ -18735,12 +18675,12 @@ 1 2 - 147923 + 147929 2 3 - 40472 + 40474 3 @@ -18878,7 +18818,7 @@ 1 2 - 509793 + 509813 2 @@ -18899,7 +18839,7 @@ 1 2 - 509929 + 509949 @@ -18909,15 +18849,15 @@ is_proxy_class_for - 48435 + 48439 id - 48435 + 48439 templ_param_id - 45763 + 45767 @@ -18931,7 +18871,7 @@ 1 2 - 48435 + 48439 @@ -18947,7 +18887,7 @@ 1 2 - 45045 + 45048 2 @@ -18962,19 +18902,19 @@ type_mentions - 5903906 + 5903894 id - 5903906 + 5903894 type_id - 276914 + 276913 location - 5847598 + 5847585 kind @@ -18992,7 +18932,7 @@ 1 2 - 5903906 + 5903894 @@ -19008,7 +18948,7 @@ 1 2 - 5903906 + 5903894 @@ -19024,7 +18964,7 @@ 1 2 - 5903906 + 5903894 @@ -19040,7 +18980,7 @@ 1 2 - 136796 + 136795 2 @@ -19091,7 +19031,7 @@ 1 2 - 136796 + 136795 2 @@ -19142,7 +19082,7 @@ 1 2 - 276914 + 276913 @@ -19158,7 +19098,7 @@ 1 2 - 5801908 + 5801896 2 @@ -19179,7 +19119,7 @@ 1 2 - 5801908 + 5801896 2 @@ -19200,7 +19140,7 @@ 1 2 - 5847598 + 5847585 @@ -19258,26 +19198,26 @@ is_function_template - 1331339 + 1331336 id - 1331339 + 1331336 function_instantiation - 973595 + 973633 to - 973595 + 973633 from - 182638 + 182645 @@ -19291,7 +19231,7 @@ 1 2 - 973595 + 973633 @@ -19307,17 +19247,17 @@ 1 2 - 110584 + 110589 2 3 - 42789 + 42791 3 9 - 14376 + 14377 9 @@ -19337,11 +19277,11 @@ function_template_argument - 2484714 + 2484813 function_id - 1453238 + 1453296 index @@ -19349,7 +19289,7 @@ arg_type - 297992 + 298004 @@ -19363,22 +19303,22 @@ 1 2 - 782984 + 783015 2 3 - 413142 + 413158 3 4 - 171804 + 171811 4 15 - 85306 + 85309 @@ -19394,22 +19334,22 @@ 1 2 - 802130 + 802162 2 3 - 411234 + 411251 3 4 - 169624 + 169631 4 9 - 70248 + 70250 @@ -19547,32 +19487,32 @@ 1 2 - 174768 + 174775 2 3 - 26334 + 26335 3 4 - 19997 + 19998 4 6 - 22655 + 22656 6 11 - 23234 + 23235 11 76 - 23370 + 23371 79 @@ -19593,12 +19533,12 @@ 1 2 - 256804 + 256814 2 3 - 32126 + 32127 3 @@ -19613,11 +19553,11 @@ function_template_argument_value - 452763 + 452781 function_id - 196776 + 196784 index @@ -19625,7 +19565,7 @@ arg_value - 450072 + 450090 @@ -19639,17 +19579,17 @@ 1 2 - 151398 + 151404 2 3 - 42891 + 42893 3 8 - 2486 + 2487 @@ -19665,17 +19605,17 @@ 1 2 - 144482 + 144488 2 3 - 36691 + 36692 3 54 - 14853 + 14854 54 @@ -19818,7 +19758,7 @@ 1 2 - 447380 + 447398 2 @@ -19839,7 +19779,7 @@ 1 2 - 450072 + 450090 @@ -19860,11 +19800,11 @@ variable_instantiation - 422780 + 422779 to - 422780 + 422779 from @@ -19882,7 +19822,7 @@ 1 2 - 422780 + 422779 @@ -19943,11 +19883,11 @@ variable_template_argument - 768464 + 768462 variable_id - 400948 + 400947 index @@ -19955,7 +19895,7 @@ arg_type - 256113 + 256112 @@ -19969,7 +19909,7 @@ 1 2 - 156562 + 156561 2 @@ -20005,7 +19945,7 @@ 2 3 - 180015 + 180014 3 @@ -20413,7 +20353,7 @@ template_template_argument - 9674 + 9675 type_id @@ -20425,7 +20365,7 @@ arg_type - 9082 + 9083 @@ -20439,7 +20379,7 @@ 1 2 - 5016 + 5017 2 @@ -20470,7 +20410,7 @@ 1 2 - 5037 + 5038 2 @@ -20623,7 +20563,7 @@ 1 2 - 9051 + 9052 3 @@ -20644,7 +20584,7 @@ 1 2 - 9061 + 9062 2 @@ -20911,11 +20851,11 @@ concept_instantiation - 90430 + 90433 to - 90430 + 90433 from @@ -20933,7 +20873,7 @@ 1 2 - 90430 + 90433 @@ -21029,22 +20969,22 @@ is_type_constraint - 36899 + 36900 concept_id - 36899 + 36900 concept_template_argument - 113042 + 113047 concept_id - 76380 + 76383 index @@ -21052,7 +20992,7 @@ arg_type - 21429 + 21430 @@ -21066,12 +21006,12 @@ 1 2 - 46473 + 46475 2 3 - 24678 + 24679 3 @@ -21092,17 +21032,17 @@ 1 2 - 50088 + 50090 2 3 - 22376 + 22377 3 7 - 3915 + 3916 @@ -21402,15 +21342,15 @@ routinetypes - 604298 + 604322 id - 604298 + 604322 return_type - 283854 + 283865 @@ -21424,7 +21364,7 @@ 1 2 - 604298 + 604322 @@ -21440,12 +21380,12 @@ 1 2 - 234217 + 234226 2 3 - 35090 + 35091 3 @@ -21460,11 +21400,11 @@ routinetypeargs - 1176653 + 1176651 routine - 415071 + 415070 index @@ -21547,7 +21487,7 @@ 5 10 - 32892 + 32891 10 @@ -21826,19 +21766,19 @@ ptrtomembers - 9727 + 9728 id - 9727 + 9728 type_id - 7973 + 7974 class_id - 4868 + 4869 @@ -21852,7 +21792,7 @@ 1 2 - 9727 + 9728 @@ -21868,7 +21808,7 @@ 1 2 - 9727 + 9728 @@ -22030,11 +21970,11 @@ typespecifiers - 854197 + 854272 type_id - 849053 + 849128 spec_id @@ -22052,7 +21992,7 @@ 1 2 - 843910 + 843984 2 @@ -22123,11 +22063,11 @@ funspecifiers - 9714461 + 9714441 func_id - 4008863 + 4008855 spec_id @@ -22145,22 +22085,22 @@ 1 2 - 1527073 + 1527070 2 3 - 506238 + 506237 3 4 - 1036927 + 1036925 4 5 - 692865 + 692863 5 @@ -22281,11 +22221,11 @@ varspecifiers - 3075354 + 3075347 var_id - 2314873 + 2314869 spec_id @@ -22303,12 +22243,12 @@ 1 2 - 1658061 + 1658058 2 3 - 553643 + 553642 3 @@ -22427,11 +22367,11 @@ attributes - 653818 + 653817 id - 653818 + 653817 kind @@ -22447,7 +22387,7 @@ location - 647705 + 647704 @@ -22461,7 +22401,7 @@ 1 2 - 653818 + 653817 @@ -22477,7 +22417,7 @@ 1 2 - 653818 + 653817 @@ -22493,7 +22433,7 @@ 1 2 - 653818 + 653817 @@ -22509,7 +22449,7 @@ 1 2 - 653818 + 653817 @@ -22912,7 +22852,7 @@ 1 2 - 641842 + 641841 2 @@ -22933,7 +22873,7 @@ 1 2 - 647705 + 647704 @@ -22949,7 +22889,7 @@ 1 2 - 642590 + 642589 2 @@ -22970,7 +22910,7 @@ 1 2 - 647705 + 647704 @@ -23250,7 +23190,7 @@ 1 2 - 68748 + 68747 2 @@ -23508,7 +23448,7 @@ 1 2 - 56936 + 56935 2 @@ -23679,15 +23619,15 @@ attribute_arg_constant - 71712 + 71856 arg - 71712 + 71856 constant - 71712 + 71856 @@ -23701,7 +23641,7 @@ 1 2 - 71712 + 71856 @@ -23717,7 +23657,7 @@ 1 2 - 71712 + 71856 @@ -23832,7 +23772,7 @@ type_id - 94561 + 94560 spec_id @@ -23891,15 +23831,15 @@ funcattributes - 843564 + 843562 func_id - 799028 + 799026 spec_id - 616767 + 616766 @@ -23913,7 +23853,7 @@ 1 2 - 758983 + 758981 2 @@ -23934,12 +23874,12 @@ 1 2 - 571732 + 571731 2 213 - 45035 + 45034 @@ -24012,7 +23952,7 @@ namespaceattributes - 5995 + 5996 namespace_id @@ -24020,7 +23960,7 @@ spec_id - 5995 + 5996 @@ -24060,7 +24000,7 @@ 1 2 - 5995 + 5996 @@ -24138,15 +24078,15 @@ unspecifiedtype - 7172915 + 7172900 type_id - 7172915 + 7172900 unspecified_type_id - 3962331 + 3962323 @@ -24160,7 +24100,7 @@ 1 2 - 7172915 + 7172900 @@ -24176,17 +24116,17 @@ 1 2 - 2480542 + 2480537 2 3 - 1116768 + 1116765 3 7 - 302645 + 302644 7 @@ -24201,11 +24141,11 @@ member - 4189627 + 4189618 parent - 543289 + 543288 index @@ -24213,7 +24153,7 @@ child - 4185011 + 4185003 @@ -24227,7 +24167,7 @@ 1 2 - 128992 + 128991 2 @@ -24308,7 +24248,7 @@ 4 5 - 45035 + 45034 5 @@ -24491,7 +24431,7 @@ 1 2 - 4185011 + 4185003 @@ -24507,7 +24447,7 @@ 1 2 - 4180395 + 4180387 2 @@ -24522,15 +24462,15 @@ enclosingfunction - 114809 + 114813 child - 114809 + 114813 parent - 71338 + 71341 @@ -24544,7 +24484,7 @@ 1 2 - 114809 + 114813 @@ -24560,7 +24500,7 @@ 1 2 - 49330 + 49332 2 @@ -24570,7 +24510,7 @@ 3 4 - 15364 + 15365 4 @@ -24585,15 +24525,15 @@ derivations - 476883 + 476902 derivation - 476883 + 476902 sub - 455148 + 455166 index @@ -24601,11 +24541,11 @@ super - 235546 + 235555 location - 35396 + 35398 @@ -24619,7 +24559,7 @@ 1 2 - 476883 + 476902 @@ -24635,7 +24575,7 @@ 1 2 - 476883 + 476902 @@ -24651,7 +24591,7 @@ 1 2 - 476883 + 476902 @@ -24667,7 +24607,7 @@ 1 2 - 476883 + 476902 @@ -24683,12 +24623,12 @@ 1 2 - 438625 + 438642 2 9 - 16522 + 16523 @@ -24704,12 +24644,12 @@ 1 2 - 438625 + 438642 2 8 - 16522 + 16523 @@ -24725,12 +24665,12 @@ 1 2 - 438625 + 438642 2 9 - 16522 + 16523 @@ -24746,12 +24686,12 @@ 1 2 - 438625 + 438642 2 8 - 16522 + 16523 @@ -24906,7 +24846,7 @@ 1 2 - 225734 + 225743 2 @@ -24927,7 +24867,7 @@ 1 2 - 225734 + 225743 2 @@ -24948,7 +24888,7 @@ 1 2 - 235103 + 235112 2 @@ -24969,7 +24909,7 @@ 1 2 - 230197 + 230206 2 @@ -24990,7 +24930,7 @@ 1 2 - 26504 + 26505 2 @@ -25026,7 +24966,7 @@ 1 2 - 26504 + 26505 2 @@ -25062,7 +25002,7 @@ 1 2 - 35396 + 35398 @@ -25078,7 +25018,7 @@ 1 2 - 28719 + 28720 2 @@ -25103,11 +25043,11 @@ derspecifiers - 478655 + 478674 der_id - 476440 + 476459 spec_id @@ -25125,7 +25065,7 @@ 1 2 - 474226 + 474245 2 @@ -25171,11 +25111,11 @@ direct_base_offsets - 449970 + 449987 der_id - 449970 + 449987 offset @@ -25193,7 +25133,7 @@ 1 2 - 449970 + 449987 @@ -25390,19 +25330,19 @@ frienddecls - 700403 + 700465 id - 700403 + 700465 type_id - 42414 + 42416 decl_id - 77845 + 77848 location @@ -25420,7 +25360,7 @@ 1 2 - 700403 + 700465 @@ -25436,7 +25376,7 @@ 1 2 - 700403 + 700465 @@ -25452,7 +25392,7 @@ 1 2 - 700403 + 700465 @@ -25468,12 +25408,12 @@ 1 2 - 6200 + 6166 2 3 - 13933 + 13968 3 @@ -25483,7 +25423,7 @@ 7 12 - 3440 + 3441 12 @@ -25524,12 +25464,12 @@ 1 2 - 6200 + 6166 2 3 - 13933 + 13968 3 @@ -25539,7 +25479,7 @@ 7 12 - 3440 + 3441 12 @@ -25580,7 +25520,7 @@ 1 2 - 41051 + 41053 2 @@ -25601,17 +25541,17 @@ 1 2 - 48104 + 48071 2 3 - 5927 + 5962 3 8 - 5995 + 5996 8 @@ -25642,17 +25582,17 @@ 1 2 - 48104 + 48071 2 3 - 5927 + 5962 3 8 - 5995 + 5996 8 @@ -25683,7 +25623,7 @@ 1 2 - 77163 + 77167 2 @@ -25708,7 +25648,7 @@ 2 - 20370 + 20371 374 @@ -25725,7 +25665,7 @@ 1 2 - 5961 + 5962 2 @@ -25761,19 +25701,19 @@ comments - 11233426 + 11233402 id - 11233426 + 11233402 contents - 4303649 + 4303640 location - 11233426 + 11233402 @@ -25787,7 +25727,7 @@ 1 2 - 11233426 + 11233402 @@ -25803,7 +25743,7 @@ 1 2 - 11233426 + 11233402 @@ -25819,12 +25759,12 @@ 1 2 - 3928898 + 3928890 2 6 - 322979 + 322978 6 @@ -25845,12 +25785,12 @@ 1 2 - 3928898 + 3928890 2 6 - 322979 + 322978 6 @@ -25871,7 +25811,7 @@ 1 2 - 11233426 + 11233402 @@ -25887,7 +25827,7 @@ 1 2 - 11233426 + 11233402 @@ -25897,15 +25837,15 @@ commentbinding - 3914801 + 3914793 id - 3350803 + 3350796 element - 3749257 + 3749249 @@ -25919,7 +25859,7 @@ 1 2 - 3289176 + 3289170 2 @@ -25940,12 +25880,12 @@ 1 2 - 3583713 + 3583705 2 3 - 165544 + 165543 @@ -25955,15 +25895,15 @@ exprconv - 9633104 + 9633084 converted - 9632998 + 9632979 conversion - 9633104 + 9633084 @@ -25977,7 +25917,7 @@ 1 2 - 9632893 + 9632873 2 @@ -25998,7 +25938,7 @@ 1 2 - 9633104 + 9633084 @@ -26008,22 +25948,22 @@ compgenerated - 9892067 + 9892394 id - 9892067 + 9892394 synthetic_destructor_call - 1671632 + 1671701 element - 1244913 + 1244965 i @@ -26031,7 +25971,7 @@ destructor_call - 1671632 + 1671701 @@ -26045,17 +25985,17 @@ 1 2 - 828651 + 828685 2 3 - 409463 + 409480 3 19 - 6798 + 6799 @@ -26071,17 +26011,17 @@ 1 2 - 828651 + 828685 2 3 - 409463 + 409480 3 19 - 6798 + 6799 @@ -26229,7 +26169,7 @@ 1 2 - 1671632 + 1671701 @@ -26245,7 +26185,7 @@ 1 2 - 1671632 + 1671701 @@ -26255,11 +26195,11 @@ namespaces - 8649 + 8650 id - 8649 + 8650 name @@ -26277,7 +26217,7 @@ 1 2 - 8649 + 8650 @@ -26293,7 +26233,7 @@ 1 2 - 3738 + 3739 2 @@ -26324,7 +26264,7 @@ namespacembrs - 2037677 + 2037673 parentid @@ -26332,7 +26272,7 @@ memberid - 2037677 + 2037673 @@ -26422,7 +26362,7 @@ 1 2 - 2037677 + 2037673 @@ -26432,11 +26372,11 @@ exprparents - 19454250 + 19454210 expr_id - 19454250 + 19454210 child_index @@ -26444,7 +26384,7 @@ parent_id - 12940010 + 12939983 @@ -26458,7 +26398,7 @@ 1 2 - 19454250 + 19454210 @@ -26474,7 +26414,7 @@ 1 2 - 19454250 + 19454210 @@ -26592,17 +26532,17 @@ 1 2 - 7394770 + 7394754 2 3 - 5082689 + 5082678 3 712 - 462551 + 462550 @@ -26618,17 +26558,17 @@ 1 2 - 7394770 + 7394754 2 3 - 5082689 + 5082678 3 712 - 462551 + 462550 @@ -26638,22 +26578,22 @@ expr_isload - 6909346 + 6909332 expr_id - 6909346 + 6909332 conversionkinds - 6050442 + 6050443 expr_id - 6050442 + 6050443 kind @@ -26671,7 +26611,7 @@ 1 2 - 6050442 + 6050443 @@ -26715,8 +26655,8 @@ 1 - 5831534 - 5831535 + 5831535 + 5831536 1 @@ -26727,11 +26667,11 @@ iscall - 5802562 + 5802824 caller - 5802562 + 5802824 kind @@ -26749,7 +26689,7 @@ 1 2 - 5802562 + 5802824 @@ -26773,8 +26713,8 @@ 21 - 268053 - 268054 + 268054 + 268055 21 @@ -26785,11 +26725,11 @@ numtemplatearguments - 627371 + 627369 expr_id - 627371 + 627369 num @@ -26807,7 +26747,7 @@ 1 2 - 627371 + 627369 @@ -26891,23 +26831,23 @@ namequalifiers - 3041831 + 3041979 id - 3041831 + 3041979 qualifiableelement - 3041831 + 3041979 qualifyingelement - 47484 + 47486 location - 552434 + 552457 @@ -26921,7 +26861,7 @@ 1 2 - 3041831 + 3041979 @@ -26937,7 +26877,7 @@ 1 2 - 3041831 + 3041979 @@ -26953,7 +26893,7 @@ 1 2 - 3041831 + 3041979 @@ -26969,7 +26909,7 @@ 1 2 - 3041831 + 3041979 @@ -26985,7 +26925,7 @@ 1 2 - 3041831 + 3041979 @@ -27001,7 +26941,7 @@ 1 2 - 3041831 + 3041979 @@ -27017,12 +26957,12 @@ 1 2 - 31541 + 31543 2 3 - 8175 + 8176 3 @@ -27031,7 +26971,7 @@ 5 - 6810 + 6811 3571 @@ -27053,12 +26993,12 @@ 1 2 - 31541 + 31543 2 3 - 8175 + 8176 3 @@ -27067,7 +27007,7 @@ 5 - 6810 + 6811 3571 @@ -27089,7 +27029,7 @@ 1 2 - 34403 + 34404 2 @@ -27120,22 +27060,22 @@ 1 2 - 79155 + 79137 2 6 - 38082 + 38105 6 7 - 398985 + 399001 7 192 - 36210 + 36212 @@ -27151,22 +27091,22 @@ 1 2 - 79155 + 79137 2 6 - 38082 + 38105 6 7 - 398985 + 399001 7 192 - 36210 + 36212 @@ -27182,22 +27122,22 @@ 1 2 - 111536 + 111541 2 4 - 13296 + 13297 4 5 - 415294 + 415311 5 33 - 12306 + 12307 @@ -27207,15 +27147,15 @@ varbind - 8254646 + 8254629 expr - 8254646 + 8254629 var - 1050377 + 1050375 @@ -27229,7 +27169,7 @@ 1 2 - 8254646 + 8254629 @@ -27245,17 +27185,17 @@ 1 2 - 171536 + 171535 2 3 - 188701 + 188700 3 4 - 145648 + 145647 4 @@ -27265,7 +27205,7 @@ 5 6 - 83151 + 83150 6 @@ -27300,15 +27240,15 @@ funbind - 5812287 + 5812528 expr - 5809813 + 5810054 fun - 275937 + 275948 @@ -27322,7 +27262,7 @@ 1 2 - 5807338 + 5807579 2 @@ -27343,27 +27283,27 @@ 1 2 - 181441 + 181448 2 3 - 38835 + 38837 3 4 - 17190 + 17191 4 8 - 22741 + 22742 8 37798 - 15727 + 15728 @@ -27373,11 +27313,11 @@ expr_allocator - 45242 + 45244 expr - 45242 + 45244 func @@ -27399,7 +27339,7 @@ 1 2 - 45242 + 45244 @@ -27415,7 +27355,7 @@ 1 2 - 45242 + 45244 @@ -27499,11 +27439,11 @@ expr_deallocator - 53827 + 53829 expr - 53827 + 53829 func @@ -27525,7 +27465,7 @@ 1 2 - 53827 + 53829 @@ -27541,7 +27481,7 @@ 1 2 - 53827 + 53829 @@ -27646,15 +27586,15 @@ expr_cond_guard - 897881 + 897879 cond - 897881 + 897879 guard - 897881 + 897879 @@ -27668,7 +27608,7 @@ 1 2 - 897881 + 897879 @@ -27684,7 +27624,7 @@ 1 2 - 897881 + 897879 @@ -27694,15 +27634,15 @@ expr_cond_true - 897877 + 897876 cond - 897877 + 897876 true - 897877 + 897876 @@ -27716,7 +27656,7 @@ 1 2 - 897877 + 897876 @@ -27732,7 +27672,7 @@ 1 2 - 897877 + 897876 @@ -27742,15 +27682,15 @@ expr_cond_false - 897881 + 897879 cond - 897881 + 897879 false - 897881 + 897879 @@ -27764,7 +27704,7 @@ 1 2 - 897881 + 897879 @@ -27780,7 +27720,7 @@ 1 2 - 897881 + 897879 @@ -27790,11 +27730,11 @@ values - 13474629 + 13474601 id - 13474629 + 13474601 str @@ -27812,7 +27752,7 @@ 1 2 - 13474629 + 13474601 @@ -27828,7 +27768,7 @@ 1 2 - 78303 + 78302 2 @@ -27858,11 +27798,11 @@ valuetext - 6647554 + 6647456 id - 6647554 + 6647456 text @@ -27880,7 +27820,7 @@ 1 2 - 6647554 + 6647456 @@ -27921,15 +27861,15 @@ valuebind - 13583211 + 13583183 val - 13474629 + 13474601 expr - 13583211 + 13583183 @@ -27943,7 +27883,7 @@ 1 2 - 13384074 + 13384046 2 @@ -27964,7 +27904,7 @@ 1 2 - 13583211 + 13583183 @@ -27974,11 +27914,11 @@ fieldoffsets - 1497677 + 1497674 id - 1497677 + 1497674 byteoffset @@ -28000,7 +27940,7 @@ 1 2 - 1497677 + 1497674 @@ -28016,7 +27956,7 @@ 1 2 - 1497677 + 1497674 @@ -28078,7 +28018,7 @@ 1 2 - 30387 + 30386 2 @@ -28361,23 +28301,23 @@ initialisers - 2251326 + 2251321 init - 2251326 + 2251321 var - 981180 + 981178 expr - 2251326 + 2251321 location - 516962 + 516961 @@ -28391,7 +28331,7 @@ 1 2 - 2251326 + 2251321 @@ -28407,7 +28347,7 @@ 1 2 - 2251326 + 2251321 @@ -28423,7 +28363,7 @@ 1 2 - 2251326 + 2251321 @@ -28439,7 +28379,7 @@ 1 2 - 870760 + 870758 2 @@ -28465,7 +28405,7 @@ 1 2 - 870760 + 870758 2 @@ -28491,7 +28431,7 @@ 1 2 - 981172 + 981170 2 @@ -28512,7 +28452,7 @@ 1 2 - 2251326 + 2251321 @@ -28528,7 +28468,7 @@ 1 2 - 2251326 + 2251321 @@ -28544,7 +28484,7 @@ 1 2 - 2251326 + 2251321 @@ -28560,7 +28500,7 @@ 1 2 - 415112 + 415111 2 @@ -28591,7 +28531,7 @@ 1 2 - 444413 + 444412 2 @@ -28617,7 +28557,7 @@ 1 2 - 415112 + 415111 2 @@ -28642,26 +28582,26 @@ braced_initialisers - 68440 + 68438 init - 68440 + 68438 expr_ancestor - 1677613 + 1677683 exp - 1677613 + 1677683 ancestor - 839624 + 839659 @@ -28675,7 +28615,7 @@ 1 2 - 1677613 + 1677683 @@ -28691,12 +28631,12 @@ 1 2 - 17083 + 17084 2 3 - 812471 + 812505 3 @@ -28711,11 +28651,11 @@ exprs - 25210619 + 25210567 id - 25210619 + 25210567 kind @@ -28723,7 +28663,7 @@ location - 10585876 + 10585854 @@ -28737,7 +28677,7 @@ 1 2 - 25210619 + 25210567 @@ -28753,7 +28693,7 @@ 1 2 - 25210619 + 25210567 @@ -28931,22 +28871,22 @@ 1 2 - 8903903 + 8903885 2 3 - 820610 + 820608 3 16 - 797200 + 797198 16 71733 - 64162 + 64161 @@ -28962,17 +28902,17 @@ 1 2 - 9043306 + 9043287 2 3 - 774274 + 774272 3 32 - 768295 + 768294 @@ -28982,15 +28922,15 @@ expr_reuse - 847004 + 847039 reuse - 847004 + 847039 original - 847004 + 847039 value_category @@ -29008,7 +28948,7 @@ 1 2 - 847004 + 847039 @@ -29024,7 +28964,7 @@ 1 2 - 847004 + 847039 @@ -29040,7 +28980,7 @@ 1 2 - 847004 + 847039 @@ -29056,7 +28996,7 @@ 1 2 - 847004 + 847039 @@ -29108,15 +29048,15 @@ expr_types - 25210619 + 25210567 id - 25210619 + 25210567 typeid - 214203 + 214202 value_category @@ -29134,7 +29074,7 @@ 1 2 - 25210619 + 25210567 @@ -29150,7 +29090,7 @@ 1 2 - 25210619 + 25210567 @@ -29295,15 +29235,15 @@ new_allocated_type - 46196 + 46198 expr - 46196 + 46198 type_id - 27390 + 27391 @@ -29317,7 +29257,7 @@ 1 2 - 46196 + 46198 @@ -29333,12 +29273,12 @@ 1 2 - 11514 + 11515 2 3 - 14478 + 14479 3 @@ -30752,15 +30692,15 @@ condition_decl_bind - 408903 + 408920 expr - 408903 + 408920 decl - 408903 + 408920 @@ -30774,7 +30714,7 @@ 1 2 - 408903 + 408920 @@ -30790,7 +30730,7 @@ 1 2 - 408903 + 408920 @@ -30800,15 +30740,15 @@ typeid_bind - 47899 + 47901 expr - 47899 + 47901 type_id - 15943 + 15944 @@ -30822,7 +30762,7 @@ 1 2 - 47899 + 47901 @@ -30838,7 +30778,7 @@ 1 2 - 2963 + 2964 2 @@ -30911,11 +30851,11 @@ sizeof_bind - 242027 + 242026 expr - 242027 + 242026 type_id @@ -30933,7 +30873,7 @@ 1 2 - 242027 + 242026 @@ -32428,7 +32368,7 @@ 1 2 - 17254 + 17253 2 @@ -32632,11 +32572,11 @@ stmts - 6368850 + 6368836 id - 6368850 + 6368836 kind @@ -32644,7 +32584,7 @@ location - 2684488 + 2684483 @@ -32658,7 +32598,7 @@ 1 2 - 6368850 + 6368836 @@ -32674,7 +32614,7 @@ 1 2 - 6368850 + 6368836 @@ -32912,7 +32852,7 @@ 1 2 - 2224998 + 2224993 2 @@ -32922,7 +32862,7 @@ 3 10 - 202174 + 202173 10 @@ -32943,7 +32883,7 @@ 1 2 - 2601532 + 2601527 2 @@ -33113,15 +33053,15 @@ if_then - 990216 + 990214 if_stmt - 990216 + 990214 then_id - 990216 + 990214 @@ -33135,7 +33075,7 @@ 1 2 - 990216 + 990214 @@ -33151,7 +33091,7 @@ 1 2 - 990216 + 990214 @@ -33161,15 +33101,15 @@ if_else - 437089 + 437107 if_stmt - 437089 + 437107 else_id - 437089 + 437107 @@ -33183,7 +33123,7 @@ 1 2 - 437089 + 437107 @@ -33199,7 +33139,7 @@ 1 2 - 437089 + 437107 @@ -33257,15 +33197,15 @@ constexpr_if_then - 106038 + 106037 constexpr_if_stmt - 106038 + 106037 then_id - 106038 + 106037 @@ -33279,7 +33219,7 @@ 1 2 - 106038 + 106037 @@ -33295,7 +33235,7 @@ 1 2 - 106038 + 106037 @@ -33449,15 +33389,15 @@ while_body - 39648 + 39647 while_stmt - 39648 + 39647 body_id - 39648 + 39647 @@ -33471,7 +33411,7 @@ 1 2 - 39648 + 39647 @@ -33487,7 +33427,7 @@ 1 2 - 39648 + 39647 @@ -33593,11 +33533,11 @@ switch_case - 836117 + 836152 switch_stmt - 411851 + 411868 index @@ -33605,7 +33545,7 @@ case_id - 836117 + 836152 @@ -33624,7 +33564,7 @@ 2 3 - 408968 + 408985 3 @@ -33650,7 +33590,7 @@ 2 3 - 408968 + 408985 3 @@ -33813,7 +33753,7 @@ 1 2 - 836117 + 836152 @@ -33829,7 +33769,7 @@ 1 2 - 836117 + 836152 @@ -33839,15 +33779,15 @@ switch_body - 411851 + 411868 switch_stmt - 411851 + 411868 body_id - 411851 + 411868 @@ -33861,7 +33801,7 @@ 1 2 - 411851 + 411868 @@ -33877,7 +33817,7 @@ 1 2 - 411851 + 411868 @@ -34079,11 +34019,11 @@ stmtparents - 5628275 + 5628263 id - 5628275 + 5628263 index @@ -34091,7 +34031,7 @@ parent - 2381446 + 2381441 @@ -34105,7 +34045,7 @@ 1 2 - 5628275 + 5628263 @@ -34121,7 +34061,7 @@ 1 2 - 5628275 + 5628263 @@ -34259,17 +34199,17 @@ 1 2 - 1358990 + 1358987 2 3 - 517369 + 517368 3 4 - 151517 + 151516 4 @@ -34300,17 +34240,17 @@ 1 2 - 1358990 + 1358987 2 3 - 517369 + 517368 3 4 - 151517 + 151516 4 @@ -34335,22 +34275,22 @@ ishandler - 43790 + 43781 block - 43790 + 43781 stmt_decl_bind - 725871 + 725870 stmt - 715303 + 715301 num @@ -34358,7 +34298,7 @@ decl - 725871 + 725870 @@ -34372,7 +34312,7 @@ 1 2 - 707837 + 707836 2 @@ -34393,7 +34333,7 @@ 1 2 - 707837 + 707836 2 @@ -34526,7 +34466,7 @@ 1 2 - 725871 + 725870 @@ -34542,7 +34482,7 @@ 1 2 - 725871 + 725870 @@ -34552,11 +34492,11 @@ stmt_decl_entry_bind - 725871 + 725870 stmt - 715303 + 715301 num @@ -34564,7 +34504,7 @@ decl_entry - 725871 + 725870 @@ -34578,7 +34518,7 @@ 1 2 - 707837 + 707836 2 @@ -34599,7 +34539,7 @@ 1 2 - 707837 + 707836 2 @@ -34732,7 +34672,7 @@ 1 2 - 725871 + 725870 @@ -34748,7 +34688,7 @@ 1 2 - 725871 + 725870 @@ -34758,15 +34698,15 @@ blockscope - 1644338 + 1644335 block - 1644338 + 1644335 enclosing - 1427147 + 1427145 @@ -34780,7 +34720,7 @@ 1 2 - 1644338 + 1644335 @@ -34796,7 +34736,7 @@ 1 2 - 1294537 + 1294535 2 @@ -34816,11 +34756,11 @@ jumpinfo - 348321 + 348320 id - 348321 + 348320 str @@ -34842,7 +34782,7 @@ 1 2 - 348321 + 348320 @@ -34858,7 +34798,7 @@ 1 2 - 348321 + 348320 @@ -34951,7 +34891,7 @@ 2 3 - 36211 + 36210 3 @@ -34997,11 +34937,11 @@ preprocdirects - 5408441 + 5408430 id - 5408441 + 5408430 kind @@ -35009,7 +34949,7 @@ location - 5405198 + 5405187 @@ -35023,7 +34963,7 @@ 1 2 - 5408441 + 5408430 @@ -35039,7 +34979,7 @@ 1 2 - 5408441 + 5408430 @@ -35187,7 +35127,7 @@ 1 2 - 5405073 + 5405062 27 @@ -35208,7 +35148,7 @@ 1 2 - 5405198 + 5405187 @@ -35218,15 +35158,15 @@ preprocpair - 1141219 + 1141217 begin - 888973 + 888971 elseelifend - 1141219 + 1141217 @@ -35240,7 +35180,7 @@ 1 2 - 649576 + 649575 2 @@ -35266,7 +35206,7 @@ 1 2 - 1141219 + 1141217 @@ -35298,19 +35238,19 @@ preproctext - 4352427 + 4352418 id - 4352427 + 4352418 head - 2955094 + 2955088 body - 1683385 + 1683382 @@ -35324,7 +35264,7 @@ 1 2 - 4352427 + 4352418 @@ -35340,7 +35280,7 @@ 1 2 - 4352427 + 4352418 @@ -35356,12 +35296,12 @@ 1 2 - 2756491 + 2756485 2 798 - 198603 + 198602 @@ -35377,7 +35317,7 @@ 1 2 - 2873881 + 2873875 2 @@ -35398,7 +35338,7 @@ 1 2 - 1535182 + 1535178 2 @@ -35424,7 +35364,7 @@ 1 2 - 1539423 + 1539420 2 @@ -35444,15 +35384,15 @@ includes - 318610 + 318638 id - 318610 + 318638 included - 58690 + 58695 @@ -35466,7 +35406,7 @@ 1 2 - 318610 + 318638 @@ -35482,7 +35422,7 @@ 1 2 - 29044 + 29046 2 @@ -35497,7 +35437,7 @@ 4 6 - 5354 + 5355 6 @@ -35570,11 +35510,11 @@ link_parent - 30397027 + 30398238 element - 3865967 + 3866121 link_target @@ -35592,17 +35532,17 @@ 1 2 - 530438 + 530459 2 9 - 26947 + 26948 9 10 - 3308580 + 3308712 diff --git a/cpp/ql/src/Best Practices/Magic Constants/MagicConstants.qll b/cpp/ql/src/Best Practices/Magic Constants/MagicConstants.qll index 53e33ab4fa5..03384076483 100644 --- a/cpp/ql/src/Best Practices/Magic Constants/MagicConstants.qll +++ b/cpp/ql/src/Best Practices/Magic Constants/MagicConstants.qll @@ -164,12 +164,17 @@ predicate valueOccurrenceCount(string value, int n) { n > 20 } -predicate occurenceCount(Literal lit, string value, int n) { +predicate occurrenceCount(Literal lit, string value, int n) { valueOccurrenceCount(value, n) and value = lit.getValue() and nonTrivialValue(_, lit) } +/** + * DEPRECATED: Use `occurrenceCount` instead. + */ +deprecated predicate occurenceCount = occurrenceCount/3; + /* * Literals repeated frequently */ @@ -178,7 +183,7 @@ predicate check(Literal lit, string value, int n, File f) { // Check that the literal is nontrivial not trivial(lit) and // Check that it is repeated a number of times - occurenceCount(lit, value, n) and + occurrenceCount(lit, value, n) and n > 20 and f = lit.getFile() and // Exclude generated files diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index e3c013b76c7..eb805dc1af6 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.4.7 + +### Bug Fixes + +* Fixed an inconsistency across languages where most have a `Customizations.qll` file for adding customizations, but not all did. + ## 1.4.6 ### Minor Analysis Improvements diff --git a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll index 863fd1e6120..2b68730fa58 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll +++ b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll @@ -128,11 +128,18 @@ abstract class LeapYearFieldAccess extends YearFieldAccess { /** * Holds if the top-level binary operation includes an addition or subtraction operator with an operand specified by `valueToCheck`. */ - predicate additionalAdditionOrSubstractionCheckForLeapYear(int valueToCheck) { + predicate additionalAdditionOrSubtractionCheckForLeapYear(int valueToCheck) { additionalLogicalCheck(this, "+", valueToCheck) or additionalLogicalCheck(this, "-", valueToCheck) } + /** + * DEPRECATED: Use `additionalAdditionOrSubtractionCheckForLeapYear` instead. + */ + deprecated predicate additionalAdditionOrSubstractionCheckForLeapYear(int valueToCheck) { + this.additionalAdditionOrSubtractionCheckForLeapYear(valueToCheck) + } + /** * Holds if this object is used on a modulus 4 operation, which would likely indicate the start of a leap year check. */ @@ -180,13 +187,13 @@ class StructTmLeapYearFieldAccess extends LeapYearFieldAccess { this.additionalModulusCheckForLeapYear(100) and // tm_year represents years since 1900 ( - this.additionalAdditionOrSubstractionCheckForLeapYear(1900) + this.additionalAdditionOrSubtractionCheckForLeapYear(1900) or // some systems may use 2000 for 2-digit year conversions - this.additionalAdditionOrSubstractionCheckForLeapYear(2000) + this.additionalAdditionOrSubtractionCheckForLeapYear(2000) or // converting from/to Unix epoch - this.additionalAdditionOrSubstractionCheckForLeapYear(1970) + this.additionalAdditionOrSubtractionCheckForLeapYear(1970) ) } } diff --git a/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql b/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql index f5d1a09d04e..e50a2d54543 100644 --- a/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql +++ b/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql @@ -14,7 +14,7 @@ import cpp import semmle.code.cpp.security.boostorg.asio.protocols predicate isSourceImpl(DataFlow::Node source, ConstructorCall cc) { - exists(BoostorgAsio::SslContextClass c | c.getAContructorCall() = cc and cc = source.asExpr()) + exists(BoostorgAsio::SslContextClass c | c.getAConstructorCall() = cc and cc = source.asExpr()) } predicate isSinkImpl(DataFlow::Node sink, FunctionCall fcSetOptions) { diff --git a/cpp/ql/src/Metrics/Internal/CallableExtents.ql b/cpp/ql/src/Metrics/Internal/CallableExtents.ql index 7a376c6da72..7ebae0385da 100644 --- a/cpp/ql/src/Metrics/Internal/CallableExtents.ql +++ b/cpp/ql/src/Metrics/Internal/CallableExtents.ql @@ -20,12 +20,14 @@ class RangeFunction extends Function { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { - super.getLocation().hasLocationInfo(path, sl, sc, _, _) and + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + super.getLocation().hasLocationInfo(filepath, startline, startcolumn, _, _) and ( - this.getBlock().getLocation().hasLocationInfo(path, _, _, el, ec) + this.getBlock().getLocation().hasLocationInfo(filepath, _, _, endline, endcolumn) or - not exists(this.getBlock()) and el = sl + 1 and ec = 1 + not exists(this.getBlock()) and endline = startline + 1 and endcolumn = 1 ) } } diff --git a/cpp/ql/src/Security/CWE/CWE-190/IntegerOverflowTainted.ql b/cpp/ql/src/Security/CWE/CWE-190/IntegerOverflowTainted.ql index 6ff06d355b9..3978d2ded95 100644 --- a/cpp/ql/src/Security/CWE/CWE-190/IntegerOverflowTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-190/IntegerOverflowTainted.ql @@ -25,10 +25,10 @@ import semmle.code.cpp.controlflow.IRGuards as IRGuards predicate outOfBoundsExpr(Expr expr, string kind) { if convertedExprMightOverflowPositively(expr) then kind = "overflow" - else - if convertedExprMightOverflowNegatively(expr) - then kind = "overflow negatively" - else none() + else ( + convertedExprMightOverflowNegatively(expr) and + kind = "overflow negatively" + ) } predicate isSource(FS::FlowSource source, string sourceType) { sourceType = source.getSourceType() } diff --git a/cpp/ql/src/Security/CWE/CWE-457/UninitializedVariables.qll b/cpp/ql/src/Security/CWE/CWE-457/UninitializedVariables.qll index 14eec81ff58..804d6a48754 100644 --- a/cpp/ql/src/Security/CWE/CWE-457/UninitializedVariables.qll +++ b/cpp/ql/src/Security/CWE/CWE-457/UninitializedVariables.qll @@ -31,27 +31,28 @@ private predicate hasConditionalInitialization( class ConditionallyInitializedVariable extends LocalVariable { ConditionalInitializationCall call; ConditionalInitializationFunction f; - VariableAccess initAccess; Evidence e; ConditionallyInitializedVariable() { // Find a call that conditionally initializes this variable - hasConditionalInitialization(f, call, this, initAccess, e) and - // Ignore cases where the variable is assigned prior to the call - not reaches(this.getAnAssignedValue(), initAccess) and - // Ignore cases where the variable is assigned field-wise prior to the call. - not exists(FieldAccess fa | - exists(Assignment a | - fa = getAFieldAccess(this) and - a.getLValue() = fa + exists(VariableAccess initAccess | + hasConditionalInitialization(f, call, this, initAccess, e) and + // Ignore cases where the variable is assigned prior to the call + not reaches(this.getAnAssignedValue(), initAccess) and + // Ignore cases where the variable is assigned field-wise prior to the call. + not exists(FieldAccess fa | + exists(Assignment a | + fa = getAFieldAccess(this) and + a.getLValue() = fa + ) + | + reaches(fa, initAccess) + ) and + // Ignore cases where the variable is assigned by a prior call to an initialization function + not exists(Call c | + this.getAnAccess() = getAnInitializedArgument(c).(AddressOfExpr).getOperand() and + reaches(c, initAccess) ) - | - reaches(fa, initAccess) - ) and - // Ignore cases where the variable is assigned by a prior call to an initialization function - not exists(Call c | - this.getAnAccess() = getAnInitializedArgument(c).(AddressOfExpr).getOperand() and - reaches(c, initAccess) ) and /* * Static local variables with constant initializers do not have the initializer expr as part of diff --git a/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql b/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql index d4d908f8474..c03ae995090 100644 --- a/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql +++ b/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql @@ -41,7 +41,7 @@ predicate deleteMayThrow(DeleteOrDeleteArrayExpr deleteExpr) { } /** - * Holds if the function may throw an exception when called. That is, if the body of the function looks + * Holds if the function `f` may throw an exception when called. That is, if the body of the function looks * like it might throw an exception, and the function does not have a `noexcept` or `throw()` specifier. */ predicate functionMayThrow(Function f) { diff --git a/cpp/ql/src/change-notes/2025-08-20-add-customizations.md b/cpp/ql/src/change-notes/2025-08-20-add-customizations.md deleted file mode 100644 index 3a01298283c..00000000000 --- a/cpp/ql/src/change-notes/2025-08-20-add-customizations.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed an inconsistency across languages where most have a `Customizations.qll` file for adding customizations, but not all did. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2025-09-03-rename-api.md b/cpp/ql/src/change-notes/2025-09-03-rename-api.md new file mode 100644 index 00000000000..5fd788ef76f --- /dev/null +++ b/cpp/ql/src/change-notes/2025-09-03-rename-api.md @@ -0,0 +1,5 @@ +--- +category: fix +--- +* The predicate `occurenceCount` in the file module `MagicConstants` has been deprecated. Use `occurrenceCount` instead. +* The predicate `additionalAdditionOrSubstractionCheckForLeapYear` in the file module `LeapYear` has been deprecated. Use `additionalAdditionOrSubtractionCheckForLeapYear` instead. diff --git a/swift/ql/src/change-notes/2025-08-20-add-customizations.md b/cpp/ql/src/change-notes/released/1.4.7.md similarity index 82% rename from swift/ql/src/change-notes/2025-08-20-add-customizations.md rename to cpp/ql/src/change-notes/released/1.4.7.md index 3a01298283c..d3b9a12c798 100644 --- a/swift/ql/src/change-notes/2025-08-20-add-customizations.md +++ b/cpp/ql/src/change-notes/released/1.4.7.md @@ -1,4 +1,5 @@ ---- -category: fix ---- -* Fixed an inconsistency across languages where most have a `Customizations.qll` file for adding customizations, but not all did. \ No newline at end of file +## 1.4.7 + +### Bug Fixes + +* Fixed an inconsistency across languages where most have a `Customizations.qll` file for adding customizations, but not all did. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 3b00bbce928..163362bd632 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.6 +lastReleaseVersion: 1.4.7 diff --git a/cpp/ql/src/definitions.ql b/cpp/ql/src/definitions.ql index c12277eaf23..339b481f5f7 100644 --- a/cpp/ql/src/definitions.ql +++ b/cpp/ql/src/definitions.ql @@ -13,6 +13,6 @@ where def = definitionOf(e, kind) and // We need to exclude definitions for elements inside template instantiations, // as these often lead to multiple links to definitions from the same source location. - // LGTM does not support this behaviour. + // LGTM does not support this behavior. not e.isFromTemplateInstantiation(_) select e, def, kind diff --git a/cpp/ql/src/experimental/Likely Bugs/RedundantNullCheckParam.ql b/cpp/ql/src/experimental/Likely Bugs/RedundantNullCheckParam.ql index 36e42cae92a..ce3497bb965 100644 --- a/cpp/ql/src/experimental/Likely Bugs/RedundantNullCheckParam.ql +++ b/cpp/ql/src/experimental/Likely Bugs/RedundantNullCheckParam.ql @@ -47,7 +47,7 @@ where // for a function parameter unchecked.getTarget() = param and // this function parameter is not overwritten - count(param.getAnAssignment()) = 0 and + not exists(param.getAnAssignment()) and check.getTarget() = param and // which is once checked candidateResultChecked(check, eqop) and diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-1126/DeclarationOfVariableWithUnnecessarilyWideScope.ql b/cpp/ql/src/experimental/Security/CWE/CWE-1126/DeclarationOfVariableWithUnnecessarilyWideScope.ql index 136931f00ec..bbb219a22da 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-1126/DeclarationOfVariableWithUnnecessarilyWideScope.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-1126/DeclarationOfVariableWithUnnecessarilyWideScope.ql @@ -19,16 +19,17 @@ import cpp * Errors when using a variable declaration inside a loop. */ class DangerousWhileLoop extends WhileStmt { - Expr exp; Declaration dl; DangerousWhileLoop() { this = dl.getParentScope().(BlockStmt).getParent*() and - exp = this.getCondition().getAChild*() and - not exp instanceof PointerFieldAccess and - not exp instanceof ValueFieldAccess and - exp.(VariableAccess).getTarget().getName() = dl.getName() and - not exp.getParent*() instanceof FunctionCall + exists(Expr exp | + exp = this.getCondition().getAChild*() and + not exp instanceof PointerFieldAccess and + not exp instanceof ValueFieldAccess and + exp.(VariableAccess).getTarget().getName() = dl.getName() and + not exp.getParent*() instanceof FunctionCall + ) } Declaration getDeclaration() { result = dl } diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-125/DangerousWorksWithMultibyteOrWideCharacters.ql b/cpp/ql/src/experimental/Security/CWE/CWE-125/DangerousWorksWithMultibyteOrWideCharacters.ql index 6529bf6cdf8..74ac8e6da66 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-125/DangerousWorksWithMultibyteOrWideCharacters.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-125/DangerousWorksWithMultibyteOrWideCharacters.ql @@ -46,7 +46,7 @@ predicate exprMayBeString(Expr exp) { ) } -/** Holds if expression is constant or operator call `sizeof`. */ +/** Holds if expression `exp` is constant or operator call `sizeof`. */ predicate argConstOrSizeof(Expr exp) { exp.getValue().toInt() > 1 or exp.(SizeofTypeOperator).getTypeOperand().getSize() > 1 diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-243/IncorrectChangingWorkingDirectory.ql b/cpp/ql/src/experimental/Security/CWE/CWE-243/IncorrectChangingWorkingDirectory.ql index ce5f4dd00f8..9d61418fd77 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-243/IncorrectChangingWorkingDirectory.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-243/IncorrectChangingWorkingDirectory.ql @@ -15,7 +15,7 @@ import cpp import semmle.code.cpp.commons.Exclusions -/** Holds if a `fc` function call is available before or after a `chdir` function call. */ +/** Holds if a `fcp` function call is available before or after a `chdir` function call. */ predicate inExistsChdir(FunctionCall fcp) { exists(FunctionCall fctmp | ( @@ -29,7 +29,7 @@ predicate inExistsChdir(FunctionCall fcp) { ) } -/** Holds if a `fc` function call is available before or after a function call containing a `chdir` call. */ +/** Holds if a `fcp` function call is available before or after a function call containing a `chdir` call. */ predicate outExistsChdir(FunctionCall fcp) { exists(FunctionCall fctmp | exists(FunctionCall fctmp2 | diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-416/UseAfterExpiredLifetime.ql b/cpp/ql/src/experimental/Security/CWE/CWE-416/UseAfterExpiredLifetime.ql index ffcac802b6d..fec373ce521 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-416/UseAfterExpiredLifetime.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-416/UseAfterExpiredLifetime.ql @@ -266,7 +266,7 @@ class LifetimePointerType extends LifetimeIndirectionType { class FullExpr extends Expr { FullExpr() { // A full-expression is not a subexpression - not exists(Expr p | this.getParent() = p) + not this.getParent() instanceof Expr or // A sub-expression that is an unevaluated operand this.isUnevaluated() diff --git a/cpp/ql/src/external/DefectFilter.qll b/cpp/ql/src/external/DefectFilter.qll index ad786e9cbc9..a3719140741 100644 --- a/cpp/ql/src/external/DefectFilter.qll +++ b/cpp/ql/src/external/DefectFilter.qll @@ -5,8 +5,8 @@ import cpp /** * Holds if `id` in the opaque identifier of a result reported by query `queryPath`, * such that `message` is the associated message and the location of the result spans - * column `startcolumn` of line `startline` to column `endcolumn` of line `endline` - * in file `filepath`. + * column `startcol` of line `startline` to column `endcol` of line `endline` + * in file `file`. * * For more information, see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ diff --git a/cpp/ql/src/external/MetricFilter.qll b/cpp/ql/src/external/MetricFilter.qll index 0315cd23c8d..39475451b7a 100644 --- a/cpp/ql/src/external/MetricFilter.qll +++ b/cpp/ql/src/external/MetricFilter.qll @@ -5,8 +5,8 @@ import cpp /** * Holds if `id` in the opaque identifier of a result reported by query `queryPath`, * such that `value` is the reported metric value and the location of the result spans - * column `startcolumn` of line `startline` to column `endcolumn` of line `endline` - * in file `filepath`. + * column `startcol` of line `startline` to column `endcol` of line `endline` + * in file `file`. * * For more information, see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ diff --git a/cpp/ql/src/jsf/4.10 Classes/AV Rule 96.ql b/cpp/ql/src/jsf/4.10 Classes/AV Rule 96.ql index 67e01ffc7c0..4697af80c17 100644 --- a/cpp/ql/src/jsf/4.10 Classes/AV Rule 96.ql +++ b/cpp/ql/src/jsf/4.10 Classes/AV Rule 96.ql @@ -28,7 +28,7 @@ where exists(FunctionCall c, int i, Function f | c.getArgument(i) = e and c.getTarget() = f and - exists(Parameter p | f.getParameter(i) = p) and // varargs + exists(f.getParameter(i)) and // varargs baseElement(e.getType(), cl) and // only interested in arrays with classes not compatible(f.getParameter(i).getUnspecifiedType(), e.getUnspecifiedType()) ) diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 3e64a19c68b..18637c336b9 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.4.7-dev +version: 1.4.8-dev groups: - cpp - queries diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index c3085da03ab..630a4ca5ceb 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -24581,6 +24581,516 @@ ir.cpp: # 2776| Value = [CStyleCast] 42 # 2776| ValueCategory = prvalue # 2777| getStmt(2): [ReturnStmt] return ... +# 2779| [TopLevelFunction] void vla_sizeof_test(int, size_t, char) +# 2779| : +# 2779| getParameter(0): [Parameter] len1 +# 2779| Type = [IntType] int +# 2779| getParameter(1): [Parameter] len2 +# 2779| Type = [CTypedefType,Size_t] size_t +# 2779| getParameter(2): [Parameter] len3 +# 2779| Type = [PlainCharType] char +# 2779| getEntryPoint(): [BlockStmt] { ... } +# 2780| getStmt(0): [DeclStmt] declaration +# 2780| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp1 +# 2780| Type = [ArrayType] char[] +# 2780| getStmt(1): [VlaDimensionStmt] VLA dimension size +# 2780| getDimensionExpr(): [VariableAccess] len1 +# 2780| Type = [IntType] int +# 2780| ValueCategory = prvalue(load) +# 2780| getStmt(2): [VlaDeclStmt] VLA declaration +# 2781| getStmt(3): [DeclStmt] declaration +# 2781| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2781| Type = [CTypedefType,Size_t] size_t +# 2781| getVariable().getInitializer(): [Initializer] initializer for x +# 2781| getExpr(): [SizeofExprOperator] sizeof() +# 2781| Type = [LongType] unsigned long +# 2781| ValueCategory = prvalue +# 2781| getExprOperand(): [VariableAccess] tmp1 +# 2781| Type = [ArrayType] char[] +# 2781| ValueCategory = lvalue +# 2781| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2781| Type = [ArrayType] char[] +# 2781| ValueCategory = lvalue +# 2782| getStmt(4): [DeclStmt] declaration +# 2782| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp2 +# 2782| Type = [ArrayType] int[][] +# 2782| getStmt(5): [VlaDimensionStmt] VLA dimension size +# 2782| getDimensionExpr(): [VariableAccess] len1 +# 2782| Type = [IntType] int +# 2782| ValueCategory = prvalue(load) +# 2782| getStmt(6): [VlaDimensionStmt] VLA dimension size +# 2782| getDimensionExpr(): [VariableAccess] len2 +# 2782| Type = [CTypedefType,Size_t] size_t +# 2782| ValueCategory = prvalue(load) +# 2782| getStmt(7): [VlaDeclStmt] VLA declaration +# 2783| getStmt(8): [DeclStmt] declaration +# 2783| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2783| Type = [CTypedefType,Size_t] size_t +# 2783| getVariable().getInitializer(): [Initializer] initializer for y +# 2783| getExpr(): [SizeofExprOperator] sizeof() +# 2783| Type = [LongType] unsigned long +# 2783| ValueCategory = prvalue +# 2783| getExprOperand(): [VariableAccess] tmp2 +# 2783| Type = [ArrayType] int[][] +# 2783| ValueCategory = lvalue +# 2783| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2783| Type = [ArrayType] int[][] +# 2783| ValueCategory = lvalue +# 2784| getStmt(9): [DeclStmt] declaration +# 2784| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 2784| Type = [CTypedefType,Size_t] size_t +# 2784| getVariable().getInitializer(): [Initializer] initializer for z +# 2784| getExpr(): [SizeofExprOperator] sizeof() +# 2784| Type = [LongType] unsigned long +# 2784| ValueCategory = prvalue +# 2784| getExprOperand(): [PointerDereferenceExpr] * ... +# 2784| Type = [ArrayType] int[] +# 2784| ValueCategory = lvalue +# 2784| getOperand(): [VariableAccess] tmp2 +# 2784| Type = [ArrayType] int[][] +# 2784| ValueCategory = lvalue +# 2784| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2784| Type = [PointerType] int(*)[] +# 2784| ValueCategory = prvalue +# 2784| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2784| Type = [ArrayType] int[] +# 2784| ValueCategory = lvalue +# 2785| getStmt(10): [DeclStmt] declaration +# 2785| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp3 +# 2785| Type = [ArrayType] int[][][] +# 2785| getStmt(11): [VlaDimensionStmt] VLA dimension size +# 2785| getDimensionExpr(): [VariableAccess] len1 +# 2785| Type = [IntType] int +# 2785| ValueCategory = prvalue(load) +# 2785| getStmt(12): [VlaDimensionStmt] VLA dimension size +# 2785| getDimensionExpr(): [VariableAccess] len2 +# 2785| Type = [CTypedefType,Size_t] size_t +# 2785| ValueCategory = prvalue(load) +# 2785| getStmt(13): [VlaDimensionStmt] VLA dimension size +# 2785| getDimensionExpr(): [VariableAccess] len3 +# 2785| Type = [PlainCharType] char +# 2785| ValueCategory = prvalue(load) +# 2785| getStmt(14): [VlaDeclStmt] VLA declaration +# 2786| getStmt(15): [DeclStmt] declaration +# 2786| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 2786| Type = [CTypedefType,Size_t] size_t +# 2786| getVariable().getInitializer(): [Initializer] initializer for w +# 2786| getExpr(): [SizeofExprOperator] sizeof() +# 2786| Type = [LongType] unsigned long +# 2786| ValueCategory = prvalue +# 2786| getExprOperand(): [VariableAccess] tmp3 +# 2786| Type = [ArrayType] int[][][] +# 2786| ValueCategory = lvalue +# 2786| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2786| Type = [ArrayType] int[][][] +# 2786| ValueCategory = lvalue +# 2787| getStmt(16): [DeclStmt] declaration +# 2787| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 2787| Type = [CTypedefType,Size_t] size_t +# 2787| getVariable().getInitializer(): [Initializer] initializer for v +# 2787| getExpr(): [SizeofExprOperator] sizeof() +# 2787| Type = [LongType] unsigned long +# 2787| ValueCategory = prvalue +# 2787| getExprOperand(): [PointerDereferenceExpr] * ... +# 2787| Type = [ArrayType] int[][] +# 2787| ValueCategory = lvalue +# 2787| getOperand(): [VariableAccess] tmp3 +# 2787| Type = [ArrayType] int[][][] +# 2787| ValueCategory = lvalue +# 2787| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2787| Type = [PointerType] int(*)[][] +# 2787| ValueCategory = prvalue +# 2787| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2787| Type = [ArrayType] int[][] +# 2787| ValueCategory = lvalue +# 2788| getStmt(17): [DeclStmt] declaration +# 2788| getDeclarationEntry(0): [VariableDeclarationEntry] definition of u +# 2788| Type = [CTypedefType,Size_t] size_t +# 2788| getVariable().getInitializer(): [Initializer] initializer for u +# 2788| getExpr(): [SizeofExprOperator] sizeof() +# 2788| Type = [LongType] unsigned long +# 2788| ValueCategory = prvalue +# 2788| getExprOperand(): [PointerDereferenceExpr] * ... +# 2788| Type = [ArrayType] int[] +# 2788| ValueCategory = lvalue +# 2788| getOperand(): [PointerDereferenceExpr] * ... +# 2788| Type = [ArrayType] int[][] +# 2788| ValueCategory = lvalue +# 2788| getOperand(): [VariableAccess] tmp3 +# 2788| Type = [ArrayType] int[][][] +# 2788| ValueCategory = lvalue +# 2788| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2788| Type = [PointerType] int(*)[][] +# 2788| ValueCategory = prvalue +# 2788| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2788| Type = [PointerType] int(*)[] +# 2788| ValueCategory = prvalue +# 2788| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2788| Type = [ArrayType] int[] +# 2788| ValueCategory = lvalue +# 2789| getStmt(18): [DeclStmt] declaration +# 2789| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t +# 2789| Type = [CTypedefType,Size_t] size_t +# 2789| getVariable().getInitializer(): [Initializer] initializer for t +# 2789| getExpr(): [SizeofExprOperator] sizeof() +# 2789| Type = [LongType] unsigned long +# 2789| Value = [SizeofExprOperator] 4 +# 2789| ValueCategory = prvalue +# 2789| getExprOperand(): [PointerDereferenceExpr] * ... +# 2789| Type = [IntType] int +# 2789| ValueCategory = lvalue +# 2789| getOperand(): [PointerDereferenceExpr] * ... +# 2789| Type = [ArrayType] int[] +# 2789| ValueCategory = lvalue +# 2789| getOperand(): [PointerDereferenceExpr] * ... +# 2789| Type = [ArrayType] int[][] +# 2789| ValueCategory = lvalue +# 2789| getOperand(): [VariableAccess] tmp3 +# 2789| Type = [ArrayType] int[][][] +# 2789| ValueCategory = lvalue +# 2789| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2789| Type = [PointerType] int(*)[][] +# 2789| ValueCategory = prvalue +# 2789| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2789| Type = [PointerType] int(*)[] +# 2789| ValueCategory = prvalue +# 2789| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2789| Type = [IntPointerType] int * +# 2789| ValueCategory = prvalue +# 2789| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2789| Type = [IntType] int +# 2789| ValueCategory = lvalue +# 2790| getStmt(19): [ReturnStmt] return ... +# 2792| [TopLevelFunction] void vla_sizeof_test2(int, size_t, char) +# 2792| : +# 2792| getParameter(0): [Parameter] len1 +# 2792| Type = [IntType] int +# 2792| getParameter(1): [Parameter] len2 +# 2792| Type = [CTypedefType,Size_t] size_t +# 2792| getParameter(2): [Parameter] len3 +# 2792| Type = [PlainCharType] char +# 2792| getEntryPoint(): [BlockStmt] { ... } +# 2793| getStmt(0): [DeclStmt] declaration +# 2793| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp1 +# 2793| Type = [ArrayType] int[][] +# 2793| getStmt(1): [VlaDimensionStmt] VLA dimension size +# 2793| getDimensionExpr(): [VariableAccess] len1 +# 2793| Type = [IntType] int +# 2793| ValueCategory = prvalue(load) +# 2793| getStmt(2): [VlaDimensionStmt] VLA dimension size +# 2793| getDimensionExpr(): [VariableAccess] len2 +# 2793| Type = [CTypedefType,Size_t] size_t +# 2793| ValueCategory = prvalue(load) +# 2793| getStmt(3): [VlaDeclStmt] VLA declaration +# 2794| getStmt(4): [DeclStmt] declaration +# 2794| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 2794| Type = [CTypedefType,Size_t] size_t +# 2794| getVariable().getInitializer(): [Initializer] initializer for z +# 2794| getExpr(): [SizeofExprOperator] sizeof() +# 2794| Type = [LongType] unsigned long +# 2794| ValueCategory = prvalue +# 2794| getExprOperand(): [ArrayExpr] access to array +# 2794| Type = [ArrayType] int[] +# 2794| ValueCategory = lvalue +# 2794| getArrayBase(): [VariableAccess] tmp1 +# 2794| Type = [ArrayType] int[][] +# 2794| ValueCategory = lvalue +# 2794| getArrayOffset(): [Literal] 1 +# 2794| Type = [IntType] int +# 2794| Value = [Literal] 1 +# 2794| ValueCategory = prvalue +# 2794| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2794| Type = [PointerType] int(*)[] +# 2794| ValueCategory = prvalue +# 2794| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2794| Type = [ArrayType] int[] +# 2794| ValueCategory = lvalue +# 2795| getStmt(5): [DeclStmt] declaration +# 2795| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp2 +# 2795| Type = [ArrayType] int[][][] +# 2795| getStmt(6): [VlaDimensionStmt] VLA dimension size +# 2795| getDimensionExpr(): [VariableAccess] len1 +# 2795| Type = [IntType] int +# 2795| ValueCategory = prvalue(load) +# 2795| getStmt(7): [VlaDimensionStmt] VLA dimension size +# 2795| getDimensionExpr(): [VariableAccess] len2 +# 2795| Type = [CTypedefType,Size_t] size_t +# 2795| ValueCategory = prvalue(load) +# 2795| getStmt(8): [VlaDimensionStmt] VLA dimension size +# 2795| getDimensionExpr(): [VariableAccess] len3 +# 2795| Type = [PlainCharType] char +# 2795| ValueCategory = prvalue(load) +# 2795| getStmt(9): [VlaDeclStmt] VLA declaration +# 2796| getStmt(10): [DeclStmt] declaration +# 2796| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 2796| Type = [CTypedefType,Size_t] size_t +# 2796| getVariable().getInitializer(): [Initializer] initializer for v +# 2796| getExpr(): [SizeofExprOperator] sizeof() +# 2796| Type = [LongType] unsigned long +# 2796| ValueCategory = prvalue +# 2796| getExprOperand(): [ArrayExpr] access to array +# 2796| Type = [ArrayType] int[][] +# 2796| ValueCategory = lvalue +# 2796| getArrayBase(): [VariableAccess] tmp2 +# 2796| Type = [ArrayType] int[][][] +# 2796| ValueCategory = lvalue +# 2796| getArrayOffset(): [Literal] 1 +# 2796| Type = [IntType] int +# 2796| Value = [Literal] 1 +# 2796| ValueCategory = prvalue +# 2796| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2796| Type = [PointerType] int(*)[][] +# 2796| ValueCategory = prvalue +# 2796| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2796| Type = [ArrayType] int[][] +# 2796| ValueCategory = lvalue +# 2797| getStmt(11): [DeclStmt] declaration +# 2797| getDeclarationEntry(0): [VariableDeclarationEntry] definition of u +# 2797| Type = [CTypedefType,Size_t] size_t +# 2797| getVariable().getInitializer(): [Initializer] initializer for u +# 2797| getExpr(): [SizeofExprOperator] sizeof() +# 2797| Type = [LongType] unsigned long +# 2797| ValueCategory = prvalue +# 2797| getExprOperand(): [ArrayExpr] access to array +# 2797| Type = [ArrayType] int[] +# 2797| ValueCategory = lvalue +# 2797| getArrayBase(): [ArrayExpr] access to array +# 2797| Type = [ArrayType] int[][] +# 2797| ValueCategory = lvalue +# 2797| getArrayBase(): [VariableAccess] tmp2 +# 2797| Type = [ArrayType] int[][][] +# 2797| ValueCategory = lvalue +# 2797| getArrayOffset(): [Literal] 1 +# 2797| Type = [IntType] int +# 2797| Value = [Literal] 1 +# 2797| ValueCategory = prvalue +# 2797| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2797| Type = [PointerType] int(*)[][] +# 2797| ValueCategory = prvalue +# 2797| getArrayOffset(): [Literal] 2 +# 2797| Type = [IntType] int +# 2797| Value = [Literal] 2 +# 2797| ValueCategory = prvalue +# 2797| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2797| Type = [PointerType] int(*)[] +# 2797| ValueCategory = prvalue +# 2797| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2797| Type = [ArrayType] int[] +# 2797| ValueCategory = lvalue +# 2798| getStmt(12): [DeclStmt] declaration +# 2798| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t +# 2798| Type = [CTypedefType,Size_t] size_t +# 2798| getVariable().getInitializer(): [Initializer] initializer for t +# 2798| getExpr(): [SizeofExprOperator] sizeof() +# 2798| Type = [LongType] unsigned long +# 2798| Value = [SizeofExprOperator] 4 +# 2798| ValueCategory = prvalue +# 2798| getExprOperand(): [ArrayExpr] access to array +# 2798| Type = [IntType] int +# 2798| ValueCategory = lvalue +# 2798| getArrayBase(): [ArrayExpr] access to array +# 2798| Type = [ArrayType] int[] +# 2798| ValueCategory = lvalue +# 2798| getArrayBase(): [ArrayExpr] access to array +# 2798| Type = [ArrayType] int[][] +# 2798| ValueCategory = lvalue +# 2798| getArrayBase(): [VariableAccess] tmp2 +# 2798| Type = [ArrayType] int[][][] +# 2798| ValueCategory = lvalue +# 2798| getArrayOffset(): [Literal] 1 +# 2798| Type = [IntType] int +# 2798| Value = [Literal] 1 +# 2798| ValueCategory = prvalue +# 2798| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2798| Type = [PointerType] int(*)[][] +# 2798| ValueCategory = prvalue +# 2798| getArrayOffset(): [Literal] 2 +# 2798| Type = [IntType] int +# 2798| Value = [Literal] 2 +# 2798| ValueCategory = prvalue +# 2798| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2798| Type = [PointerType] int(*)[] +# 2798| ValueCategory = prvalue +# 2798| getArrayOffset(): [Literal] 3 +# 2798| Type = [IntType] int +# 2798| Value = [Literal] 3 +# 2798| ValueCategory = prvalue +# 2798| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2798| Type = [IntPointerType] int * +# 2798| ValueCategory = prvalue +# 2798| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2798| Type = [IntType] int +# 2798| ValueCategory = lvalue +# 2799| getStmt(13): [ReturnStmt] return ... +# 2801| [TopLevelFunction] size_t vla_sizeof_test3(int, size_t, char, bool) +# 2801| : +# 2801| getParameter(0): [Parameter] len1 +# 2801| Type = [IntType] int +# 2801| getParameter(1): [Parameter] len2 +# 2801| Type = [CTypedefType,Size_t] size_t +# 2801| getParameter(2): [Parameter] len3 +# 2801| Type = [PlainCharType] char +# 2801| getParameter(3): [Parameter] b +# 2801| Type = [BoolType] bool +# 2801| getEntryPoint(): [BlockStmt] { ... } +# 2802| getStmt(0): [DeclStmt] declaration +# 2802| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of arr +# 2802| Type = [CTypedefType,LocalTypedefType] arr +# 2802| getStmt(1): [VlaDimensionStmt] VLA dimension size +# 2802| getDimensionExpr(): [VariableAccess] len1 +# 2802| Type = [IntType] int +# 2802| ValueCategory = prvalue(load) +# 2802| getStmt(2): [VlaDimensionStmt] VLA dimension size +# 2802| getDimensionExpr(): [VariableAccess] len2 +# 2802| Type = [CTypedefType,Size_t] size_t +# 2802| ValueCategory = prvalue(load) +# 2802| getStmt(3): [VlaDeclStmt] VLA declaration +# 2803| getStmt(4): [DeclStmt] declaration +# 2803| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of arr2 +# 2803| Type = [CTypedefType,LocalTypedefType] arr2 +# 2803| getStmt(5): [VlaDeclStmt] VLA declaration +# 2804| getStmt(6): [DeclStmt] declaration +# 2804| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of arr3 +# 2804| Type = [CTypedefType,LocalTypedefType] arr3 +# 2804| getStmt(7): [VlaDimensionStmt] VLA dimension size +# 2804| getDimensionExpr(): [VariableAccess] len3 +# 2804| Type = [PlainCharType] char +# 2804| ValueCategory = prvalue(load) +# 2804| getStmt(8): [VlaDeclStmt] VLA declaration +# 2806| getStmt(9): [IfStmt] if (...) ... +# 2806| getCondition(): [VariableAccess] b +# 2806| Type = [BoolType] bool +# 2806| ValueCategory = prvalue(load) +# 2806| getThen(): [BlockStmt] { ... } +# 2807| getStmt(0): [DeclStmt] declaration +# 2807| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp +# 2807| Type = [CTypedefType,LocalTypedefType] arr3 +# 2807| getStmt(1): [VlaDeclStmt] VLA declaration +# 2808| getStmt(2): [ReturnStmt] return ... +# 2808| getExpr(): [SizeofExprOperator] sizeof() +# 2808| Type = [LongType] unsigned long +# 2808| ValueCategory = prvalue +# 2808| getExprOperand(): [ArrayExpr] access to array +# 2808| Type = [CTypedefType,LocalTypedefType] arr2 +# 2808| ValueCategory = lvalue +# 2808| getArrayBase(): [VariableAccess] tmp +# 2808| Type = [CTypedefType,LocalTypedefType] arr3 +# 2808| ValueCategory = lvalue +# 2808| getArrayOffset(): [Literal] 1 +# 2808| Type = [IntType] int +# 2808| Value = [Literal] 1 +# 2808| ValueCategory = prvalue +# 2808| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2808| Type = [PointerType] arr2 * +# 2808| ValueCategory = prvalue +# 2808| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2808| Type = [CTypedefType,LocalTypedefType] arr2 +# 2808| ValueCategory = lvalue +# 2811| getStmt(10): [ReturnStmt] return ... +# 2811| getExpr(): [Literal] 0 +# 2811| Type = [IntType] int +# 2811| Value = [Literal] 0 +# 2811| ValueCategory = prvalue +# 2811| getExpr().getFullyConverted(): [CStyleCast] (size_t)... +# 2811| Conversion = [IntegralConversion] integral conversion +# 2811| Type = [CTypedefType,Size_t] size_t +# 2811| Value = [CStyleCast] 0 +# 2811| ValueCategory = prvalue +# 2814| [TopLevelFunction] void vla_sizeof_test4(int, size_t) +# 2814| : +# 2814| getParameter(0): [Parameter] len1 +# 2814| Type = [IntType] int +# 2814| getParameter(1): [Parameter] len2 +# 2814| Type = [CTypedefType,Size_t] size_t +# 2814| getEntryPoint(): [BlockStmt] { ... } +# 2815| getStmt(0): [DeclStmt] declaration +# 2815| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp1 +# 2815| Type = [ArrayType] int[][] +# 2815| getStmt(1): [VlaDimensionStmt] VLA dimension size +# 2815| getDimensionExpr(): [VariableAccess] len1 +# 2815| Type = [IntType] int +# 2815| ValueCategory = prvalue(load) +# 2815| getStmt(2): [VlaDimensionStmt] VLA dimension size +# 2815| getDimensionExpr(): [VariableAccess] len2 +# 2815| Type = [CTypedefType,Size_t] size_t +# 2815| ValueCategory = prvalue(load) +# 2815| getStmt(3): [VlaDeclStmt] VLA declaration +# 2816| getStmt(4): [DeclStmt] declaration +# 2816| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 2816| Type = [CTypedefType,Size_t] size_t +# 2816| getVariable().getInitializer(): [Initializer] initializer for z +# 2816| getExpr(): [SizeofExprOperator] sizeof() +# 2816| Type = [LongType] unsigned long +# 2816| ValueCategory = prvalue +# 2816| getExprOperand(): [ArrayExpr] access to array +# 2816| Type = [ArrayType] int[] +# 2816| ValueCategory = lvalue +# 2816| getArrayBase(): [VariableAccess] tmp1 +# 2816| Type = [ArrayType] int[][] +# 2816| ValueCategory = lvalue +# 2816| getArrayOffset(): [Literal] 1 +# 2816| Type = [IntType] int +# 2816| Value = [Literal] 1 +# 2816| ValueCategory = prvalue +# 2816| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2816| Type = [PointerType] int(*)[] +# 2816| ValueCategory = prvalue +# 2816| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2816| Type = [ArrayType] int[] +# 2816| ValueCategory = lvalue +# 2817| getStmt(5): [ReturnStmt] return ... +# 2819| [TopLevelFunction] void vla_sizeof_test5(int, size_t) +# 2819| : +# 2819| getParameter(0): [Parameter] len1 +# 2819| Type = [IntType] int +# 2819| getParameter(1): [Parameter] len2 +# 2819| Type = [CTypedefType,Size_t] size_t +# 2819| getEntryPoint(): [BlockStmt] { ... } +# 2820| getStmt(0): [DeclStmt] declaration +# 2820| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp1 +# 2820| Type = [ArrayType] int[][] +# 2820| getStmt(1): [VlaDimensionStmt] VLA dimension size +# 2820| getDimensionExpr(): [VariableAccess] len1 +# 2820| Type = [IntType] int +# 2820| ValueCategory = prvalue(load) +# 2820| getStmt(2): [VlaDimensionStmt] VLA dimension size +# 2820| getDimensionExpr(): [VariableAccess] len2 +# 2820| Type = [CTypedefType,Size_t] size_t +# 2820| ValueCategory = prvalue(load) +# 2820| getStmt(3): [VlaDeclStmt] VLA declaration +# 2821| getStmt(4): [DeclStmt] declaration +# 2821| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 2821| Type = [CTypedefType,Size_t] size_t +# 2821| getVariable().getInitializer(): [Initializer] initializer for z +# 2821| getExpr(): [SizeofExprOperator] sizeof() +# 2821| Type = [LongType] unsigned long +# 2821| ValueCategory = prvalue +# 2821| getExprOperand(): [ArrayExpr] access to array +# 2821| Type = [ArrayType] int[] +# 2821| ValueCategory = lvalue +# 2821| getArrayBase(): [PointerDereferenceExpr] * ... +# 2821| Type = [ArrayType] int[][] +# 2821| ValueCategory = lvalue +# 2821| getOperand(): [AddressOfExpr] & ... +# 2821| Type = [PointerType] int(*)[][] +# 2821| ValueCategory = prvalue +# 2821| getOperand(): [VariableAccess] tmp1 +# 2821| Type = [ArrayType] int[][] +# 2821| ValueCategory = lvalue +# 2821| getArrayOffset(): [Literal] 1 +# 2821| Type = [IntType] int +# 2821| Value = [Literal] 1 +# 2821| ValueCategory = prvalue +# 2821| getArrayBase().getFullyConverted(): [ParenthesisExpr] (...) +# 2821| Type = [PointerType] int(*)[] +# 2821| ValueCategory = prvalue +# 2821| getExpr(): [ArrayToPointerConversion] array to pointer conversion +# 2821| Type = [PointerType] int(*)[] +# 2821| ValueCategory = prvalue +# 2821| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2821| Type = [ArrayType] int[] +# 2821| ValueCategory = lvalue +# 2822| getStmt(5): [ReturnStmt] return ... ir23.cpp: # 1| [TopLevelFunction] bool consteval_1() # 1| : diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index d8babdb54e2..566cf07423b 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -20430,6 +20430,247 @@ ir.cpp: # 2774| v2774_6(void) = AliasedUse : ~m2776_6 # 2774| v2774_7(void) = ExitFunction : +# 2779| void vla_sizeof_test(int, size_t, char) +# 2779| Block 0 +# 2779| v2779_1(void) = EnterFunction : +# 2779| m2779_2(unknown) = AliasedDefinition : +# 2779| m2779_3(unknown) = InitializeNonLocal : +# 2779| m2779_4(unknown) = Chi : total:m2779_2, partial:m2779_3 +# 2779| r2779_5(glval) = VariableAddress[len1] : +# 2779| m2779_6(int) = InitializeParameter[len1] : &:r2779_5 +# 2779| r2779_7(glval) = VariableAddress[len2] : +# 2779| m2779_8(unsigned long) = InitializeParameter[len2] : &:r2779_7 +# 2779| r2779_9(glval) = VariableAddress[len3] : +# 2779| m2779_10(char) = InitializeParameter[len3] : &:r2779_9 +# 2780| r2780_1(glval) = VariableAddress[tmp1] : +# 2780| m2780_2(char[]) = Uninitialized[tmp1] : &:r2780_1 +# 2780| r2780_3(glval) = VariableAddress[len1] : +# 2780| r2780_4(int) = Load[len1] : &:r2780_3, m2779_6 +# 2780| v2780_5(void) = NoOp : +# 2781| r2781_1(glval) = VariableAddress[x] : +# 2781| r2781_2(unsigned long) = Constant[1] : +# 2781| r2781_3(unsigned long) = Convert : r2780_4 +# 2781| r2781_4(unsigned long) = Mul : r2781_2, r2781_3 +# 2781| m2781_5(unsigned long) = Store[x] : &:r2781_1, r2781_4 +# 2782| r2782_1(glval) = VariableAddress[tmp2] : +# 2782| m2782_2(int[][]) = Uninitialized[tmp2] : &:r2782_1 +# 2782| r2782_3(glval) = VariableAddress[len1] : +# 2782| r2782_4(int) = Load[len1] : &:r2782_3, m2779_6 +# 2782| r2782_5(glval) = VariableAddress[len2] : +# 2782| r2782_6(unsigned long) = Load[len2] : &:r2782_5, m2779_8 +# 2782| v2782_7(void) = NoOp : +# 2783| r2783_1(glval) = VariableAddress[y] : +# 2783| r2783_2(unsigned long) = Constant[4] : +# 2783| r2783_3(unsigned long) = Convert : r2782_4 +# 2783| r2783_4(unsigned long) = Mul : r2783_2, r2783_3 +# 2783| r2783_5(unsigned long) = CopyValue : r2782_6 +# 2783| r2783_6(unsigned long) = Mul : r2783_4, r2783_5 +# 2783| m2783_7(unsigned long) = Store[y] : &:r2783_1, r2783_6 +# 2784| r2784_1(glval) = VariableAddress[z] : +# 2784| r2784_2(unsigned long) = Constant[4] : +# 2784| r2784_3(unsigned long) = CopyValue : r2782_6 +# 2784| r2784_4(unsigned long) = Mul : r2784_2, r2784_3 +# 2784| m2784_5(unsigned long) = Store[z] : &:r2784_1, r2784_4 +# 2785| r2785_1(glval) = VariableAddress[tmp3] : +# 2785| m2785_2(int[][][]) = Uninitialized[tmp3] : &:r2785_1 +# 2785| r2785_3(glval) = VariableAddress[len1] : +# 2785| r2785_4(int) = Load[len1] : &:r2785_3, m2779_6 +# 2785| r2785_5(glval) = VariableAddress[len2] : +# 2785| r2785_6(unsigned long) = Load[len2] : &:r2785_5, m2779_8 +# 2785| r2785_7(glval) = VariableAddress[len3] : +# 2785| r2785_8(char) = Load[len3] : &:r2785_7, m2779_10 +# 2785| v2785_9(void) = NoOp : +# 2786| r2786_1(glval) = VariableAddress[w] : +# 2786| r2786_2(unsigned long) = Constant[4] : +# 2786| r2786_3(unsigned long) = Convert : r2785_4 +# 2786| r2786_4(unsigned long) = Mul : r2786_2, r2786_3 +# 2786| r2786_5(unsigned long) = CopyValue : r2785_6 +# 2786| r2786_6(unsigned long) = Mul : r2786_4, r2786_5 +# 2786| r2786_7(unsigned long) = Convert : r2785_8 +# 2786| r2786_8(unsigned long) = Mul : r2786_6, r2786_7 +# 2786| m2786_9(unsigned long) = Store[w] : &:r2786_1, r2786_8 +# 2787| r2787_1(glval) = VariableAddress[v] : +# 2787| r2787_2(unsigned long) = Constant[4] : +# 2787| r2787_3(unsigned long) = CopyValue : r2785_6 +# 2787| r2787_4(unsigned long) = Mul : r2787_2, r2787_3 +# 2787| r2787_5(unsigned long) = Convert : r2785_8 +# 2787| r2787_6(unsigned long) = Mul : r2787_4, r2787_5 +# 2787| m2787_7(unsigned long) = Store[v] : &:r2787_1, r2787_6 +# 2788| r2788_1(glval) = VariableAddress[u] : +# 2788| r2788_2(unsigned long) = Constant[4] : +# 2788| r2788_3(unsigned long) = Convert : r2785_8 +# 2788| r2788_4(unsigned long) = Mul : r2788_2, r2788_3 +# 2788| m2788_5(unsigned long) = Store[u] : &:r2788_1, r2788_4 +# 2789| r2789_1(glval) = VariableAddress[t] : +# 2789| r2789_2(unsigned long) = Constant[4] : +# 2789| m2789_3(unsigned long) = Store[t] : &:r2789_1, r2789_2 +# 2790| v2790_1(void) = NoOp : +# 2779| v2779_11(void) = ReturnVoid : +# 2779| v2779_12(void) = AliasedUse : m2779_3 +# 2779| v2779_13(void) = ExitFunction : + +# 2792| void vla_sizeof_test2(int, size_t, char) +# 2792| Block 0 +# 2792| v2792_1(void) = EnterFunction : +# 2792| m2792_2(unknown) = AliasedDefinition : +# 2792| m2792_3(unknown) = InitializeNonLocal : +# 2792| m2792_4(unknown) = Chi : total:m2792_2, partial:m2792_3 +# 2792| r2792_5(glval) = VariableAddress[len1] : +# 2792| m2792_6(int) = InitializeParameter[len1] : &:r2792_5 +# 2792| r2792_7(glval) = VariableAddress[len2] : +# 2792| m2792_8(unsigned long) = InitializeParameter[len2] : &:r2792_7 +# 2792| r2792_9(glval) = VariableAddress[len3] : +# 2792| m2792_10(char) = InitializeParameter[len3] : &:r2792_9 +# 2793| r2793_1(glval) = VariableAddress[tmp1] : +# 2793| m2793_2(int[][]) = Uninitialized[tmp1] : &:r2793_1 +# 2793| r2793_3(glval) = VariableAddress[len1] : +# 2793| r2793_4(int) = Load[len1] : &:r2793_3, m2792_6 +# 2793| r2793_5(glval) = VariableAddress[len2] : +# 2793| r2793_6(unsigned long) = Load[len2] : &:r2793_5, m2792_8 +# 2793| v2793_7(void) = NoOp : +# 2794| r2794_1(glval) = VariableAddress[z] : +# 2794| r2794_2(unsigned long) = Constant[4] : +# 2794| r2794_3(unsigned long) = CopyValue : r2793_6 +# 2794| r2794_4(unsigned long) = Mul : r2794_2, r2794_3 +# 2794| m2794_5(unsigned long) = Store[z] : &:r2794_1, r2794_4 +# 2795| r2795_1(glval) = VariableAddress[tmp2] : +# 2795| m2795_2(int[][][]) = Uninitialized[tmp2] : &:r2795_1 +# 2795| r2795_3(glval) = VariableAddress[len1] : +# 2795| r2795_4(int) = Load[len1] : &:r2795_3, m2792_6 +# 2795| r2795_5(glval) = VariableAddress[len2] : +# 2795| r2795_6(unsigned long) = Load[len2] : &:r2795_5, m2792_8 +# 2795| r2795_7(glval) = VariableAddress[len3] : +# 2795| r2795_8(char) = Load[len3] : &:r2795_7, m2792_10 +# 2795| v2795_9(void) = NoOp : +# 2796| r2796_1(glval) = VariableAddress[v] : +# 2796| r2796_2(unsigned long) = Constant[4] : +# 2796| r2796_3(unsigned long) = CopyValue : r2795_6 +# 2796| r2796_4(unsigned long) = Mul : r2796_2, r2796_3 +# 2796| r2796_5(unsigned long) = Convert : r2795_8 +# 2796| r2796_6(unsigned long) = Mul : r2796_4, r2796_5 +# 2796| m2796_7(unsigned long) = Store[v] : &:r2796_1, r2796_6 +# 2797| r2797_1(glval) = VariableAddress[u] : +# 2797| r2797_2(unsigned long) = Constant[4] : +# 2797| r2797_3(unsigned long) = Convert : r2795_8 +# 2797| r2797_4(unsigned long) = Mul : r2797_2, r2797_3 +# 2797| m2797_5(unsigned long) = Store[u] : &:r2797_1, r2797_4 +# 2798| r2798_1(glval) = VariableAddress[t] : +# 2798| r2798_2(unsigned long) = Constant[4] : +# 2798| m2798_3(unsigned long) = Store[t] : &:r2798_1, r2798_2 +# 2799| v2799_1(void) = NoOp : +# 2792| v2792_11(void) = ReturnVoid : +# 2792| v2792_12(void) = AliasedUse : m2792_3 +# 2792| v2792_13(void) = ExitFunction : + +# 2801| size_t vla_sizeof_test3(int, size_t, char, bool) +# 2801| Block 0 +# 2801| v2801_1(void) = EnterFunction : +# 2801| m2801_2(unknown) = AliasedDefinition : +# 2801| m2801_3(unknown) = InitializeNonLocal : +# 2801| m2801_4(unknown) = Chi : total:m2801_2, partial:m2801_3 +# 2801| r2801_5(glval) = VariableAddress[len1] : +# 2801| m2801_6(int) = InitializeParameter[len1] : &:r2801_5 +# 2801| r2801_7(glval) = VariableAddress[len2] : +# 2801| m2801_8(unsigned long) = InitializeParameter[len2] : &:r2801_7 +# 2801| r2801_9(glval) = VariableAddress[len3] : +# 2801| m2801_10(char) = InitializeParameter[len3] : &:r2801_9 +# 2801| r2801_11(glval) = VariableAddress[b] : +# 2801| m2801_12(bool) = InitializeParameter[b] : &:r2801_11 +# 2802| r2802_1(glval) = VariableAddress[len1] : +# 2802| r2802_2(int) = Load[len1] : &:r2802_1, m2801_6 +# 2802| r2802_3(glval) = VariableAddress[len2] : +# 2802| r2802_4(unsigned long) = Load[len2] : &:r2802_3, m2801_8 +# 2802| v2802_5(void) = NoOp : +# 2803| v2803_1(void) = NoOp : +# 2804| r2804_1(glval) = VariableAddress[len3] : +# 2804| r2804_2(char) = Load[len3] : &:r2804_1, m2801_10 +# 2804| v2804_3(void) = NoOp : +# 2806| r2806_1(glval) = VariableAddress[b] : +# 2806| r2806_2(bool) = Load[b] : &:r2806_1, m2801_12 +# 2806| v2806_3(void) = ConditionalBranch : r2806_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2801| Block 1 +# 2801| m2801_13(unsigned long) = Phi : from 2:m2808_7, from 3:m2811_3 +# 2801| r2801_14(glval) = VariableAddress[#return] : +# 2801| v2801_15(void) = ReturnValue : &:r2801_14, m2801_13 +# 2801| v2801_16(void) = AliasedUse : m2801_3 +# 2801| v2801_17(void) = ExitFunction : + +# 2807| Block 2 +# 2807| r2807_1(glval) = VariableAddress[tmp] : +# 2807| m2807_2(long[][][]) = Uninitialized[tmp] : &:r2807_1 +# 2807| v2807_3(void) = NoOp : +# 2808| r2808_1(glval) = VariableAddress[#return] : +# 2808| r2808_2(unsigned long) = Constant[8] : +# 2808| r2808_3(unsigned long) = Convert : r2802_2 +# 2808| r2808_4(unsigned long) = Mul : r2808_2, r2808_3 +# 2808| r2808_5(unsigned long) = CopyValue : r2802_4 +# 2808| r2808_6(unsigned long) = Mul : r2808_4, r2808_5 +# 2808| m2808_7(unsigned long) = Store[#return] : &:r2808_1, r2808_6 +#-----| Goto -> Block 1 + +# 2811| Block 3 +# 2811| r2811_1(glval) = VariableAddress[#return] : +# 2811| r2811_2(unsigned long) = Constant[0] : +# 2811| m2811_3(unsigned long) = Store[#return] : &:r2811_1, r2811_2 +#-----| Goto -> Block 1 + +# 2814| void vla_sizeof_test4(int, size_t) +# 2814| Block 0 +# 2814| v2814_1(void) = EnterFunction : +# 2814| m2814_2(unknown) = AliasedDefinition : +# 2814| m2814_3(unknown) = InitializeNonLocal : +# 2814| m2814_4(unknown) = Chi : total:m2814_2, partial:m2814_3 +# 2814| r2814_5(glval) = VariableAddress[len1] : +# 2814| m2814_6(int) = InitializeParameter[len1] : &:r2814_5 +# 2814| r2814_7(glval) = VariableAddress[len2] : +# 2814| m2814_8(unsigned long) = InitializeParameter[len2] : &:r2814_7 +# 2815| r2815_1(glval) = VariableAddress[tmp1] : +# 2815| m2815_2(int[][]) = Uninitialized[tmp1] : &:r2815_1 +# 2815| r2815_3(glval) = VariableAddress[len1] : +# 2815| r2815_4(int) = Load[len1] : &:r2815_3, m2814_6 +# 2815| r2815_5(glval) = VariableAddress[len2] : +# 2815| r2815_6(unsigned long) = Load[len2] : &:r2815_5, m2814_8 +# 2815| v2815_7(void) = NoOp : +# 2816| r2816_1(glval) = VariableAddress[z] : +# 2816| r2816_2(unsigned long) = Constant[4] : +# 2816| r2816_3(unsigned long) = CopyValue : r2815_6 +# 2816| r2816_4(unsigned long) = Mul : r2816_2, r2816_3 +# 2816| m2816_5(unsigned long) = Store[z] : &:r2816_1, r2816_4 +# 2817| v2817_1(void) = NoOp : +# 2814| v2814_9(void) = ReturnVoid : +# 2814| v2814_10(void) = AliasedUse : m2814_3 +# 2814| v2814_11(void) = ExitFunction : + +# 2819| void vla_sizeof_test5(int, size_t) +# 2819| Block 0 +# 2819| v2819_1(void) = EnterFunction : +# 2819| m2819_2(unknown) = AliasedDefinition : +# 2819| m2819_3(unknown) = InitializeNonLocal : +# 2819| m2819_4(unknown) = Chi : total:m2819_2, partial:m2819_3 +# 2819| r2819_5(glval) = VariableAddress[len1] : +# 2819| m2819_6(int) = InitializeParameter[len1] : &:r2819_5 +# 2819| r2819_7(glval) = VariableAddress[len2] : +# 2819| m2819_8(unsigned long) = InitializeParameter[len2] : &:r2819_7 +# 2820| r2820_1(glval) = VariableAddress[tmp1] : +# 2820| m2820_2(int[][]) = Uninitialized[tmp1] : &:r2820_1 +# 2820| r2820_3(glval) = VariableAddress[len1] : +# 2820| r2820_4(int) = Load[len1] : &:r2820_3, m2819_6 +# 2820| r2820_5(glval) = VariableAddress[len2] : +# 2820| r2820_6(unsigned long) = Load[len2] : &:r2820_5, m2819_8 +# 2820| v2820_7(void) = NoOp : +# 2821| r2821_1(glval) = VariableAddress[z] : +# 2821| r2821_2(unsigned long) = Constant[4] : +# 2821| r2821_3(unsigned long) = CopyValue : r2820_6 +# 2821| r2821_4(unsigned long) = Mul : r2821_2, r2821_3 +# 2821| m2821_5(unsigned long) = Store[z] : &:r2821_1, r2821_4 +# 2822| v2822_1(void) = NoOp : +# 2819| v2819_9(void) = ReturnVoid : +# 2819| v2819_10(void) = AliasedUse : m2819_3 +# 2819| v2819_11(void) = ExitFunction : + ir23.cpp: # 1| bool consteval_1() # 1| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 66af788db12..3dce0a0e1ea 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -2776,4 +2776,49 @@ void test_allocation_with_initializer() { long* p2 = new long(42); } +void vla_sizeof_test(int len1, size_t len2, char len3) { + char tmp1[len1]; + size_t x = sizeof(tmp1); + int tmp2[len1][len2]; + size_t y = sizeof(tmp2); + size_t z = sizeof(*tmp2); + int tmp3[len1][len2][len3]; + size_t w = sizeof(tmp3); + size_t v = sizeof(*tmp3); + size_t u = sizeof(**tmp3); + size_t t = sizeof(***tmp3); +} + +void vla_sizeof_test2(int len1, size_t len2, char len3) { + int tmp1[len1][len2]; + size_t z = sizeof(tmp1[1]); + int tmp2[len1][len2][len3]; + size_t v = sizeof(tmp2[1]); + size_t u = sizeof(tmp2[1][2]); + size_t t = sizeof(tmp2[1][2][3]); +} + +size_t vla_sizeof_test3(int len1, size_t len2, char len3, bool b) { + typedef long arr[len1][len2]; + typedef arr arr2; + typedef arr2 arr3[len3]; + + if (b) { + arr3 tmp; + return sizeof(tmp[1]); + } + + return 0; +} + +void vla_sizeof_test4(int len1, size_t len2) { + int tmp1[len1][len2]; + size_t z = sizeof(1[tmp1]); +} + +void vla_sizeof_test5(int len1, size_t len2) { + int tmp1[len1][len2]; + size_t z = sizeof((*&tmp1)[1]); +} + // semmle-extractor-options: -std=c++20 --clang diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index a567c651ca2..1d8f885cd15 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -18577,6 +18577,241 @@ ir.cpp: # 2774| v2774_5(void) = AliasedUse : ~m? # 2774| v2774_6(void) = ExitFunction : +# 2779| void vla_sizeof_test(int, size_t, char) +# 2779| Block 0 +# 2779| v2779_1(void) = EnterFunction : +# 2779| mu2779_2(unknown) = AliasedDefinition : +# 2779| mu2779_3(unknown) = InitializeNonLocal : +# 2779| r2779_4(glval) = VariableAddress[len1] : +# 2779| mu2779_5(int) = InitializeParameter[len1] : &:r2779_4 +# 2779| r2779_6(glval) = VariableAddress[len2] : +# 2779| mu2779_7(unsigned long) = InitializeParameter[len2] : &:r2779_6 +# 2779| r2779_8(glval) = VariableAddress[len3] : +# 2779| mu2779_9(char) = InitializeParameter[len3] : &:r2779_8 +# 2780| r2780_1(glval) = VariableAddress[tmp1] : +# 2780| mu2780_2(char[]) = Uninitialized[tmp1] : &:r2780_1 +# 2780| r2780_3(glval) = VariableAddress[len1] : +# 2780| r2780_4(int) = Load[len1] : &:r2780_3, ~m? +# 2780| v2780_5(void) = NoOp : +# 2781| r2781_1(glval) = VariableAddress[x] : +# 2781| r2781_2(unsigned long) = Constant[1] : +# 2781| r2781_3(unsigned long) = Convert : r2780_4 +# 2781| r2781_4(unsigned long) = Mul : r2781_2, r2781_3 +# 2781| mu2781_5(unsigned long) = Store[x] : &:r2781_1, r2781_4 +# 2782| r2782_1(glval) = VariableAddress[tmp2] : +# 2782| mu2782_2(int[][]) = Uninitialized[tmp2] : &:r2782_1 +# 2782| r2782_3(glval) = VariableAddress[len1] : +# 2782| r2782_4(int) = Load[len1] : &:r2782_3, ~m? +# 2782| r2782_5(glval) = VariableAddress[len2] : +# 2782| r2782_6(unsigned long) = Load[len2] : &:r2782_5, ~m? +# 2782| v2782_7(void) = NoOp : +# 2783| r2783_1(glval) = VariableAddress[y] : +# 2783| r2783_2(unsigned long) = Constant[4] : +# 2783| r2783_3(unsigned long) = Convert : r2782_4 +# 2783| r2783_4(unsigned long) = Mul : r2783_2, r2783_3 +# 2783| r2783_5(unsigned long) = CopyValue : r2782_6 +# 2783| r2783_6(unsigned long) = Mul : r2783_4, r2783_5 +# 2783| mu2783_7(unsigned long) = Store[y] : &:r2783_1, r2783_6 +# 2784| r2784_1(glval) = VariableAddress[z] : +# 2784| r2784_2(unsigned long) = Constant[4] : +# 2784| r2784_3(unsigned long) = CopyValue : r2782_6 +# 2784| r2784_4(unsigned long) = Mul : r2784_2, r2784_3 +# 2784| mu2784_5(unsigned long) = Store[z] : &:r2784_1, r2784_4 +# 2785| r2785_1(glval) = VariableAddress[tmp3] : +# 2785| mu2785_2(int[][][]) = Uninitialized[tmp3] : &:r2785_1 +# 2785| r2785_3(glval) = VariableAddress[len1] : +# 2785| r2785_4(int) = Load[len1] : &:r2785_3, ~m? +# 2785| r2785_5(glval) = VariableAddress[len2] : +# 2785| r2785_6(unsigned long) = Load[len2] : &:r2785_5, ~m? +# 2785| r2785_7(glval) = VariableAddress[len3] : +# 2785| r2785_8(char) = Load[len3] : &:r2785_7, ~m? +# 2785| v2785_9(void) = NoOp : +# 2786| r2786_1(glval) = VariableAddress[w] : +# 2786| r2786_2(unsigned long) = Constant[4] : +# 2786| r2786_3(unsigned long) = Convert : r2785_4 +# 2786| r2786_4(unsigned long) = Mul : r2786_2, r2786_3 +# 2786| r2786_5(unsigned long) = CopyValue : r2785_6 +# 2786| r2786_6(unsigned long) = Mul : r2786_4, r2786_5 +# 2786| r2786_7(unsigned long) = Convert : r2785_8 +# 2786| r2786_8(unsigned long) = Mul : r2786_6, r2786_7 +# 2786| mu2786_9(unsigned long) = Store[w] : &:r2786_1, r2786_8 +# 2787| r2787_1(glval) = VariableAddress[v] : +# 2787| r2787_2(unsigned long) = Constant[4] : +# 2787| r2787_3(unsigned long) = CopyValue : r2785_6 +# 2787| r2787_4(unsigned long) = Mul : r2787_2, r2787_3 +# 2787| r2787_5(unsigned long) = Convert : r2785_8 +# 2787| r2787_6(unsigned long) = Mul : r2787_4, r2787_5 +# 2787| mu2787_7(unsigned long) = Store[v] : &:r2787_1, r2787_6 +# 2788| r2788_1(glval) = VariableAddress[u] : +# 2788| r2788_2(unsigned long) = Constant[4] : +# 2788| r2788_3(unsigned long) = Convert : r2785_8 +# 2788| r2788_4(unsigned long) = Mul : r2788_2, r2788_3 +# 2788| mu2788_5(unsigned long) = Store[u] : &:r2788_1, r2788_4 +# 2789| r2789_1(glval) = VariableAddress[t] : +# 2789| r2789_2(unsigned long) = Constant[4] : +# 2789| mu2789_3(unsigned long) = Store[t] : &:r2789_1, r2789_2 +# 2790| v2790_1(void) = NoOp : +# 2779| v2779_10(void) = ReturnVoid : +# 2779| v2779_11(void) = AliasedUse : ~m? +# 2779| v2779_12(void) = ExitFunction : + +# 2792| void vla_sizeof_test2(int, size_t, char) +# 2792| Block 0 +# 2792| v2792_1(void) = EnterFunction : +# 2792| mu2792_2(unknown) = AliasedDefinition : +# 2792| mu2792_3(unknown) = InitializeNonLocal : +# 2792| r2792_4(glval) = VariableAddress[len1] : +# 2792| mu2792_5(int) = InitializeParameter[len1] : &:r2792_4 +# 2792| r2792_6(glval) = VariableAddress[len2] : +# 2792| mu2792_7(unsigned long) = InitializeParameter[len2] : &:r2792_6 +# 2792| r2792_8(glval) = VariableAddress[len3] : +# 2792| mu2792_9(char) = InitializeParameter[len3] : &:r2792_8 +# 2793| r2793_1(glval) = VariableAddress[tmp1] : +# 2793| mu2793_2(int[][]) = Uninitialized[tmp1] : &:r2793_1 +# 2793| r2793_3(glval) = VariableAddress[len1] : +# 2793| r2793_4(int) = Load[len1] : &:r2793_3, ~m? +# 2793| r2793_5(glval) = VariableAddress[len2] : +# 2793| r2793_6(unsigned long) = Load[len2] : &:r2793_5, ~m? +# 2793| v2793_7(void) = NoOp : +# 2794| r2794_1(glval) = VariableAddress[z] : +# 2794| r2794_2(unsigned long) = Constant[4] : +# 2794| r2794_3(unsigned long) = CopyValue : r2793_6 +# 2794| r2794_4(unsigned long) = Mul : r2794_2, r2794_3 +# 2794| mu2794_5(unsigned long) = Store[z] : &:r2794_1, r2794_4 +# 2795| r2795_1(glval) = VariableAddress[tmp2] : +# 2795| mu2795_2(int[][][]) = Uninitialized[tmp2] : &:r2795_1 +# 2795| r2795_3(glval) = VariableAddress[len1] : +# 2795| r2795_4(int) = Load[len1] : &:r2795_3, ~m? +# 2795| r2795_5(glval) = VariableAddress[len2] : +# 2795| r2795_6(unsigned long) = Load[len2] : &:r2795_5, ~m? +# 2795| r2795_7(glval) = VariableAddress[len3] : +# 2795| r2795_8(char) = Load[len3] : &:r2795_7, ~m? +# 2795| v2795_9(void) = NoOp : +# 2796| r2796_1(glval) = VariableAddress[v] : +# 2796| r2796_2(unsigned long) = Constant[4] : +# 2796| r2796_3(unsigned long) = CopyValue : r2795_6 +# 2796| r2796_4(unsigned long) = Mul : r2796_2, r2796_3 +# 2796| r2796_5(unsigned long) = Convert : r2795_8 +# 2796| r2796_6(unsigned long) = Mul : r2796_4, r2796_5 +# 2796| mu2796_7(unsigned long) = Store[v] : &:r2796_1, r2796_6 +# 2797| r2797_1(glval) = VariableAddress[u] : +# 2797| r2797_2(unsigned long) = Constant[4] : +# 2797| r2797_3(unsigned long) = Convert : r2795_8 +# 2797| r2797_4(unsigned long) = Mul : r2797_2, r2797_3 +# 2797| mu2797_5(unsigned long) = Store[u] : &:r2797_1, r2797_4 +# 2798| r2798_1(glval) = VariableAddress[t] : +# 2798| r2798_2(unsigned long) = Constant[4] : +# 2798| mu2798_3(unsigned long) = Store[t] : &:r2798_1, r2798_2 +# 2799| v2799_1(void) = NoOp : +# 2792| v2792_10(void) = ReturnVoid : +# 2792| v2792_11(void) = AliasedUse : ~m? +# 2792| v2792_12(void) = ExitFunction : + +# 2801| size_t vla_sizeof_test3(int, size_t, char, bool) +# 2801| Block 0 +# 2801| v2801_1(void) = EnterFunction : +# 2801| mu2801_2(unknown) = AliasedDefinition : +# 2801| mu2801_3(unknown) = InitializeNonLocal : +# 2801| r2801_4(glval) = VariableAddress[len1] : +# 2801| mu2801_5(int) = InitializeParameter[len1] : &:r2801_4 +# 2801| r2801_6(glval) = VariableAddress[len2] : +# 2801| mu2801_7(unsigned long) = InitializeParameter[len2] : &:r2801_6 +# 2801| r2801_8(glval) = VariableAddress[len3] : +# 2801| mu2801_9(char) = InitializeParameter[len3] : &:r2801_8 +# 2801| r2801_10(glval) = VariableAddress[b] : +# 2801| mu2801_11(bool) = InitializeParameter[b] : &:r2801_10 +# 2802| r2802_1(glval) = VariableAddress[len1] : +# 2802| r2802_2(int) = Load[len1] : &:r2802_1, ~m? +# 2802| r2802_3(glval) = VariableAddress[len2] : +# 2802| r2802_4(unsigned long) = Load[len2] : &:r2802_3, ~m? +# 2802| v2802_5(void) = NoOp : +# 2803| v2803_1(void) = NoOp : +# 2804| r2804_1(glval) = VariableAddress[len3] : +# 2804| r2804_2(char) = Load[len3] : &:r2804_1, ~m? +# 2804| v2804_3(void) = NoOp : +# 2806| r2806_1(glval) = VariableAddress[b] : +# 2806| r2806_2(bool) = Load[b] : &:r2806_1, ~m? +# 2806| v2806_3(void) = ConditionalBranch : r2806_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2801| Block 1 +# 2801| r2801_12(glval) = VariableAddress[#return] : +# 2801| v2801_13(void) = ReturnValue : &:r2801_12, ~m? +# 2801| v2801_14(void) = AliasedUse : ~m? +# 2801| v2801_15(void) = ExitFunction : + +# 2807| Block 2 +# 2807| r2807_1(glval) = VariableAddress[tmp] : +# 2807| mu2807_2(long[][][]) = Uninitialized[tmp] : &:r2807_1 +# 2807| v2807_3(void) = NoOp : +# 2808| r2808_1(glval) = VariableAddress[#return] : +# 2808| r2808_2(unsigned long) = Constant[8] : +# 2808| r2808_3(unsigned long) = Convert : r2802_2 +# 2808| r2808_4(unsigned long) = Mul : r2808_2, r2808_3 +# 2808| r2808_5(unsigned long) = CopyValue : r2802_4 +# 2808| r2808_6(unsigned long) = Mul : r2808_4, r2808_5 +# 2808| mu2808_7(unsigned long) = Store[#return] : &:r2808_1, r2808_6 +#-----| Goto -> Block 1 + +# 2811| Block 3 +# 2811| r2811_1(glval) = VariableAddress[#return] : +# 2811| r2811_2(unsigned long) = Constant[0] : +# 2811| mu2811_3(unsigned long) = Store[#return] : &:r2811_1, r2811_2 +#-----| Goto -> Block 1 + +# 2814| void vla_sizeof_test4(int, size_t) +# 2814| Block 0 +# 2814| v2814_1(void) = EnterFunction : +# 2814| mu2814_2(unknown) = AliasedDefinition : +# 2814| mu2814_3(unknown) = InitializeNonLocal : +# 2814| r2814_4(glval) = VariableAddress[len1] : +# 2814| mu2814_5(int) = InitializeParameter[len1] : &:r2814_4 +# 2814| r2814_6(glval) = VariableAddress[len2] : +# 2814| mu2814_7(unsigned long) = InitializeParameter[len2] : &:r2814_6 +# 2815| r2815_1(glval) = VariableAddress[tmp1] : +# 2815| mu2815_2(int[][]) = Uninitialized[tmp1] : &:r2815_1 +# 2815| r2815_3(glval) = VariableAddress[len1] : +# 2815| r2815_4(int) = Load[len1] : &:r2815_3, ~m? +# 2815| r2815_5(glval) = VariableAddress[len2] : +# 2815| r2815_6(unsigned long) = Load[len2] : &:r2815_5, ~m? +# 2815| v2815_7(void) = NoOp : +# 2816| r2816_1(glval) = VariableAddress[z] : +# 2816| r2816_2(unsigned long) = Constant[4] : +# 2816| r2816_3(unsigned long) = CopyValue : r2815_6 +# 2816| r2816_4(unsigned long) = Mul : r2816_2, r2816_3 +# 2816| mu2816_5(unsigned long) = Store[z] : &:r2816_1, r2816_4 +# 2817| v2817_1(void) = NoOp : +# 2814| v2814_8(void) = ReturnVoid : +# 2814| v2814_9(void) = AliasedUse : ~m? +# 2814| v2814_10(void) = ExitFunction : + +# 2819| void vla_sizeof_test5(int, size_t) +# 2819| Block 0 +# 2819| v2819_1(void) = EnterFunction : +# 2819| mu2819_2(unknown) = AliasedDefinition : +# 2819| mu2819_3(unknown) = InitializeNonLocal : +# 2819| r2819_4(glval) = VariableAddress[len1] : +# 2819| mu2819_5(int) = InitializeParameter[len1] : &:r2819_4 +# 2819| r2819_6(glval) = VariableAddress[len2] : +# 2819| mu2819_7(unsigned long) = InitializeParameter[len2] : &:r2819_6 +# 2820| r2820_1(glval) = VariableAddress[tmp1] : +# 2820| mu2820_2(int[][]) = Uninitialized[tmp1] : &:r2820_1 +# 2820| r2820_3(glval) = VariableAddress[len1] : +# 2820| r2820_4(int) = Load[len1] : &:r2820_3, ~m? +# 2820| r2820_5(glval) = VariableAddress[len2] : +# 2820| r2820_6(unsigned long) = Load[len2] : &:r2820_5, ~m? +# 2820| v2820_7(void) = NoOp : +# 2821| r2821_1(glval) = VariableAddress[z] : +# 2821| r2821_2(unsigned long) = Constant[4] : +# 2821| r2821_3(unsigned long) = CopyValue : r2820_6 +# 2821| r2821_4(unsigned long) = Mul : r2821_2, r2821_3 +# 2821| mu2821_5(unsigned long) = Store[z] : &:r2821_1, r2821_4 +# 2822| v2822_1(void) = NoOp : +# 2819| v2819_8(void) = ReturnVoid : +# 2819| v2819_9(void) = AliasedUse : ~m? +# 2819| v2819_10(void) = ExitFunction : + ir23.cpp: # 1| bool consteval_1() # 1| Block 0 diff --git a/csharp/codeql-extractor.yml b/csharp/codeql-extractor.yml index c4d7352cc43..786b78950ca 100644 --- a/csharp/codeql-extractor.yml +++ b/csharp/codeql-extractor.yml @@ -10,6 +10,8 @@ build_modes: - autobuild - manual - none +default_queries: + - codeql/csharp-queries github_api_languages: - C# scc_languages: diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index 72c46c89934..4713679cd23 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -43,5 +43,5 @@ MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,,,,,, Newtonsoft.Json,,,91,,,,,,,,,,,,,,,,,,,73,18 ServiceStack,194,,7,27,,,,,75,,,,92,,,,,,,,,7, SourceGenerators,,,5,,,,,,,,,,,,,,,,,,,,5 -System,54,47,12165,,6,5,5,,,4,1,,33,2,,6,15,17,4,3,,5929,6236 +System,54,47,12241,,6,5,5,,,4,1,,33,2,,6,15,17,4,3,,6003,6238 Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,,,,,,, diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index c1c3f927fd7..061662f9714 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -8,7 +8,7 @@ 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,12165,54,5 + System,"``System.*``, ``System``",47,12241,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,14429,407,9 + Totals,,107,14505,407,9 diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index c276cd6133e..7f3f4d43683 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.47 + +No user-facing changes. + ## 1.7.46 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.47.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.47.md new file mode 100644 index 00000000000..afc26600b73 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.47.md @@ -0,0 +1,3 @@ +## 1.7.47 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index a39de8bc91c..21f0fc0de3c 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.46 +lastReleaseVersion: 1.7.47 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index ea7b1f0c021..826e53b7681 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.47-dev +version: 1.7.48-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index c276cd6133e..7f3f4d43683 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.47 + +No user-facing changes. + ## 1.7.46 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.47.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.47.md new file mode 100644 index 00000000000..afc26600b73 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.47.md @@ -0,0 +1,3 @@ +## 1.7.47 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index a39de8bc91c..21f0fc0de3c 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.46 +lastReleaseVersion: 1.7.47 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 377ad66a5ba..468bd64cbd0 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.47-dev +version: 1.7.48-dev groups: - csharp - solorigate diff --git a/csharp/ql/consistency-queries/CfgConsistency.ql b/csharp/ql/consistency-queries/CfgConsistency.ql index 3caf64f9aec..d7f0c091538 100644 --- a/csharp/ql/consistency-queries/CfgConsistency.ql +++ b/csharp/ql/consistency-queries/CfgConsistency.ql @@ -29,7 +29,7 @@ predicate bbSuccInconsistency(ControlFlowElement pred, ControlFlowElement succ) succBB.getFirstNode() = succ.getAControlFlowNode() ) and not exists(PreBasicBlock predBB, PreBasicBlock succBB | - predBB.getLastElement() = pred and + predBB.getLastNode() = pred and succBB = predBB.getASuccessor() and succBB.getFirstElement() = succ ) @@ -41,12 +41,12 @@ predicate bbIntraSuccInconsistency(ControlFlowElement pred, ControlFlowElement s succ.getAControlFlowNode() = bb.getNode(i + 1) ) and not exists(PreBasicBlock bb | - bb.getLastElement() = pred and + bb.getLastNode() = pred and bb.getASuccessor().getFirstElement() = succ ) and not exists(PreBasicBlock bb, int i | - bb.getElement(i) = pred and - bb.getElement(i + 1) = succ + bb.getNode(i) = pred and + bb.getNode(i + 1) = succ ) } diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 9e3686d8267..0aca82e8310 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,12 @@ +## 5.2.3 + +### Minor Analysis Improvements + +* A bug has been fixed in the data flow analysis, which means that flow through calls using the `base` qualifier may now be tracked more accurately. +* Added summary models for `System.Xml.XmlReader`, `System.Xml.XmlTextReader` and `System.Xml.XmlDictionaryReader`. +* Models-as-data summaries for byte and char arrays and pointers now treat the entire collection as tainted, reflecting their common use as string alternatives. +* The default taint tracking configuration now allows implicit reads from collections at sinks and in additional flow steps. This increases flow coverage for many taint tracking queries and helps reduce false negatives. + ## 5.2.2 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/2025-08-18-byte-char-bulk-types.md b/csharp/ql/lib/change-notes/2025-08-18-byte-char-bulk-types.md deleted file mode 100644 index e5a081c3340..00000000000 --- a/csharp/ql/lib/change-notes/2025-08-18-byte-char-bulk-types.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Models-as-data summaries for byte and char arrays and pointers now treat the entire collection as tainted, reflecting their common use as string alternatives. diff --git a/csharp/ql/lib/change-notes/2025-08-18-implicit-reads-at-sinks.md b/csharp/ql/lib/change-notes/2025-08-18-implicit-reads-at-sinks.md deleted file mode 100644 index d66e982e6ae..00000000000 --- a/csharp/ql/lib/change-notes/2025-08-18-implicit-reads-at-sinks.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The default taint tracking configuration now allows implicit reads from collections at sinks and in additional flow steps. This increases flow coverage for many taint tracking queries and helps reduce false negatives. diff --git a/csharp/ql/lib/change-notes/released/5.2.3.md b/csharp/ql/lib/change-notes/released/5.2.3.md new file mode 100644 index 00000000000..b9891310419 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.2.3.md @@ -0,0 +1,8 @@ +## 5.2.3 + +### Minor Analysis Improvements + +* A bug has been fixed in the data flow analysis, which means that flow through calls using the `base` qualifier may now be tracked more accurately. +* Added summary models for `System.Xml.XmlReader`, `System.Xml.XmlTextReader` and `System.Xml.XmlDictionaryReader`. +* Models-as-data summaries for byte and char arrays and pointers now treat the entire collection as tainted, reflecting their common use as string alternatives. +* The default taint tracking configuration now allows implicit reads from collections at sinks and in additional flow steps. This increases flow coverage for many taint tracking queries and helps reduce false negatives. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index e3b1b0c079d..f7fd1ec5b57 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.2.2 +lastReleaseVersion: 5.2.3 diff --git a/csharp/ql/lib/ext/System.Xml.model.yml b/csharp/ql/lib/ext/System.Xml.model.yml index efea34b40db..a6ed8dd465d 100644 --- a/csharp/ql/lib/ext/System.Xml.model.yml +++ b/csharp/ql/lib/ext/System.Xml.model.yml @@ -23,6 +23,17 @@ extensions: - ["System.Xml", "XmlDictionaryReader", False, "CreateBinaryReader", "(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession,System.Xml.OnXmlDictionaryReaderClose)", "", "Argument[1]", "ReturnValue", "taint", "manual"] - ["System.Xml", "XmlDictionaryReader", False, "CreateBinaryReader", "(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession,System.Xml.OnXmlDictionaryReaderClose)", "", "Argument[3]", "ReturnValue", "taint", "manual"] - ["System.Xml", "XmlDictionaryReader", False, "CreateBinaryReader", "(System.IO.Stream,System.Xml.XmlDictionaryReaderQuotas)", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlDictionaryReader", False, "CreateTextReader", "(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", False, "CreateTextReader", "(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", False, "CreateTextReader", "(System.Byte[],System.Xml.XmlDictionaryReaderQuotas)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", False, "CreateTextReader", "(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", False, "CreateTextReader", "(System.IO.Stream,System.Xml.XmlDictionaryReaderQuotas)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsBase64", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsBinHex", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsBinHex", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsChars", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadElementContentAsBase64", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadElementContentAsBinHex", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["System.Xml", "XmlDocument", False, "Load", "(System.IO.Stream)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.Xml", "XmlDocument", False, "Load", "(System.IO.TextReader)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.Xml", "XmlDocument", False, "Load", "(System.String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] @@ -68,3 +79,68 @@ extensions: - ["System.Xml", "XmlReader", False, "Create", "(System.String,System.Xml.XmlReaderSettings)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["System.Xml", "XmlReader", False, "Create", "(System.String,System.Xml.XmlReaderSettings,System.Xml.XmlParserContext)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["System.Xml", "XmlReader", False, "Create", "(System.Xml.XmlReader,System.Xml.XmlReaderSettings)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "GetAttribute", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "GetAttribute", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "GetAttribute", "(System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "GetValueAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "LookupNamespace", "(System.String)", "", "Argument[0]", "ReturnValue", "value", "dfc-manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAs", "(System.Type,System.Xml.IXmlNamespaceResolver)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsAsync", "(System.Type,System.Xml.IXmlNamespaceResolver)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsBase64", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsBase64Async", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsBinHex", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsBinHexAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsObjectAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsStringAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAs", "(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsAsync", "(System.Type,System.Xml.IXmlNamespaceResolver)", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsBase64", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsBase64Async", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsBinHex", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsBinHexAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsObject", "(System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsString", "(System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementString", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementString", "(System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadInnerXml", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadInnerXmlAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadOuterXml", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadOuterXmlAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadSubtree", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadValueChunk", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadValueChunkAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "get_BaseURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_Item", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_Item", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_Item", "(System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_LocalName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_Name", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_NameTable", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_NamespaceURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_Prefix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_SchemaInfo", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-manual"] + - ["System.Xml", "XmlReader", True, "get_Value", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlTextReader", True, "GetNamespacesInScope", "(System.Xml.XmlNamespaceScope)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", True, "GetRemainder", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlTextReader", True, "ReadBase64", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", True, "ReadBinHex", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", True, "ReadChars", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.IO.Stream)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.IO.Stream,System.Xml.XmlNameTable)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.IO.TextReader)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.IO.TextReader,System.Xml.XmlNameTable)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String,System.IO.Stream)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String,System.IO.Stream,System.Xml.XmlNameTable)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String,System.IO.TextReader)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String,System.IO.TextReader,System.Xml.XmlNameTable)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String,System.Xml.XmlNameTable)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.Xml.XmlNameTable)", "", "Argument[0]", "Argument[this]", "taint", "manual"] diff --git a/csharp/ql/lib/printAst.ql b/csharp/ql/lib/printAst.ql index 380f4b4024b..85820796a88 100644 --- a/csharp/ql/lib/printAst.ql +++ b/csharp/ql/lib/printAst.ql @@ -18,8 +18,8 @@ external string selectedSourceFile(); class PrintAstConfigurationOverride extends PrintAstConfiguration { /** - * Holds if the location matches the selected file in the VS Code extension and - * the element is `fromSource`. + * Holds if the location `l` matches the selected file in the VS Code extension and + * the element is `e` is `fromSource`. */ override predicate shouldPrint(Element e, Location l) { super.shouldPrint(e, l) and diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index f5ad09a43fa..d7b4d0f175c 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.2.3-dev +version: 5.2.4-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/lib/semmle/code/csharp/Assignable.qll b/csharp/ql/lib/semmle/code/csharp/Assignable.qll index d4f8d9974f0..3c7170a6f84 100644 --- a/csharp/ql/lib/semmle/code/csharp/Assignable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Assignable.qll @@ -583,7 +583,7 @@ module AssignableDefinitions { } /** - * Holds if the `ref` assignment to `aa` via call `c` is uncertain. + * Holds if the `ref` assignment to `arg` via call `c` is uncertain. */ // Not in the cached module `Cached`, as that would introduce a dependency // on the CFG construction, and effectively collapse too many stages into one diff --git a/csharp/ql/lib/semmle/code/csharp/Caching.qll b/csharp/ql/lib/semmle/code/csharp/Caching.qll index 6a58edef63f..4e34f5504dc 100644 --- a/csharp/ql/lib/semmle/code/csharp/Caching.qll +++ b/csharp/ql/lib/semmle/code/csharp/Caching.qll @@ -10,7 +10,6 @@ module Stages { cached module ControlFlowStage { private import semmle.code.csharp.controlflow.internal.Splitting - private import semmle.code.csharp.controlflow.internal.SuccessorType private import semmle.code.csharp.controlflow.Guards as Guards cached @@ -20,8 +19,6 @@ module Stages { private predicate forceCachingInSameStageRev() { exists(Split s) or - exists(SuccessorType st) - or exists(ControlFlow::Node n) or Guards::Internal::isCustomNullCheck(_, _, _, _) diff --git a/csharp/ql/lib/semmle/code/csharp/Callable.qll b/csharp/ql/lib/semmle/code/csharp/Callable.qll index 6384f458276..7e17f853913 100644 --- a/csharp/ql/lib/semmle/code/csharp/Callable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Callable.qll @@ -708,7 +708,7 @@ class TrueOperator extends UnaryOperator { * * Either an addition operator (`AddOperator`), a checked addition operator * (`CheckedAddOperator`) a subtraction operator (`SubOperator`), a checked - * substraction operator (`CheckedSubOperator`), a multiplication operator + * subtraction operator (`CheckedSubOperator`), a multiplication operator * (`MulOperator`), a checked multiplication operator (`CheckedMulOperator`), * a division operator (`DivOperator`), a checked division operator * (`CheckedDivOperator`), a remainder operator (`RemOperator`), an and diff --git a/csharp/ql/lib/semmle/code/csharp/Member.qll b/csharp/ql/lib/semmle/code/csharp/Member.qll index 3427d4ea089..a196d3b3fc7 100644 --- a/csharp/ql/lib/semmle/code/csharp/Member.qll +++ b/csharp/ql/lib/semmle/code/csharp/Member.qll @@ -491,7 +491,7 @@ class Parameterizable extends Declaration, @parameterizable { final Parameter getARawParameter() { result = this.getRawParameter(_) } /** - * Gets the type of the parameter, possibly prefixed + * Gets the type of the `i`th parameter, possibly prefixed * with `out`, `ref`, or `params`, where appropriate. */ private string parameterTypeToString(int i) { diff --git a/csharp/ql/lib/semmle/code/csharp/PrintAst.qll b/csharp/ql/lib/semmle/code/csharp/PrintAst.qll index fd4bf1cb86b..1ac96c85e78 100644 --- a/csharp/ql/lib/semmle/code/csharp/PrintAst.qll +++ b/csharp/ql/lib/semmle/code/csharp/PrintAst.qll @@ -523,11 +523,9 @@ final class AttributeNode extends ElementNode { * A node representing a `TypeParameter`. */ final class TypeParameterNode extends ElementNode { - TypeParameter typeParameter; - TypeParameterNode() { - typeParameter = element and - not isNotNeeded(typeParameter.getDeclaringGeneric()) + element = + any(TypeParameter typeParameter | not isNotNeeded(typeParameter.getDeclaringGeneric())) } override ElementNode getChild(int childIndex) { none() } diff --git a/csharp/ql/lib/semmle/code/csharp/commons/Constants.qll b/csharp/ql/lib/semmle/code/csharp/commons/Constants.qll index 508ba0e5e87..ab2d9e0eef7 100644 --- a/csharp/ql/lib/semmle/code/csharp/commons/Constants.qll +++ b/csharp/ql/lib/semmle/code/csharp/commons/Constants.qll @@ -6,9 +6,7 @@ private import semmle.code.csharp.commons.StructuralComparison as StructuralComp pragma[noinline] private predicate isConstantCondition0(ControlFlow::Node cfn, boolean b) { - exists( - cfn.getASuccessorByType(any(ControlFlow::SuccessorTypes::BooleanSuccessor t | t.getValue() = b)) - ) and + exists(cfn.getASuccessorByType(any(ControlFlow::BooleanSuccessor t | t.getValue() = b))) and strictcount(ControlFlow::SuccessorType t | exists(cfn.getASuccessorByType(t))) = 1 } diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll index 9e548838ade..bf6a9772857 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll @@ -3,9 +3,10 @@ */ import csharp -private import ControlFlow::SuccessorTypes +private import ControlFlow private import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl as CfgImpl private import CfgImpl::BasicBlocks as BasicBlocksImpl +private import codeql.controlflow.BasicBlock as BB /** * A basic block, that is, a maximal straight-line sequence of control flow nodes @@ -13,7 +14,12 @@ private import CfgImpl::BasicBlocks as BasicBlocksImpl */ final class BasicBlock extends BasicBlocksImpl::BasicBlock { /** Gets an immediate successor of this basic block of a given type, if any. */ - BasicBlock getASuccessorByType(ControlFlow::SuccessorType t) { result = this.getASuccessor(t) } + BasicBlock getASuccessor(ControlFlow::SuccessorType t) { result = super.getASuccessor(t) } + + /** DEPRECATED: Use `getASuccessor` instead. */ + deprecated BasicBlock getASuccessorByType(ControlFlow::SuccessorType t) { + result = this.getASuccessor(t) + } /** Gets an immediate predecessor of this basic block of a given type, if any. */ BasicBlock getAPredecessorByType(ControlFlow::SuccessorType t) { @@ -58,6 +64,8 @@ final class BasicBlock extends BasicBlocksImpl::BasicBlock { result.getFirstNode() = this.getLastNode().getAFalseSuccessor() } + BasicBlock getASuccessor() { result = super.getASuccessor() } + /** Gets the control flow node at a specific (zero-indexed) position in this basic block. */ ControlFlow::Node getNode(int pos) { result = super.getNode(pos) } @@ -330,3 +338,19 @@ final class ConditionBlock extends BasicBlock, BasicBlocksImpl::ConditionBasicBl super.edgeDominates(controlled, s) } } + +private class BasicBlockAlias = BasicBlock; + +private class EntryBasicBlockAlias = EntryBasicBlock; + +module Cfg implements BB::CfgSig { + class ControlFlowNode = ControlFlow::Node; + + class BasicBlock = BasicBlockAlias; + + class EntryBasicBlock = EntryBasicBlockAlias; + + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + BasicBlocksImpl::dominatingEdge(bb1, bb2) + } +} diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowElement.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowElement.qll index 5649f43b881..f914b13e228 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowElement.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowElement.qll @@ -5,7 +5,6 @@ private import semmle.code.csharp.ExprOrStmtParent private import semmle.code.csharp.commons.Compilation private import ControlFlow private import ControlFlow::BasicBlocks -private import SuccessorTypes private import semmle.code.csharp.Caching private import internal.ControlFlowGraphImpl as Impl @@ -90,7 +89,7 @@ class ControlFlowElement extends ExprOrStmtParent, @control_flow_element { // all other nodes can use regular CFG dominance this instanceof Impl::SplitAstNode and cb.getLastNode() = this.getAControlFlowNode() and - succ = cb.getASuccessorByType(s) + succ = cb.getASuccessor(s) } pragma[noinline] diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll index 2334d240935..4b9d636824c 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll @@ -6,7 +6,6 @@ import csharp module ControlFlow { private import semmle.code.csharp.controlflow.BasicBlocks as BBs import semmle.code.csharp.controlflow.internal.SuccessorType - private import SuccessorTypes private import internal.ControlFlowGraphImpl as Impl private import internal.Splitting as Splitting diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll index 313fabc0235..82ab4b63812 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll @@ -3,7 +3,7 @@ */ import csharp -private import ControlFlow::SuccessorTypes +private import ControlFlow private import semmle.code.csharp.commons.Assertions private import semmle.code.csharp.commons.ComparisonTest private import semmle.code.csharp.commons.StructuralComparison as SC @@ -999,7 +999,7 @@ module Internal { pragma[nomagic] private predicate preControlsDirect(Guard g, PreBasicBlocks::PreBasicBlock bb, AbstractValue v) { exists(PreBasicBlocks::ConditionBlock cb, ConditionalSuccessor s | cb.controls(bb, s) | - v.branch(cb.getLastElement(), s, g) + v.branch(cb.getLastNode(), s, g) ) } @@ -1146,9 +1146,9 @@ module Internal { /** Gets the successor block that is reached when guard `g` has abstract value `v`. */ private PreBasicBlocks::PreBasicBlock getConditionalSuccessor(Guard g, AbstractValue v) { exists(PreBasicBlocks::ConditionBlock pred, ConditionalSuccessor s | - v.branch(pred.getLastElement(), s, g) + v.branch(pred.getLastNode(), s, g) | - result = pred.getASuccessorByType(s) + result = pred.getASuccessor(s) ) } @@ -1424,6 +1424,7 @@ module Internal { cached predicate isGuard(Expr e, AbstractValue val) { + Stages::ControlFlowStage::forceCachingInSameStage() and ( e.getType() instanceof BoolType and not e instanceof BoolLiteral and diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Completion.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Completion.qll index 6fed45cdf84..b1afbaed8ef 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Completion.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Completion.qll @@ -26,7 +26,6 @@ private import semmle.code.csharp.frameworks.System private import ControlFlowGraphImpl private import NonReturning private import SuccessorType -private import SuccessorTypes private newtype TCompletion = TSimpleCompletion() or @@ -310,10 +309,8 @@ private class Overflowable extends UnaryOperation { /** A control flow element that is inside a `try` block. */ private class TriedControlFlowElement extends ControlFlowElement { - TryStmt try; - TriedControlFlowElement() { - this = try.getATriedElement() and + this = any(TryStmt try).getATriedElement() and not this instanceof NonReturningCall } @@ -575,7 +572,7 @@ abstract private class NonNestedNormalCompletion extends NormalCompletion { } /** A simple (normal) completion. */ class SimpleCompletion extends NonNestedNormalCompletion, TSimpleCompletion { - override NormalSuccessor getAMatchingSuccessorType() { any() } + override DirectSuccessor getAMatchingSuccessorType() { any() } override string toString() { result = "normal" } } @@ -859,7 +856,7 @@ class GotoCompletion extends Completion { /** Gets the label of the `goto` completion. */ string getLabel() { result = label } - override GotoSuccessor getAMatchingSuccessorType() { result.getLabel() = label } + override GotoSuccessor getAMatchingSuccessorType() { any() } override string toString() { // `NestedCompletion` defines `toString()` for the other case @@ -882,7 +879,7 @@ class ThrowCompletion extends Completion { /** Gets the type of the exception being thrown. */ ExceptionClass getExceptionClass() { result = ec } - override ExceptionSuccessor getAMatchingSuccessorType() { result.getExceptionClass() = ec } + override ExceptionSuccessor getAMatchingSuccessorType() { any() } override string toString() { // `NestedCompletion` defines `toString()` for the other case diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll index 74cb070635b..5f62d6d21df 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll @@ -79,23 +79,10 @@ private module CfgInput implements CfgShared::InputSig { Impl::scopeLast(scope, last, c) } - class SuccessorType = ST::SuccessorType; + private class SuccessorType = ST::SuccessorType; SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } - predicate successorTypeIsSimple(SuccessorType t) { - t instanceof ST::SuccessorTypes::NormalSuccessor - } - - predicate successorTypeIsCondition(SuccessorType t) { - t instanceof ST::SuccessorTypes::ConditionalSuccessor - } - - predicate isAbnormalExitType(SuccessorType t) { - t instanceof ST::SuccessorTypes::ExceptionSuccessor or - t instanceof ST::SuccessorTypes::ExitSuccessor - } - int idOfAstNode(AstNode node) { result = node.getId() } int idOfCfgScope(CfgScope node) { result = idOfAstNode(node) } diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll index 08debc21c0d..38eca378edf 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll @@ -13,6 +13,7 @@ import csharp private import Completion private import ControlFlowGraphImpl private import semmle.code.csharp.controlflow.ControlFlowGraph::ControlFlow as Cfg +private import codeql.controlflow.BasicBlock as BB private predicate startsBB(ControlFlowElement cfe) { not succ(_, cfe, _) and @@ -55,24 +56,34 @@ private predicate bbIDominates(PreBasicBlock dom, PreBasicBlock bb) = class PreBasicBlock extends ControlFlowElement { PreBasicBlock() { startsBB(this) } - PreBasicBlock getASuccessorByType(Cfg::SuccessorType t) { - succ(this.getLastElement(), result, any(Completion c | t = c.getAMatchingSuccessorType())) + PreBasicBlock getASuccessor(Cfg::SuccessorType t) { + succ(this.getLastNode(), result, any(Completion c | t = c.getAMatchingSuccessorType())) } - PreBasicBlock getASuccessor() { result = this.getASuccessorByType(_) } + deprecated PreBasicBlock getASuccessorByType(Cfg::SuccessorType t) { + result = this.getASuccessor(t) + } + + PreBasicBlock getASuccessor() { result = this.getASuccessor(_) } PreBasicBlock getAPredecessor() { result.getASuccessor() = this } - ControlFlowElement getElement(int pos) { bbIndex(this, result, pos) } + ControlFlowElement getNode(int pos) { bbIndex(this, result, pos) } - ControlFlowElement getAnElement() { result = this.getElement(_) } + deprecated ControlFlowElement getElement(int pos) { result = this.getNode(pos) } + + ControlFlowElement getAnElement() { result = this.getNode(_) } ControlFlowElement getFirstElement() { result = this } - ControlFlowElement getLastElement() { result = this.getElement(this.length() - 1) } + ControlFlowElement getLastNode() { result = this.getNode(this.length() - 1) } + + deprecated ControlFlowElement getLastElement() { result = this.getLastNode() } int length() { result = strictcount(this.getAnElement()) } + PreBasicBlock getImmediateDominator() { bbIDominates(result, this) } + predicate immediatelyDominates(PreBasicBlock bb) { bbIDominates(this, bb) } pragma[inline] @@ -84,45 +95,81 @@ class PreBasicBlock extends ControlFlowElement { or this.strictlyDominates(bb) } + + predicate inDominanceFrontier(PreBasicBlock df) { + this = df.getAPredecessor() and not bbIDominates(this, df) + or + exists(PreBasicBlock prev | prev.inDominanceFrontier(df) | + bbIDominates(this, prev) and + not bbIDominates(this, df) + ) + } + + /** Unsupported. Do not use. */ + predicate strictlyPostDominates(PreBasicBlock bb) { none() } + + /** Unsupported. Do not use. */ + predicate postDominates(PreBasicBlock bb) { + this.strictlyPostDominates(bb) or + this = bb + } } private Completion getConditionalCompletion(ConditionalCompletion cc) { result.getInnerCompletion() = cc } +pragma[nomagic] +private predicate conditionBlockImmediatelyControls( + ConditionBlock cond, PreBasicBlock succ, ConditionalCompletion cc +) { + exists(ControlFlowElement last, Completion c | + last = cond.getLastNode() and + c = getConditionalCompletion(cc) and + succ(last, succ, c) and + // In the pre-CFG, we need to account for case where one predecessor node has + // two edges to the same successor node. Assertion expressions are examples of + // such nodes. + not exists(Completion other | + succ(last, succ, other) and + other != c + ) and + forall(PreBasicBlock pred | pred = succ.getAPredecessor() and pred != cond | + succ.dominates(pred) + ) + ) +} + class ConditionBlock extends PreBasicBlock { ConditionBlock() { exists(Completion c | c = getConditionalCompletion(_) | - succ(this.getLastElement(), _, c) + succ(this.getLastNode(), _, c) or - scopeLast(_, this.getLastElement(), c) + scopeLast(_, this.getLastNode(), c) ) } pragma[nomagic] - private predicate immediatelyControls(PreBasicBlock succ, ConditionalCompletion cc) { - exists(ControlFlowElement last, Completion c | - last = this.getLastElement() and - c = getConditionalCompletion(cc) and - succ(last, succ, c) and - // In the pre-CFG, we need to account for case where one predecessor node has - // two edges to the same successor node. Assertion expressions are examples of - // such nodes. - not exists(Completion other | - succ(last, succ, other) and - other != c - ) and - forall(PreBasicBlock pred | pred = succ.getAPredecessor() and pred != this | - succ.dominates(pred) - ) - ) - } - - pragma[nomagic] - predicate controls(PreBasicBlock controlled, Cfg::SuccessorTypes::ConditionalSuccessor s) { - exists(PreBasicBlock succ, ConditionalCompletion c | this.immediatelyControls(succ, c) | + predicate controls(PreBasicBlock controlled, Cfg::ConditionalSuccessor s) { + exists(PreBasicBlock succ, ConditionalCompletion c | + conditionBlockImmediatelyControls(this, succ, c) + | succ.dominates(controlled) and s = c.getAMatchingSuccessorType() ) } } + +module PreCfg implements BB::CfgSig { + class ControlFlowNode = ControlFlowElement; + + class BasicBlock = PreBasicBlock; + + class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { entryBB(this) } + } + + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + conditionBlockImmediatelyControls(bb1, bb2, _) + } +} diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll index 6507bbbe04b..4921e692623 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll @@ -12,9 +12,9 @@ module PreSsa { private import codeql.ssa.Ssa as SsaImplCommon private predicate definitionAt( - AssignableDefinition def, SsaInput::BasicBlock bb, int i, SsaInput::SourceVariable v + AssignableDefinition def, PreBasicBlocks::PreBasicBlock bb, int i, SsaInput::SourceVariable v ) { - bb.getElement(i) = def.getExpr() and + bb.getNode(i) = def.getExpr() and v = def.getTarget() and // In cases like `(x, x) = (0, 1)`, we discard the first (dead) definition of `x` not exists(TupleAssignmentDefinition first, TupleAssignmentDefinition second | first = def | @@ -30,7 +30,9 @@ module PreSsa { ) } - predicate implicitEntryDef(Callable c, SsaInput::BasicBlock bb, SsaInput::SourceVariable v) { + predicate implicitEntryDef( + Callable c, PreBasicBlocks::PreBasicBlock bb, SsaInput::SourceVariable v + ) { c = v.getACallable() and scopeFirst(c, bb) and ( @@ -79,19 +81,11 @@ module PreSsa { } } - module SsaInput implements SsaImplCommon::InputSig { - class BasicBlock extends PreBasicBlocks::PreBasicBlock { - ControlFlowNode getNode(int i) { result = this.getElement(i) } - } + module SsaInput implements SsaImplCommon::InputSig { + private import semmle.code.csharp.Caching - class ControlFlowNode = ControlFlowElement; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result.immediatelyDominates(bb) } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - - private class ExitBasicBlock extends BasicBlock { - ExitBasicBlock() { scopeLast(_, this.getLastElement(), _) } + private class ExitBasicBlock extends PreBasicBlocks::PreBasicBlock { + ExitBasicBlock() { scopeLast(_, this.getLastNode(), _) } } pragma[noinline] @@ -129,7 +123,10 @@ module PreSsa { Callable getACallable() { result = c } } - predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableWrite( + PreBasicBlocks::PreBasicBlock bb, int i, SourceVariable v, boolean certain + ) { + Stages::ControlFlowStage::forceCachingInSameStage() and exists(AssignableDefinition def | definitionAt(def, bb, i, v) and if def.getTargetAccess().isRefArgument() then certain = false else certain = true @@ -140,9 +137,11 @@ module PreSsa { certain = true } - predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableRead( + PreBasicBlocks::PreBasicBlock bb, int i, SourceVariable v, boolean certain + ) { exists(AssignableRead read | - read = bb.getElement(i) and + read = bb.getNode(i) and read.getTarget() = v and certain = true ) @@ -157,27 +156,27 @@ module PreSsa { } } - private module SsaImpl = SsaImplCommon::Make; + private module SsaImpl = SsaImplCommon::Make; class Definition extends SsaImpl::Definition { final AssignableRead getARead() { - exists(SsaInput::BasicBlock bb, int i | + exists(PreBasicBlocks::PreBasicBlock bb, int i | SsaImpl::ssaDefReachesRead(_, this, bb, i) and - result = bb.getElement(i) + result = bb.getNode(i) ) } final AssignableDefinition getDefinition() { - exists(SsaInput::BasicBlock bb, int i, SsaInput::SourceVariable v | + exists(PreBasicBlocks::PreBasicBlock bb, int i, SsaInput::SourceVariable v | this.definesAt(v, bb, i) and definitionAt(result, bb, i, v) ) } final AssignableRead getAFirstRead() { - exists(SsaInput::BasicBlock bb, int i | + exists(PreBasicBlocks::PreBasicBlock bb, int i | SsaImpl::firstUse(this, bb, i, true) and - result = bb.getElement(i) + result = bb.getNode(i) ) } @@ -191,14 +190,14 @@ module PreSsa { not result instanceof PhiNode } - final predicate isLiveAtEndOfBlock(SsaInput::BasicBlock bb) { + final predicate isLiveAtEndOfBlock(PreBasicBlocks::PreBasicBlock bb) { SsaImpl::ssaDefReachesEndOfBlock(bb, this, _) } override Location getLocation() { result = this.getDefinition().getLocation() or - exists(Callable c, SsaInput::BasicBlock bb, SsaInput::SourceVariable v | + exists(Callable c, PreBasicBlocks::PreBasicBlock bb, SsaInput::SourceVariable v | this.definesAt(v, bb, -1) and implicitEntryDef(c, bb, v) and result = c.getLocation() @@ -213,10 +212,10 @@ module PreSsa { } predicate adjacentReadPairSameVar(AssignableRead read1, AssignableRead read2) { - exists(SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2 | - read1 = bb1.getElement(i1) and + exists(PreBasicBlocks::PreBasicBlock bb1, int i1, PreBasicBlocks::PreBasicBlock bb2, int i2 | + read1 = bb1.getNode(i1) and SsaImpl::adjacentUseUse(bb1, i1, bb2, i2, _, true) and - read2 = bb2.getElement(i2) + read2 = bb2.getNode(i2) ) } } diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll index b6efdfcf1ea..bcc4c48ec92 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll @@ -471,7 +471,7 @@ module FinallySplitting { * the `finally` block exits normally). */ class FinallySplitType extends Cfg::SuccessorType { - FinallySplitType() { not this instanceof Cfg::SuccessorTypes::ConditionalSuccessor } + FinallySplitType() { not this instanceof Cfg::ConditionalSuccessor } /** Holds if this split type matches entry into a `finally` block with completion `c`. */ predicate isSplitForEntryCompletion(Completion c) { @@ -479,7 +479,7 @@ module FinallySplitting { then // If the entry into the `finally` block completes with any normal completion, // it simply means normal execution after the `finally` block - this instanceof Cfg::SuccessorTypes::NormalSuccessor + this instanceof Cfg::DirectSuccessor else this = c.getAMatchingSuccessorType() } } @@ -533,7 +533,7 @@ module FinallySplitting { int getNestLevel() { result = nestLevel } override string toString() { - if type instanceof Cfg::SuccessorTypes::NormalSuccessor + if type instanceof Cfg::DirectSuccessor then result = "" else if nestLevel > 0 @@ -617,14 +617,14 @@ module FinallySplitting { or not c instanceof NormalCompletion or - type instanceof Cfg::SuccessorTypes::NormalSuccessor + type instanceof Cfg::DirectSuccessor ) else ( // Finally block can exit with completion `c` inherited from try/catch // block: must match this split inherited = true and type = c.getAMatchingSuccessorType() and - not type instanceof Cfg::SuccessorTypes::NormalSuccessor + not type instanceof Cfg::DirectSuccessor ) ) or @@ -657,7 +657,7 @@ module FinallySplitting { exists(FinallySplit outer | outer.getNestLevel() = super.getNestLevel() - 1 and outer.(FinallySplitImpl).exit(pred, c, inherited) and - super.getType() instanceof Cfg::SuccessorTypes::NormalSuccessor and + super.getType() instanceof Cfg::DirectSuccessor and inherited = true ) } @@ -899,7 +899,7 @@ module BooleanSplitting { /** Holds if control flow element `cfe` starts a split of this kind. */ predicate startsSplit(AstNode cfe) { - this.correlatesConditions(any(ConditionBlock cb | cb.getLastElement() = cfe), _, _) + this.correlatesConditions(any(ConditionBlock cb | cb.getLastNode() = cfe), _, _) } /** @@ -941,7 +941,7 @@ module BooleanSplitting { /** * Holds if condition `cb` is a read of the SSA variable in this split. */ - private predicate defCondition(ConditionBlock cb) { cb.getLastElement() = def.getARead() } + private predicate defCondition(ConditionBlock cb) { cb.getLastNode() = def.getARead() } /** * Holds if condition `cb` is a read of the SSA variable in this split, @@ -950,7 +950,7 @@ module BooleanSplitting { */ private predicate defConditionReachableFromRead(ConditionBlock cb, AssignableRead read) { this.defCondition(cb) and - read = cb.getLastElement() + read = cb.getLastNode() or exists(AssignableRead mid | this.defConditionReachableFromRead(cb, mid) | PreSsa::adjacentReadPairSameVar(read, mid) and @@ -970,9 +970,9 @@ module BooleanSplitting { override predicate correlatesConditions(ConditionBlock cb1, ConditionBlock cb2, boolean inverted) { this.firstDefCondition(cb1) and exists(AssignableRead read1, AssignableRead read2 | - read1 = cb1.getLastElement() and + read1 = cb1.getLastNode() and PreSsa::adjacentReadPairSameVar+(read1, read2) and - read2 = cb2.getLastElement() and + read2 = cb2.getLastNode() and inverted = false ) } @@ -1088,7 +1088,7 @@ module BooleanSplitting { */ private predicate appliesToBlock(PreBasicBlock bb, Completion c) { this.appliesTo(bb) and - exists(AstNode last | last = bb.getLastElement() | + exists(AstNode last | last = bb.getLastNode() | (succ(last, _, c) or scopeLast(_, last, c)) and // Respect the value recorded in this split for all correlated conditions forall(boolean inverted | bb = this.getACorrelatedCondition(inverted) | @@ -1102,7 +1102,7 @@ module BooleanSplitting { override predicate hasExit(AstNode pred, AstNode succ, Completion c) { exists(PreBasicBlock bb | this.appliesToBlock(bb, c) | - pred = bb.getLastElement() and + pred = bb.getLastNode() and succ(pred, succ, c) and // Exit this split if we can no longer reach a correlated condition not super.getSubKind().canReachCorrelatedCondition(succ) @@ -1111,7 +1111,7 @@ module BooleanSplitting { override predicate hasExitScope(CfgScope scope, AstNode last, Completion c) { exists(PreBasicBlock bb | this.appliesToBlock(bb, c) | - last = bb.getLastElement() and + last = bb.getLastNode() and scopeLast(scope, last, c) ) } @@ -1121,7 +1121,7 @@ module BooleanSplitting { pred = bb.getAnElement() and this.appliesSucc(pred, succ, c) and ( - pred = bb.getLastElement() + pred = bb.getLastNode() implies ( // We must still be able to reach a correlated condition to stay in this split diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/SuccessorType.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/SuccessorType.qll index d6ea2161bbb..c0dae26b30e 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/SuccessorType.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/SuccessorType.qll @@ -4,329 +4,4 @@ * Provides different types of control flow successor types. */ -import csharp -private import Completion -private import semmle.code.csharp.Caching - -cached -private newtype TSuccessorType = - TSuccessorSuccessor() { Stages::ControlFlowStage::forceCachingInSameStage() } or - TBooleanSuccessor(boolean b) { b = true or b = false } or - TNullnessSuccessor(boolean isNull) { isNull = true or isNull = false } or - TMatchingSuccessor(boolean isMatch) { isMatch = true or isMatch = false } or - TEmptinessSuccessor(boolean isEmpty) { isEmpty = true or isEmpty = false } or - TReturnSuccessor() or - TBreakSuccessor() or - TContinueSuccessor() or - TGotoSuccessor(string label) { label = any(GotoStmt gs).getLabel() } or - TExceptionSuccessor(ExceptionClass ec) { exists(ThrowCompletion c | c.getExceptionClass() = ec) } or - TExitSuccessor() - -/** The type of a control flow successor. */ -class SuccessorType extends TSuccessorType { - /** Gets a textual representation of successor type. */ - string toString() { none() } -} - -/** Provides different types of control flow successor types. */ -module SuccessorTypes { - /** A normal control flow successor. */ - class NormalSuccessor extends SuccessorType, TSuccessorSuccessor { - override string toString() { result = "successor" } - } - - /** - * A conditional control flow successor. Either a Boolean successor (`BooleanSuccessor`), - * a nullness successor (`NullnessSuccessor`), a matching successor (`MatchingSuccessor`), - * or an emptiness successor (`EmptinessSuccessor`). - */ - abstract class ConditionalSuccessor extends SuccessorType { - /** Gets the Boolean value of this successor. */ - abstract boolean getValue(); - } - - /** - * A Boolean control flow successor. - * - * For example, this program fragment: - * - * ```csharp - * if (x < 0) - * return 0; - * else - * return 1; - * ``` - * - * has a control flow graph containing Boolean successors: - * - * ``` - * if - * | - * x < 0 - * / \ - * / \ - * / \ - * true false - * | \ - * return 0 return 1 - * ``` - */ - class BooleanSuccessor extends ConditionalSuccessor, TBooleanSuccessor { - override boolean getValue() { this = TBooleanSuccessor(result) } - - override string toString() { result = this.getValue().toString() } - } - - /** - * A nullness control flow successor. - * - * For example, this program fragment: - * - * ```csharp - * int? M(string s) => s?.Length; - * ``` - * - * has a control flow graph containing nullness successors: - * - * ``` - * enter M - * | - * s - * / \ - * / \ - * / \ - * null non-null - * \ | - * \ Length - * \ / - * \ / - * exit M - * ``` - */ - class NullnessSuccessor extends ConditionalSuccessor, TNullnessSuccessor { - /** Holds if this is a `null` successor. */ - predicate isNull() { this = TNullnessSuccessor(true) } - - override boolean getValue() { this = TNullnessSuccessor(result) } - - override string toString() { if this.isNull() then result = "null" else result = "non-null" } - } - - /** - * A matching control flow successor. - * - * For example, this program fragment: - * - * ```csharp - * switch (x) { - * case 0 : - * return 0; - * default : - * return 1; - * } - * ``` - * - * has a control flow graph containing matching successors: - * - * ``` - * switch - * | - * x - * | - * case 0 - * / \ - * / \ - * / \ - * match no-match - * | \ - * return 0 default - * | - * return 1 - * ``` - */ - class MatchingSuccessor extends ConditionalSuccessor, TMatchingSuccessor { - /** Holds if this is a match successor. */ - predicate isMatch() { this = TMatchingSuccessor(true) } - - override boolean getValue() { this = TMatchingSuccessor(result) } - - override string toString() { if this.isMatch() then result = "match" else result = "no-match" } - } - - /** - * An emptiness control flow successor. - * - * For example, this program fragment: - * - * ```csharp - * foreach (var arg in args) - * { - * yield return arg; - * } - * yield return ""; - * ``` - * - * has a control flow graph containing emptiness successors: - * - * ``` - * args - * | - * foreach------<------- - * / \ \ - * / \ | - * / \ | - * / \ | - * empty non-empty | - * | \ | - * yield return "" \ | - * var arg | - * | | - * yield return arg | - * \_________/ - * ``` - */ - class EmptinessSuccessor extends ConditionalSuccessor, TEmptinessSuccessor { - /** Holds if this is an empty successor. */ - predicate isEmpty() { this = TEmptinessSuccessor(true) } - - override boolean getValue() { this = TEmptinessSuccessor(result) } - - override string toString() { if this.isEmpty() then result = "empty" else result = "non-empty" } - } - - /** - * A `return` control flow successor. - * - * Example: - * - * ```csharp - * void M() - * { - * return; - * } - * ``` - * - * The callable exit node of `M` is a `return` successor of the `return;` - * statement. - */ - class ReturnSuccessor extends SuccessorType, TReturnSuccessor { - override string toString() { result = "return" } - } - - /** - * A `break` control flow successor. - * - * Example: - * - * ```csharp - * int M(int x) - * { - * while (true) - * { - * if (x++ > 10) - * break; - * } - * return x; - * } - * ``` - * - * The node `return x;` is a `break` successor of the node `break;`. - */ - class BreakSuccessor extends SuccessorType, TBreakSuccessor { - override string toString() { result = "break" } - } - - /** - * A `continue` control flow successor. - * - * Example: - * - * ```csharp - * int M(int x) - * { - * while (true) { - * if (x++ < 10) - * continue; - * } - * return x; - * } - * ``` - * - * The node `while (true) { ... }` is a `continue` successor of the node - * `continue;`. - */ - class ContinueSuccessor extends SuccessorType, TContinueSuccessor { - override string toString() { result = "continue" } - } - - /** - * A `goto` control flow successor. - * - * Example: - * - * ```csharp - * int M(int x) - * { - * while (true) - * { - * if (x++ > 10) - * goto Return; - * } - * Return: return x; - * } - * ``` - * - * The node `Return: return x` is a `goto label` successor of the node - * `goto Return;`. - */ - class GotoSuccessor extends SuccessorType, TGotoSuccessor { - /** Gets the `goto` label. */ - string getLabel() { this = TGotoSuccessor(result) } - - override string toString() { result = "goto(" + this.getLabel() + ")" } - } - - /** - * An exceptional control flow successor. - * - * Example: - * - * ```csharp - * int M(string s) - * { - * if (s == null) - * throw new ArgumentNullException(nameof(s)); - * return s.Length; - * } - * ``` - * - * The callable exit node of `M` is an exceptional successor (of type - * `ArgumentNullException`) of the node `throw new ArgumentNullException(nameof(s));`. - */ - class ExceptionSuccessor extends SuccessorType, TExceptionSuccessor { - /** Gets the type of exception. */ - ExceptionClass getExceptionClass() { this = TExceptionSuccessor(result) } - - override string toString() { result = "exception(" + this.getExceptionClass().getName() + ")" } - } - - /** - * An exit control flow successor. - * - * Example: - * - * ```csharp - * int M(string s) - * { - * if (s == null) - * System.Environment.Exit(0); - * return s.Length; - * } - * ``` - * - * The callable exit node of `M` is an exit successor of the node on line 4. - */ - class ExitSuccessor extends SuccessorType, TExitSuccessor { - override string toString() { result = "exit" } - } -} +import codeql.controlflow.SuccessorType diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll index 7e8ed0aadc0..3723dcaec12 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll @@ -151,9 +151,7 @@ private predicate exprImpliesSsaDef( * If the returned element takes the `s` branch, then `def` is guaranteed to be * `null` if `nv.isNull()` holds, and non-`null` otherwise. */ -private ControlFlowElement getANullCheck( - Ssa::Definition def, SuccessorTypes::ConditionalSuccessor s, NullValue nv -) { +private ControlFlowElement getANullCheck(Ssa::Definition def, ConditionalSuccessor s, NullValue nv) { exists(Expr e, G::AbstractValue v | v.branch(result, s, e) | exprImpliesSsaDef(e, v, def, nv)) } @@ -294,10 +292,10 @@ private predicate defNullImpliesStep( bb2 = phi.getBasicBlock() ) ) and - not exists(SuccessorTypes::ConditionalSuccessor s, NullValue nv | + not exists(ConditionalSuccessor s, NullValue nv | bb1.getLastNode() = getANullCheck(def1, s, nv).getAControlFlowNode() | - bb2 = bb1.getASuccessorByType(s) and + bb2 = bb1.getASuccessor(s) and nv.isNonNull() ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll index f17317af83b..4c9f64de4b9 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll @@ -451,10 +451,9 @@ module Ssa { * An SSA definition that corresponds to an explicit assignable definition. */ class ExplicitDefinition extends Definition, SsaImpl::WriteDefinition { - SourceVariable sv; AssignableDefinition ad; - ExplicitDefinition() { SsaImpl::explicitDefinition(this, sv, ad) } + ExplicitDefinition() { SsaImpl::explicitDefinition(this, _, ad) } /** * Gets an underlying assignable definition. The result is always unique, diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/BaseSSA.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/BaseSSA.qll index ec1b5a0188e..747cf790d91 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/BaseSSA.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/BaseSSA.qll @@ -5,6 +5,7 @@ import csharp */ module BaseSsa { private import AssignableDefinitions + private import semmle.code.csharp.controlflow.BasicBlocks as BasicBlocks private import codeql.ssa.Ssa as SsaImplCommon /** @@ -27,7 +28,7 @@ module BaseSsa { private predicate implicitEntryDef( Callable c, ControlFlow::BasicBlocks::EntryBlock bb, SsaInput::SourceVariable v ) { - exists(ControlFlow::ControlFlow::BasicBlocks::EntryBlock entry | + exists(ControlFlow::BasicBlocks::EntryBlock entry | c = entry.getCallable() and // In case `c` has multiple bodies, we want each body to get its own implicit // entry definition. In case `c` doesn't have multiple bodies, the line below @@ -42,22 +43,12 @@ module BaseSsa { ) } - private module SsaInput implements SsaImplCommon::InputSig { + private module SsaInput implements SsaImplCommon::InputSig { private import semmle.code.csharp.controlflow.internal.PreSsa - class BasicBlock = ControlFlow::BasicBlock; - - class ControlFlowNode = ControlFlow::Node; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { - result = bb.getImmediateDominator() - } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - class SourceVariable = PreSsa::SimpleLocalScopeVariable; - predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableWrite(ControlFlow::BasicBlock bb, int i, SourceVariable v, boolean certain) { exists(AssignableDefinition def | definitionAt(def, bb, i, v) and if def.isCertain() then certain = true else certain = false @@ -68,7 +59,7 @@ module BaseSsa { certain = true } - predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableRead(ControlFlow::BasicBlock bb, int i, SourceVariable v, boolean certain) { exists(AssignableRead read | read.getAControlFlowNode() = bb.getNode(i) and read.getTarget() = v and @@ -77,7 +68,7 @@ module BaseSsa { } } - private module SsaImpl = SsaImplCommon::Make; + private module SsaImpl = SsaImplCommon::Make; class Definition extends SsaImpl::Definition { final AssignableRead getARead() { @@ -114,7 +105,7 @@ module BaseSsa { override Location getLocation() { result = this.getDefinition().getLocation() or - exists(Callable c, SsaInput::BasicBlock bb, SsaInput::SourceVariable v | + exists(Callable c, ControlFlow::BasicBlock bb, SsaInput::SourceVariable v | this.definesAt(v, bb, -1) and implicitEntryDef(c, bb, v) and result = c.getLocation() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index ff2bf709251..62ac89faef8 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -264,6 +264,7 @@ predicate hasNodePath(ControlFlowReachabilityConfiguration conf, ExprNode n1, No /** Provides logic related to captured variables. */ module VariableCapture { private import codeql.dataflow.VariableCapture as Shared + private import semmle.code.csharp.controlflow.BasicBlocks as BasicBlocks private predicate closureFlowStep(ControlFlow::Nodes::ExprNode e1, ControlFlow::Nodes::ExprNode e2) { e1 = LocalFlow::getALastEvalNode(e2) @@ -275,24 +276,15 @@ module VariableCapture { ) } - private module CaptureInput implements Shared::InputSig { + private module CaptureInput implements Shared::InputSig { private import csharp as Cs private import semmle.code.csharp.controlflow.ControlFlowGraph as Cfg - private import semmle.code.csharp.controlflow.BasicBlocks as BasicBlocks private import TaintTrackingPrivate as TaintTrackingPrivate - class BasicBlock extends BasicBlocks::BasicBlock { - Callable getEnclosingCallable() { result = super.getCallable() } + Callable basicBlockGetEnclosingCallable(BasicBlocks::BasicBlock bb) { + result = bb.getCallable() } - class ControlFlowNode = Cfg::ControlFlow::Node; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { - result = bb.getImmediateDominator() - } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - private predicate thisAccess(ControlFlow::Node cfn, InstanceCallable c) { ThisFlow::thisAccessExpr(cfn.getAstNode()) and cfn.getEnclosingCallable().getEnclosingCallable*() = c @@ -359,7 +351,7 @@ module VariableCapture { } class Expr extends ControlFlow::Node { - predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } + predicate hasCfgNode(BasicBlocks::BasicBlock bb, int i) { this = bb.getNode(i) } } class VariableWrite extends Expr { @@ -411,7 +403,7 @@ module VariableCapture { class ClosureExpr = CaptureInput::ClosureExpr; - module Flow = Shared::Flow; + module Flow = Shared::Flow; private Flow::ClosureNode asClosureNode(Node n) { result = n.(CaptureNode).getSynthesizedCaptureNode() @@ -2591,9 +2583,7 @@ class NodeRegion instanceof ControlFlow::BasicBlock { * Holds if the nodes in `nr` are unreachable when the call context is `call`. */ predicate isUnreachableInCall(NodeRegion nr, DataFlowCall call) { - exists( - ExplicitParameterNode paramNode, Guard guard, ControlFlow::SuccessorTypes::BooleanSuccessor bs - | + exists(ExplicitParameterNode paramNode, Guard guard, ControlFlow::BooleanSuccessor bs | viableConstantBooleanParamArg(paramNode, bs.getValue().booleanNot(), call) and paramNode.getSsaDefinition().getARead() = guard and guard.controlsBlock(nr, bs, _) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll index d1490c84916..1b703d70dbd 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll @@ -6,17 +6,10 @@ import csharp private import codeql.ssa.Ssa as SsaImplCommon private import AssignableDefinitions private import semmle.code.csharp.controlflow.internal.PreSsa +private import semmle.code.csharp.controlflow.BasicBlocks as BasicBlocks private import semmle.code.csharp.controlflow.Guards as Guards -private module SsaInput implements SsaImplCommon::InputSig { - class BasicBlock = ControlFlow::BasicBlock; - - class ControlFlowNode = ControlFlow::Node; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result = bb.getImmediateDominator() } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - +private module SsaInput implements SsaImplCommon::InputSig { class SourceVariable = Ssa::SourceVariable; /** @@ -25,7 +18,7 @@ private module SsaInput implements SsaImplCommon::InputSig { * * This includes implicit writes via calls. */ - predicate variableWrite(BasicBlock bb, int i, Ssa::SourceVariable v, boolean certain) { + predicate variableWrite(ControlFlow::BasicBlock bb, int i, Ssa::SourceVariable v, boolean certain) { variableWriteDirect(bb, i, v, certain) or variableWriteQualifier(bb, i, v, certain) @@ -39,7 +32,7 @@ private module SsaInput implements SsaImplCommon::InputSig { * * This includes implicit reads via calls. */ - predicate variableRead(BasicBlock bb, int i, Ssa::SourceVariable v, boolean certain) { + predicate variableRead(ControlFlow::BasicBlock bb, int i, Ssa::SourceVariable v, boolean certain) { variableReadActual(bb, i, v) and certain = true or @@ -48,7 +41,7 @@ private module SsaInput implements SsaImplCommon::InputSig { } } -import SsaImplCommon::Make as Impl +import SsaImplCommon::Make as Impl class Definition = Impl::Definition; @@ -150,7 +143,7 @@ private module SourceVariableImpl { } /** - * Gets an `out`/`ref` definition of the same source variable as the `out`/`ref` + * Gets an `out`/`ref` definition of the same source variable `v` as the `out`/`ref` * definition `def`, belonging to the same call, at a position after `def`. */ OutRefDefinition getASameOutRefDefAfter(Ssa::SourceVariable v, OutRefDefinition def) { @@ -729,7 +722,7 @@ private predicate variableReadPseudo(ControlFlow::BasicBlock bb, int i, Ssa::Sou pragma[noinline] deprecated private predicate adjacentDefRead( - Definition def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2, + Definition def, ControlFlow::BasicBlock bb1, int i1, ControlFlow::BasicBlock bb2, int i2, SsaInput::SourceVariable v ) { Impl::adjacentDefRead(def, bb1, i1, bb2, i2) and @@ -737,8 +730,8 @@ deprecated private predicate adjacentDefRead( } deprecated private predicate adjacentDefReachesRead( - Definition def, SsaInput::SourceVariable v, SsaInput::BasicBlock bb1, int i1, - SsaInput::BasicBlock bb2, int i2 + Definition def, SsaInput::SourceVariable v, ControlFlow::BasicBlock bb1, int i1, + ControlFlow::BasicBlock bb2, int i2 ) { adjacentDefRead(def, bb1, i1, bb2, i2, v) and ( @@ -747,7 +740,7 @@ deprecated private predicate adjacentDefReachesRead( SsaInput::variableRead(bb1, i1, v, true) ) or - exists(SsaInput::BasicBlock bb3, int i3 | + exists(ControlFlow::BasicBlock bb3, int i3 | adjacentDefReachesRead(def, v, bb1, i1, bb3, i3) and SsaInput::variableRead(bb3, i3, _, false) and Impl::adjacentDefRead(def, bb3, i3, bb2, i2) @@ -755,7 +748,7 @@ deprecated private predicate adjacentDefReachesRead( } deprecated private predicate adjacentDefReachesUncertainRead( - Definition def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2 + Definition def, ControlFlow::BasicBlock bb1, int i1, ControlFlow::BasicBlock bb2, int i2 ) { exists(SsaInput::SourceVariable v | adjacentDefReachesRead(def, v, bb1, i1, bb2, i2) and @@ -766,12 +759,12 @@ deprecated private predicate adjacentDefReachesUncertainRead( /** Same as `lastRefRedef`, but skips uncertain reads. */ pragma[nomagic] deprecated private predicate lastRefSkipUncertainReads( - Definition def, SsaInput::BasicBlock bb, int i + Definition def, ControlFlow::BasicBlock bb, int i ) { Impl::lastRef(def, bb, i) and not SsaInput::variableRead(bb, i, def.getSourceVariable(), false) or - exists(SsaInput::BasicBlock bb0, int i0 | + exists(ControlFlow::BasicBlock bb0, int i0 | Impl::lastRef(def, bb0, i0) and adjacentDefReachesUncertainRead(def, bb, i, bb0, i0) ) @@ -825,8 +818,8 @@ private module Cached { } cached - predicate implicitEntryDefinition(ControlFlow::ControlFlow::BasicBlock bb, Ssa::SourceVariable v) { - exists(ControlFlow::ControlFlow::BasicBlocks::EntryBlock entry, Callable c | + predicate implicitEntryDefinition(ControlFlow::BasicBlock bb, Ssa::SourceVariable v) { + exists(ControlFlow::BasicBlocks::EntryBlock entry, Callable c | c = entry.getCallable() and // In case `c` has multiple bodies, we want each body to get its own implicit // entry definition. In case `c` doesn't have multiple bodies, the line below @@ -1052,9 +1045,9 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu * from `bb1` to `bb2`. */ predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) { - exists(ControlFlow::SuccessorTypes::ConditionalSuccessor s | + exists(ControlFlow::ConditionalSuccessor s | this.getAControlFlowNode() = bb1.getLastNode() and - bb2 = bb1.getASuccessorByType(s) and + bb2 = bb1.getASuccessor(s) and s.getValue() = branch ) } @@ -1071,7 +1064,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu /** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */ predicate guardDirectlyControlsBlock(Guard guard, ControlFlow::BasicBlock bb, GuardValue branch) { - exists(ConditionBlock conditionBlock, ControlFlow::SuccessorTypes::ConditionalSuccessor s | + exists(ConditionBlock conditionBlock, ControlFlow::ConditionalSuccessor s | guard.getAControlFlowNode() = conditionBlock.getLastNode() and s.getValue() = branch and conditionBlock.edgeDominates(bb, s) diff --git a/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll b/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll index 7de6c30eb13..c61ad0f2a2a 100644 --- a/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll @@ -270,6 +270,14 @@ private module Internal { hasOverrider(t, c) } + /** + * For `base` expressions, the extractor provides the type of the base + * class instead of the derived class; this predicate provides the latter. + */ + private Type getBaseAdjustedType(BaseAccess base) { + result = base.getEnclosingCallable().getDeclaringType() + } + abstract private class DispatchOverridableCall extends DispatchCallImpl { pragma[noinline] OverridableCallable getAStaticTargetExt() { @@ -360,7 +368,12 @@ private module Internal { private predicate contextArgHasType(DispatchCall ctx, Type t, boolean isExact) { exists(Expr arg, int i | this.relevantContext(ctx, i) and - t = getAPossibleType(arg, isExact) + ( + t = getBaseAdjustedType(arg) and isExact = false + or + not exists(getBaseAdjustedType(arg)) and + t = getAPossibleType(arg, isExact) + ) | ctx.getArgument(i) = arg or @@ -725,9 +738,7 @@ private module Internal { Type getType(boolean isExact) { result = this.getType() and - if - this instanceof ObjectCreation or - this instanceof BaseAccess + if this instanceof ObjectCreation or this instanceof BaseAccess then isExact = true else isExact = false } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll index ee345780654..f2b46e4ebac 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll @@ -74,7 +74,7 @@ class ReverseDnsSource extends Source { pragma[noinline] private predicate conditionControlsCall0( - SensitiveExecutionMethodCall call, Expr e, ControlFlow::SuccessorTypes::BooleanSuccessor s + SensitiveExecutionMethodCall call, Expr e, ControlFlow::BooleanSuccessor s ) { forex(BasicBlock bb | bb = call.getAControlFlowNode().getBasicBlock() | e.controlsBlock(bb, s, _)) } @@ -82,9 +82,7 @@ private predicate conditionControlsCall0( private predicate conditionControlsCall( SensitiveExecutionMethodCall call, SensitiveExecutionMethod def, Expr e, boolean cond ) { - exists(ControlFlow::SuccessorTypes::BooleanSuccessor s | cond = s.getValue() | - conditionControlsCall0(call, e, s) - ) and + exists(ControlFlow::BooleanSuccessor s | cond = s.getValue() | conditionControlsCall0(call, e, s)) and def = call.getTarget().getUnboundDeclaration() } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll index 27f6ab6935f..5b2bd407a5c 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll @@ -874,7 +874,7 @@ private predicate isStrongTypeFsPicklerCall(MethodCall mc, Method m) { ( m instanceof FsPicklerSerializerClassDeserializeMethod or m instanceof FsPicklerSerializerClassDeserializeSequenceMethod or - m instanceof FsPicklerSerializerClasDeserializeSiftedMethod or + m instanceof FsPicklerSerializerClassDeserializeSiftedMethod or m instanceof FsPicklerSerializerClassUnPickleMethod or m instanceof FsPicklerSerializerClassUnPickleSiftedMethod or m instanceof CsPicklerSerializerClassDeserializeMethod or diff --git a/csharp/ql/lib/semmle/code/csharp/serialization/Deserializers.qll b/csharp/ql/lib/semmle/code/csharp/serialization/Deserializers.qll index aeb34122284..f7c6ade96ea 100644 --- a/csharp/ql/lib/semmle/code/csharp/serialization/Deserializers.qll +++ b/csharp/ql/lib/semmle/code/csharp/serialization/Deserializers.qll @@ -560,9 +560,15 @@ class FsPicklerSerializerClassDeserializeSequenceMethod extends Method, UnsafeDe } } +/** + * DEPRECATED: Use `FsPicklerSerializerClassDeserializeSiftedMethod` instead. + */ +deprecated class FsPicklerSerializerClasDeserializeSiftedMethod = + FsPicklerSerializerClassDeserializeSiftedMethod; + /** `MBrace.FsPickler.FsPicklerSerializer.DeserializeSifted` method */ -class FsPicklerSerializerClasDeserializeSiftedMethod extends Method, UnsafeDeserializer { - FsPicklerSerializerClasDeserializeSiftedMethod() { +class FsPicklerSerializerClassDeserializeSiftedMethod extends Method, UnsafeDeserializer { + FsPicklerSerializerClassDeserializeSiftedMethod() { this.getDeclaringType().getBaseClass*() instanceof FsPicklerSerializerClass and this.hasUndecoratedName("DeserializeSifted") } diff --git a/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql b/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql index 5ec702f77e0..eb71239e0fc 100644 --- a/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql +++ b/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql @@ -89,7 +89,7 @@ class ConstantNullnessCondition extends ConstantCondition { ConstantNullnessCondition() { forex(ControlFlow::Node cfn | cfn = this.getAControlFlowNode() | - exists(ControlFlow::SuccessorTypes::NullnessSuccessor t, ControlFlow::Node s | + exists(ControlFlow::NullnessSuccessor t, ControlFlow::Node s | s = cfn.getASuccessorByType(t) | b = t.getValue() and @@ -112,7 +112,7 @@ class ConstantMatchingCondition extends ConstantCondition { ConstantMatchingCondition() { forex(ControlFlow::Node cfn | cfn = this.getAControlFlowNode() | - exists(ControlFlow::SuccessorTypes::MatchingSuccessor t | exists(cfn.getASuccessorByType(t)) | + exists(ControlFlow::MatchingSuccessor t | exists(cfn.getASuccessorByType(t)) | b = t.getValue() ) and strictcount(ControlFlow::SuccessorType t | exists(cfn.getASuccessorByType(t))) = 1 diff --git a/csharp/ql/src/Bad Practices/Magic Constants/MagicConstants.qll b/csharp/ql/src/Bad Practices/Magic Constants/MagicConstants.qll index 73b82c14700..8c3e0562d39 100644 --- a/csharp/ql/src/Bad Practices/Magic Constants/MagicConstants.qll +++ b/csharp/ql/src/Bad Practices/Magic Constants/MagicConstants.qll @@ -113,7 +113,7 @@ private predicate valueOccurrenceCount(string value, int n) { n > 20 } -private predicate occurenceCount(Literal lit, string value, int n) { +private predicate occurrenceCount(Literal lit, string value, int n) { valueOccurrenceCount(value, n) and value = lit.getValue() and relevantLiteral(lit, value) @@ -127,7 +127,7 @@ private predicate check(Literal lit, string value, int n, File f) { // Check that the literal is nontrivial not trivial(lit) and // Check that it is repeated a number of times - occurenceCount(lit, value, n) and + occurrenceCount(lit, value, n) and n > 20 and f = lit.getFile() } diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 2539f93099f..e1109181fca 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.3.4 + +No user-facing changes. + ## 1.3.3 No user-facing changes. diff --git a/csharp/ql/src/Language Abuse/UselessUpcast.ql b/csharp/ql/src/Language Abuse/UselessUpcast.ql index 827d16038b2..a06dc60cc7a 100644 --- a/csharp/ql/src/Language Abuse/UselessUpcast.ql +++ b/csharp/ql/src/Language Abuse/UselessUpcast.ql @@ -75,15 +75,16 @@ private class ConstructorCall extends Call { /** An explicit upcast. */ class ExplicitUpcast extends ExplicitCast { - ValueOrRefType src; ValueOrRefType dest; ExplicitUpcast() { - src = this.getSourceType() and - dest = this.getTargetType() and - (src instanceof RefType or src instanceof Struct) and - src.isImplicitlyConvertibleTo(dest) and - src != dest // Handled by `cs/useless-cast-to-self` + exists(ValueOrRefType src | + src = this.getSourceType() and + dest = this.getTargetType() and + (src instanceof RefType or src instanceof Struct) and + src.isImplicitlyConvertibleTo(dest) and + src != dest // Handled by `cs/useless-cast-to-self` + ) } pragma[nomagic] diff --git a/csharp/ql/src/Security Features/CWE-384/AbandonSession.ql b/csharp/ql/src/Security Features/CWE-384/AbandonSession.ql index 5258d6a4cd2..c350c8f3755 100644 --- a/csharp/ql/src/Security Features/CWE-384/AbandonSession.ql +++ b/csharp/ql/src/Security Features/CWE-384/AbandonSession.ql @@ -21,10 +21,10 @@ predicate loginMethod(Method m, ControlFlow::SuccessorType flowFrom) { or m = any(SystemWebSecurityFormsAuthenticationClass c).getAuthenticateMethod() ) and - flowFrom.(ControlFlow::SuccessorTypes::BooleanSuccessor).getValue() = true + flowFrom.(ControlFlow::BooleanSuccessor).getValue() = true or m = any(SystemWebSecurityFormsAuthenticationClass c).getSignOutMethod() and - flowFrom instanceof ControlFlow::SuccessorTypes::NormalSuccessor + flowFrom instanceof ControlFlow::DirectSuccessor } /** The `System.Web.SessionState.HttpSessionState` class. */ diff --git a/csharp/ql/src/Telemetry/DatabaseQuality.qll b/csharp/ql/src/Telemetry/DatabaseQuality.qll index fa6c70dbc51..ca2ab3e7e16 100644 --- a/csharp/ql/src/Telemetry/DatabaseQuality.qll +++ b/csharp/ql/src/Telemetry/DatabaseQuality.qll @@ -12,7 +12,7 @@ module CallTargetStats implements StatsSig { private predicate isNoSetterPropertyCallInConstructor(PropertyCall c) { exists(Property p, Constructor ctor | p = c.getProperty() and - not exists(Setter a | a = p.getAnAccessor()) and + not p.getAnAccessor() instanceof Setter and c.getEnclosingCallable() = ctor and ( c.hasThisQualifier() @@ -25,7 +25,7 @@ module CallTargetStats implements StatsSig { private predicate isNoSetterPropertyInitialization(PropertyCall c) { exists(Property p, AssignExpr assign | p = c.getProperty() and - not exists(Setter a | a = p.getAnAccessor()) and + not p.getAnAccessor() instanceof Setter and assign = c.getParent() and assign.getLValue() = c and assign.getParent() instanceof Property diff --git a/csharp/ql/src/change-notes/released/1.3.4.md b/csharp/ql/src/change-notes/released/1.3.4.md new file mode 100644 index 00000000000..5073aca7222 --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.3.4.md @@ -0,0 +1,3 @@ +## 1.3.4 + +No user-facing changes. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index eb1f7dabc84..8263ddf2c8b 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.3.3 +lastReleaseVersion: 1.3.4 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 0567f720300..edb6f9dbe11 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.3.4-dev +version: 1.3.5-dev groups: - csharp - queries diff --git a/csharp/ql/test/library-tests/assignables/AssignableDefinitionNode.expected b/csharp/ql/test/library-tests/assignables/AssignableDefinitionNode.expected index 7d1d5bf5af2..0189d522a6c 100644 --- a/csharp/ql/test/library-tests/assignables/AssignableDefinitionNode.expected +++ b/csharp/ql/test/library-tests/assignables/AssignableDefinitionNode.expected @@ -81,7 +81,7 @@ | Discards.cs:25:22:25:22 | String _ | Discards.cs:25:22:25:22 | String _ | | Finally.cs:7:13:7:17 | Int32 i = ... | Finally.cs:7:13:7:17 | Int32 i = ... | | Finally.cs:15:13:15:17 | ... = ... | Finally.cs:15:13:15:17 | ... = ... | -| Finally.cs:15:13:15:17 | ... = ... | Finally.cs:15:13:15:17 | [finally: exception(Exception)] ... = ... | +| Finally.cs:15:13:15:17 | ... = ... | Finally.cs:15:13:15:17 | [finally: exception] ... = ... | | Patterns.cs:7:16:7:23 | Object o = ... | Patterns.cs:7:16:7:23 | Object o = ... | | Patterns.cs:8:18:8:23 | Int32 i1 | Patterns.cs:8:18:8:23 | Int32 i1 | | Patterns.cs:12:23:12:31 | String s1 | Patterns.cs:12:23:12:31 | String s1 | diff --git a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected index 6177eb7e335..4f78a6f8303 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected @@ -435,33 +435,32 @@ | Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | exit Finally | 5 | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:11:13:11:37 | call to method WriteLine | 7 | | Finally.cs:7:10:7:11 | exit M1 | Finally.cs:7:10:7:11 | exit M1 | 1 | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:7:10:7:11 | exit M1 (abnormal) | 5 | +| Finally.cs:14:9:16:9 | [finally: exception] {...} | Finally.cs:7:10:7:11 | exit M1 (abnormal) | 5 | | Finally.cs:14:9:16:9 | {...} | Finally.cs:7:10:7:11 | exit M1 (normal) | 5 | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:23:13:23:37 | call to method WriteLine | 7 | | Finally.cs:19:10:19:11 | exit M2 | Finally.cs:19:10:19:11 | exit M2 | 1 | -| Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:19:10:19:11 | exit M2 (abnormal) | 1 | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | exit M2 (normal) | 1 | | Finally.cs:24:13:24:19 | return ...; | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | 5 | | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | 1 | | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:26:48:26:51 | [exception: Exception] true | 2 | -| Finally.cs:27:9:29:9 | {...} | Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | 6 | +| Finally.cs:27:9:29:9 | {...} | Finally.cs:28:13:28:18 | throw ...; | 2 | | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | 1 | | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:34:21:34:24 | true | 6 | -| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | 9 | +| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:38:17:38:44 | [finally: exception] throw ...; | 5 | | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | 1 | | Finally.cs:42:9:43:9 | {...} | Finally.cs:50:13:50:40 | call to method WriteLine | 5 | +| Finally.cs:49:9:51:9 | [finally: exception] {...} | Finally.cs:19:10:19:11 | exit M2 (abnormal) | 5 | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:58:13:58:37 | call to method WriteLine | 7 | | Finally.cs:54:10:54:11 | exit M3 | Finally.cs:54:10:54:11 | exit M3 | 1 | -| Finally.cs:54:10:54:11 | exit M3 (abnormal) | Finally.cs:54:10:54:11 | exit M3 (abnormal) | 1 | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:54:10:54:11 | exit M3 (normal) | 1 | | Finally.cs:59:13:59:19 | return ...; | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | 5 | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | 1 | | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:61:48:61:51 | [exception: Exception] true | 2 | -| Finally.cs:62:9:64:9 | {...} | Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | 6 | +| Finally.cs:62:9:64:9 | {...} | Finally.cs:63:13:63:18 | throw ...; | 2 | | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | 1 | | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | 5 | | Finally.cs:66:9:67:9 | {...} | Finally.cs:70:13:70:40 | call to method WriteLine | 5 | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | 4 | +| Finally.cs:69:9:71:9 | [finally: exception] {...} | Finally.cs:54:10:54:11 | exit M3 (abnormal) | 5 | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:77:9:100:9 | while (...) ... | 6 | | Finally.cs:74:10:74:11 | exit M4 | Finally.cs:74:10:74:11 | exit M4 | 1 | | Finally.cs:74:10:74:11 | exit M4 (abnormal) | Finally.cs:74:10:74:11 | exit M4 (abnormal) | 1 | @@ -482,12 +481,12 @@ | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | 1 | | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | 1 | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:31:93:45 | object creation of type Exception | 1 | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | 4 | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | 4 | +| Finally.cs:96:17:98:17 | [finally(1): exception] {...} | Finally.cs:97:21:97:23 | [finally(1): exception] ...-- | 4 | +| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | Finally.cs:97:21:97:23 | [finally: break, finally(1): exception] ...-- | 4 | | Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:97:21:97:23 | [finally: break] ...-- | 4 | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | 4 | +| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception] ...-- | 4 | | Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:97:21:97:23 | [finally: continue] ...-- | 4 | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | 4 | +| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | Finally.cs:97:21:97:23 | [finally: return, finally(1): exception] ...-- | 4 | | Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:97:21:97:23 | [finally: return] ...-- | 4 | | Finally.cs:96:17:98:17 | {...} | Finally.cs:97:21:97:23 | ...-- | 4 | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:107:17:107:21 | access to field Field | 7 | @@ -500,75 +499,55 @@ | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:109:17:109:21 | access to field Field | 3 | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:17:109:28 | access to property Length | 1 | | Finally.cs:109:33:109:33 | 1 | Finally.cs:109:17:109:33 | ... == ... | 2 | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | 8 | +| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:110:17:110:49 | throw ...; | 1 | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | 1 | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | 7 | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | 7 | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:114:19:114:35 | [finally: exception] ... == ... | 7 | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:19:114:35 | ... == ... | 7 | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | 1 | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | 1 | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | 1 | +| Finally.cs:114:17:114:36 | [false, finally: exception] !... | Finally.cs:114:17:114:36 | [false, finally: exception] !... | 1 | | Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:114:17:114:36 | [false, finally: return] !... | 1 | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:114:17:114:36 | [false] !... | 1 | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | 1 | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | 1 | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | 1 | +| Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:114:17:114:36 | [true, finally: exception] !... | 1 | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:114:17:114:36 | [true, finally: return] !... | 1 | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:114:17:114:36 | [true] !... | 1 | | Finally.cs:115:17:115:41 | ...; | Finally.cs:115:17:115:40 | call to method WriteLine | 4 | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | 4 | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | 4 | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | 4 | +| Finally.cs:115:17:115:41 | [finally: exception] ...; | Finally.cs:115:17:115:40 | [finally: exception] call to method WriteLine | 4 | | Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | 4 | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | 6 | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | 6 | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | 6 | +| Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:116:17:116:32 | [finally: exception] ... > ... | 6 | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:116:17:116:32 | [finally: return] ... > ... | 6 | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:116:17:116:32 | ... > ... | 6 | | Finally.cs:117:17:117:37 | ...; | Finally.cs:117:17:117:36 | call to method WriteLine | 3 | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | 3 | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | 3 | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | 3 | +| Finally.cs:117:17:117:37 | [finally: exception] ...; | Finally.cs:117:17:117:36 | [finally: exception] call to method WriteLine | 3 | | Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | 3 | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:121:10:121:11 | exit M6 | 12 | | Finally.cs:133:10:133:11 | enter M7 | Finally.cs:137:13:137:36 | call to method WriteLine | 7 | | Finally.cs:133:10:133:11 | exit M7 (abnormal) | Finally.cs:133:10:133:11 | exit M7 | 2 | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | 4 | +| Finally.cs:140:9:143:9 | [finally: exception] {...} | Finally.cs:141:13:141:44 | [finally: exception] throw ...; | 4 | | Finally.cs:140:9:143:9 | {...} | Finally.cs:141:13:141:44 | throw ...; | 4 | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:151:17:151:28 | ... == ... | 8 | | Finally.cs:147:10:147:11 | exit M8 | Finally.cs:147:10:147:11 | exit M8 | 1 | | Finally.cs:147:10:147:11 | exit M8 (abnormal) | Finally.cs:147:10:147:11 | exit M8 (abnormal) | 1 | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:147:10:147:11 | exit M8 (normal) | 1 | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | 7 | +| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:152:17:152:50 | throw ...; | 1 | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | 1 | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | 6 | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:158:21:158:31 | [finally: exception] access to property Length | 6 | | Finally.cs:155:9:169:9 | {...} | Finally.cs:158:21:158:31 | access to property Length | 6 | | Finally.cs:158:36:158:36 | 1 | Finally.cs:158:21:158:36 | ... == ... | 2 | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | 2 | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | 2 | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | 1 | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | 1 | +| Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:158:21:158:36 | [finally: exception] ... == ... | 2 | +| Finally.cs:159:21:159:45 | [finally: exception] throw ...; | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | 1 | | Finally.cs:159:21:159:45 | throw ...; | Finally.cs:159:21:159:45 | throw ...; | 1 | | Finally.cs:159:41:159:43 | "1" | Finally.cs:159:27:159:44 | object creation of type Exception | 2 | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | 2 | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | 2 | +| Finally.cs:159:41:159:43 | [finally: exception] "1" | Finally.cs:159:27:159:44 | [finally: exception] object creation of type Exception | 2 | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | 1 | | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | 1 | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | 1 | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | 1 | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | 1 | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | 1 | +| Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | 1 | +| Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | 1 | | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | 5 | | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | 5 | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | 5 | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | 5 | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | 5 | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | 5 | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | 6 | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | 6 | +| Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | 5 | +| Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | 5 | +| Finally.cs:162:13:164:13 | [finally: exception] {...} | Finally.cs:163:17:163:42 | [finally: exception] call to method WriteLine | 6 | | Finally.cs:162:13:164:13 | {...} | Finally.cs:163:17:163:42 | call to method WriteLine | 6 | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | 5 | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | 5 | +| Finally.cs:165:13:168:13 | [finally: exception] catch {...} | Finally.cs:167:17:167:37 | [finally: exception] call to method WriteLine | 5 | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:167:17:167:37 | call to method WriteLine | 5 | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | exit ExceptionA | 5 | | Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | exit ExceptionB | 5 | @@ -577,89 +556,66 @@ | Finally.cs:176:10:176:11 | exit M9 | Finally.cs:176:10:176:11 | exit M9 | 1 | | Finally.cs:176:10:176:11 | exit M9 (abnormal) | Finally.cs:176:10:176:11 | exit M9 (abnormal) | 1 | | Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:176:10:176:11 | exit M9 (normal) | 1 | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | 6 | +| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | 1 | | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | 1 | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | 5 | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | 5 | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | 5 | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | 2 | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 2 | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 2 | +| Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 2 | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | 1 | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | 1 | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | 1 | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | 1 | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | 1 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 1 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 1 | +| Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 1 | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | 1 | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | 1 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 | +| Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 | +| Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | 3 | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | 3 | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | 3 | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | 2 | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | 2 | +| Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | 3 | +| Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception] throw ...; | 2 | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:17:199:18 | access to parameter b1 | 6 | | Finally.cs:195:10:195:12 | exit M10 | Finally.cs:195:10:195:12 | exit M10 | 1 | | Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | exit M10 (abnormal) | 1 | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | 6 | +| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:199:21:199:43 | throw ...; | 1 | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:27:199:42 | object creation of type ExceptionA | 1 | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | 5 | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | 5 | | Finally.cs:202:9:212:9 | {...} | Finally.cs:205:21:205:22 | access to parameter b2 | 5 | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | 4 | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | 4 | -| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | 4 | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | 1 | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | 1 | +| Finally.cs:205:25:205:47 | [finally: exception] throw ...; | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | 1 | +| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:205:25:205:47 | throw ...; | 1 | +| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | 1 | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:31:205:46 | object creation of type ExceptionB | 1 | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | 3 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | 3 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | 3 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | 3 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | 3 | +| Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | 3 | +| Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:209:21:209:22 | [finally: exception, finally(1): exception] access to parameter b3 | 3 | +| Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | 3 | | Finally.cs:208:13:210:13 | {...} | Finally.cs:209:21:209:22 | access to parameter b3 | 3 | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | 2 | +| Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception] throw ...; | 2 | +| Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception, finally(1): exception] throw ...; | 2 | +| Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception] throw ...; | 2 | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:25:209:47 | throw ...; | 2 | | Finally.cs:211:13:211:29 | ...; | Finally.cs:195:10:195:12 | exit M10 (normal) | 9 | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | 4 | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | 4 | +| Finally.cs:211:13:211:29 | [finally: exception] ...; | Finally.cs:211:13:211:28 | [finally: exception] ... = ... | 4 | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:220:13:220:36 | call to method WriteLine | 7 | | Finally.cs:222:9:225:9 | catch {...} | Finally.cs:224:13:224:38 | call to method WriteLine | 5 | | Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | exit M11 | 9 | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:239:21:239:22 | access to parameter b1 | 8 | | Finally.cs:233:10:233:12 | exit M12 | Finally.cs:233:10:233:12 | exit M12 | 1 | -| Finally.cs:233:10:233:12 | exit M12 (abnormal) | Finally.cs:233:10:233:12 | exit M12 (abnormal) | 1 | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | 6 | +| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:240:21:240:43 | throw ...; | 1 | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:27:240:42 | object creation of type ExceptionA | 1 | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | 5 | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | 5 | | Finally.cs:243:13:253:13 | {...} | Finally.cs:246:25:246:26 | access to parameter b2 | 5 | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | 5 | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | 5 | -| Finally.cs:247:25:247:47 | throw ...; | Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | 5 | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | 1 | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | 1 | +| Finally.cs:247:25:247:47 | [finally: exception] throw ...; | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | 1 | +| Finally.cs:247:25:247:47 | throw ...; | Finally.cs:247:25:247:47 | throw ...; | 1 | +| Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | 1 | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:31:247:46 | object creation of type ExceptionA | 1 | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | 4 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | 4 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | 4 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | 4 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | 4 | +| Finally.cs:250:17:252:17 | [finally(1): exception] {...} | Finally.cs:251:21:251:54 | [finally(1): exception] call to method WriteLine | 4 | +| Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | Finally.cs:251:21:251:54 | [finally: exception, finally(1): exception] call to method WriteLine | 4 | +| Finally.cs:250:17:252:17 | [finally: exception] {...} | Finally.cs:251:21:251:54 | [finally: exception] call to method WriteLine | 4 | | Finally.cs:250:17:252:17 | {...} | Finally.cs:254:13:254:44 | call to method WriteLine | 7 | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | 4 | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | 4 | +| Finally.cs:257:9:259:9 | [finally: exception] {...} | Finally.cs:233:10:233:12 | exit M12 (abnormal) | 5 | | Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | exit M12 (normal) | 8 | | Finally.cs:263:10:263:12 | enter M13 | Finally.cs:267:13:267:34 | call to method WriteLine | 7 | | Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | exit M13 | 1 | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:263:10:263:12 | exit M13 (abnormal) | 10 | +| Finally.cs:270:9:273:9 | [finally: exception] {...} | Finally.cs:263:10:263:12 | exit M13 (abnormal) | 10 | | Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | exit M13 (normal) | 10 | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | exit Foreach | 5 | | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:8:29:8:32 | access to parameter args | 3 | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Condition.expected b/csharp/ql/test/library-tests/controlflow/graph/Condition.expected index a59100474ea..b4a4cbb6a15 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Condition.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Condition.expected @@ -1341,11 +1341,9 @@ conditionBlock | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | false | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | false | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:66:9:67:9 | {...} | false | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | false | | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:62:9:64:9 | {...} | true | | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | true | | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:66:9:67:9 | {...} | true | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | true | | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:66:9:67:9 | {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:74:10:74:11 | exit M4 (abnormal) | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:78:9:100:9 | {...} | true | @@ -1363,12 +1361,12 @@ conditionBlock | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | object creation of type Exception | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | true | +| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | true | +| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break] {...} | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | true | +| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue] {...} | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | true | +| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return] {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | {...} | true | | Finally.cs:78:9:100:9 | {...} | Finally.cs:82:21:82:27 | return ...; | true | @@ -1385,17 +1383,17 @@ conditionBlock | Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true | | Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | false | +| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | false | +| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break] {...} | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | false | +| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue] {...} | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | true | +| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | true | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return] {...} | true | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | {...} | false | | Finally.cs:82:21:82:27 | return ...; | Finally.cs:93:25:93:46 | [finally: return] throw ...; | true | | Finally.cs:82:21:82:27 | return ...; | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true | -| Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | true | +| Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | true | | Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return] {...} | false | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:84:21:84:29 | continue; | true | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:85:17:86:26 | if (...) ... | false | @@ -1407,15 +1405,15 @@ conditionBlock | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | false | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | object creation of type Exception | false | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | false | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | false | +| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | false | +| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | false | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break] {...} | false | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | true | +| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | true | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue] {...} | true | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | {...} | false | | Finally.cs:84:21:84:29 | continue; | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | true | | Finally.cs:84:21:84:29 | continue; | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true | -| Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | true | +| Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | true | | Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue] {...} | false | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:86:21:86:26 | break; | true | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:89:13:99:13 | {...} | false | @@ -1423,17 +1421,17 @@ conditionBlock | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:25:93:46 | throw ...; | false | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | true | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:31:93:45 | object creation of type Exception | false | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | false | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | true | +| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | false | +| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | true | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break] {...} | true | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | {...} | false | | Finally.cs:86:21:86:26 | break; | Finally.cs:93:25:93:46 | [finally: break] throw ...; | true | | Finally.cs:86:21:86:26 | break; | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | true | -| Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | true | +| Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | true | | Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break] {...} | false | | Finally.cs:89:13:99:13 | {...} | Finally.cs:93:25:93:46 | throw ...; | true | | Finally.cs:89:13:99:13 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | true | -| Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | true | +| Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | true | | Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | {...} | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:108:17:108:23 | return ...; | true | | Finally.cs:107:33:107:33 | 0 | Finally.cs:109:13:110:49 | if (...) ... | false | @@ -1442,20 +1440,15 @@ conditionBlock | Finally.cs:107:33:107:33 | 0 | Finally.cs:110:17:110:49 | throw ...; | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:113:9:118:9 | {...} | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false, finally: return] !... | true | | Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false] !... | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true, finally: return] !... | true | | Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true] !... | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | ...; | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | [finally: return] ...; | true | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | true | | Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | if (...) ... | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | ...; | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | [finally: return] ...; | true | | Finally.cs:108:17:108:23 | return ...; | Finally.cs:114:17:114:36 | [false, finally: return] !... | true | | Finally.cs:108:17:108:23 | return ...; | Finally.cs:114:17:114:36 | [true, finally: return] !... | false | @@ -1463,228 +1456,149 @@ conditionBlock | Finally.cs:109:33:109:33 | 1 | Finally.cs:110:17:110:49 | throw ...; | true | | Finally.cs:109:33:109:33 | 1 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | true | | Finally.cs:109:33:109:33 | 1 | Finally.cs:113:9:118:9 | {...} | false | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | true | | Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [false] !... | false | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | true | | Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [true] !... | false | | Finally.cs:109:33:109:33 | 1 | Finally.cs:115:17:115:41 | ...; | false | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | true | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | true | | Finally.cs:109:33:109:33 | 1 | Finally.cs:116:13:117:37 | if (...) ... | false | | Finally.cs:109:33:109:33 | 1 | Finally.cs:117:17:117:37 | ...; | false | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | true | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | true | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | false | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | false | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | true | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | false | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | false | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | true | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | false | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | false | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:114:17:114:36 | [false, finally: exception] !... | true | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:114:17:114:36 | [true, finally: exception] !... | false | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:115:17:115:41 | [finally: exception] ...; | false | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:17:114:36 | [false] !... | true | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:17:114:36 | [true] !... | false | | Finally.cs:113:9:118:9 | {...} | Finally.cs:115:17:115:41 | ...; | false | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | true | +| Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:115:17:115:41 | [finally: exception] ...; | true | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | true | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | true | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | true | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | true | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | true | +| Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception] ...; | true | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:117:17:117:37 | [finally: return] ...; | true | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:117:17:117:37 | ...; | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | exit M8 (abnormal) | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | exit M8 (normal) | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:152:17:152:50 | throw ...; | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | true | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | [finally: exception] {...} | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | {...} | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | 1 | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | true | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | [finally: exception] 1 | true | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | throw ...; | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | "1" | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | true | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | [finally: exception] "1" | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | true | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | true | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | true | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | true | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | true | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | [finally: exception] {...} | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | {...} | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | true | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | catch {...} | false | | Finally.cs:158:36:158:36 | 1 | Finally.cs:159:21:159:45 | throw ...; | true | | Finally.cs:158:36:158:36 | 1 | Finally.cs:159:41:159:43 | "1" | true | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | true | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | true | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | true | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | true | +| Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | true | +| Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:159:41:159:43 | [finally: exception] "1" | true | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | true | | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | true | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | true | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | true | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | true | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | true | +| Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | true | +| Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | true | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | true | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | false | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | true | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | true | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | true | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | true | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | true | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | true | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | true | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | true | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | +| Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | +| Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | +| Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:21:199:43 | throw ...; | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | true | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | [finally: exception] {...} | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | {...} | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | true | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | throw ...; | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | true | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | true | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | false | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | true | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception] {...} | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | {...} | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | false | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | true | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | false | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | ...; | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | true | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | true | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | true | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | true | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | false | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | false | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | false | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | true | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | true | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | true | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | false | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | false | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | false | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception] ...; | true | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | true | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | true | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | true | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:208:13:210:13 | [finally: exception] {...} | false | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | true | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | false | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:211:13:211:29 | [finally: exception] ...; | false | | Finally.cs:202:9:212:9 | {...} | Finally.cs:205:25:205:47 | throw ...; | true | | Finally.cs:202:9:212:9 | {...} | Finally.cs:205:31:205:46 | object creation of type ExceptionB | true | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | true | +| Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | true | | Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | {...} | false | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | +| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | true | | Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | object creation of type ExceptionC | false | | Finally.cs:202:9:212:9 | {...} | Finally.cs:211:13:211:29 | ...; | false | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | false | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | false | +| Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | true | +| Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | true | +| Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | true | +| Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:211:13:211:29 | [finally: exception] ...; | false | | Finally.cs:208:13:210:13 | {...} | Finally.cs:209:31:209:46 | object creation of type ExceptionC | true | | Finally.cs:208:13:210:13 | {...} | Finally.cs:211:13:211:29 | ...; | false | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:240:21:240:43 | throw ...; | true | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | true | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | [finally: exception] {...} | true | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | {...} | false | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | true | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | true | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | throw ...; | false | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | true | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | true | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | false | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | false | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | true | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | false | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | true | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception] {...} | true | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | {...} | false | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:257:9:259:9 | {...} | false | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | true | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | true | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | true | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | false | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | true | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | true | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | true | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | false | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | true | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | true | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | true | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:250:17:252:17 | [finally: exception] {...} | false | | Finally.cs:243:13:253:13 | {...} | Finally.cs:247:25:247:47 | throw ...; | true | | Finally.cs:243:13:253:13 | {...} | Finally.cs:247:31:247:46 | object creation of type ExceptionA | true | -| Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | true | +| Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | true | | Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | {...} | false | | Finally.cs:243:13:253:13 | {...} | Finally.cs:257:9:259:9 | {...} | false | | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | exit M1 (normal) | true | @@ -2751,91 +2665,62 @@ conditionFlow | Finally.cs:107:17:107:33 | ... == ... | Finally.cs:109:13:110:49 | if (...) ... | false | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | true | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:113:9:118:9 | {...} | false | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | false | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | false | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | false | +| Finally.cs:114:17:114:36 | [false, finally: exception] !... | Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | false | | Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | false | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:116:13:117:37 | if (...) ... | false | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | true | +| Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:115:17:115:41 | [finally: exception] ...; | true | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | true | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | true | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [false] !... | true | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [true] !... | false | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | true | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | false | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | true | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | false | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | true | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | false | +| Finally.cs:114:19:114:35 | [finally: exception] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception] !... | true | +| Finally.cs:114:19:114:35 | [finally: exception] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception] !... | false | | Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [false, finally: return] !... | true | | Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [true, finally: return] !... | false | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:103:10:103:11 | exit M5 (normal) | false | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:117:17:117:37 | ...; | true | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | true | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | true | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | true | +| Finally.cs:116:17:116:32 | [finally: exception] ... > ... | Finally.cs:117:17:117:37 | [finally: exception] ...; | true | | Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:117:17:117:37 | [finally: return] ...; | true | | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | true | | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:155:9:169:9 | {...} | false | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:147:10:147:11 | exit M8 (normal) | false | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:159:41:159:43 | "1" | true | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | true | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | true | +| Finally.cs:158:21:158:36 | [finally: exception] ... == ... | Finally.cs:159:41:159:43 | [finally: exception] "1" | true | | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:162:13:164:13 | {...} | true | | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:165:13:168:13 | catch {...} | false | | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | {...} | true | | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | false | +| Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | Finally.cs:162:13:164:13 | [finally: exception] {...} | true | +| Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | false | +| Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | [finally: exception] {...} | true | +| Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | false | | Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | true | | Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | false | | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | +| Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true | +| Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | true | +| Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | true | | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | +| Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | true | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | true | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:202:9:212:9 | {...} | false | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | true | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | false | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | true | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | false | +| Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | true | +| Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception] {...} | false | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | true | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:208:13:210:13 | {...} | false | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | false | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | false | +| Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | true | +| Finally.cs:209:21:209:22 | [finally: exception, finally(1): exception] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | true | +| Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | true | +| Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception] ...; | false | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | true | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:211:13:211:29 | ...; | false | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | true | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:243:13:253:13 | {...} | false | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | true | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | false | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | true | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | false | +| Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | true | +| Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception] {...} | false | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | true | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:250:17:252:17 | {...} | false | | LoopUnrolling.cs:9:13:9:28 | ... == ... | LoopUnrolling.cs:10:13:10:19 | return ...; | true | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Condition.ql b/csharp/ql/test/library-tests/controlflow/graph/Condition.ql index 25de07e9d5b..61c80181924 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Condition.ql +++ b/csharp/ql/test/library-tests/controlflow/graph/Condition.ql @@ -4,8 +4,7 @@ import ControlFlow query predicate conditionBlock( BasicBlocks::ConditionBlock cb, BasicBlock controlled, boolean testIsTrue ) { - cb.edgeDominates(controlled, - any(SuccessorTypes::ConditionalSuccessor s | testIsTrue = s.getValue())) + cb.edgeDominates(controlled, any(ConditionalSuccessor s | testIsTrue = s.getValue())) } ControlFlow::Node successor(ControlFlow::Node node, boolean kind) { diff --git a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected index f0a0c6459cb..bc5082c4c18 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected @@ -1067,11 +1067,11 @@ dominance | CompileTimeOperators.cs:29:5:41:5 | {...} | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | CompileTimeOperators.cs:31:9:34:9 | {...} | | CompileTimeOperators.cs:31:9:34:9 | {...} | CompileTimeOperators.cs:32:13:32:21 | goto ...; | -| CompileTimeOperators.cs:32:13:32:21 | goto ...; | CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | -| CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | -| CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | CompileTimeOperators.cs:40:9:40:11 | End: | -| CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | -| CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | +| CompileTimeOperators.cs:32:13:32:21 | goto ...; | CompileTimeOperators.cs:36:9:38:9 | [finally: goto] {...} | +| CompileTimeOperators.cs:36:9:38:9 | [finally: goto] {...} | CompileTimeOperators.cs:37:13:37:41 | [finally: goto] ...; | +| CompileTimeOperators.cs:37:13:37:40 | [finally: goto] call to method WriteLine | CompileTimeOperators.cs:40:9:40:11 | End: | +| CompileTimeOperators.cs:37:13:37:41 | [finally: goto] ...; | CompileTimeOperators.cs:37:31:37:39 | [finally: goto] "Finally" | +| CompileTimeOperators.cs:37:31:37:39 | [finally: goto] "Finally" | CompileTimeOperators.cs:37:13:37:40 | [finally: goto] call to method WriteLine | | CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:40:14:40:38 | ...; | | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | CompileTimeOperators.cs:28:10:28:10 | exit M (normal) | | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:40:32:40:36 | "End" | @@ -1741,18 +1741,18 @@ dominance | Finally.cs:8:5:17:5 | {...} | Finally.cs:9:9:16:9 | try {...} ... | | Finally.cs:9:9:16:9 | try {...} ... | Finally.cs:10:9:12:9 | {...} | | Finally.cs:10:9:12:9 | {...} | Finally.cs:11:13:11:38 | ...; | -| Finally.cs:11:13:11:37 | call to method WriteLine | Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | +| Finally.cs:11:13:11:37 | call to method WriteLine | Finally.cs:14:9:16:9 | [finally: exception] {...} | | Finally.cs:11:13:11:37 | call to method WriteLine | Finally.cs:14:9:16:9 | {...} | | Finally.cs:11:13:11:38 | ...; | Finally.cs:11:31:11:36 | "Try1" | | Finally.cs:11:31:11:36 | "Try1" | Finally.cs:11:13:11:37 | call to method WriteLine | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | +| Finally.cs:14:9:16:9 | [finally: exception] {...} | Finally.cs:15:13:15:41 | [finally: exception] ...; | | Finally.cs:14:9:16:9 | {...} | Finally.cs:15:13:15:41 | ...; | -| Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:7:10:7:11 | exit M1 (abnormal) | +| Finally.cs:15:13:15:40 | [finally: exception] call to method WriteLine | Finally.cs:7:10:7:11 | exit M1 (abnormal) | | Finally.cs:15:13:15:40 | call to method WriteLine | Finally.cs:7:10:7:11 | exit M1 (normal) | | Finally.cs:15:13:15:41 | ...; | Finally.cs:15:31:15:39 | "Finally" | -| Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | +| Finally.cs:15:13:15:41 | [finally: exception] ...; | Finally.cs:15:31:15:39 | [finally: exception] "Finally" | | Finally.cs:15:31:15:39 | "Finally" | Finally.cs:15:13:15:40 | call to method WriteLine | -| Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | +| Finally.cs:15:31:15:39 | [finally: exception] "Finally" | Finally.cs:15:13:15:40 | [finally: exception] call to method WriteLine | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:20:5:52:5 | {...} | | Finally.cs:20:5:52:5 | {...} | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:21:9:51:9 | try {...} ... | Finally.cs:22:9:25:9 | {...} | @@ -1767,7 +1767,6 @@ dominance | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:26:48:26:51 | [exception: Exception] true | | Finally.cs:26:48:26:51 | [exception: Exception] true | Finally.cs:27:9:29:9 | {...} | | Finally.cs:27:9:29:9 | {...} | Finally.cs:28:13:28:18 | throw ...; | -| Finally.cs:28:13:28:18 | throw ...; | Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:31:9:40:9 | {...} | @@ -1776,24 +1775,21 @@ dominance | Finally.cs:33:13:35:13 | {...} | Finally.cs:34:17:34:32 | if (...) ... | | Finally.cs:34:17:34:32 | if (...) ... | Finally.cs:34:21:34:24 | true | | Finally.cs:34:21:34:24 | true | Finally.cs:34:27:34:32 | throw ...; | -| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | -| Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | -| Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | -| Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | -| Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | +| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:37:13:39:13 | [finally: exception] {...} | +| Finally.cs:37:13:39:13 | [finally: exception] {...} | Finally.cs:38:37:38:42 | [finally: exception] "Boo!" | +| Finally.cs:38:23:38:43 | [finally: exception] object creation of type Exception | Finally.cs:38:17:38:44 | [finally: exception] throw ...; | +| Finally.cs:38:37:38:42 | [finally: exception] "Boo!" | Finally.cs:38:23:38:43 | [finally: exception] object creation of type Exception | | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:42:9:43:9 | {...} | | Finally.cs:42:9:43:9 | {...} | Finally.cs:49:9:51:9 | {...} | -| Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | -| Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | +| Finally.cs:49:9:51:9 | [finally: exception] {...} | Finally.cs:50:13:50:41 | [finally: exception] ...; | | Finally.cs:49:9:51:9 | [finally: return] {...} | Finally.cs:50:13:50:41 | [finally: return] ...; | | Finally.cs:49:9:51:9 | {...} | Finally.cs:50:13:50:41 | ...; | +| Finally.cs:50:13:50:40 | [finally: exception] call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (abnormal) | | Finally.cs:50:13:50:41 | ...; | Finally.cs:50:31:50:39 | "Finally" | -| Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | -| Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | +| Finally.cs:50:13:50:41 | [finally: exception] ...; | Finally.cs:50:31:50:39 | [finally: exception] "Finally" | | Finally.cs:50:13:50:41 | [finally: return] ...; | Finally.cs:50:31:50:39 | [finally: return] "Finally" | | Finally.cs:50:31:50:39 | "Finally" | Finally.cs:50:13:50:40 | call to method WriteLine | -| Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | +| Finally.cs:50:31:50:39 | [finally: exception] "Finally" | Finally.cs:50:13:50:40 | [finally: exception] call to method WriteLine | | Finally.cs:50:31:50:39 | [finally: return] "Finally" | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:55:5:72:5 | {...} | | Finally.cs:55:5:72:5 | {...} | Finally.cs:56:9:71:9 | try {...} ... | @@ -1809,26 +1805,22 @@ dominance | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:61:48:61:51 | [exception: Exception] true | | Finally.cs:61:48:61:51 | [exception: Exception] true | Finally.cs:62:9:64:9 | {...} | | Finally.cs:62:9:64:9 | {...} | Finally.cs:63:13:63:18 | throw ...; | -| Finally.cs:63:13:63:18 | throw ...; | Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:65:35:65:35 | [exception: Exception] access to local variable e | | Finally.cs:65:35:65:35 | [exception: Exception] access to local variable e | Finally.cs:65:35:65:43 | [exception: Exception] access to property Message | | Finally.cs:65:35:65:43 | [exception: Exception] access to property Message | Finally.cs:65:48:65:51 | [exception: Exception] null | | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | | Finally.cs:65:48:65:51 | [exception: Exception] null | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | | Finally.cs:66:9:67:9 | {...} | Finally.cs:69:9:71:9 | {...} | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | -| Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | +| Finally.cs:69:9:71:9 | [finally: exception] {...} | Finally.cs:70:13:70:41 | [finally: exception] ...; | | Finally.cs:69:9:71:9 | [finally: return] {...} | Finally.cs:70:13:70:41 | [finally: return] ...; | | Finally.cs:69:9:71:9 | {...} | Finally.cs:70:13:70:41 | ...; | +| Finally.cs:70:13:70:40 | [finally: exception] call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (abnormal) | | Finally.cs:70:13:70:41 | ...; | Finally.cs:70:31:70:39 | "Finally" | -| Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | -| Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | +| Finally.cs:70:13:70:41 | [finally: exception] ...; | Finally.cs:70:31:70:39 | [finally: exception] "Finally" | | Finally.cs:70:13:70:41 | [finally: return] ...; | Finally.cs:70:31:70:39 | [finally: return] "Finally" | | Finally.cs:70:31:70:39 | "Finally" | Finally.cs:70:13:70:40 | call to method WriteLine | -| Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | +| Finally.cs:70:31:70:39 | [finally: exception] "Finally" | Finally.cs:70:13:70:40 | [finally: exception] call to method WriteLine | | Finally.cs:70:31:70:39 | [finally: return] "Finally" | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:75:5:101:5 | {...} | | Finally.cs:75:5:101:5 | {...} | Finally.cs:76:9:76:19 | ... ...; | @@ -1894,36 +1886,36 @@ dominance | Finally.cs:92:30:92:30 | [finally: continue] 3 | Finally.cs:92:25:92:30 | [finally: continue] ... == ... | | Finally.cs:92:30:92:30 | [finally: return] 3 | Finally.cs:92:25:92:30 | [finally: return] ... == ... | | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: break] throw ...; | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | +| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | +| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: return] throw ...; | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | +| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:25:93:46 | throw ...; | -| Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | +| Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | +| Finally.cs:96:17:98:17 | [finally(1): exception] {...} | Finally.cs:97:21:97:24 | [finally(1): exception] ...; | +| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | Finally.cs:97:21:97:24 | [finally: break, finally(1): exception] ...; | | Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:97:21:97:24 | [finally: break] ...; | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | +| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception] ...; | | Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:97:21:97:24 | [finally: continue] ...; | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | +| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | Finally.cs:97:21:97:24 | [finally: return, finally(1): exception] ...; | | Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:97:21:97:24 | [finally: return] ...; | | Finally.cs:96:17:98:17 | {...} | Finally.cs:97:21:97:24 | ...; | -| Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | -| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | +| Finally.cs:97:21:97:21 | [finally(1): exception] access to local variable i | Finally.cs:97:21:97:23 | [finally(1): exception] ...-- | +| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception] access to local variable i | Finally.cs:97:21:97:23 | [finally: break, finally(1): exception] ...-- | | Finally.cs:97:21:97:21 | [finally: break] access to local variable i | Finally.cs:97:21:97:23 | [finally: break] ...-- | -| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | +| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception] access to local variable i | Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception] ...-- | | Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | Finally.cs:97:21:97:23 | [finally: continue] ...-- | -| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | +| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception] access to local variable i | Finally.cs:97:21:97:23 | [finally: return, finally(1): exception] ...-- | | Finally.cs:97:21:97:21 | [finally: return] access to local variable i | Finally.cs:97:21:97:23 | [finally: return] ...-- | | Finally.cs:97:21:97:21 | access to local variable i | Finally.cs:97:21:97:23 | ...-- | | Finally.cs:97:21:97:24 | ...; | Finally.cs:97:21:97:21 | access to local variable i | -| Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | -| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | +| Finally.cs:97:21:97:24 | [finally(1): exception] ...; | Finally.cs:97:21:97:21 | [finally(1): exception] access to local variable i | +| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception] ...; | Finally.cs:97:21:97:21 | [finally: break, finally(1): exception] access to local variable i | | Finally.cs:97:21:97:24 | [finally: break] ...; | Finally.cs:97:21:97:21 | [finally: break] access to local variable i | -| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | +| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception] ...; | Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception] access to local variable i | | Finally.cs:97:21:97:24 | [finally: continue] ...; | Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | -| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | +| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception] ...; | Finally.cs:97:21:97:21 | [finally: return, finally(1): exception] access to local variable i | | Finally.cs:97:21:97:24 | [finally: return] ...; | Finally.cs:97:21:97:21 | [finally: return] access to local variable i | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:104:5:119:5 | {...} | | Finally.cs:104:5:119:5 | {...} | Finally.cs:105:9:118:9 | try {...} ... | @@ -1931,10 +1923,9 @@ dominance | Finally.cs:106:9:111:9 | {...} | Finally.cs:107:13:108:23 | if (...) ... | | Finally.cs:107:13:108:23 | if (...) ... | Finally.cs:107:17:107:21 | this access | | Finally.cs:107:17:107:21 | access to field Field | Finally.cs:107:17:107:28 | access to property Length | -| Finally.cs:107:17:107:21 | access to field Field | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | +| Finally.cs:107:17:107:21 | access to field Field | Finally.cs:113:9:118:9 | [finally: exception] {...} | | Finally.cs:107:17:107:21 | this access | Finally.cs:107:17:107:21 | access to field Field | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:107:33:107:33 | 0 | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | | Finally.cs:107:17:107:33 | ... == ... | Finally.cs:108:17:108:23 | return ...; | | Finally.cs:107:17:107:33 | ... == ... | Finally.cs:109:13:110:49 | if (...) ... | | Finally.cs:107:33:107:33 | 0 | Finally.cs:107:17:107:33 | ... == ... | @@ -1946,107 +1937,67 @@ dominance | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:113:9:118:9 | {...} | | Finally.cs:109:33:109:33 | 1 | Finally.cs:109:17:109:33 | ... == ... | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:17:110:49 | throw ...; | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:114:13:115:41 | [finally: exception] if (...) ... | | Finally.cs:113:9:118:9 | [finally: return] {...} | Finally.cs:114:13:115:41 | [finally: return] if (...) ... | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:13:115:41 | if (...) ... | -| Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | -| Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | -| Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | +| Finally.cs:114:13:115:41 | [finally: exception] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception] this access | | Finally.cs:114:13:115:41 | [finally: return] if (...) ... | Finally.cs:114:19:114:23 | [finally: return] this access | | Finally.cs:114:13:115:41 | if (...) ... | Finally.cs:114:19:114:23 | this access | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | +| Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:115:17:115:41 | [finally: exception] ...; | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | +| Finally.cs:114:19:114:23 | [finally: exception] access to field Field | Finally.cs:114:19:114:30 | [finally: exception] access to property Length | +| Finally.cs:114:19:114:23 | [finally: exception] this access | Finally.cs:114:19:114:23 | [finally: exception] access to field Field | | Finally.cs:114:19:114:23 | [finally: return] access to field Field | Finally.cs:114:19:114:30 | [finally: return] access to property Length | | Finally.cs:114:19:114:23 | [finally: return] this access | Finally.cs:114:19:114:23 | [finally: return] access to field Field | | Finally.cs:114:19:114:23 | access to field Field | Finally.cs:114:19:114:30 | access to property Length | | Finally.cs:114:19:114:23 | this access | Finally.cs:114:19:114:23 | access to field Field | -| Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | -| Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | -| Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | +| Finally.cs:114:19:114:30 | [finally: exception] access to property Length | Finally.cs:114:35:114:35 | [finally: exception] 0 | | Finally.cs:114:19:114:30 | [finally: return] access to property Length | Finally.cs:114:35:114:35 | [finally: return] 0 | | Finally.cs:114:19:114:30 | access to property Length | Finally.cs:114:35:114:35 | 0 | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [false] !... | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [true] !... | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | +| Finally.cs:114:19:114:35 | [finally: exception] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception] !... | +| Finally.cs:114:19:114:35 | [finally: exception] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception] !... | | Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [false, finally: return] !... | | Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [true, finally: return] !... | | Finally.cs:114:35:114:35 | 0 | Finally.cs:114:19:114:35 | ... == ... | -| Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | -| Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | -| Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | +| Finally.cs:114:35:114:35 | [finally: exception] 0 | Finally.cs:114:19:114:35 | [finally: exception] ... == ... | | Finally.cs:114:35:114:35 | [finally: return] 0 | Finally.cs:114:19:114:35 | [finally: return] ... == ... | | Finally.cs:115:17:115:41 | ...; | Finally.cs:115:35:115:39 | this access | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | +| Finally.cs:115:17:115:41 | [finally: exception] ...; | Finally.cs:115:35:115:39 | [finally: exception] this access | | Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:115:35:115:39 | [finally: return] this access | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | +| Finally.cs:115:35:115:39 | [finally: exception] access to field Field | Finally.cs:115:17:115:40 | [finally: exception] call to method WriteLine | +| Finally.cs:115:35:115:39 | [finally: exception] this access | Finally.cs:115:35:115:39 | [finally: exception] access to field Field | | Finally.cs:115:35:115:39 | [finally: return] access to field Field | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | | Finally.cs:115:35:115:39 | [finally: return] this access | Finally.cs:115:35:115:39 | [finally: return] access to field Field | | Finally.cs:115:35:115:39 | access to field Field | Finally.cs:115:17:115:40 | call to method WriteLine | | Finally.cs:115:35:115:39 | this access | Finally.cs:115:35:115:39 | access to field Field | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | +| Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception] this access | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:116:17:116:21 | [finally: return] this access | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:116:17:116:21 | this access | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | +| Finally.cs:116:17:116:21 | [finally: exception] access to field Field | Finally.cs:116:17:116:28 | [finally: exception] access to property Length | +| Finally.cs:116:17:116:21 | [finally: exception] this access | Finally.cs:116:17:116:21 | [finally: exception] access to field Field | | Finally.cs:116:17:116:21 | [finally: return] access to field Field | Finally.cs:116:17:116:28 | [finally: return] access to property Length | | Finally.cs:116:17:116:21 | [finally: return] this access | Finally.cs:116:17:116:21 | [finally: return] access to field Field | | Finally.cs:116:17:116:21 | access to field Field | Finally.cs:116:17:116:28 | access to property Length | | Finally.cs:116:17:116:21 | this access | Finally.cs:116:17:116:21 | access to field Field | -| Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | -| Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | -| Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | +| Finally.cs:116:17:116:28 | [finally: exception] access to property Length | Finally.cs:116:32:116:32 | [finally: exception] 0 | | Finally.cs:116:17:116:28 | [finally: return] access to property Length | Finally.cs:116:32:116:32 | [finally: return] 0 | | Finally.cs:116:17:116:28 | access to property Length | Finally.cs:116:32:116:32 | 0 | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | +| Finally.cs:116:17:116:32 | [finally: exception] ... > ... | Finally.cs:103:10:103:11 | exit M5 (abnormal) | +| Finally.cs:116:17:116:32 | [finally: exception] ... > ... | Finally.cs:117:17:117:37 | [finally: exception] ...; | | Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:116:32:116:32 | 0 | Finally.cs:116:17:116:32 | ... > ... | -| Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | -| Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | -| Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | +| Finally.cs:116:32:116:32 | [finally: exception] 0 | Finally.cs:116:17:116:32 | [finally: exception] ... > ... | | Finally.cs:116:32:116:32 | [finally: return] 0 | Finally.cs:116:17:116:32 | [finally: return] ... > ... | | Finally.cs:117:17:117:37 | ...; | Finally.cs:117:35:117:35 | 1 | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | +| Finally.cs:117:17:117:37 | [finally: exception] ...; | Finally.cs:117:35:117:35 | [finally: exception] 1 | | Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:117:35:117:35 | [finally: return] 1 | | Finally.cs:117:35:117:35 | 1 | Finally.cs:117:17:117:36 | call to method WriteLine | -| Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | -| Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | +| Finally.cs:117:35:117:35 | [finally: exception] 1 | Finally.cs:117:17:117:36 | [finally: exception] call to method WriteLine | | Finally.cs:117:35:117:35 | [finally: return] 1 | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:122:5:131:5 | {...} | | Finally.cs:121:10:121:11 | exit M6 (normal) | Finally.cs:121:10:121:11 | exit M6 | @@ -2064,16 +2015,16 @@ dominance | Finally.cs:134:5:145:5 | {...} | Finally.cs:135:9:143:9 | try {...} ... | | Finally.cs:135:9:143:9 | try {...} ... | Finally.cs:136:9:138:9 | {...} | | Finally.cs:136:9:138:9 | {...} | Finally.cs:137:13:137:37 | ...; | -| Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | +| Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:140:9:143:9 | [finally: exception] {...} | | Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:140:9:143:9 | {...} | | Finally.cs:137:13:137:37 | ...; | Finally.cs:137:31:137:35 | "Try" | | Finally.cs:137:31:137:35 | "Try" | Finally.cs:137:13:137:36 | call to method WriteLine | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | +| Finally.cs:140:9:143:9 | [finally: exception] {...} | Finally.cs:141:41:141:42 | [finally: exception] "" | | Finally.cs:140:9:143:9 | {...} | Finally.cs:141:41:141:42 | "" | -| Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | +| Finally.cs:141:19:141:43 | [finally: exception] object creation of type ArgumentException | Finally.cs:141:13:141:44 | [finally: exception] throw ...; | | Finally.cs:141:19:141:43 | object creation of type ArgumentException | Finally.cs:141:13:141:44 | throw ...; | | Finally.cs:141:41:141:42 | "" | Finally.cs:141:19:141:43 | object creation of type ArgumentException | -| Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | +| Finally.cs:141:41:141:42 | [finally: exception] "" | Finally.cs:141:19:141:43 | [finally: exception] object creation of type ArgumentException | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:148:5:170:5 | {...} | | Finally.cs:148:5:170:5 | {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:149:9:169:9 | try {...} ... | Finally.cs:150:9:153:9 | {...} | @@ -2083,102 +2034,70 @@ dominance | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:155:9:169:9 | {...} | | Finally.cs:151:25:151:28 | null | Finally.cs:151:17:151:28 | ... == ... | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:17:152:50 | throw ...; | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | -| Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | +| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:155:9:169:9 | [finally: exception] {...} | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:156:13:168:13 | [finally: exception] try {...} ... | | Finally.cs:155:9:169:9 | {...} | Finally.cs:156:13:168:13 | try {...} ... | -| Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | +| Finally.cs:156:13:168:13 | [finally: exception] try {...} ... | Finally.cs:157:13:160:13 | [finally: exception] {...} | | Finally.cs:156:13:168:13 | try {...} ... | Finally.cs:157:13:160:13 | {...} | -| Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | -| Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | +| Finally.cs:157:13:160:13 | [finally: exception] {...} | Finally.cs:158:17:159:45 | [finally: exception] if (...) ... | | Finally.cs:157:13:160:13 | {...} | Finally.cs:158:17:159:45 | if (...) ... | -| Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | -| Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | +| Finally.cs:158:17:159:45 | [finally: exception] if (...) ... | Finally.cs:158:21:158:24 | [finally: exception] access to parameter args | | Finally.cs:158:17:159:45 | if (...) ... | Finally.cs:158:21:158:24 | access to parameter args | -| Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | -| Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | +| Finally.cs:158:21:158:24 | [finally: exception] access to parameter args | Finally.cs:158:21:158:31 | [finally: exception] access to property Length | | Finally.cs:158:21:158:24 | access to parameter args | Finally.cs:158:21:158:31 | access to property Length | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | +| Finally.cs:158:21:158:31 | [finally: exception] access to property Length | Finally.cs:158:36:158:36 | [finally: exception] 1 | +| Finally.cs:158:21:158:31 | [finally: exception] access to property Length | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | +| Finally.cs:158:21:158:31 | [finally: exception] access to property Length | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | | Finally.cs:158:21:158:31 | access to property Length | Finally.cs:158:36:158:36 | 1 | | Finally.cs:158:21:158:31 | access to property Length | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | | Finally.cs:158:21:158:31 | access to property Length | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | +| Finally.cs:158:21:158:36 | [finally: exception] ... == ... | Finally.cs:159:41:159:43 | [finally: exception] "1" | | Finally.cs:158:36:158:36 | 1 | Finally.cs:158:21:158:36 | ... == ... | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | -| Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | +| Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:158:21:158:36 | [finally: exception] ... == ... | +| Finally.cs:159:27:159:44 | [finally: exception] object creation of type Exception | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | | Finally.cs:159:27:159:44 | object creation of type Exception | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:159:41:159:43 | "1" | Finally.cs:159:27:159:44 | object creation of type Exception | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | +| Finally.cs:159:41:159:43 | [finally: exception] "1" | Finally.cs:159:27:159:44 | [finally: exception] object creation of type Exception | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | +| Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | +| Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | +| Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | Finally.cs:161:39:161:39 | [finally: exception, exception: Exception] access to local variable e | +| Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [finally: exception, exception: NullReferenceException] access to local variable e | | Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | | Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | +| Finally.cs:161:39:161:39 | [finally: exception, exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception, exception: Exception] access to property Message | +| Finally.cs:161:39:161:39 | [finally: exception, exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception, exception: NullReferenceException] access to property Message | | Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [exception: Exception] "1" | | Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | +| Finally.cs:161:39:161:47 | [finally: exception, exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [finally: exception, exception: Exception] "1" | +| Finally.cs:161:39:161:47 | [finally: exception, exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [finally: exception, exception: NullReferenceException] "1" | | Finally.cs:161:52:161:54 | [exception: Exception] "1" | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | | Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | +| Finally.cs:161:52:161:54 | [finally: exception, exception: Exception] "1" | Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | +| Finally.cs:161:52:161:54 | [finally: exception, exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | +| Finally.cs:162:13:164:13 | [finally: exception] {...} | Finally.cs:163:17:163:43 | [finally: exception] ...; | | Finally.cs:162:13:164:13 | {...} | Finally.cs:163:17:163:43 | ...; | | Finally.cs:163:17:163:43 | ...; | Finally.cs:163:35:163:38 | access to parameter args | -| Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | -| Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | -| Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | -| Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | +| Finally.cs:163:17:163:43 | [finally: exception] ...; | Finally.cs:163:35:163:38 | [finally: exception] access to parameter args | +| Finally.cs:163:35:163:38 | [finally: exception] access to parameter args | Finally.cs:163:40:163:40 | [finally: exception] 0 | | Finally.cs:163:35:163:38 | access to parameter args | Finally.cs:163:40:163:40 | 0 | -| Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | -| Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | +| Finally.cs:163:35:163:41 | [finally: exception] access to array element | Finally.cs:163:17:163:42 | [finally: exception] call to method WriteLine | | Finally.cs:163:35:163:41 | access to array element | Finally.cs:163:17:163:42 | call to method WriteLine | | Finally.cs:163:40:163:40 | 0 | Finally.cs:163:35:163:41 | access to array element | -| Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | -| Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | +| Finally.cs:163:40:163:40 | [finally: exception] 0 | Finally.cs:163:35:163:41 | [finally: exception] access to array element | +| Finally.cs:165:13:168:13 | [finally: exception] catch {...} | Finally.cs:166:13:168:13 | [finally: exception] {...} | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:166:13:168:13 | {...} | -| Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | -| Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | +| Finally.cs:166:13:168:13 | [finally: exception] {...} | Finally.cs:167:17:167:38 | [finally: exception] ...; | | Finally.cs:166:13:168:13 | {...} | Finally.cs:167:17:167:38 | ...; | | Finally.cs:167:17:167:38 | ...; | Finally.cs:167:35:167:36 | "" | -| Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | -| Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | +| Finally.cs:167:17:167:38 | [finally: exception] ...; | Finally.cs:167:35:167:36 | [finally: exception] "" | | Finally.cs:167:35:167:36 | "" | Finally.cs:167:17:167:37 | call to method WriteLine | -| Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | -| Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | +| Finally.cs:167:35:167:36 | [finally: exception] "" | Finally.cs:167:17:167:37 | [finally: exception] call to method WriteLine | | Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | {...} | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | call to constructor Exception | | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | Finally.cs:172:11:172:20 | exit ExceptionA | @@ -2198,50 +2117,35 @@ dominance | Finally.cs:180:13:180:43 | if (...) ... | Finally.cs:180:17:180:18 | access to parameter b1 | | Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | | Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | +| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | -| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception, b1 (line 176): true] try {...} ... | | Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | -| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | +| Finally.cs:184:13:191:13 | [finally: exception, b1 (line 176): true] try {...} ... | Finally.cs:185:13:187:13 | [finally: exception, b1 (line 176): true] {...} | | Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | -| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | -| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | +| Finally.cs:185:13:187:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:186:17:186:47 | [finally: exception, b1 (line 176): true] if (...) ... | | Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | -| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | -| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | +| Finally.cs:186:17:186:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (normal) | | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | +| Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | +| Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | +| Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:190:17:190:47 | [finally: exception, b1 (line 176): true] if (...) ... | | Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | -| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | -| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | +| Finally.cs:190:17:190:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | +| Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | +| Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception] throw ...; | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:196:5:214:5 | {...} | | Finally.cs:196:5:214:5 | {...} | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:197:9:212:9 | try {...} ... | Finally.cs:198:9:200:9 | {...} | @@ -2249,85 +2153,49 @@ dominance | Finally.cs:199:13:199:43 | if (...) ... | Finally.cs:199:17:199:18 | access to parameter b1 | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:202:9:212:9 | {...} | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:21:199:43 | throw ...; | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | -| Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | +| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:202:9:212:9 | [finally: exception] {...} | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:203:13:210:13 | [finally: exception] try {...} ... | | Finally.cs:202:9:212:9 | {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | -| Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:203:13:210:13 | [finally: exception] try {...} ... | Finally.cs:204:13:206:13 | [finally: exception] {...} | | Finally.cs:203:13:210:13 | try {...} ... | Finally.cs:204:13:206:13 | {...} | -| Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | +| Finally.cs:204:13:206:13 | [finally: exception] {...} | Finally.cs:205:17:205:47 | [finally: exception] if (...) ... | | Finally.cs:204:13:206:13 | {...} | Finally.cs:205:17:205:47 | if (...) ... | -| Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | -| Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | +| Finally.cs:205:17:205:47 | [finally: exception] if (...) ... | Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | | Finally.cs:205:17:205:47 | if (...) ... | Finally.cs:205:21:205:22 | access to parameter b2 | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | +| Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception] {...} | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:208:13:210:13 | {...} | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | -| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | +| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | +| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:25:205:47 | throw ...; | -| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | +| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | +| Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:209:17:209:47 | [finally(1): exception] if (...) ... | +| Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:209:17:209:47 | [finally: exception, finally(1): exception] if (...) ... | +| Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:209:17:209:47 | [finally: exception] if (...) ... | | Finally.cs:208:13:210:13 | {...} | Finally.cs:209:17:209:47 | if (...) ... | -| Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | +| Finally.cs:209:17:209:47 | [finally(1): exception] if (...) ... | Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | +| Finally.cs:209:17:209:47 | [finally: exception, finally(1): exception] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception, finally(1): exception] access to parameter b3 | +| Finally.cs:209:17:209:47 | [finally: exception] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | | Finally.cs:209:17:209:47 | if (...) ... | Finally.cs:209:21:209:22 | access to parameter b3 | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | +| Finally.cs:209:21:209:22 | [finally: exception, finally(1): exception] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | +| Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | +| Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception] ...; | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:211:13:211:29 | ...; | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | +| Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception] throw ...; | +| Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception, finally(1): exception] throw ...; | +| Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception] throw ...; | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:25:209:47 | throw ...; | -| Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | -| Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | +| Finally.cs:211:13:211:16 | [finally: exception] this access | Finally.cs:211:26:211:28 | [finally: exception] "0" | | Finally.cs:211:13:211:16 | this access | Finally.cs:211:26:211:28 | "0" | | Finally.cs:211:13:211:28 | ... = ... | Finally.cs:213:9:213:25 | ...; | | Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:16 | this access | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | +| Finally.cs:211:13:211:29 | [finally: exception] ...; | Finally.cs:211:13:211:16 | [finally: exception] this access | | Finally.cs:211:26:211:28 | "0" | Finally.cs:211:13:211:28 | ... = ... | -| Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | -| Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | +| Finally.cs:211:26:211:28 | [finally: exception] "0" | Finally.cs:211:13:211:28 | [finally: exception] ... = ... | | Finally.cs:213:9:213:12 | this access | Finally.cs:213:22:213:24 | "1" | | Finally.cs:213:9:213:24 | ... = ... | Finally.cs:195:10:195:12 | exit M10 (normal) | | Finally.cs:213:9:213:25 | ...; | Finally.cs:213:9:213:12 | this access | @@ -2361,77 +2229,48 @@ dominance | Finally.cs:239:17:240:43 | if (...) ... | Finally.cs:239:21:239:22 | access to parameter b1 | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:243:13:253:13 | {...} | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:21:240:43 | throw ...; | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | -| Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | +| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:243:13:253:13 | [finally: exception] {...} | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:244:17:252:17 | [finally: exception] try {...} ... | | Finally.cs:243:13:253:13 | {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | -| Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:244:17:252:17 | [finally: exception] try {...} ... | Finally.cs:245:17:248:17 | [finally: exception] {...} | | Finally.cs:244:17:252:17 | try {...} ... | Finally.cs:245:17:248:17 | {...} | -| Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | +| Finally.cs:245:17:248:17 | [finally: exception] {...} | Finally.cs:246:21:247:47 | [finally: exception] if (...) ... | | Finally.cs:245:17:248:17 | {...} | Finally.cs:246:21:247:47 | if (...) ... | -| Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | -| Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | +| Finally.cs:246:21:247:47 | [finally: exception] if (...) ... | Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | | Finally.cs:246:21:247:47 | if (...) ... | Finally.cs:246:25:246:26 | access to parameter b2 | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | +| Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception] {...} | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:250:17:252:17 | {...} | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | -| Finally.cs:247:25:247:47 | throw ...; | Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | +| Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | +| Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:25:247:47 | throw ...; | -| Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | -| Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | +| Finally.cs:250:17:252:17 | [finally(1): exception] {...} | Finally.cs:251:21:251:55 | [finally(1): exception] ...; | +| Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | Finally.cs:251:21:251:55 | [finally: exception, finally(1): exception] ...; | +| Finally.cs:250:17:252:17 | [finally: exception] {...} | Finally.cs:251:21:251:55 | [finally: exception] ...; | | Finally.cs:250:17:252:17 | {...} | Finally.cs:251:21:251:55 | ...; | | Finally.cs:251:21:251:54 | call to method WriteLine | Finally.cs:254:13:254:45 | ...; | | Finally.cs:251:21:251:55 | ...; | Finally.cs:251:39:251:53 | "Inner finally" | -| Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | +| Finally.cs:251:21:251:55 | [finally(1): exception] ...; | Finally.cs:251:39:251:53 | [finally(1): exception] "Inner finally" | +| Finally.cs:251:21:251:55 | [finally: exception, finally(1): exception] ...; | Finally.cs:251:39:251:53 | [finally: exception, finally(1): exception] "Inner finally" | +| Finally.cs:251:21:251:55 | [finally: exception] ...; | Finally.cs:251:39:251:53 | [finally: exception] "Inner finally" | | Finally.cs:251:39:251:53 | "Inner finally" | Finally.cs:251:21:251:54 | call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | +| Finally.cs:251:39:251:53 | [finally(1): exception] "Inner finally" | Finally.cs:251:21:251:54 | [finally(1): exception] call to method WriteLine | +| Finally.cs:251:39:251:53 | [finally: exception, finally(1): exception] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception, finally(1): exception] call to method WriteLine | +| Finally.cs:251:39:251:53 | [finally: exception] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception] call to method WriteLine | | Finally.cs:254:13:254:44 | call to method WriteLine | Finally.cs:257:9:259:9 | {...} | | Finally.cs:254:13:254:45 | ...; | Finally.cs:254:31:254:43 | "Mid finally" | | Finally.cs:254:31:254:43 | "Mid finally" | Finally.cs:254:13:254:44 | call to method WriteLine | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:257:9:259:9 | [finally: exception] {...} | Finally.cs:258:13:258:47 | [finally: exception] ...; | | Finally.cs:257:9:259:9 | {...} | Finally.cs:258:13:258:47 | ...; | +| Finally.cs:258:13:258:46 | [finally: exception] call to method WriteLine | Finally.cs:233:10:233:12 | exit M12 (abnormal) | | Finally.cs:258:13:258:46 | call to method WriteLine | Finally.cs:260:9:260:34 | ...; | | Finally.cs:258:13:258:47 | ...; | Finally.cs:258:31:258:45 | "Outer finally" | -| Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | -| Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | +| Finally.cs:258:13:258:47 | [finally: exception] ...; | Finally.cs:258:31:258:45 | [finally: exception] "Outer finally" | | Finally.cs:258:31:258:45 | "Outer finally" | Finally.cs:258:13:258:46 | call to method WriteLine | -| Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | +| Finally.cs:258:31:258:45 | [finally: exception] "Outer finally" | Finally.cs:258:13:258:46 | [finally: exception] call to method WriteLine | | Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:233:10:233:12 | exit M12 (normal) | | Finally.cs:260:9:260:34 | ...; | Finally.cs:260:27:260:32 | "Done" | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:9:260:33 | call to method WriteLine | @@ -2439,28 +2278,28 @@ dominance | Finally.cs:264:5:274:5 | {...} | Finally.cs:265:9:273:9 | try {...} ... | | Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:266:9:268:9 | {...} | | Finally.cs:266:9:268:9 | {...} | Finally.cs:267:13:267:35 | ...; | -| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | +| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:270:9:273:9 | [finally: exception] {...} | | Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:270:9:273:9 | {...} | | Finally.cs:267:13:267:35 | ...; | Finally.cs:267:31:267:33 | "1" | | Finally.cs:267:31:267:33 | "1" | Finally.cs:267:13:267:34 | call to method WriteLine | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | +| Finally.cs:270:9:273:9 | [finally: exception] {...} | Finally.cs:271:13:271:35 | [finally: exception] ...; | | Finally.cs:270:9:273:9 | {...} | Finally.cs:271:13:271:35 | ...; | -| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | +| Finally.cs:271:13:271:34 | [finally: exception] call to method WriteLine | Finally.cs:272:13:272:19 | [finally: exception] ...; | | Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:272:13:272:19 | ...; | | Finally.cs:271:13:271:35 | ...; | Finally.cs:271:31:271:33 | "3" | -| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | +| Finally.cs:271:13:271:35 | [finally: exception] ...; | Finally.cs:271:31:271:33 | [finally: exception] "3" | | Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:34 | call to method WriteLine | -| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | +| Finally.cs:271:31:271:33 | [finally: exception] "3" | Finally.cs:271:13:271:34 | [finally: exception] call to method WriteLine | +| Finally.cs:272:13:272:13 | [finally: exception] access to parameter i | Finally.cs:272:18:272:18 | [finally: exception] 3 | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:18:272:18 | 3 | | Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:18 | ... = ... | | Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (normal) | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | +| Finally.cs:272:13:272:18 | [finally: exception] ... + ... | Finally.cs:272:13:272:18 | [finally: exception] ... = ... | +| Finally.cs:272:13:272:18 | [finally: exception] ... = ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | | Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:13 | access to parameter i | -| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | +| Finally.cs:272:13:272:19 | [finally: exception] ...; | Finally.cs:272:13:272:13 | [finally: exception] access to parameter i | | Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:18 | ... + ... | -| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | +| Finally.cs:272:18:272:18 | [finally: exception] 3 | Finally.cs:272:13:272:18 | [finally: exception] ... + ... | | Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | {...} | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | call to constructor Object | | Foreach.cs:4:7:4:13 | exit Foreach (normal) | Foreach.cs:4:7:4:13 | exit Foreach | @@ -5445,11 +5284,11 @@ postDominance | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | CompileTimeOperators.cs:29:5:41:5 | {...} | | CompileTimeOperators.cs:31:9:34:9 | {...} | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | | CompileTimeOperators.cs:32:13:32:21 | goto ...; | CompileTimeOperators.cs:31:9:34:9 | {...} | -| CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | CompileTimeOperators.cs:32:13:32:21 | goto ...; | -| CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | -| CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | -| CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | -| CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | +| CompileTimeOperators.cs:36:9:38:9 | [finally: goto] {...} | CompileTimeOperators.cs:32:13:32:21 | goto ...; | +| CompileTimeOperators.cs:37:13:37:40 | [finally: goto] call to method WriteLine | CompileTimeOperators.cs:37:31:37:39 | [finally: goto] "Finally" | +| CompileTimeOperators.cs:37:13:37:41 | [finally: goto] ...; | CompileTimeOperators.cs:36:9:38:9 | [finally: goto] {...} | +| CompileTimeOperators.cs:37:31:37:39 | [finally: goto] "Finally" | CompileTimeOperators.cs:37:13:37:41 | [finally: goto] ...; | +| CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:37:13:37:40 | [finally: goto] call to method WriteLine | | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | CompileTimeOperators.cs:40:32:40:36 | "End" | | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:40:9:40:11 | End: | | CompileTimeOperators.cs:40:32:40:36 | "End" | CompileTimeOperators.cs:40:14:40:38 | ...; | @@ -6094,7 +5933,7 @@ postDominance | Finally.cs:3:14:3:20 | exit Finally | Finally.cs:3:14:3:20 | exit Finally (normal) | | Finally.cs:3:14:3:20 | exit Finally (normal) | Finally.cs:3:14:3:20 | {...} | | Finally.cs:3:14:3:20 | {...} | Finally.cs:3:14:3:20 | call to constructor Object | -| Finally.cs:7:10:7:11 | exit M1 (abnormal) | Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | +| Finally.cs:7:10:7:11 | exit M1 (abnormal) | Finally.cs:15:13:15:40 | [finally: exception] call to method WriteLine | | Finally.cs:7:10:7:11 | exit M1 (normal) | Finally.cs:15:13:15:40 | call to method WriteLine | | Finally.cs:8:5:17:5 | {...} | Finally.cs:7:10:7:11 | enter M1 | | Finally.cs:9:9:16:9 | try {...} ... | Finally.cs:8:5:17:5 | {...} | @@ -6103,12 +5942,13 @@ postDominance | Finally.cs:11:13:11:38 | ...; | Finally.cs:10:9:12:9 | {...} | | Finally.cs:11:31:11:36 | "Try1" | Finally.cs:11:13:11:38 | ...; | | Finally.cs:14:9:16:9 | {...} | Finally.cs:11:13:11:37 | call to method WriteLine | -| Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | +| Finally.cs:15:13:15:40 | [finally: exception] call to method WriteLine | Finally.cs:15:31:15:39 | [finally: exception] "Finally" | | Finally.cs:15:13:15:40 | call to method WriteLine | Finally.cs:15:31:15:39 | "Finally" | | Finally.cs:15:13:15:41 | ...; | Finally.cs:14:9:16:9 | {...} | -| Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | +| Finally.cs:15:13:15:41 | [finally: exception] ...; | Finally.cs:14:9:16:9 | [finally: exception] {...} | | Finally.cs:15:31:15:39 | "Finally" | Finally.cs:15:13:15:41 | ...; | -| Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | +| Finally.cs:15:31:15:39 | [finally: exception] "Finally" | Finally.cs:15:13:15:41 | [finally: exception] ...; | +| Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:50:13:50:40 | [finally: exception] call to method WriteLine | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:50:13:50:40 | call to method WriteLine | | Finally.cs:20:5:52:5 | {...} | Finally.cs:19:10:19:11 | enter M2 | @@ -6125,28 +5965,24 @@ postDominance | Finally.cs:33:13:35:13 | {...} | Finally.cs:32:13:39:13 | try {...} ... | | Finally.cs:34:17:34:32 | if (...) ... | Finally.cs:33:13:35:13 | {...} | | Finally.cs:34:21:34:24 | true | Finally.cs:34:17:34:32 | if (...) ... | -| Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | Finally.cs:34:27:34:32 | throw ...; | -| Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | -| Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | -| Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | +| Finally.cs:37:13:39:13 | [finally: exception] {...} | Finally.cs:34:27:34:32 | throw ...; | +| Finally.cs:38:17:38:44 | [finally: exception] throw ...; | Finally.cs:38:23:38:43 | [finally: exception] object creation of type Exception | +| Finally.cs:38:23:38:43 | [finally: exception] object creation of type Exception | Finally.cs:38:37:38:42 | [finally: exception] "Boo!" | +| Finally.cs:38:37:38:42 | [finally: exception] "Boo!" | Finally.cs:37:13:39:13 | [finally: exception] {...} | | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | | Finally.cs:42:9:43:9 | {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | -| Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | Finally.cs:28:13:28:18 | throw ...; | | Finally.cs:49:9:51:9 | [finally: return] {...} | Finally.cs:24:13:24:19 | return ...; | | Finally.cs:49:9:51:9 | {...} | Finally.cs:42:9:43:9 | {...} | -| Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | -| Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | +| Finally.cs:50:13:50:40 | [finally: exception] call to method WriteLine | Finally.cs:50:31:50:39 | [finally: exception] "Finally" | | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | Finally.cs:50:31:50:39 | [finally: return] "Finally" | | Finally.cs:50:13:50:40 | call to method WriteLine | Finally.cs:50:31:50:39 | "Finally" | | Finally.cs:50:13:50:41 | ...; | Finally.cs:49:9:51:9 | {...} | -| Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | -| Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | +| Finally.cs:50:13:50:41 | [finally: exception] ...; | Finally.cs:49:9:51:9 | [finally: exception] {...} | | Finally.cs:50:13:50:41 | [finally: return] ...; | Finally.cs:49:9:51:9 | [finally: return] {...} | | Finally.cs:50:31:50:39 | "Finally" | Finally.cs:50:13:50:41 | ...; | -| Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | -| Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | +| Finally.cs:50:31:50:39 | [finally: exception] "Finally" | Finally.cs:50:13:50:41 | [finally: exception] ...; | | Finally.cs:50:31:50:39 | [finally: return] "Finally" | Finally.cs:50:13:50:41 | [finally: return] ...; | +| Finally.cs:54:10:54:11 | exit M3 (abnormal) | Finally.cs:70:13:70:40 | [finally: exception] call to method WriteLine | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:70:13:70:40 | call to method WriteLine | | Finally.cs:55:5:72:5 | {...} | Finally.cs:54:10:54:11 | enter M3 | @@ -6164,20 +6000,16 @@ postDominance | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:65:48:65:51 | [exception: Exception] null | | Finally.cs:65:48:65:51 | [exception: Exception] null | Finally.cs:65:35:65:43 | [exception: Exception] access to property Message | | Finally.cs:66:9:67:9 | {...} | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | -| Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | Finally.cs:63:13:63:18 | throw ...; | | Finally.cs:69:9:71:9 | [finally: return] {...} | Finally.cs:59:13:59:19 | return ...; | | Finally.cs:69:9:71:9 | {...} | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | -| Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | +| Finally.cs:70:13:70:40 | [finally: exception] call to method WriteLine | Finally.cs:70:31:70:39 | [finally: exception] "Finally" | | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | Finally.cs:70:31:70:39 | [finally: return] "Finally" | | Finally.cs:70:13:70:40 | call to method WriteLine | Finally.cs:70:31:70:39 | "Finally" | | Finally.cs:70:13:70:41 | ...; | Finally.cs:69:9:71:9 | {...} | -| Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | -| Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | +| Finally.cs:70:13:70:41 | [finally: exception] ...; | Finally.cs:69:9:71:9 | [finally: exception] {...} | | Finally.cs:70:13:70:41 | [finally: return] ...; | Finally.cs:69:9:71:9 | [finally: return] {...} | | Finally.cs:70:31:70:39 | "Finally" | Finally.cs:70:13:70:41 | ...; | -| Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | -| Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | +| Finally.cs:70:31:70:39 | [finally: exception] "Finally" | Finally.cs:70:13:70:41 | [finally: exception] ...; | | Finally.cs:70:31:70:39 | [finally: return] "Finally" | Finally.cs:70:13:70:41 | [finally: return] ...; | | Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:77:16:77:20 | ... > ... | | Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:97:21:97:23 | [finally: break] ...-- | @@ -6235,29 +6067,29 @@ postDominance | Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:92:25:92:30 | [finally: continue] ... == ... | | Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:92:25:92:30 | [finally: return] ... == ... | | Finally.cs:96:17:98:17 | {...} | Finally.cs:92:25:92:30 | ... == ... | -| Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | -| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | +| Finally.cs:97:21:97:21 | [finally(1): exception] access to local variable i | Finally.cs:97:21:97:24 | [finally(1): exception] ...; | +| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception] access to local variable i | Finally.cs:97:21:97:24 | [finally: break, finally(1): exception] ...; | | Finally.cs:97:21:97:21 | [finally: break] access to local variable i | Finally.cs:97:21:97:24 | [finally: break] ...; | -| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | +| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception] access to local variable i | Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception] ...; | | Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | Finally.cs:97:21:97:24 | [finally: continue] ...; | -| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | +| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception] access to local variable i | Finally.cs:97:21:97:24 | [finally: return, finally(1): exception] ...; | | Finally.cs:97:21:97:21 | [finally: return] access to local variable i | Finally.cs:97:21:97:24 | [finally: return] ...; | | Finally.cs:97:21:97:21 | access to local variable i | Finally.cs:97:21:97:24 | ...; | | Finally.cs:97:21:97:23 | ...-- | Finally.cs:97:21:97:21 | access to local variable i | -| Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | -| Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | +| Finally.cs:97:21:97:23 | [finally(1): exception] ...-- | Finally.cs:97:21:97:21 | [finally(1): exception] access to local variable i | +| Finally.cs:97:21:97:23 | [finally: break, finally(1): exception] ...-- | Finally.cs:97:21:97:21 | [finally: break, finally(1): exception] access to local variable i | | Finally.cs:97:21:97:23 | [finally: break] ...-- | Finally.cs:97:21:97:21 | [finally: break] access to local variable i | -| Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | +| Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception] ...-- | Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception] access to local variable i | | Finally.cs:97:21:97:23 | [finally: continue] ...-- | Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | -| Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | +| Finally.cs:97:21:97:23 | [finally: return, finally(1): exception] ...-- | Finally.cs:97:21:97:21 | [finally: return, finally(1): exception] access to local variable i | | Finally.cs:97:21:97:23 | [finally: return] ...-- | Finally.cs:97:21:97:21 | [finally: return] access to local variable i | | Finally.cs:97:21:97:24 | ...; | Finally.cs:96:17:98:17 | {...} | -| Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | +| Finally.cs:97:21:97:24 | [finally(1): exception] ...; | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | +| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception] ...; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | | Finally.cs:97:21:97:24 | [finally: break] ...; | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | +| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception] ...; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | | Finally.cs:97:21:97:24 | [finally: continue] ...; | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | +| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception] ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | | Finally.cs:97:21:97:24 | [finally: return] ...; | Finally.cs:96:17:98:17 | [finally: return] {...} | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:116:17:116:32 | ... > ... | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:116:17:116:32 | [finally: return] ... > ... | @@ -6277,52 +6109,33 @@ postDominance | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:17:109:21 | access to field Field | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:109:33:109:33 | 1 | | Finally.cs:109:33:109:33 | 1 | Finally.cs:109:17:109:28 | access to property Length | -| Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:113:9:118:9 | [finally: return] {...} | Finally.cs:108:17:108:23 | return ...; | | Finally.cs:113:9:118:9 | {...} | Finally.cs:109:17:109:33 | ... == ... | -| Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | -| Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | -| Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | +| Finally.cs:114:13:115:41 | [finally: exception] if (...) ... | Finally.cs:113:9:118:9 | [finally: exception] {...} | | Finally.cs:114:13:115:41 | [finally: return] if (...) ... | Finally.cs:113:9:118:9 | [finally: return] {...} | | Finally.cs:114:13:115:41 | if (...) ... | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | +| Finally.cs:114:19:114:23 | [finally: exception] access to field Field | Finally.cs:114:19:114:23 | [finally: exception] this access | +| Finally.cs:114:19:114:23 | [finally: exception] this access | Finally.cs:114:13:115:41 | [finally: exception] if (...) ... | | Finally.cs:114:19:114:23 | [finally: return] access to field Field | Finally.cs:114:19:114:23 | [finally: return] this access | | Finally.cs:114:19:114:23 | [finally: return] this access | Finally.cs:114:13:115:41 | [finally: return] if (...) ... | | Finally.cs:114:19:114:23 | access to field Field | Finally.cs:114:19:114:23 | this access | | Finally.cs:114:19:114:23 | this access | Finally.cs:114:13:115:41 | if (...) ... | -| Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | -| Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | -| Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | +| Finally.cs:114:19:114:30 | [finally: exception] access to property Length | Finally.cs:114:19:114:23 | [finally: exception] access to field Field | | Finally.cs:114:19:114:30 | [finally: return] access to property Length | Finally.cs:114:19:114:23 | [finally: return] access to field Field | | Finally.cs:114:19:114:30 | access to property Length | Finally.cs:114:19:114:23 | access to field Field | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:35:114:35 | 0 | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | +| Finally.cs:114:19:114:35 | [finally: exception] ... == ... | Finally.cs:114:35:114:35 | [finally: exception] 0 | | Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:35:114:35 | [finally: return] 0 | | Finally.cs:114:35:114:35 | 0 | Finally.cs:114:19:114:30 | access to property Length | -| Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | -| Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | -| Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | +| Finally.cs:114:35:114:35 | [finally: exception] 0 | Finally.cs:114:19:114:30 | [finally: exception] access to property Length | | Finally.cs:114:35:114:35 | [finally: return] 0 | Finally.cs:114:19:114:30 | [finally: return] access to property Length | -| Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | -| Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | -| Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | +| Finally.cs:115:17:115:40 | [finally: exception] call to method WriteLine | Finally.cs:115:35:115:39 | [finally: exception] access to field Field | | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | Finally.cs:115:35:115:39 | [finally: return] access to field Field | | Finally.cs:115:17:115:40 | call to method WriteLine | Finally.cs:115:35:115:39 | access to field Field | | Finally.cs:115:17:115:41 | ...; | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:114:17:114:36 | [true, finally: return] !... | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | +| Finally.cs:115:35:115:39 | [finally: exception] access to field Field | Finally.cs:115:35:115:39 | [finally: exception] this access | +| Finally.cs:115:35:115:39 | [finally: exception] this access | Finally.cs:115:17:115:41 | [finally: exception] ...; | | Finally.cs:115:35:115:39 | [finally: return] access to field Field | Finally.cs:115:35:115:39 | [finally: return] this access | | Finally.cs:115:35:115:39 | [finally: return] this access | Finally.cs:115:17:115:41 | [finally: return] ...; | | Finally.cs:115:35:115:39 | access to field Field | Finally.cs:115:35:115:39 | this access | @@ -6331,40 +6144,26 @@ postDominance | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:114:17:114:36 | [false] !... | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:115:17:115:40 | call to method WriteLine | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | +| Finally.cs:116:17:116:21 | [finally: exception] access to field Field | Finally.cs:116:17:116:21 | [finally: exception] this access | +| Finally.cs:116:17:116:21 | [finally: exception] this access | Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | | Finally.cs:116:17:116:21 | [finally: return] access to field Field | Finally.cs:116:17:116:21 | [finally: return] this access | | Finally.cs:116:17:116:21 | [finally: return] this access | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | | Finally.cs:116:17:116:21 | access to field Field | Finally.cs:116:17:116:21 | this access | | Finally.cs:116:17:116:21 | this access | Finally.cs:116:13:117:37 | if (...) ... | -| Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | -| Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | -| Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | +| Finally.cs:116:17:116:28 | [finally: exception] access to property Length | Finally.cs:116:17:116:21 | [finally: exception] access to field Field | | Finally.cs:116:17:116:28 | [finally: return] access to property Length | Finally.cs:116:17:116:21 | [finally: return] access to field Field | | Finally.cs:116:17:116:28 | access to property Length | Finally.cs:116:17:116:21 | access to field Field | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:116:32:116:32 | 0 | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | +| Finally.cs:116:17:116:32 | [finally: exception] ... > ... | Finally.cs:116:32:116:32 | [finally: exception] 0 | | Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:116:32:116:32 | [finally: return] 0 | | Finally.cs:116:32:116:32 | 0 | Finally.cs:116:17:116:28 | access to property Length | -| Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | -| Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | -| Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | +| Finally.cs:116:32:116:32 | [finally: exception] 0 | Finally.cs:116:17:116:28 | [finally: exception] access to property Length | | Finally.cs:116:32:116:32 | [finally: return] 0 | Finally.cs:116:17:116:28 | [finally: return] access to property Length | -| Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | -| Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | -| Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | +| Finally.cs:117:17:117:36 | [finally: exception] call to method WriteLine | Finally.cs:117:35:117:35 | [finally: exception] 1 | | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | Finally.cs:117:35:117:35 | [finally: return] 1 | | Finally.cs:117:17:117:36 | call to method WriteLine | Finally.cs:117:35:117:35 | 1 | | Finally.cs:117:35:117:35 | 1 | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | +| Finally.cs:117:35:117:35 | [finally: exception] 1 | Finally.cs:117:17:117:37 | [finally: exception] ...; | | Finally.cs:117:35:117:35 | [finally: return] 1 | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:121:10:121:11 | exit M6 | Finally.cs:121:10:121:11 | exit M6 (normal) | | Finally.cs:121:10:121:11 | exit M6 (normal) | Finally.cs:125:17:125:40 | Double temp = ... | @@ -6384,12 +6183,12 @@ postDominance | Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:137:31:137:35 | "Try" | | Finally.cs:137:13:137:37 | ...; | Finally.cs:136:9:138:9 | {...} | | Finally.cs:137:31:137:35 | "Try" | Finally.cs:137:13:137:37 | ...; | -| Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | +| Finally.cs:141:13:141:44 | [finally: exception] throw ...; | Finally.cs:141:19:141:43 | [finally: exception] object creation of type ArgumentException | | Finally.cs:141:13:141:44 | throw ...; | Finally.cs:141:19:141:43 | object creation of type ArgumentException | -| Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | +| Finally.cs:141:19:141:43 | [finally: exception] object creation of type ArgumentException | Finally.cs:141:41:141:42 | [finally: exception] "" | | Finally.cs:141:19:141:43 | object creation of type ArgumentException | Finally.cs:141:41:141:42 | "" | | Finally.cs:141:41:141:42 | "" | Finally.cs:140:9:143:9 | {...} | -| Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | +| Finally.cs:141:41:141:42 | [finally: exception] "" | Finally.cs:140:9:143:9 | [finally: exception] {...} | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:158:21:158:36 | ... == ... | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:163:17:163:42 | call to method WriteLine | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:167:17:167:37 | call to method WriteLine | @@ -6400,28 +6199,20 @@ postDominance | Finally.cs:151:17:151:20 | access to parameter args | Finally.cs:151:13:152:50 | if (...) ... | | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:151:25:151:28 | null | | Finally.cs:151:25:151:28 | null | Finally.cs:151:17:151:20 | access to parameter args | -| Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:152:17:152:50 | throw ...; | | Finally.cs:155:9:169:9 | {...} | Finally.cs:151:17:151:28 | ... == ... | -| Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | +| Finally.cs:156:13:168:13 | [finally: exception] try {...} ... | Finally.cs:155:9:169:9 | [finally: exception] {...} | | Finally.cs:156:13:168:13 | try {...} ... | Finally.cs:155:9:169:9 | {...} | -| Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | -| Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | +| Finally.cs:157:13:160:13 | [finally: exception] {...} | Finally.cs:156:13:168:13 | [finally: exception] try {...} ... | | Finally.cs:157:13:160:13 | {...} | Finally.cs:156:13:168:13 | try {...} ... | -| Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | +| Finally.cs:158:17:159:45 | [finally: exception] if (...) ... | Finally.cs:157:13:160:13 | [finally: exception] {...} | | Finally.cs:158:17:159:45 | if (...) ... | Finally.cs:157:13:160:13 | {...} | -| Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | -| Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | +| Finally.cs:158:21:158:24 | [finally: exception] access to parameter args | Finally.cs:158:17:159:45 | [finally: exception] if (...) ... | | Finally.cs:158:21:158:24 | access to parameter args | Finally.cs:158:17:159:45 | if (...) ... | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | +| Finally.cs:158:21:158:31 | [finally: exception] access to property Length | Finally.cs:158:21:158:24 | [finally: exception] access to parameter args | | Finally.cs:158:21:158:31 | access to property Length | Finally.cs:158:21:158:24 | access to parameter args | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:158:36:158:36 | 1 | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | +| Finally.cs:158:21:158:36 | [finally: exception] ... == ... | Finally.cs:158:36:158:36 | [finally: exception] 1 | +| Finally.cs:159:27:159:44 | [finally: exception] object creation of type Exception | Finally.cs:159:41:159:43 | [finally: exception] "1" | | Finally.cs:159:27:159:44 | object creation of type Exception | Finally.cs:159:41:159:43 | "1" | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:159:27:159:44 | object creation of type Exception | @@ -6429,55 +6220,38 @@ postDominance | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | | Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | | Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | +| Finally.cs:161:39:161:39 | [finally: exception, exception: Exception] access to local variable e | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | +| Finally.cs:161:39:161:39 | [finally: exception, exception: NullReferenceException] access to local variable e | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | | Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | | Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | +| Finally.cs:161:39:161:47 | [finally: exception, exception: Exception] access to property Message | Finally.cs:161:39:161:39 | [finally: exception, exception: Exception] access to local variable e | +| Finally.cs:161:39:161:47 | [finally: exception, exception: NullReferenceException] access to property Message | Finally.cs:161:39:161:39 | [finally: exception, exception: NullReferenceException] access to local variable e | | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:161:52:161:54 | [exception: Exception] "1" | | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | +| Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | Finally.cs:161:52:161:54 | [finally: exception, exception: Exception] "1" | +| Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | Finally.cs:161:52:161:54 | [finally: exception, exception: NullReferenceException] "1" | | Finally.cs:161:52:161:54 | [exception: Exception] "1" | Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | | Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | -| Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | -| Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | +| Finally.cs:161:52:161:54 | [finally: exception, exception: Exception] "1" | Finally.cs:161:39:161:47 | [finally: exception, exception: Exception] access to property Message | +| Finally.cs:161:52:161:54 | [finally: exception, exception: NullReferenceException] "1" | Finally.cs:161:39:161:47 | [finally: exception, exception: NullReferenceException] access to property Message | +| Finally.cs:163:17:163:42 | [finally: exception] call to method WriteLine | Finally.cs:163:35:163:41 | [finally: exception] access to array element | | Finally.cs:163:17:163:42 | call to method WriteLine | Finally.cs:163:35:163:41 | access to array element | | Finally.cs:163:17:163:43 | ...; | Finally.cs:162:13:164:13 | {...} | -| Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | -| Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | -| Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | +| Finally.cs:163:17:163:43 | [finally: exception] ...; | Finally.cs:162:13:164:13 | [finally: exception] {...} | +| Finally.cs:163:35:163:38 | [finally: exception] access to parameter args | Finally.cs:163:17:163:43 | [finally: exception] ...; | | Finally.cs:163:35:163:38 | access to parameter args | Finally.cs:163:17:163:43 | ...; | -| Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | -| Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | +| Finally.cs:163:35:163:41 | [finally: exception] access to array element | Finally.cs:163:40:163:40 | [finally: exception] 0 | | Finally.cs:163:35:163:41 | access to array element | Finally.cs:163:40:163:40 | 0 | | Finally.cs:163:40:163:40 | 0 | Finally.cs:163:35:163:38 | access to parameter args | -| Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | -| Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | -| Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | -| Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | +| Finally.cs:163:40:163:40 | [finally: exception] 0 | Finally.cs:163:35:163:38 | [finally: exception] access to parameter args | +| Finally.cs:166:13:168:13 | [finally: exception] {...} | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | | Finally.cs:166:13:168:13 | {...} | Finally.cs:165:13:168:13 | catch {...} | -| Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | -| Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | +| Finally.cs:167:17:167:37 | [finally: exception] call to method WriteLine | Finally.cs:167:35:167:36 | [finally: exception] "" | | Finally.cs:167:17:167:37 | call to method WriteLine | Finally.cs:167:35:167:36 | "" | | Finally.cs:167:17:167:38 | ...; | Finally.cs:166:13:168:13 | {...} | -| Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | +| Finally.cs:167:17:167:38 | [finally: exception] ...; | Finally.cs:166:13:168:13 | [finally: exception] {...} | | Finally.cs:167:35:167:36 | "" | Finally.cs:167:17:167:38 | ...; | -| Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | -| Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | +| Finally.cs:167:35:167:36 | [finally: exception] "" | Finally.cs:167:17:167:38 | [finally: exception] ...; | | Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | enter ExceptionA | | Finally.cs:172:11:172:20 | exit ExceptionA | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | Finally.cs:172:11:172:20 | {...} | @@ -6498,95 +6272,60 @@ postDominance | Finally.cs:180:13:180:43 | if (...) ... | Finally.cs:179:9:181:9 | {...} | | Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:180:13:180:43 | if (...) ... | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:180:17:180:18 | access to parameter b1 | -| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | | Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | -| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | +| Finally.cs:184:13:191:13 | [finally: exception, b1 (line 176): true] try {...} ... | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | | Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | -| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | -| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | +| Finally.cs:185:13:187:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception, b1 (line 176): true] try {...} ... | | Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | -| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | +| Finally.cs:186:17:186:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:185:13:187:13 | [finally: exception, b1 (line 176): true] {...} | | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | +| Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | Finally.cs:186:17:186:47 | [finally: exception, b1 (line 176): true] if (...) ... | | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | +| Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | | Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | -| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | +| Finally.cs:190:17:190:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | -| Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | Finally.cs:190:17:190:47 | [finally: exception, b1 (line 176): true] if (...) ... | +| Finally.cs:190:25:190:47 | [finally: exception] throw ...; | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | | Finally.cs:195:10:195:12 | exit M10 (normal) | Finally.cs:213:9:213:24 | ... = ... | | Finally.cs:196:5:214:5 | {...} | Finally.cs:195:10:195:12 | enter M10 | | Finally.cs:197:9:212:9 | try {...} ... | Finally.cs:196:5:214:5 | {...} | | Finally.cs:198:9:200:9 | {...} | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:199:13:199:43 | if (...) ... | Finally.cs:198:9:200:9 | {...} | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:199:13:199:43 | if (...) ... | -| Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:199:21:199:43 | throw ...; | | Finally.cs:202:9:212:9 | {...} | Finally.cs:199:17:199:18 | access to parameter b1 | -| Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | -| Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:203:13:210:13 | [finally: exception] try {...} ... | Finally.cs:202:9:212:9 | [finally: exception] {...} | | Finally.cs:203:13:210:13 | try {...} ... | Finally.cs:202:9:212:9 | {...} | -| Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | -| Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | +| Finally.cs:204:13:206:13 | [finally: exception] {...} | Finally.cs:203:13:210:13 | [finally: exception] try {...} ... | | Finally.cs:204:13:206:13 | {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | -| Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:205:17:205:47 | [finally: exception] if (...) ... | Finally.cs:204:13:206:13 | [finally: exception] {...} | | Finally.cs:205:17:205:47 | if (...) ... | Finally.cs:204:13:206:13 | {...} | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | +| Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | Finally.cs:205:17:205:47 | [finally: exception] if (...) ... | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:205:17:205:47 | if (...) ... | -| Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | Finally.cs:205:25:205:47 | throw ...; | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | | Finally.cs:208:13:210:13 | {...} | Finally.cs:205:21:205:22 | access to parameter b2 | -| Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | -| Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | -| Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:209:17:209:47 | [finally(1): exception] if (...) ... | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | +| Finally.cs:209:17:209:47 | [finally: exception, finally(1): exception] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | +| Finally.cs:209:17:209:47 | [finally: exception] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception] {...} | | Finally.cs:209:17:209:47 | if (...) ... | Finally.cs:208:13:210:13 | {...} | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | +| Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | Finally.cs:209:17:209:47 | [finally(1): exception] if (...) ... | +| Finally.cs:209:21:209:22 | [finally: exception, finally(1): exception] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception, finally(1): exception] if (...) ... | +| Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception] if (...) ... | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:209:17:209:47 | if (...) ... | -| Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:209:25:209:47 | [finally(1): exception] throw ...; | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | +| Finally.cs:209:25:209:47 | [finally: exception, finally(1): exception] throw ...; | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | +| Finally.cs:209:25:209:47 | [finally: exception] throw ...; | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | | Finally.cs:209:25:209:47 | throw ...; | Finally.cs:209:31:209:46 | object creation of type ExceptionC | -| Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:211:13:211:16 | [finally: exception] this access | Finally.cs:211:13:211:29 | [finally: exception] ...; | | Finally.cs:211:13:211:16 | this access | Finally.cs:211:13:211:29 | ...; | | Finally.cs:211:13:211:28 | ... = ... | Finally.cs:211:26:211:28 | "0" | -| Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | -| Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | +| Finally.cs:211:13:211:28 | [finally: exception] ... = ... | Finally.cs:211:26:211:28 | [finally: exception] "0" | | Finally.cs:211:13:211:29 | ...; | Finally.cs:209:21:209:22 | access to parameter b3 | | Finally.cs:211:26:211:28 | "0" | Finally.cs:211:13:211:16 | this access | -| Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | -| Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | +| Finally.cs:211:26:211:28 | [finally: exception] "0" | Finally.cs:211:13:211:16 | [finally: exception] this access | | Finally.cs:213:9:213:12 | this access | Finally.cs:213:9:213:25 | ...; | | Finally.cs:213:9:213:24 | ... = ... | Finally.cs:213:22:213:24 | "1" | | Finally.cs:213:9:213:25 | ...; | Finally.cs:211:13:211:28 | ... = ... | @@ -6611,6 +6350,7 @@ postDominance | Finally.cs:230:9:230:33 | call to method WriteLine | Finally.cs:230:27:230:32 | "Done" | | Finally.cs:230:9:230:34 | ...; | Finally.cs:228:13:228:40 | call to method WriteLine | | Finally.cs:230:27:230:32 | "Done" | Finally.cs:230:9:230:34 | ...; | +| Finally.cs:233:10:233:12 | exit M12 (abnormal) | Finally.cs:258:13:258:46 | [finally: exception] call to method WriteLine | | Finally.cs:233:10:233:12 | exit M12 (normal) | Finally.cs:260:9:260:33 | call to method WriteLine | | Finally.cs:234:5:261:5 | {...} | Finally.cs:233:10:233:12 | enter M12 | | Finally.cs:235:9:259:9 | try {...} ... | Finally.cs:234:5:261:5 | {...} | @@ -6619,68 +6359,42 @@ postDominance | Finally.cs:238:13:241:13 | {...} | Finally.cs:237:13:253:13 | try {...} ... | | Finally.cs:239:17:240:43 | if (...) ... | Finally.cs:238:13:241:13 | {...} | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:239:17:240:43 | if (...) ... | -| Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:240:21:240:43 | throw ...; | | Finally.cs:243:13:253:13 | {...} | Finally.cs:239:21:239:22 | access to parameter b1 | -| Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | -| Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:244:17:252:17 | [finally: exception] try {...} ... | Finally.cs:243:13:253:13 | [finally: exception] {...} | | Finally.cs:244:17:252:17 | try {...} ... | Finally.cs:243:13:253:13 | {...} | -| Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | -| Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | +| Finally.cs:245:17:248:17 | [finally: exception] {...} | Finally.cs:244:17:252:17 | [finally: exception] try {...} ... | | Finally.cs:245:17:248:17 | {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | -| Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:246:21:247:47 | [finally: exception] if (...) ... | Finally.cs:245:17:248:17 | [finally: exception] {...} | | Finally.cs:246:21:247:47 | if (...) ... | Finally.cs:245:17:248:17 | {...} | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | +| Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | Finally.cs:246:21:247:47 | [finally: exception] if (...) ... | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:246:21:247:47 | if (...) ... | -| Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | Finally.cs:247:25:247:47 | throw ...; | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | | Finally.cs:250:17:252:17 | {...} | Finally.cs:246:25:246:26 | access to parameter b2 | -| Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | +| Finally.cs:251:21:251:54 | [finally(1): exception] call to method WriteLine | Finally.cs:251:39:251:53 | [finally(1): exception] "Inner finally" | +| Finally.cs:251:21:251:54 | [finally: exception, finally(1): exception] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception, finally(1): exception] "Inner finally" | +| Finally.cs:251:21:251:54 | [finally: exception] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception] "Inner finally" | | Finally.cs:251:21:251:54 | call to method WriteLine | Finally.cs:251:39:251:53 | "Inner finally" | | Finally.cs:251:21:251:55 | ...; | Finally.cs:250:17:252:17 | {...} | -| Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | -| Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:251:21:251:55 | [finally(1): exception] ...; | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | +| Finally.cs:251:21:251:55 | [finally: exception, finally(1): exception] ...; | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | +| Finally.cs:251:21:251:55 | [finally: exception] ...; | Finally.cs:250:17:252:17 | [finally: exception] {...} | | Finally.cs:251:39:251:53 | "Inner finally" | Finally.cs:251:21:251:55 | ...; | -| Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | -| Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | -| Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:251:39:251:53 | [finally(1): exception] "Inner finally" | Finally.cs:251:21:251:55 | [finally(1): exception] ...; | +| Finally.cs:251:39:251:53 | [finally: exception, finally(1): exception] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception, finally(1): exception] ...; | +| Finally.cs:251:39:251:53 | [finally: exception] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception] ...; | | Finally.cs:254:13:254:44 | call to method WriteLine | Finally.cs:254:31:254:43 | "Mid finally" | | Finally.cs:254:13:254:45 | ...; | Finally.cs:251:21:251:54 | call to method WriteLine | | Finally.cs:254:31:254:43 | "Mid finally" | Finally.cs:254:13:254:45 | ...; | | Finally.cs:257:9:259:9 | {...} | Finally.cs:254:13:254:44 | call to method WriteLine | -| Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | -| Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | +| Finally.cs:258:13:258:46 | [finally: exception] call to method WriteLine | Finally.cs:258:31:258:45 | [finally: exception] "Outer finally" | | Finally.cs:258:13:258:46 | call to method WriteLine | Finally.cs:258:31:258:45 | "Outer finally" | | Finally.cs:258:13:258:47 | ...; | Finally.cs:257:9:259:9 | {...} | -| Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | -| Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:258:13:258:47 | [finally: exception] ...; | Finally.cs:257:9:259:9 | [finally: exception] {...} | | Finally.cs:258:31:258:45 | "Outer finally" | Finally.cs:258:13:258:47 | ...; | -| Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | -| Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:258:31:258:45 | [finally: exception] "Outer finally" | Finally.cs:258:13:258:47 | [finally: exception] ...; | | Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:260:27:260:32 | "Done" | | Finally.cs:260:9:260:34 | ...; | Finally.cs:258:13:258:46 | call to method WriteLine | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:9:260:34 | ...; | -| Finally.cs:263:10:263:12 | exit M13 (abnormal) | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | +| Finally.cs:263:10:263:12 | exit M13 (abnormal) | Finally.cs:272:13:272:18 | [finally: exception] ... = ... | | Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:272:13:272:18 | ... = ... | | Finally.cs:264:5:274:5 | {...} | Finally.cs:263:10:263:12 | enter M13 | | Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:264:5:274:5 | {...} | @@ -6689,22 +6403,22 @@ postDominance | Finally.cs:267:13:267:35 | ...; | Finally.cs:266:9:268:9 | {...} | | Finally.cs:267:31:267:33 | "1" | Finally.cs:267:13:267:35 | ...; | | Finally.cs:270:9:273:9 | {...} | Finally.cs:267:13:267:34 | call to method WriteLine | -| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | +| Finally.cs:271:13:271:34 | [finally: exception] call to method WriteLine | Finally.cs:271:31:271:33 | [finally: exception] "3" | | Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:271:31:271:33 | "3" | | Finally.cs:271:13:271:35 | ...; | Finally.cs:270:9:273:9 | {...} | -| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | +| Finally.cs:271:13:271:35 | [finally: exception] ...; | Finally.cs:270:9:273:9 | [finally: exception] {...} | | Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:35 | ...; | -| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | -| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | +| Finally.cs:271:31:271:33 | [finally: exception] "3" | Finally.cs:271:13:271:35 | [finally: exception] ...; | +| Finally.cs:272:13:272:13 | [finally: exception] access to parameter i | Finally.cs:272:13:272:19 | [finally: exception] ...; | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:13:272:19 | ...; | | Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:18:272:18 | 3 | | Finally.cs:272:13:272:18 | ... = ... | Finally.cs:272:13:272:18 | ... + ... | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | +| Finally.cs:272:13:272:18 | [finally: exception] ... + ... | Finally.cs:272:18:272:18 | [finally: exception] 3 | +| Finally.cs:272:13:272:18 | [finally: exception] ... = ... | Finally.cs:272:13:272:18 | [finally: exception] ... + ... | | Finally.cs:272:13:272:19 | ...; | Finally.cs:271:13:271:34 | call to method WriteLine | -| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | +| Finally.cs:272:13:272:19 | [finally: exception] ...; | Finally.cs:271:13:271:34 | [finally: exception] call to method WriteLine | | Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:13 | access to parameter i | -| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | +| Finally.cs:272:18:272:18 | [finally: exception] 3 | Finally.cs:272:13:272:13 | [finally: exception] access to parameter i | | Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | enter Foreach | | Foreach.cs:4:7:4:13 | exit Foreach | Foreach.cs:4:7:4:13 | exit Foreach (normal) | | Foreach.cs:4:7:4:13 | exit Foreach (normal) | Foreach.cs:4:7:4:13 | {...} | @@ -10543,14 +10257,13 @@ blockDominance | Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | enter Finally | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:7:10:7:11 | enter M1 | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:7:10:7:11 | exit M1 | -| Finally.cs:7:10:7:11 | enter M1 | Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | +| Finally.cs:7:10:7:11 | enter M1 | Finally.cs:14:9:16:9 | [finally: exception] {...} | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:14:9:16:9 | {...} | | Finally.cs:7:10:7:11 | exit M1 | Finally.cs:7:10:7:11 | exit M1 | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | +| Finally.cs:14:9:16:9 | [finally: exception] {...} | Finally.cs:14:9:16:9 | [finally: exception] {...} | | Finally.cs:14:9:16:9 | {...} | Finally.cs:14:9:16:9 | {...} | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | enter M2 | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | exit M2 | -| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | exit M2 (abnormal) | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | exit M2 (normal) | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:24:13:24:19 | return ...; | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | @@ -10561,11 +10274,10 @@ blockDominance | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:34:27:34:32 | throw ...; | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:49:9:51:9 | [finally: exception] {...} | | Finally.cs:19:10:19:11 | exit M2 | Finally.cs:19:10:19:11 | exit M2 | -| Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:19:10:19:11 | exit M2 (abnormal) | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | exit M2 (normal) | | Finally.cs:24:13:24:19 | return ...; | Finally.cs:24:13:24:19 | return ...; | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:19:10:19:11 | exit M2 (abnormal) | | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:27:9:29:9 | {...} | @@ -10574,6 +10286,7 @@ blockDominance | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:34:27:34:32 | throw ...; | | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:49:9:51:9 | [finally: exception] {...} | | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:27:9:29:9 | {...} | | Finally.cs:27:9:29:9 | {...} | Finally.cs:27:9:29:9 | {...} | @@ -10588,9 +10301,9 @@ blockDominance | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:42:9:43:9 | {...} | | Finally.cs:42:9:43:9 | {...} | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:49:9:51:9 | [finally: exception] {...} | Finally.cs:49:9:51:9 | [finally: exception] {...} | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | enter M3 | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | exit M3 | -| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | exit M3 (abnormal) | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | exit M3 (normal) | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:59:13:59:19 | return ...; | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | @@ -10599,31 +10312,27 @@ blockDominance | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | +| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:69:9:71:9 | [finally: exception] {...} | | Finally.cs:54:10:54:11 | exit M3 | Finally.cs:54:10:54:11 | exit M3 | -| Finally.cs:54:10:54:11 | exit M3 (abnormal) | Finally.cs:54:10:54:11 | exit M3 (abnormal) | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:54:10:54:11 | exit M3 (normal) | | Finally.cs:59:13:59:19 | return ...; | Finally.cs:59:13:59:19 | return ...; | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:54:10:54:11 | exit M3 (abnormal) | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:62:9:64:9 | {...} | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | +| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:69:9:71:9 | [finally: exception] {...} | | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:62:9:64:9 | {...} | | Finally.cs:62:9:64:9 | {...} | Finally.cs:62:9:64:9 | {...} | | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | | Finally.cs:66:9:67:9 | {...} | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | +| Finally.cs:69:9:71:9 | [finally: exception] {...} | Finally.cs:69:9:71:9 | [finally: exception] {...} | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:74:10:74:11 | enter M4 | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:74:10:74:11 | exit M4 | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:74:10:74:11 | exit M4 (abnormal) | @@ -10644,12 +10353,12 @@ blockDominance | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | +| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | +| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | +| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | +| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: return] {...} | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | {...} | | Finally.cs:74:10:74:11 | exit M4 | Finally.cs:74:10:74:11 | exit M4 | @@ -10674,12 +10383,12 @@ blockDominance | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | +| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | +| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | +| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | +| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return] {...} | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | {...} | | Finally.cs:78:9:100:9 | {...} | Finally.cs:74:10:74:11 | exit M4 (abnormal) | @@ -10698,18 +10407,18 @@ blockDominance | Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | | Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | | Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | +| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | +| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | +| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | +| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return] {...} | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | {...} | | Finally.cs:82:21:82:27 | return ...; | Finally.cs:82:21:82:27 | return ...; | | Finally.cs:82:21:82:27 | return ...; | Finally.cs:93:25:93:46 | [finally: return] throw ...; | | Finally.cs:82:21:82:27 | return ...; | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | -| Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | +| Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | | Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return] {...} | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:83:17:84:29 | if (...) ... | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:84:21:84:29 | continue; | @@ -10722,16 +10431,16 @@ blockDominance | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | +| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | +| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | +| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue] {...} | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | {...} | | Finally.cs:84:21:84:29 | continue; | Finally.cs:84:21:84:29 | continue; | | Finally.cs:84:21:84:29 | continue; | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | | Finally.cs:84:21:84:29 | continue; | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | -| Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | +| Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | | Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue] {...} | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:85:17:86:26 | if (...) ... | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:86:21:86:26 | break; | @@ -10740,19 +10449,19 @@ blockDominance | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:25:93:46 | throw ...; | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | +| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | +| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break] {...} | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | {...} | | Finally.cs:86:21:86:26 | break; | Finally.cs:86:21:86:26 | break; | | Finally.cs:86:21:86:26 | break; | Finally.cs:93:25:93:46 | [finally: break] throw ...; | | Finally.cs:86:21:86:26 | break; | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | -| Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | +| Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | | Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break] {...} | | Finally.cs:89:13:99:13 | {...} | Finally.cs:89:13:99:13 | {...} | | Finally.cs:89:13:99:13 | {...} | Finally.cs:93:25:93:46 | throw ...; | | Finally.cs:89:13:99:13 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | +| Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | | Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | {...} | | Finally.cs:93:25:93:46 | [finally: break] throw ...; | Finally.cs:93:25:93:46 | [finally: break] throw ...; | | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | @@ -10760,22 +10469,22 @@ blockDominance | Finally.cs:93:25:93:46 | throw ...; | Finally.cs:93:25:93:46 | throw ...; | | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: break] throw ...; | | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | +| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | +| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: return] throw ...; | | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | +| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:25:93:46 | throw ...; | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | +| Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | +| Finally.cs:96:17:98:17 | [finally(1): exception] {...} | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | +| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | | Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | +| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | | Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | +| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | | Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:96:17:98:17 | [finally: return] {...} | | Finally.cs:96:17:98:17 | {...} | Finally.cs:96:17:98:17 | {...} | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:103:10:103:11 | enter M5 | @@ -10790,33 +10499,22 @@ blockDominance | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:109:33:109:33 | 1 | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | +| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:113:9:118:9 | [finally: exception] {...} | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | +| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [false, finally: exception] !... | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [false, finally: return] !... | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | +| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [true, finally: exception] !... | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [true, finally: return] !... | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | +| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:115:17:115:41 | [finally: exception] ...; | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:115:17:115:41 | [finally: return] ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | +| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | +| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:117:17:117:37 | [finally: exception] ...; | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:103:10:103:11 | exit M5 | Finally.cs:103:10:103:11 | exit M5 | | Finally.cs:103:10:103:11 | exit M5 (abnormal) | Finally.cs:103:10:103:11 | exit M5 (abnormal) | @@ -10830,27 +10528,16 @@ blockDominance | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:109:33:109:33 | 1 | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [false, finally: return] !... | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [true, finally: return] !... | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:115:17:115:41 | [finally: return] ...; | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:107:33:107:33 | 0 | Finally.cs:103:10:103:11 | exit M5 (normal) | | Finally.cs:107:33:107:33 | 0 | Finally.cs:107:33:107:33 | 0 | @@ -10861,20 +10548,15 @@ blockDominance | Finally.cs:107:33:107:33 | 0 | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:107:33:107:33 | 0 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | | Finally.cs:107:33:107:33 | 0 | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | | Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false, finally: return] !... | | Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | | Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true, finally: return] !... | | Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | | Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | [finally: return] ...; | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | | Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | | Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | | Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:108:17:108:23 | return ...; | Finally.cs:108:17:108:23 | return ...; | | Finally.cs:108:17:108:23 | return ...; | Finally.cs:114:17:114:36 | [false, finally: return] !... | @@ -10888,118 +10570,75 @@ blockDominance | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:17:109:28 | access to property Length | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:33:109:33 | 1 | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | | Finally.cs:109:33:109:33 | 1 | Finally.cs:109:33:109:33 | 1 | | Finally.cs:109:33:109:33 | 1 | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:109:33:109:33 | 1 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | | Finally.cs:109:33:109:33 | 1 | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | | Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | | Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:109:33:109:33 | 1 | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | | Finally.cs:109:33:109:33 | 1 | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:109:33:109:33 | 1 | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | | Finally.cs:110:17:110:49 | throw ...; | Finally.cs:110:17:110:49 | throw ...; | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | -| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:103:10:103:11 | exit M5 (abnormal) | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:113:9:118:9 | [finally: exception] {...} | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:114:17:114:36 | [false, finally: exception] !... | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:114:17:114:36 | [true, finally: exception] !... | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:115:17:115:41 | [finally: exception] ...; | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:117:17:117:37 | [finally: exception] ...; | | Finally.cs:113:9:118:9 | {...} | Finally.cs:113:9:118:9 | {...} | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:17:114:36 | [false] !... | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:113:9:118:9 | {...} | Finally.cs:115:17:115:41 | ...; | | Finally.cs:113:9:118:9 | {...} | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:113:9:118:9 | {...} | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | +| Finally.cs:114:17:114:36 | [false, finally: exception] !... | Finally.cs:114:17:114:36 | [false, finally: exception] !... | | Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:114:17:114:36 | [false, finally: return] !... | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | +| Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:114:17:114:36 | [true, finally: exception] !... | +| Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:115:17:115:41 | [finally: exception] ...; | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:114:17:114:36 | [true, finally: return] !... | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | | Finally.cs:115:17:115:41 | ...; | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | +| Finally.cs:115:17:115:41 | [finally: exception] ...; | Finally.cs:115:17:115:41 | [finally: exception] ...; | | Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:115:17:115:41 | [finally: return] ...; | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | +| Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:103:10:103:11 | exit M5 (abnormal) | +| Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | +| Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception] ...; | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:117:17:117:37 | ...; | | Finally.cs:117:17:117:37 | ...; | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | +| Finally.cs:117:17:117:37 | [finally: exception] ...; | Finally.cs:117:17:117:37 | [finally: exception] ...; | | Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:121:10:121:11 | enter M6 | | Finally.cs:133:10:133:11 | enter M7 | Finally.cs:133:10:133:11 | enter M7 | | Finally.cs:133:10:133:11 | enter M7 | Finally.cs:133:10:133:11 | exit M7 (abnormal) | -| Finally.cs:133:10:133:11 | enter M7 | Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | +| Finally.cs:133:10:133:11 | enter M7 | Finally.cs:140:9:143:9 | [finally: exception] {...} | | Finally.cs:133:10:133:11 | enter M7 | Finally.cs:140:9:143:9 | {...} | | Finally.cs:133:10:133:11 | exit M7 (abnormal) | Finally.cs:133:10:133:11 | exit M7 (abnormal) | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | +| Finally.cs:140:9:143:9 | [finally: exception] {...} | Finally.cs:140:9:143:9 | [finally: exception] {...} | | Finally.cs:140:9:143:9 | {...} | Finally.cs:140:9:143:9 | {...} | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | enter M8 | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | exit M8 | @@ -11007,80 +10646,54 @@ blockDominance | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | exit M8 (normal) | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:152:17:152:50 | throw ...; | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | [finally: exception] {...} | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | {...} | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | 1 | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | [finally: exception] 1 | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | [finally: exception] "1" | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | [finally: exception] {...} | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | catch {...} | | Finally.cs:147:10:147:11 | exit M8 | Finally.cs:147:10:147:11 | exit M8 | | Finally.cs:147:10:147:11 | exit M8 (abnormal) | Finally.cs:147:10:147:11 | exit M8 (abnormal) | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:147:10:147:11 | exit M8 (normal) | | Finally.cs:152:17:152:50 | throw ...; | Finally.cs:152:17:152:50 | throw ...; | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:147:10:147:11 | exit M8 (abnormal) | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:17:152:50 | throw ...; | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | +| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:155:9:169:9 | [finally: exception] {...} | +| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:158:36:158:36 | [finally: exception] 1 | +| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | +| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:159:41:159:43 | [finally: exception] "1" | +| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | +| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | +| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | +| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | +| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:162:13:164:13 | [finally: exception] {...} | +| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:147:10:147:11 | exit M8 (abnormal) | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:155:9:169:9 | [finally: exception] {...} | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:158:36:158:36 | [finally: exception] 1 | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:159:41:159:43 | [finally: exception] "1" | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:162:13:164:13 | [finally: exception] {...} | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | | Finally.cs:155:9:169:9 | {...} | Finally.cs:147:10:147:11 | exit M8 (normal) | | Finally.cs:155:9:169:9 | {...} | Finally.cs:155:9:169:9 | {...} | | Finally.cs:155:9:169:9 | {...} | Finally.cs:158:36:158:36 | 1 | @@ -11095,44 +10708,30 @@ blockDominance | Finally.cs:158:36:158:36 | 1 | Finally.cs:158:36:158:36 | 1 | | Finally.cs:158:36:158:36 | 1 | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:158:36:158:36 | 1 | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | +| Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:158:36:158:36 | [finally: exception] 1 | +| Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | +| Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:159:41:159:43 | [finally: exception] "1" | +| Finally.cs:159:21:159:45 | [finally: exception] throw ...; | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | | Finally.cs:159:21:159:45 | throw ...; | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:159:41:159:43 | "1" | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:159:41:159:43 | "1" | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | +| Finally.cs:159:41:159:43 | [finally: exception] "1" | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | +| Finally.cs:159:41:159:43 | [finally: exception] "1" | Finally.cs:159:41:159:43 | [finally: exception] "1" | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | +| Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | +| Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | +| Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | +| Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | +| Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | +| Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | +| Finally.cs:162:13:164:13 | [finally: exception] {...} | Finally.cs:162:13:164:13 | [finally: exception] {...} | | Finally.cs:162:13:164:13 | {...} | Finally.cs:162:13:164:13 | {...} | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | +| Finally.cs:165:13:168:13 | [finally: exception] catch {...} | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:165:13:168:13 | catch {...} | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | enter ExceptionA | | Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | enter ExceptionB | @@ -11144,55 +10743,34 @@ blockDominance | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | | Finally.cs:176:10:176:11 | exit M9 | Finally.cs:176:10:176:11 | exit M9 | | Finally.cs:176:10:176:11 | exit M9 (abnormal) | Finally.cs:176:10:176:11 | exit M9 (abnormal) | | Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:176:10:176:11 | exit M9 (normal) | | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | +| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | +| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | +| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | +| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | +| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | exit M9 (normal) | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | @@ -11201,186 +10779,119 @@ blockDominance | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | +| Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | +| Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | +| Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | +| Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:195:10:195:12 | enter M10 | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:195:10:195:12 | exit M10 | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:21:199:43 | throw ...; | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | [finally: exception] {...} | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | {...} | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | throw ...; | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception] {...} | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | {...} | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | ...; | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception] ...; | | Finally.cs:195:10:195:12 | exit M10 | Finally.cs:195:10:195:12 | exit M10 | | Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | exit M10 (abnormal) | | Finally.cs:199:21:199:43 | throw ...; | Finally.cs:199:21:199:43 | throw ...; | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:21:199:43 | throw ...; | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:27:199:42 | object creation of type ExceptionA | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | +| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:202:9:212:9 | [finally: exception] {...} | +| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | +| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | +| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | +| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:208:13:210:13 | [finally: exception] {...} | +| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | +| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | +| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:211:13:211:29 | [finally: exception] ...; | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:202:9:212:9 | [finally: exception] {...} | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:208:13:210:13 | [finally: exception] {...} | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:211:13:211:29 | [finally: exception] ...; | | Finally.cs:202:9:212:9 | {...} | Finally.cs:202:9:212:9 | {...} | | Finally.cs:202:9:212:9 | {...} | Finally.cs:205:25:205:47 | throw ...; | | Finally.cs:202:9:212:9 | {...} | Finally.cs:205:31:205:46 | object creation of type ExceptionB | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | +| Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | | Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | {...} | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | +| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | | Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | object creation of type ExceptionC | | Finally.cs:202:9:212:9 | {...} | Finally.cs:211:13:211:29 | ...; | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | +| Finally.cs:205:25:205:47 | [finally: exception] throw ...; | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | | Finally.cs:205:25:205:47 | throw ...; | Finally.cs:205:25:205:47 | throw ...; | -| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | +| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | +| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | +| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | +| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:25:205:47 | throw ...; | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:31:205:46 | object creation of type ExceptionB | -| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | -| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | +| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | +| Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | +| Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | +| Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | +| Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | +| Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:208:13:210:13 | [finally: exception] {...} | +| Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | +| Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:211:13:211:29 | [finally: exception] ...; | | Finally.cs:208:13:210:13 | {...} | Finally.cs:208:13:210:13 | {...} | | Finally.cs:208:13:210:13 | {...} | Finally.cs:209:31:209:46 | object creation of type ExceptionC | | Finally.cs:208:13:210:13 | {...} | Finally.cs:211:13:211:29 | ...; | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | +| Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | +| Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:31:209:46 | object creation of type ExceptionC | | Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:29 | ...; | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:211:13:211:29 | [finally: exception] ...; | Finally.cs:211:13:211:29 | [finally: exception] ...; | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:216:10:216:12 | enter M11 | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:222:9:225:9 | catch {...} | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:227:9:229:9 | {...} | @@ -11388,83 +10899,61 @@ blockDominance | Finally.cs:227:9:229:9 | {...} | Finally.cs:227:9:229:9 | {...} | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:233:10:233:12 | enter M12 | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:233:10:233:12 | exit M12 | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:233:10:233:12 | exit M12 (abnormal) | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:240:21:240:43 | throw ...; | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | [finally: exception] {...} | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | throw ...; | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception] {...} | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:257:9:259:9 | [finally: exception] {...} | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:257:9:259:9 | {...} | | Finally.cs:233:10:233:12 | exit M12 | Finally.cs:233:10:233:12 | exit M12 | -| Finally.cs:233:10:233:12 | exit M12 (abnormal) | Finally.cs:233:10:233:12 | exit M12 (abnormal) | | Finally.cs:240:21:240:43 | throw ...; | Finally.cs:240:21:240:43 | throw ...; | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:21:240:43 | throw ...; | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:27:240:42 | object creation of type ExceptionA | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | +| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:243:13:253:13 | [finally: exception] {...} | +| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | +| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | +| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | +| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception] {...} | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:243:13:253:13 | [finally: exception] {...} | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:250:17:252:17 | [finally: exception] {...} | | Finally.cs:243:13:253:13 | {...} | Finally.cs:243:13:253:13 | {...} | | Finally.cs:243:13:253:13 | {...} | Finally.cs:247:25:247:47 | throw ...; | | Finally.cs:243:13:253:13 | {...} | Finally.cs:247:31:247:46 | object creation of type ExceptionA | -| Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | +| Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | | Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | {...} | | Finally.cs:243:13:253:13 | {...} | Finally.cs:257:9:259:9 | {...} | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | +| Finally.cs:247:25:247:47 | [finally: exception] throw ...; | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | | Finally.cs:247:25:247:47 | throw ...; | Finally.cs:247:25:247:47 | throw ...; | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | +| Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | +| Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | +| Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:25:247:47 | throw ...; | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:31:247:46 | object creation of type ExceptionA | -| Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | +| Finally.cs:250:17:252:17 | [finally(1): exception] {...} | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | +| Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | +| Finally.cs:250:17:252:17 | [finally: exception] {...} | Finally.cs:250:17:252:17 | [finally: exception] {...} | | Finally.cs:250:17:252:17 | {...} | Finally.cs:250:17:252:17 | {...} | | Finally.cs:250:17:252:17 | {...} | Finally.cs:257:9:259:9 | {...} | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:257:9:259:9 | [finally: exception] {...} | Finally.cs:257:9:259:9 | [finally: exception] {...} | | Finally.cs:257:9:259:9 | {...} | Finally.cs:257:9:259:9 | {...} | | Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | enter M13 | | Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | exit M13 | -| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | +| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:270:9:273:9 | [finally: exception] {...} | | Finally.cs:263:10:263:12 | enter M13 | Finally.cs:270:9:273:9 | {...} | | Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | exit M13 | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | +| Finally.cs:270:9:273:9 | [finally: exception] {...} | Finally.cs:270:9:273:9 | [finally: exception] {...} | | Finally.cs:270:9:273:9 | {...} | Finally.cs:270:9:273:9 | {...} | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | enter Foreach | | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | enter M1 | @@ -14617,12 +14106,11 @@ postBlockDominance | Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | enter Finally | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:7:10:7:11 | enter M1 | | Finally.cs:7:10:7:11 | exit M1 | Finally.cs:7:10:7:11 | exit M1 | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | +| Finally.cs:14:9:16:9 | [finally: exception] {...} | Finally.cs:14:9:16:9 | [finally: exception] {...} | | Finally.cs:14:9:16:9 | {...} | Finally.cs:7:10:7:11 | enter M1 | | Finally.cs:14:9:16:9 | {...} | Finally.cs:14:9:16:9 | {...} | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | enter M2 | | Finally.cs:19:10:19:11 | exit M2 | Finally.cs:19:10:19:11 | exit M2 | -| Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:19:10:19:11 | exit M2 (abnormal) | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | enter M2 | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | exit M2 (normal) | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:24:13:24:19 | return ...; | @@ -14645,9 +14133,9 @@ postBlockDominance | Finally.cs:42:9:43:9 | {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | | Finally.cs:42:9:43:9 | {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | | Finally.cs:42:9:43:9 | {...} | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:49:9:51:9 | [finally: exception] {...} | Finally.cs:49:9:51:9 | [finally: exception] {...} | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | enter M3 | | Finally.cs:54:10:54:11 | exit M3 | Finally.cs:54:10:54:11 | exit M3 | -| Finally.cs:54:10:54:11 | exit M3 (abnormal) | Finally.cs:54:10:54:11 | exit M3 (abnormal) | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:54:10:54:11 | enter M3 | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:54:10:54:11 | exit M3 (normal) | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:59:13:59:19 | return ...; | @@ -14668,7 +14156,7 @@ postBlockDominance | Finally.cs:66:9:67:9 | {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | | Finally.cs:66:9:67:9 | {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | | Finally.cs:66:9:67:9 | {...} | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | +| Finally.cs:69:9:71:9 | [finally: exception] {...} | Finally.cs:69:9:71:9 | [finally: exception] {...} | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:74:10:74:11 | enter M4 | | Finally.cs:74:10:74:11 | exit M4 | Finally.cs:74:10:74:11 | exit M4 | | Finally.cs:74:10:74:11 | exit M4 (abnormal) | Finally.cs:74:10:74:11 | exit M4 (abnormal) | @@ -14707,14 +14195,14 @@ postBlockDominance | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | +| Finally.cs:96:17:98:17 | [finally(1): exception] {...} | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | +| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | | Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:86:21:86:26 | break; | | Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | +| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | | Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:84:21:84:29 | continue; | | Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | +| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | | Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:82:21:82:27 | return ...; | | Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:96:17:98:17 | [finally: return] {...} | | Finally.cs:96:17:98:17 | {...} | Finally.cs:89:13:99:13 | {...} | @@ -14755,32 +14243,23 @@ postBlockDominance | Finally.cs:109:33:109:33 | 1 | Finally.cs:109:33:109:33 | 1 | | Finally.cs:110:17:110:49 | throw ...; | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:113:9:118:9 | [finally: exception] {...} | | Finally.cs:113:9:118:9 | {...} | Finally.cs:109:13:110:49 | if (...) ... | | Finally.cs:113:9:118:9 | {...} | Finally.cs:109:17:109:28 | access to property Length | | Finally.cs:113:9:118:9 | {...} | Finally.cs:109:33:109:33 | 1 | | Finally.cs:113:9:118:9 | {...} | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | +| Finally.cs:114:17:114:36 | [false, finally: exception] !... | Finally.cs:114:17:114:36 | [false, finally: exception] !... | | Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:114:17:114:36 | [false, finally: return] !... | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | +| Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:114:17:114:36 | [true, finally: exception] !... | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:114:17:114:36 | [true, finally: return] !... | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:115:17:115:41 | ...; | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:115:17:115:41 | ...; | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | +| Finally.cs:115:17:115:41 | [finally: exception] ...; | Finally.cs:115:17:115:41 | [finally: exception] ...; | | Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:114:17:114:36 | [true, finally: return] !... | | Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:115:17:115:41 | [finally: return] ...; | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | +| Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:108:17:108:23 | return ...; | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:114:17:114:36 | [false, finally: return] !... | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:114:17:114:36 | [true, finally: return] !... | @@ -14795,14 +14274,12 @@ postBlockDominance | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:115:17:115:41 | ...; | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:117:17:117:37 | ...; | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | +| Finally.cs:117:17:117:37 | [finally: exception] ...; | Finally.cs:117:17:117:37 | [finally: exception] ...; | | Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:121:10:121:11 | enter M6 | | Finally.cs:133:10:133:11 | enter M7 | Finally.cs:133:10:133:11 | enter M7 | | Finally.cs:133:10:133:11 | exit M7 (abnormal) | Finally.cs:133:10:133:11 | exit M7 (abnormal) | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | +| Finally.cs:140:9:143:9 | [finally: exception] {...} | Finally.cs:140:9:143:9 | [finally: exception] {...} | | Finally.cs:140:9:143:9 | {...} | Finally.cs:140:9:143:9 | {...} | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | enter M8 | | Finally.cs:147:10:147:11 | exit M8 | Finally.cs:147:10:147:11 | exit M8 | @@ -14821,41 +14298,32 @@ postBlockDominance | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:165:13:168:13 | catch {...} | | Finally.cs:152:17:152:50 | throw ...; | Finally.cs:152:17:152:50 | throw ...; | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:155:9:169:9 | [finally: exception] {...} | | Finally.cs:155:9:169:9 | {...} | Finally.cs:147:10:147:11 | enter M8 | | Finally.cs:155:9:169:9 | {...} | Finally.cs:155:9:169:9 | {...} | | Finally.cs:158:36:158:36 | 1 | Finally.cs:158:36:158:36 | 1 | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | +| Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:158:36:158:36 | [finally: exception] 1 | +| Finally.cs:159:21:159:45 | [finally: exception] throw ...; | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | | Finally.cs:159:21:159:45 | throw ...; | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:159:41:159:43 | "1" | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | +| Finally.cs:159:41:159:43 | [finally: exception] "1" | Finally.cs:159:41:159:43 | [finally: exception] "1" | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:159:41:159:43 | "1" | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | +| Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | +| Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:159:41:159:43 | "1" | | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | +| Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | +| Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | +| Finally.cs:162:13:164:13 | [finally: exception] {...} | Finally.cs:162:13:164:13 | [finally: exception] {...} | | Finally.cs:162:13:164:13 | {...} | Finally.cs:162:13:164:13 | {...} | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | +| Finally.cs:165:13:168:13 | [finally: exception] catch {...} | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:165:13:168:13 | catch {...} | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | enter ExceptionA | | Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | enter ExceptionB | @@ -14876,71 +14344,54 @@ postBlockDominance | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | enter M9 | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | +| Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | +| Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | +| Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | +| Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:195:10:195:12 | enter M10 | | Finally.cs:195:10:195:12 | exit M10 | Finally.cs:195:10:195:12 | exit M10 | | Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | exit M10 (abnormal) | | Finally.cs:199:21:199:43 | throw ...; | Finally.cs:199:21:199:43 | throw ...; | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:27:199:42 | object creation of type ExceptionA | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:202:9:212:9 | [finally: exception] {...} | | Finally.cs:202:9:212:9 | {...} | Finally.cs:195:10:195:12 | enter M10 | | Finally.cs:202:9:212:9 | {...} | Finally.cs:202:9:212:9 | {...} | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | +| Finally.cs:205:25:205:47 | [finally: exception] throw ...; | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | | Finally.cs:205:25:205:47 | throw ...; | Finally.cs:205:25:205:47 | throw ...; | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | +| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:31:205:46 | object creation of type ExceptionB | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | +| Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | +| Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:208:13:210:13 | [finally: exception] {...} | | Finally.cs:208:13:210:13 | {...} | Finally.cs:195:10:195:12 | enter M10 | | Finally.cs:208:13:210:13 | {...} | Finally.cs:202:9:212:9 | {...} | | Finally.cs:208:13:210:13 | {...} | Finally.cs:208:13:210:13 | {...} | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | +| Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | +| Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:31:209:46 | object creation of type ExceptionC | | Finally.cs:211:13:211:29 | ...; | Finally.cs:195:10:195:12 | enter M10 | | Finally.cs:211:13:211:29 | ...; | Finally.cs:202:9:212:9 | {...} | | Finally.cs:211:13:211:29 | ...; | Finally.cs:208:13:210:13 | {...} | | Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:29 | ...; | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:211:13:211:29 | [finally: exception] ...; | Finally.cs:211:13:211:29 | [finally: exception] ...; | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:216:10:216:12 | enter M11 | | Finally.cs:222:9:225:9 | catch {...} | Finally.cs:222:9:225:9 | catch {...} | | Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | enter M11 | @@ -14948,35 +14399,29 @@ postBlockDominance | Finally.cs:227:9:229:9 | {...} | Finally.cs:227:9:229:9 | {...} | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:233:10:233:12 | enter M12 | | Finally.cs:233:10:233:12 | exit M12 | Finally.cs:233:10:233:12 | exit M12 | -| Finally.cs:233:10:233:12 | exit M12 (abnormal) | Finally.cs:233:10:233:12 | exit M12 (abnormal) | | Finally.cs:240:21:240:43 | throw ...; | Finally.cs:240:21:240:43 | throw ...; | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:27:240:42 | object creation of type ExceptionA | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:243:13:253:13 | [finally: exception] {...} | | Finally.cs:243:13:253:13 | {...} | Finally.cs:233:10:233:12 | enter M12 | | Finally.cs:243:13:253:13 | {...} | Finally.cs:243:13:253:13 | {...} | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | +| Finally.cs:247:25:247:47 | [finally: exception] throw ...; | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | | Finally.cs:247:25:247:47 | throw ...; | Finally.cs:247:25:247:47 | throw ...; | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | +| Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:31:247:46 | object creation of type ExceptionA | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:250:17:252:17 | [finally(1): exception] {...} | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | +| Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | +| Finally.cs:250:17:252:17 | [finally: exception] {...} | Finally.cs:250:17:252:17 | [finally: exception] {...} | | Finally.cs:250:17:252:17 | {...} | Finally.cs:233:10:233:12 | enter M12 | | Finally.cs:250:17:252:17 | {...} | Finally.cs:243:13:253:13 | {...} | | Finally.cs:250:17:252:17 | {...} | Finally.cs:250:17:252:17 | {...} | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:257:9:259:9 | [finally: exception] {...} | Finally.cs:257:9:259:9 | [finally: exception] {...} | | Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | enter M12 | | Finally.cs:257:9:259:9 | {...} | Finally.cs:243:13:253:13 | {...} | | Finally.cs:257:9:259:9 | {...} | Finally.cs:250:17:252:17 | {...} | | Finally.cs:257:9:259:9 | {...} | Finally.cs:257:9:259:9 | {...} | | Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | enter M13 | | Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | exit M13 | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | +| Finally.cs:270:9:273:9 | [finally: exception] {...} | Finally.cs:270:9:273:9 | [finally: exception] {...} | | Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | enter M13 | | Finally.cs:270:9:273:9 | {...} | Finally.cs:270:9:273:9 | {...} | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | enter Foreach | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected index fd87b8db058..2c2e977ae12 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected @@ -1146,10 +1146,10 @@ nodeEnclosing | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:31:9:34:9 | {...} | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:32:13:32:21 | goto ...; | CompileTimeOperators.cs:28:10:28:10 | M | -| CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | CompileTimeOperators.cs:28:10:28:10 | M | -| CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | CompileTimeOperators.cs:28:10:28:10 | M | -| CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | CompileTimeOperators.cs:28:10:28:10 | M | -| CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:36:9:38:9 | [finally: goto] {...} | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:37:13:37:40 | [finally: goto] call to method WriteLine | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:37:13:37:41 | [finally: goto] ...; | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:37:31:37:39 | [finally: goto] "Finally" | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:28:10:28:10 | M | @@ -1899,14 +1899,14 @@ nodeEnclosing | Finally.cs:11:13:11:37 | call to method WriteLine | Finally.cs:7:10:7:11 | M1 | | Finally.cs:11:13:11:38 | ...; | Finally.cs:7:10:7:11 | M1 | | Finally.cs:11:31:11:36 | "Try1" | Finally.cs:7:10:7:11 | M1 | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:7:10:7:11 | M1 | +| Finally.cs:14:9:16:9 | [finally: exception] {...} | Finally.cs:7:10:7:11 | M1 | | Finally.cs:14:9:16:9 | {...} | Finally.cs:7:10:7:11 | M1 | -| Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:7:10:7:11 | M1 | +| Finally.cs:15:13:15:40 | [finally: exception] call to method WriteLine | Finally.cs:7:10:7:11 | M1 | | Finally.cs:15:13:15:40 | call to method WriteLine | Finally.cs:7:10:7:11 | M1 | | Finally.cs:15:13:15:41 | ...; | Finally.cs:7:10:7:11 | M1 | -| Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | Finally.cs:7:10:7:11 | M1 | +| Finally.cs:15:13:15:41 | [finally: exception] ...; | Finally.cs:7:10:7:11 | M1 | | Finally.cs:15:31:15:39 | "Finally" | Finally.cs:7:10:7:11 | M1 | -| Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | Finally.cs:7:10:7:11 | M1 | +| Finally.cs:15:31:15:39 | [finally: exception] "Finally" | Finally.cs:7:10:7:11 | M1 | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | M2 | | Finally.cs:19:10:19:11 | exit M2 | Finally.cs:19:10:19:11 | M2 | | Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:19:10:19:11 | M2 | @@ -1931,27 +1931,23 @@ nodeEnclosing | Finally.cs:34:17:34:32 | if (...) ... | Finally.cs:19:10:19:11 | M2 | | Finally.cs:34:21:34:24 | true | Finally.cs:19:10:19:11 | M2 | | Finally.cs:34:27:34:32 | throw ...; | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:37:13:39:13 | [finally: exception] {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:38:17:38:44 | [finally: exception] throw ...; | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:38:23:38:43 | [finally: exception] object creation of type Exception | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:38:37:38:42 | [finally: exception] "Boo!" | Finally.cs:19:10:19:11 | M2 | | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:19:10:19:11 | M2 | | Finally.cs:42:9:43:9 | {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:49:9:51:9 | [finally: exception] {...} | Finally.cs:19:10:19:11 | M2 | | Finally.cs:49:9:51:9 | [finally: return] {...} | Finally.cs:19:10:19:11 | M2 | | Finally.cs:49:9:51:9 | {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:50:13:50:40 | [finally: exception] call to method WriteLine | Finally.cs:19:10:19:11 | M2 | | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | Finally.cs:19:10:19:11 | M2 | | Finally.cs:50:13:50:40 | call to method WriteLine | Finally.cs:19:10:19:11 | M2 | | Finally.cs:50:13:50:41 | ...; | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:50:13:50:41 | [finally: exception] ...; | Finally.cs:19:10:19:11 | M2 | | Finally.cs:50:13:50:41 | [finally: return] ...; | Finally.cs:19:10:19:11 | M2 | | Finally.cs:50:31:50:39 | "Finally" | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:50:31:50:39 | [finally: exception] "Finally" | Finally.cs:19:10:19:11 | M2 | | Finally.cs:50:31:50:39 | [finally: return] "Finally" | Finally.cs:19:10:19:11 | M2 | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | M3 | | Finally.cs:54:10:54:11 | exit M3 | Finally.cs:54:10:54:11 | M3 | @@ -1976,21 +1972,17 @@ nodeEnclosing | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:54:10:54:11 | M3 | | Finally.cs:65:48:65:51 | [exception: Exception] null | Finally.cs:54:10:54:11 | M3 | | Finally.cs:66:9:67:9 | {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:69:9:71:9 | [finally: exception] {...} | Finally.cs:54:10:54:11 | M3 | | Finally.cs:69:9:71:9 | [finally: return] {...} | Finally.cs:54:10:54:11 | M3 | | Finally.cs:69:9:71:9 | {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:70:13:70:40 | [finally: exception] call to method WriteLine | Finally.cs:54:10:54:11 | M3 | | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | Finally.cs:54:10:54:11 | M3 | | Finally.cs:70:13:70:40 | call to method WriteLine | Finally.cs:54:10:54:11 | M3 | | Finally.cs:70:13:70:41 | ...; | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:70:13:70:41 | [finally: exception] ...; | Finally.cs:54:10:54:11 | M3 | | Finally.cs:70:13:70:41 | [finally: return] ...; | Finally.cs:54:10:54:11 | M3 | | Finally.cs:70:31:70:39 | "Finally" | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:70:31:70:39 | [finally: exception] "Finally" | Finally.cs:54:10:54:11 | M3 | | Finally.cs:70:31:70:39 | [finally: return] "Finally" | Finally.cs:54:10:54:11 | M3 | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:74:10:74:11 | M4 | | Finally.cs:74:10:74:11 | exit M4 | Finally.cs:74:10:74:11 | M4 | @@ -2058,37 +2050,37 @@ nodeEnclosing | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:74:10:74:11 | M4 | | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:74:10:74:11 | M4 | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:96:17:98:17 | [finally(1): exception] {...} | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:96:17:98:17 | {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:97:21:97:21 | [finally(1): exception] access to local variable i | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception] access to local variable i | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:21 | [finally: break] access to local variable i | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception] access to local variable i | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception] access to local variable i | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:21 | [finally: return] access to local variable i | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:21 | access to local variable i | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:23 | ...-- | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:97:21:97:23 | [finally(1): exception] ...-- | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:97:21:97:23 | [finally: break, finally(1): exception] ...-- | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:23 | [finally: break] ...-- | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception] ...-- | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:23 | [finally: continue] ...-- | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:97:21:97:23 | [finally: return, finally(1): exception] ...-- | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:23 | [finally: return] ...-- | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:24 | ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:97:21:97:24 | [finally(1): exception] ...; | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception] ...; | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:24 | [finally: break] ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception] ...; | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:24 | [finally: continue] ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception] ...; | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:24 | [finally: return] ...; | Finally.cs:74:10:74:11 | M4 | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:103:10:103:11 | M5 | | Finally.cs:103:10:103:11 | exit M5 | Finally.cs:103:10:103:11 | M5 | @@ -2112,115 +2104,71 @@ nodeEnclosing | Finally.cs:109:33:109:33 | 1 | Finally.cs:103:10:103:11 | M5 | | Finally.cs:110:17:110:49 | throw ...; | Finally.cs:103:10:103:11 | M5 | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:103:10:103:11 | M5 | | Finally.cs:113:9:118:9 | [finally: return] {...} | Finally.cs:103:10:103:11 | M5 | | Finally.cs:113:9:118:9 | {...} | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:114:13:115:41 | [finally: exception] if (...) ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:13:115:41 | [finally: return] if (...) ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:13:115:41 | if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:114:17:114:36 | [false, finally: exception] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:114:19:114:23 | [finally: exception] access to field Field | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:114:19:114:23 | [finally: exception] this access | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:19:114:23 | [finally: return] access to field Field | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:19:114:23 | [finally: return] this access | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:19:114:23 | access to field Field | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:19:114:23 | this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:114:19:114:30 | [finally: exception] access to property Length | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:19:114:30 | [finally: return] access to property Length | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:19:114:30 | access to property Length | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:114:19:114:35 | [finally: exception] ... == ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:35:114:35 | 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:114:35:114:35 | [finally: exception] 0 | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:35:114:35 | [finally: return] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:115:17:115:40 | [finally: exception] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:17:115:40 | call to method WriteLine | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:17:115:41 | ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:115:17:115:41 | [finally: exception] ...; | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:115:35:115:39 | [finally: exception] access to field Field | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:115:35:115:39 | [finally: exception] this access | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:35:115:39 | [finally: return] access to field Field | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:35:115:39 | [finally: return] this access | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:35:115:39 | access to field Field | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:35:115:39 | this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:116:17:116:21 | [finally: exception] access to field Field | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:116:17:116:21 | [finally: exception] this access | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:17:116:21 | [finally: return] access to field Field | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:17:116:21 | [finally: return] this access | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:17:116:21 | access to field Field | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:17:116:21 | this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:116:17:116:28 | [finally: exception] access to property Length | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:17:116:28 | [finally: return] access to property Length | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:17:116:28 | access to property Length | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:116:17:116:32 | [finally: exception] ... > ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:32:116:32 | 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:116:32:116:32 | [finally: exception] 0 | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:32:116:32 | [finally: return] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:117:17:117:36 | [finally: exception] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | | Finally.cs:117:17:117:36 | call to method WriteLine | Finally.cs:103:10:103:11 | M5 | | Finally.cs:117:17:117:37 | ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:117:17:117:37 | [finally: exception] ...; | Finally.cs:103:10:103:11 | M5 | | Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:103:10:103:11 | M5 | | Finally.cs:117:35:117:35 | 1 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:117:35:117:35 | [finally: exception] 1 | Finally.cs:103:10:103:11 | M5 | | Finally.cs:117:35:117:35 | [finally: return] 1 | Finally.cs:103:10:103:11 | M5 | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:121:10:121:11 | M6 | | Finally.cs:121:10:121:11 | exit M6 | Finally.cs:121:10:121:11 | M6 | @@ -2243,14 +2191,14 @@ nodeEnclosing | Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:133:10:133:11 | M7 | | Finally.cs:137:13:137:37 | ...; | Finally.cs:133:10:133:11 | M7 | | Finally.cs:137:31:137:35 | "Try" | Finally.cs:133:10:133:11 | M7 | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:133:10:133:11 | M7 | +| Finally.cs:140:9:143:9 | [finally: exception] {...} | Finally.cs:133:10:133:11 | M7 | | Finally.cs:140:9:143:9 | {...} | Finally.cs:133:10:133:11 | M7 | -| Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | Finally.cs:133:10:133:11 | M7 | +| Finally.cs:141:13:141:44 | [finally: exception] throw ...; | Finally.cs:133:10:133:11 | M7 | | Finally.cs:141:13:141:44 | throw ...; | Finally.cs:133:10:133:11 | M7 | -| Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | Finally.cs:133:10:133:11 | M7 | +| Finally.cs:141:19:141:43 | [finally: exception] object creation of type ArgumentException | Finally.cs:133:10:133:11 | M7 | | Finally.cs:141:19:141:43 | object creation of type ArgumentException | Finally.cs:133:10:133:11 | M7 | | Finally.cs:141:41:141:42 | "" | Finally.cs:133:10:133:11 | M7 | -| Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | Finally.cs:133:10:133:11 | M7 | +| Finally.cs:141:41:141:42 | [finally: exception] "" | Finally.cs:133:10:133:11 | M7 | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | M8 | | Finally.cs:147:10:147:11 | exit M8 | Finally.cs:147:10:147:11 | M8 | | Finally.cs:147:10:147:11 | exit M8 (abnormal) | Finally.cs:147:10:147:11 | M8 | @@ -2264,108 +2212,74 @@ nodeEnclosing | Finally.cs:151:25:151:28 | null | Finally.cs:147:10:147:11 | M8 | | Finally.cs:152:17:152:50 | throw ...; | Finally.cs:147:10:147:11 | M8 | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:155:9:169:9 | {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:156:13:168:13 | [finally: exception] try {...} ... | Finally.cs:147:10:147:11 | M8 | | Finally.cs:156:13:168:13 | try {...} ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:157:13:160:13 | [finally: exception] {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:157:13:160:13 | {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:158:17:159:45 | [finally: exception] if (...) ... | Finally.cs:147:10:147:11 | M8 | | Finally.cs:158:17:159:45 | if (...) ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:158:21:158:24 | [finally: exception] access to parameter args | Finally.cs:147:10:147:11 | M8 | | Finally.cs:158:21:158:24 | access to parameter args | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:158:21:158:31 | [finally: exception] access to property Length | Finally.cs:147:10:147:11 | M8 | | Finally.cs:158:21:158:31 | access to property Length | Finally.cs:147:10:147:11 | M8 | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:158:21:158:36 | [finally: exception] ... == ... | Finally.cs:147:10:147:11 | M8 | | Finally.cs:158:36:158:36 | 1 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:159:21:159:45 | [finally: exception] throw ...; | Finally.cs:147:10:147:11 | M8 | | Finally.cs:159:21:159:45 | throw ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:159:27:159:44 | [finally: exception] object creation of type Exception | Finally.cs:147:10:147:11 | M8 | | Finally.cs:159:27:159:44 | object creation of type Exception | Finally.cs:147:10:147:11 | M8 | | Finally.cs:159:41:159:43 | "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:159:41:159:43 | [finally: exception] "1" | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:39:161:39 | [finally: exception, exception: Exception] access to local variable e | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:39:161:39 | [finally: exception, exception: NullReferenceException] access to local variable e | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:39:161:47 | [finally: exception, exception: Exception] access to property Message | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:39:161:47 | [finally: exception, exception: NullReferenceException] access to property Message | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:52:161:54 | [exception: Exception] "1" | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:52:161:54 | [finally: exception, exception: Exception] "1" | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:52:161:54 | [finally: exception, exception: NullReferenceException] "1" | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:162:13:164:13 | [finally: exception] {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:162:13:164:13 | {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:163:17:163:42 | [finally: exception] call to method WriteLine | Finally.cs:147:10:147:11 | M8 | | Finally.cs:163:17:163:42 | call to method WriteLine | Finally.cs:147:10:147:11 | M8 | | Finally.cs:163:17:163:43 | ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:163:17:163:43 | [finally: exception] ...; | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:163:35:163:38 | [finally: exception] access to parameter args | Finally.cs:147:10:147:11 | M8 | | Finally.cs:163:35:163:38 | access to parameter args | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:163:35:163:41 | [finally: exception] access to array element | Finally.cs:147:10:147:11 | M8 | | Finally.cs:163:35:163:41 | access to array element | Finally.cs:147:10:147:11 | M8 | | Finally.cs:163:40:163:40 | 0 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:163:40:163:40 | [finally: exception] 0 | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:165:13:168:13 | [finally: exception] catch {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:166:13:168:13 | [finally: exception] {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:166:13:168:13 | {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:167:17:167:37 | [finally: exception] call to method WriteLine | Finally.cs:147:10:147:11 | M8 | | Finally.cs:167:17:167:37 | call to method WriteLine | Finally.cs:147:10:147:11 | M8 | | Finally.cs:167:17:167:38 | ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:167:17:167:38 | [finally: exception] ...; | Finally.cs:147:10:147:11 | M8 | | Finally.cs:167:35:167:36 | "" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:167:35:167:36 | [finally: exception] "" | Finally.cs:147:10:147:11 | M8 | | Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | ExceptionA | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | ExceptionA | | Finally.cs:172:11:172:20 | exit ExceptionA | Finally.cs:172:11:172:20 | ExceptionA | @@ -2393,51 +2307,35 @@ nodeEnclosing | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:176:10:176:11 | M9 | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | | Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:184:13:191:13 | [finally: exception, b1 (line 176): true] try {...} ... | Finally.cs:176:10:176:11 | M9 | | Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:185:13:187:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | | Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:186:17:186:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:176:10:176:11 | M9 | | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | | Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:190:17:190:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:176:10:176:11 | M9 | | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:190:25:190:47 | [finally: exception] throw ...; | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:176:10:176:11 | M9 | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:195:10:195:12 | exit M10 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | M10 | @@ -2449,84 +2347,48 @@ nodeEnclosing | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:199:21:199:43 | throw ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:195:10:195:12 | M10 | | Finally.cs:202:9:212:9 | {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:203:13:210:13 | [finally: exception] try {...} ... | Finally.cs:195:10:195:12 | M10 | | Finally.cs:203:13:210:13 | try {...} ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:204:13:206:13 | [finally: exception] {...} | Finally.cs:195:10:195:12 | M10 | | Finally.cs:204:13:206:13 | {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:205:17:205:47 | [finally: exception] if (...) ... | Finally.cs:195:10:195:12 | M10 | | Finally.cs:205:17:205:47 | if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:205:25:205:47 | [finally: exception] throw ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:205:25:205:47 | throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:195:10:195:12 | M10 | | Finally.cs:208:13:210:13 | {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:17:209:47 | [finally(1): exception] if (...) ... | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:17:209:47 | [finally: exception, finally(1): exception] if (...) ... | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:17:209:47 | [finally: exception] if (...) ... | Finally.cs:195:10:195:12 | M10 | | Finally.cs:209:17:209:47 | if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:21:209:22 | [finally: exception, finally(1): exception] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:25:209:47 | [finally(1): exception] throw ...; | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:25:209:47 | [finally: exception, finally(1): exception] throw ...; | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:25:209:47 | [finally: exception] throw ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:209:25:209:47 | throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:211:13:211:16 | [finally: exception] this access | Finally.cs:195:10:195:12 | M10 | | Finally.cs:211:13:211:16 | this access | Finally.cs:195:10:195:12 | M10 | | Finally.cs:211:13:211:28 | ... = ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:211:13:211:28 | [finally: exception] ... = ... | Finally.cs:195:10:195:12 | M10 | | Finally.cs:211:13:211:29 | ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:211:13:211:29 | [finally: exception] ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:211:26:211:28 | "0" | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:211:26:211:28 | [finally: exception] "0" | Finally.cs:195:10:195:12 | M10 | | Finally.cs:213:9:213:12 | this access | Finally.cs:195:10:195:12 | M10 | | Finally.cs:213:9:213:24 | ... = ... | Finally.cs:195:10:195:12 | M10 | | Finally.cs:213:9:213:25 | ...; | Finally.cs:195:10:195:12 | M10 | @@ -2565,78 +2427,47 @@ nodeEnclosing | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:233:10:233:12 | M12 | | Finally.cs:240:21:240:43 | throw ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:243:13:253:13 | {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:244:17:252:17 | [finally: exception] try {...} ... | Finally.cs:233:10:233:12 | M12 | | Finally.cs:244:17:252:17 | try {...} ... | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:245:17:248:17 | [finally: exception] {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:245:17:248:17 | {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:246:21:247:47 | [finally: exception] if (...) ... | Finally.cs:233:10:233:12 | M12 | | Finally.cs:246:21:247:47 | if (...) ... | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | Finally.cs:233:10:233:12 | M12 | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:247:25:247:47 | [finally: exception] throw ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:247:25:247:47 | throw ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:250:17:252:17 | [finally(1): exception] {...} | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:250:17:252:17 | [finally: exception] {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:250:17:252:17 | {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:251:21:251:54 | [finally(1): exception] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:251:21:251:54 | [finally: exception, finally(1): exception] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:251:21:251:54 | [finally: exception] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | | Finally.cs:251:21:251:54 | call to method WriteLine | Finally.cs:233:10:233:12 | M12 | | Finally.cs:251:21:251:55 | ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:251:21:251:55 | [finally(1): exception] ...; | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:251:21:251:55 | [finally: exception, finally(1): exception] ...; | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:251:21:251:55 | [finally: exception] ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:251:39:251:53 | "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:251:39:251:53 | [finally(1): exception] "Inner finally" | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:251:39:251:53 | [finally: exception, finally(1): exception] "Inner finally" | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:251:39:251:53 | [finally: exception] "Inner finally" | Finally.cs:233:10:233:12 | M12 | | Finally.cs:254:13:254:44 | call to method WriteLine | Finally.cs:233:10:233:12 | M12 | | Finally.cs:254:13:254:45 | ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:254:31:254:43 | "Mid finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:257:9:259:9 | [finally: exception] {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:258:13:258:46 | [finally: exception] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | | Finally.cs:258:13:258:46 | call to method WriteLine | Finally.cs:233:10:233:12 | M12 | | Finally.cs:258:13:258:47 | ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:258:13:258:47 | [finally: exception] ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:258:31:258:45 | "Outer finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:258:31:258:45 | [finally: exception] "Outer finally" | Finally.cs:233:10:233:12 | M12 | | Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:233:10:233:12 | M12 | | Finally.cs:260:9:260:34 | ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:233:10:233:12 | M12 | @@ -2650,24 +2481,24 @@ nodeEnclosing | Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:263:10:263:12 | M13 | | Finally.cs:267:13:267:35 | ...; | Finally.cs:263:10:263:12 | M13 | | Finally.cs:267:31:267:33 | "1" | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:270:9:273:9 | [finally: exception] {...} | Finally.cs:263:10:263:12 | M13 | | Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:271:13:271:34 | [finally: exception] call to method WriteLine | Finally.cs:263:10:263:12 | M13 | | Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:263:10:263:12 | M13 | | Finally.cs:271:13:271:35 | ...; | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:271:13:271:35 | [finally: exception] ...; | Finally.cs:263:10:263:12 | M13 | | Finally.cs:271:31:271:33 | "3" | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:271:31:271:33 | [finally: exception] "3" | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:272:13:272:13 | [finally: exception] access to parameter i | Finally.cs:263:10:263:12 | M13 | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:263:10:263:12 | M13 | | Finally.cs:272:13:272:18 | ... + ... | Finally.cs:263:10:263:12 | M13 | | Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:272:13:272:18 | [finally: exception] ... + ... | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:272:13:272:18 | [finally: exception] ... = ... | Finally.cs:263:10:263:12 | M13 | | Finally.cs:272:13:272:19 | ...; | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:272:13:272:19 | [finally: exception] ...; | Finally.cs:263:10:263:12 | M13 | | Finally.cs:272:18:272:18 | 3 | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:272:18:272:18 | [finally: exception] 3 | Finally.cs:263:10:263:12 | M13 | | Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | Foreach | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | Foreach | | Foreach.cs:4:7:4:13 | exit Foreach | Foreach.cs:4:7:4:13 | Foreach | @@ -5296,11 +5127,10 @@ blockEnclosing | Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | Finally | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:7:10:7:11 | M1 | | Finally.cs:7:10:7:11 | exit M1 | Finally.cs:7:10:7:11 | M1 | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:7:10:7:11 | M1 | +| Finally.cs:14:9:16:9 | [finally: exception] {...} | Finally.cs:7:10:7:11 | M1 | | Finally.cs:14:9:16:9 | {...} | Finally.cs:7:10:7:11 | M1 | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | M2 | | Finally.cs:19:10:19:11 | exit M2 | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:19:10:19:11 | M2 | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | M2 | | Finally.cs:24:13:24:19 | return ...; | Finally.cs:19:10:19:11 | M2 | | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:19:10:19:11 | M2 | @@ -5311,9 +5141,9 @@ blockEnclosing | Finally.cs:34:27:34:32 | throw ...; | Finally.cs:19:10:19:11 | M2 | | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:19:10:19:11 | M2 | | Finally.cs:42:9:43:9 | {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:49:9:51:9 | [finally: exception] {...} | Finally.cs:19:10:19:11 | M2 | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | M3 | | Finally.cs:54:10:54:11 | exit M3 | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:54:10:54:11 | exit M3 (abnormal) | Finally.cs:54:10:54:11 | M3 | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:54:10:54:11 | M3 | | Finally.cs:59:13:59:19 | return ...; | Finally.cs:54:10:54:11 | M3 | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:54:10:54:11 | M3 | @@ -5322,7 +5152,7 @@ blockEnclosing | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:54:10:54:11 | M3 | | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:54:10:54:11 | M3 | | Finally.cs:66:9:67:9 | {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:69:9:71:9 | [finally: exception] {...} | Finally.cs:54:10:54:11 | M3 | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:74:10:74:11 | M4 | | Finally.cs:74:10:74:11 | exit M4 | Finally.cs:74:10:74:11 | M4 | | Finally.cs:74:10:74:11 | exit M4 (abnormal) | Finally.cs:74:10:74:11 | M4 | @@ -5343,12 +5173,12 @@ blockEnclosing | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:74:10:74:11 | M4 | | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:74:10:74:11 | M4 | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:96:17:98:17 | [finally(1): exception] {...} | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | +| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:96:17:98:17 | {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:103:10:103:11 | M5 | @@ -5363,38 +5193,27 @@ blockEnclosing | Finally.cs:109:33:109:33 | 1 | Finally.cs:103:10:103:11 | M5 | | Finally.cs:110:17:110:49 | throw ...; | Finally.cs:103:10:103:11 | M5 | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:103:10:103:11 | M5 | | Finally.cs:113:9:118:9 | {...} | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:114:17:114:36 | [false, finally: exception] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:17:115:41 | ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:115:17:115:41 | [finally: exception] ...; | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:117:17:117:37 | ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:103:10:103:11 | M5 | +| Finally.cs:117:17:117:37 | [finally: exception] ...; | Finally.cs:103:10:103:11 | M5 | | Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:103:10:103:11 | M5 | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:121:10:121:11 | M6 | | Finally.cs:133:10:133:11 | enter M7 | Finally.cs:133:10:133:11 | M7 | | Finally.cs:133:10:133:11 | exit M7 (abnormal) | Finally.cs:133:10:133:11 | M7 | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:133:10:133:11 | M7 | +| Finally.cs:140:9:143:9 | [finally: exception] {...} | Finally.cs:133:10:133:11 | M7 | | Finally.cs:140:9:143:9 | {...} | Finally.cs:133:10:133:11 | M7 | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | M8 | | Finally.cs:147:10:147:11 | exit M8 | Finally.cs:147:10:147:11 | M8 | @@ -5402,34 +5221,25 @@ blockEnclosing | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:147:10:147:11 | M8 | | Finally.cs:152:17:152:50 | throw ...; | Finally.cs:147:10:147:11 | M8 | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:155:9:169:9 | {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:158:36:158:36 | 1 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:159:21:159:45 | [finally: exception] throw ...; | Finally.cs:147:10:147:11 | M8 | | Finally.cs:159:21:159:45 | throw ...; | Finally.cs:147:10:147:11 | M8 | | Finally.cs:159:41:159:43 | "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:159:41:159:43 | [finally: exception] "1" | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:162:13:164:13 | [finally: exception] {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:162:13:164:13 | {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:165:13:168:13 | [finally: exception] catch {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | ExceptionA | | Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | ExceptionB | @@ -5441,86 +5251,63 @@ blockEnclosing | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:176:10:176:11 | M9 | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:176:10:176:11 | M9 | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:195:10:195:12 | exit M10 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | M10 | | Finally.cs:199:21:199:43 | throw ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:195:10:195:12 | M10 | | Finally.cs:202:9:212:9 | {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:205:25:205:47 | [finally: exception] throw ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:205:25:205:47 | throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:195:10:195:12 | M10 | | Finally.cs:208:13:210:13 | {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | | Finally.cs:211:13:211:29 | ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:211:13:211:29 | [finally: exception] ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:216:10:216:12 | M11 | | Finally.cs:222:9:225:9 | catch {...} | Finally.cs:216:10:216:12 | M11 | | Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | M11 | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:233:10:233:12 | M12 | | Finally.cs:233:10:233:12 | exit M12 | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:233:10:233:12 | exit M12 (abnormal) | Finally.cs:233:10:233:12 | M12 | | Finally.cs:240:21:240:43 | throw ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:243:13:253:13 | {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:247:25:247:47 | [finally: exception] throw ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:247:25:247:47 | throw ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:250:17:252:17 | [finally(1): exception] {...} | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:250:17:252:17 | [finally: exception] {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:250:17:252:17 | {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:257:9:259:9 | [finally: exception] {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | M13 | | Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:270:9:273:9 | [finally: exception] {...} | Finally.cs:263:10:263:12 | M13 | | Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | M13 | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | Foreach | | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | M1 | diff --git a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected index 1664d77538a..8726e77130b 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected @@ -372,7 +372,7 @@ | Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:16:16:16:32 | String s = ... | | | Assert.cs:16:24:16:27 | null | Assert.cs:16:20:16:32 | ... ? ... : ... | | | Assert.cs:16:31:16:32 | "" | Assert.cs:16:20:16:32 | ... ? ... : ... | | -| Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | Assert.cs:14:10:14:11 | exit M2 (abnormal) | exception(AssertFailedException) | +| Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | Assert.cs:14:10:14:11 | exit M2 (abnormal) | exception | | Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:18:9:18:36 | ...; | | | Assert.cs:17:9:17:25 | ...; | Assert.cs:17:23:17:23 | access to local variable s | | | Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | non-null | @@ -392,7 +392,7 @@ | Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:23:16:23:32 | String s = ... | | | Assert.cs:23:24:23:27 | null | Assert.cs:23:20:23:32 | ... ? ... : ... | | | Assert.cs:23:31:23:32 | "" | Assert.cs:23:20:23:32 | ... ? ... : ... | | -| Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | Assert.cs:21:10:21:11 | exit M3 (abnormal) | exception(AssertFailedException) | +| Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | Assert.cs:21:10:21:11 | exit M3 (abnormal) | exception | | Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:25:9:25:36 | ...; | | | Assert.cs:24:9:24:28 | ...; | Assert.cs:24:26:24:26 | access to local variable s | | | Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | null | @@ -412,7 +412,7 @@ | Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:30:16:30:32 | String s = ... | | | Assert.cs:30:24:30:27 | null | Assert.cs:30:20:30:32 | ... ? ... : ... | | | Assert.cs:30:31:30:32 | "" | Assert.cs:30:20:30:32 | ... ? ... : ... | | -| Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | Assert.cs:28:10:28:11 | exit M4 (abnormal) | exception(AssertFailedException) | +| Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | Assert.cs:28:10:28:11 | exit M4 (abnormal) | exception | | Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:32:9:32:36 | ...; | | | Assert.cs:31:9:31:33 | ...; | Assert.cs:31:23:31:23 | access to local variable s | | | Assert.cs:31:23:31:23 | access to local variable s | Assert.cs:31:28:31:31 | null | | @@ -434,7 +434,7 @@ | Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:37:16:37:32 | String s = ... | | | Assert.cs:37:24:37:27 | null | Assert.cs:37:20:37:32 | ... ? ... : ... | | | Assert.cs:37:31:37:32 | "" | Assert.cs:37:20:37:32 | ... ? ... : ... | | -| Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | Assert.cs:35:10:35:11 | exit M5 (abnormal) | exception(AssertFailedException) | +| Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | Assert.cs:35:10:35:11 | exit M5 (abnormal) | exception | | Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:39:9:39:36 | ...; | | | Assert.cs:38:9:38:33 | ...; | Assert.cs:38:23:38:23 | access to local variable s | | | Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:38:28:38:31 | null | | @@ -456,7 +456,7 @@ | Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:44:16:44:32 | String s = ... | | | Assert.cs:44:24:44:27 | null | Assert.cs:44:20:44:32 | ... ? ... : ... | | | Assert.cs:44:31:44:32 | "" | Assert.cs:44:20:44:32 | ... ? ... : ... | | -| Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | Assert.cs:42:10:42:11 | exit M6 (abnormal) | exception(AssertFailedException) | +| Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | Assert.cs:42:10:42:11 | exit M6 (abnormal) | exception | | Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:46:9:46:36 | ...; | | | Assert.cs:45:9:45:34 | ...; | Assert.cs:45:24:45:24 | access to local variable s | | | Assert.cs:45:24:45:24 | access to local variable s | Assert.cs:45:29:45:32 | null | | @@ -478,7 +478,7 @@ | Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:51:16:51:32 | String s = ... | | | Assert.cs:51:24:51:27 | null | Assert.cs:51:20:51:32 | ... ? ... : ... | | | Assert.cs:51:31:51:32 | "" | Assert.cs:51:20:51:32 | ... ? ... : ... | | -| Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | Assert.cs:49:10:49:11 | exit M7 (abnormal) | exception(AssertFailedException) | +| Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | Assert.cs:49:10:49:11 | exit M7 (abnormal) | exception | | Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:53:9:53:36 | ...; | | | Assert.cs:52:9:52:34 | ...; | Assert.cs:52:24:52:24 | access to local variable s | | | Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:29:52:32 | null | | @@ -502,7 +502,7 @@ | Assert.cs:58:20:58:32 | [b (line 56): true] ... ? ... : ... | Assert.cs:58:16:58:32 | [b (line 56): true] String s = ... | | | Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:58:20:58:32 | [b (line 56): true] ... ? ... : ... | | | Assert.cs:58:31:58:32 | [b (line 56): false] "" | Assert.cs:58:20:58:32 | [b (line 56): false] ... ? ... : ... | | -| Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | Assert.cs:56:10:56:11 | exit M8 (abnormal) | exception(AssertFailedException) | +| Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | Assert.cs:56:10:56:11 | exit M8 (abnormal) | exception | | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:60:9:60:36 | ...; | | | Assert.cs:59:9:59:38 | [b (line 56): false] ...; | Assert.cs:59:23:59:23 | [b (line 56): false] access to local variable s | | | Assert.cs:59:9:59:38 | [b (line 56): true] ...; | Assert.cs:59:23:59:23 | [b (line 56): true] access to local variable s | | @@ -535,7 +535,7 @@ | Assert.cs:65:20:65:32 | [b (line 63): true] ... ? ... : ... | Assert.cs:65:16:65:32 | [b (line 63): true] String s = ... | | | Assert.cs:65:24:65:27 | [b (line 63): true] null | Assert.cs:65:20:65:32 | [b (line 63): true] ... ? ... : ... | | | Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:65:20:65:32 | [b (line 63): false] ... ? ... : ... | | -| Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | Assert.cs:63:10:63:11 | exit M9 (abnormal) | exception(AssertFailedException) | +| Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | Assert.cs:63:10:63:11 | exit M9 (abnormal) | exception | | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:67:9:67:36 | ...; | | | Assert.cs:66:9:66:39 | [b (line 63): false] ...; | Assert.cs:66:24:66:24 | [b (line 63): false] access to local variable s | | | Assert.cs:66:9:66:39 | [b (line 63): true] ...; | Assert.cs:66:24:66:24 | [b (line 63): true] access to local variable s | | @@ -568,7 +568,7 @@ | Assert.cs:72:20:72:32 | [b (line 70): true] ... ? ... : ... | Assert.cs:72:16:72:32 | [b (line 70): true] String s = ... | | | Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:72:20:72:32 | [b (line 70): true] ... ? ... : ... | | | Assert.cs:72:31:72:32 | [b (line 70): false] "" | Assert.cs:72:20:72:32 | [b (line 70): false] ... ? ... : ... | | -| Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | Assert.cs:70:10:70:12 | exit M10 (abnormal) | exception(AssertFailedException) | +| Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | Assert.cs:70:10:70:12 | exit M10 (abnormal) | exception | | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:74:9:74:36 | ...; | | | Assert.cs:73:9:73:38 | [b (line 70): false] ...; | Assert.cs:73:23:73:23 | [b (line 70): false] access to local variable s | | | Assert.cs:73:9:73:38 | [b (line 70): true] ...; | Assert.cs:73:23:73:23 | [b (line 70): true] access to local variable s | | @@ -601,7 +601,7 @@ | Assert.cs:79:20:79:32 | [b (line 77): true] ... ? ... : ... | Assert.cs:79:16:79:32 | [b (line 77): true] String s = ... | | | Assert.cs:79:24:79:27 | [b (line 77): true] null | Assert.cs:79:20:79:32 | [b (line 77): true] ... ? ... : ... | | | Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:79:20:79:32 | [b (line 77): false] ... ? ... : ... | | -| Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | Assert.cs:77:10:77:12 | exit M11 (abnormal) | exception(AssertFailedException) | +| Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | Assert.cs:77:10:77:12 | exit M11 (abnormal) | exception | | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:81:9:81:36 | ...; | | | Assert.cs:80:9:80:39 | [b (line 77): false] ...; | Assert.cs:80:24:80:24 | [b (line 77): false] access to local variable s | | | Assert.cs:80:9:80:39 | [b (line 77): true] ...; | Assert.cs:80:24:80:24 | [b (line 77): true] access to local variable s | | @@ -666,8 +666,8 @@ | Assert.cs:90:13:90:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:90:9:90:25 | [b (line 84): true] ... = ... | | | Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:90:13:90:25 | [b (line 84): true] ... ? ... : ... | | | Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:90:13:90:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | +| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:92:9:92:36 | [b (line 84): false] ...; | | | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:92:9:92:36 | [b (line 84): true] ...; | | | Assert.cs:91:9:91:25 | [b (line 84): false] ...; | Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | | @@ -694,8 +694,8 @@ | Assert.cs:94:13:94:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:94:9:94:25 | [b (line 84): true] ... = ... | | | Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:94:13:94:25 | [b (line 84): true] ... ? ... : ... | | | Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:94:13:94:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | +| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:96:9:96:36 | [b (line 84): false] ...; | | | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:96:9:96:36 | [b (line 84): true] ...; | | | Assert.cs:95:9:95:28 | [b (line 84): false] ...; | Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | | @@ -722,8 +722,8 @@ | Assert.cs:98:13:98:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:98:9:98:25 | [b (line 84): true] ... = ... | | | Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:98:13:98:25 | [b (line 84): true] ... ? ... : ... | | | Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:98:13:98:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | +| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:100:9:100:36 | [b (line 84): false] ...; | | | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:100:9:100:36 | [b (line 84): true] ...; | | | Assert.cs:99:9:99:33 | [b (line 84): false] ...; | Assert.cs:99:23:99:23 | [b (line 84): false] access to local variable s | | @@ -754,8 +754,8 @@ | Assert.cs:102:13:102:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:102:9:102:25 | [b (line 84): true] ... = ... | | | Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:102:13:102:25 | [b (line 84): true] ... ? ... : ... | | | Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:102:13:102:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | +| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:104:9:104:36 | [b (line 84): false] ...; | | | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:104:9:104:36 | [b (line 84): true] ...; | | | Assert.cs:103:9:103:33 | [b (line 84): false] ...; | Assert.cs:103:23:103:23 | [b (line 84): false] access to local variable s | | @@ -786,8 +786,8 @@ | Assert.cs:106:13:106:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:106:9:106:25 | [b (line 84): true] ... = ... | | | Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:106:13:106:25 | [b (line 84): true] ... ? ... : ... | | | Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:106:13:106:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | +| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:108:9:108:36 | [b (line 84): false] ...; | | | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:108:9:108:36 | [b (line 84): true] ...; | | | Assert.cs:107:9:107:34 | [b (line 84): false] ...; | Assert.cs:107:24:107:24 | [b (line 84): false] access to local variable s | | @@ -818,8 +818,8 @@ | Assert.cs:110:13:110:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:110:9:110:25 | [b (line 84): true] ... = ... | | | Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:110:13:110:25 | [b (line 84): true] ... ? ... : ... | | | Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:110:13:110:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | +| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:112:9:112:36 | [b (line 84): false] ...; | | | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:112:9:112:36 | [b (line 84): true] ...; | | | Assert.cs:111:9:111:34 | [b (line 84): false] ...; | Assert.cs:111:24:111:24 | [b (line 84): false] access to local variable s | | @@ -850,8 +850,8 @@ | Assert.cs:114:13:114:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:114:9:114:25 | [b (line 84): true] ... = ... | | | Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:114:13:114:25 | [b (line 84): true] ... ? ... : ... | | | Assert.cs:114:24:114:25 | [b (line 84): false] "" | Assert.cs:114:13:114:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | +| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:116:9:116:36 | [b (line 84): true] ...; | | | Assert.cs:115:9:115:38 | [b (line 84): false] ...; | Assert.cs:115:23:115:23 | [b (line 84): false] access to local variable s | | | Assert.cs:115:9:115:38 | [b (line 84): true] ...; | Assert.cs:115:23:115:23 | [b (line 84): true] access to local variable s | | @@ -877,7 +877,7 @@ | Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | | Assert.cs:118:13:118:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:118:9:118:25 | [b (line 84): true] ... = ... | | | Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:118:13:118:25 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | +| Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:120:9:120:36 | [b (line 84): true] ...; | | | Assert.cs:119:9:119:40 | [b (line 84): true] ...; | Assert.cs:119:24:119:24 | [b (line 84): true] access to local variable s | | | Assert.cs:119:24:119:24 | [b (line 84): true] access to local variable s | Assert.cs:119:29:119:32 | [b (line 84): true] null | | @@ -897,7 +897,7 @@ | Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | | Assert.cs:122:13:122:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:122:9:122:25 | [b (line 84): true] ... = ... | | | Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:122:13:122:25 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | +| Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:124:9:124:36 | [b (line 84): true] ...; | | | Assert.cs:123:9:123:38 | [b (line 84): true] ...; | Assert.cs:123:23:123:23 | [b (line 84): true] access to local variable s | | | Assert.cs:123:23:123:23 | [b (line 84): true] access to local variable s | Assert.cs:123:28:123:31 | [b (line 84): true] null | | @@ -916,7 +916,7 @@ | Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | | Assert.cs:126:13:126:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:126:9:126:25 | [b (line 84): true] ... = ... | | | Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:126:13:126:25 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | +| Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:128:9:128:36 | ...; | | | Assert.cs:127:9:127:40 | [b (line 84): true] ...; | Assert.cs:127:24:127:24 | [b (line 84): true] access to local variable s | | | Assert.cs:127:24:127:24 | [b (line 84): true] access to local variable s | Assert.cs:127:29:127:32 | [b (line 84): true] null | | @@ -938,8 +938,8 @@ | Assert.cs:138:10:138:12 | exit M13 (abnormal) | Assert.cs:138:10:138:12 | exit M13 | | | Assert.cs:138:10:138:12 | exit M13 (normal) | Assert.cs:138:10:138:12 | exit M13 | | | Assert.cs:139:5:142:5 | {...} | Assert.cs:140:9:140:36 | ...; | | -| Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | Assert.cs:138:10:138:12 | exit M13 (abnormal) | exception(Exception) | -| Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | Assert.cs:138:10:138:12 | exit M13 (abnormal) | exception(Exception) | +| Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | Assert.cs:138:10:138:12 | exit M13 (abnormal) | exception | +| Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | Assert.cs:138:10:138:12 | exit M13 (abnormal) | exception | | Assert.cs:140:9:140:35 | [assertion success] call to method AssertTrueFalse | Assert.cs:141:9:141:15 | return ...; | | | Assert.cs:140:9:140:35 | this access | Assert.cs:140:25:140:26 | access to parameter b1 | | | Assert.cs:140:9:140:36 | ...; | Assert.cs:140:9:140:35 | this access | | @@ -1159,11 +1159,11 @@ | CompileTimeOperators.cs:29:5:41:5 | {...} | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | | | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | CompileTimeOperators.cs:31:9:34:9 | {...} | | | CompileTimeOperators.cs:31:9:34:9 | {...} | CompileTimeOperators.cs:32:13:32:21 | goto ...; | | -| CompileTimeOperators.cs:32:13:32:21 | goto ...; | CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | goto(End) | -| CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | | -| CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | CompileTimeOperators.cs:40:9:40:11 | End: | goto(End) | -| CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | | -| CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | | +| CompileTimeOperators.cs:32:13:32:21 | goto ...; | CompileTimeOperators.cs:36:9:38:9 | [finally: goto] {...} | goto | +| CompileTimeOperators.cs:36:9:38:9 | [finally: goto] {...} | CompileTimeOperators.cs:37:13:37:41 | [finally: goto] ...; | | +| CompileTimeOperators.cs:37:13:37:40 | [finally: goto] call to method WriteLine | CompileTimeOperators.cs:40:9:40:11 | End: | goto | +| CompileTimeOperators.cs:37:13:37:41 | [finally: goto] ...; | CompileTimeOperators.cs:37:31:37:39 | [finally: goto] "Finally" | | +| CompileTimeOperators.cs:37:31:37:39 | [finally: goto] "Finally" | CompileTimeOperators.cs:37:13:37:40 | [finally: goto] call to method WriteLine | | | CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:40:14:40:38 | ...; | | | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | CompileTimeOperators.cs:28:10:28:10 | exit M (normal) | | | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:40:32:40:36 | "End" | | @@ -1708,7 +1708,7 @@ | ExitMethods.cs:20:10:20:11 | enter M3 | ExitMethods.cs:21:5:24:5 | {...} | | | ExitMethods.cs:20:10:20:11 | exit M3 (abnormal) | ExitMethods.cs:20:10:20:11 | exit M3 | | | ExitMethods.cs:21:5:24:5 | {...} | ExitMethods.cs:22:9:22:26 | ...; | | -| ExitMethods.cs:22:9:22:25 | call to method ErrorAlways | ExitMethods.cs:20:10:20:11 | exit M3 (abnormal) | exception(ArgumentException), exception(Exception) | +| ExitMethods.cs:22:9:22:25 | call to method ErrorAlways | ExitMethods.cs:20:10:20:11 | exit M3 (abnormal) | exception | | ExitMethods.cs:22:9:22:26 | ...; | ExitMethods.cs:22:21:22:24 | true | | | ExitMethods.cs:22:21:22:24 | true | ExitMethods.cs:22:9:22:25 | call to method ErrorAlways | | | ExitMethods.cs:26:10:26:11 | enter M4 | ExitMethods.cs:27:5:30:5 | {...} | | @@ -1728,8 +1728,8 @@ | ExitMethods.cs:39:5:52:5 | {...} | ExitMethods.cs:40:9:51:9 | try {...} ... | | | ExitMethods.cs:40:9:51:9 | try {...} ... | ExitMethods.cs:41:9:43:9 | {...} | | | ExitMethods.cs:41:9:43:9 | {...} | ExitMethods.cs:42:13:42:31 | ...; | | -| ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | exception(ArgumentException) | -| ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | exception(Exception) | +| ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | exception | +| ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | exception | | ExitMethods.cs:42:13:42:31 | ...; | ExitMethods.cs:42:25:42:29 | false | | | ExitMethods.cs:42:25:42:29 | false | ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | | | ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:45:9:47:9 | {...} | match | @@ -1743,12 +1743,12 @@ | ExitMethods.cs:54:10:54:11 | enter M7 | ExitMethods.cs:55:5:58:5 | {...} | | | ExitMethods.cs:54:10:54:11 | exit M7 (abnormal) | ExitMethods.cs:54:10:54:11 | exit M7 | | | ExitMethods.cs:55:5:58:5 | {...} | ExitMethods.cs:56:9:56:23 | ...; | | -| ExitMethods.cs:56:9:56:22 | call to method ErrorAlways2 | ExitMethods.cs:54:10:54:11 | exit M7 (abnormal) | exception(Exception) | +| ExitMethods.cs:56:9:56:22 | call to method ErrorAlways2 | ExitMethods.cs:54:10:54:11 | exit M7 (abnormal) | exception | | ExitMethods.cs:56:9:56:23 | ...; | ExitMethods.cs:56:9:56:22 | call to method ErrorAlways2 | | | ExitMethods.cs:60:10:60:11 | enter M8 | ExitMethods.cs:61:5:64:5 | {...} | | | ExitMethods.cs:60:10:60:11 | exit M8 (abnormal) | ExitMethods.cs:60:10:60:11 | exit M8 | | | ExitMethods.cs:61:5:64:5 | {...} | ExitMethods.cs:62:9:62:23 | ...; | | -| ExitMethods.cs:62:9:62:22 | call to method ErrorAlways3 | ExitMethods.cs:60:10:60:11 | exit M8 (abnormal) | exception(Exception) | +| ExitMethods.cs:62:9:62:22 | call to method ErrorAlways3 | ExitMethods.cs:60:10:60:11 | exit M8 (abnormal) | exception | | ExitMethods.cs:62:9:62:23 | ...; | ExitMethods.cs:62:9:62:22 | call to method ErrorAlways3 | | | ExitMethods.cs:66:17:66:26 | enter ErrorMaybe | ExitMethods.cs:67:5:70:5 | {...} | | | ExitMethods.cs:66:17:66:26 | exit ErrorMaybe (abnormal) | ExitMethods.cs:66:17:66:26 | exit ErrorMaybe | | @@ -1757,7 +1757,7 @@ | ExitMethods.cs:68:9:69:34 | if (...) ... | ExitMethods.cs:68:13:68:13 | access to parameter b | | | ExitMethods.cs:68:13:68:13 | access to parameter b | ExitMethods.cs:66:17:66:26 | exit ErrorMaybe (normal) | false | | ExitMethods.cs:68:13:68:13 | access to parameter b | ExitMethods.cs:69:19:69:33 | object creation of type Exception | true | -| ExitMethods.cs:69:13:69:34 | throw ...; | ExitMethods.cs:66:17:66:26 | exit ErrorMaybe (abnormal) | exception(Exception) | +| ExitMethods.cs:69:13:69:34 | throw ...; | ExitMethods.cs:66:17:66:26 | exit ErrorMaybe (abnormal) | exception | | ExitMethods.cs:69:19:69:33 | object creation of type Exception | ExitMethods.cs:69:13:69:34 | throw ...; | | | ExitMethods.cs:72:17:72:27 | enter ErrorAlways | ExitMethods.cs:73:5:78:5 | {...} | | | ExitMethods.cs:72:17:72:27 | exit ErrorAlways (abnormal) | ExitMethods.cs:72:17:72:27 | exit ErrorAlways | | @@ -1765,19 +1765,19 @@ | ExitMethods.cs:74:9:77:45 | if (...) ... | ExitMethods.cs:74:13:74:13 | access to parameter b | | | ExitMethods.cs:74:13:74:13 | access to parameter b | ExitMethods.cs:75:19:75:33 | object creation of type Exception | true | | ExitMethods.cs:74:13:74:13 | access to parameter b | ExitMethods.cs:77:41:77:43 | "b" | false | -| ExitMethods.cs:75:13:75:34 | throw ...; | ExitMethods.cs:72:17:72:27 | exit ErrorAlways (abnormal) | exception(Exception) | +| ExitMethods.cs:75:13:75:34 | throw ...; | ExitMethods.cs:72:17:72:27 | exit ErrorAlways (abnormal) | exception | | ExitMethods.cs:75:19:75:33 | object creation of type Exception | ExitMethods.cs:75:13:75:34 | throw ...; | | -| ExitMethods.cs:77:13:77:45 | throw ...; | ExitMethods.cs:72:17:72:27 | exit ErrorAlways (abnormal) | exception(ArgumentException) | +| ExitMethods.cs:77:13:77:45 | throw ...; | ExitMethods.cs:72:17:72:27 | exit ErrorAlways (abnormal) | exception | | ExitMethods.cs:77:19:77:44 | object creation of type ArgumentException | ExitMethods.cs:77:13:77:45 | throw ...; | | | ExitMethods.cs:77:41:77:43 | "b" | ExitMethods.cs:77:19:77:44 | object creation of type ArgumentException | | | ExitMethods.cs:80:17:80:28 | enter ErrorAlways2 | ExitMethods.cs:81:5:83:5 | {...} | | | ExitMethods.cs:80:17:80:28 | exit ErrorAlways2 (abnormal) | ExitMethods.cs:80:17:80:28 | exit ErrorAlways2 | | | ExitMethods.cs:81:5:83:5 | {...} | ExitMethods.cs:82:15:82:29 | object creation of type Exception | | -| ExitMethods.cs:82:9:82:30 | throw ...; | ExitMethods.cs:80:17:80:28 | exit ErrorAlways2 (abnormal) | exception(Exception) | +| ExitMethods.cs:82:9:82:30 | throw ...; | ExitMethods.cs:80:17:80:28 | exit ErrorAlways2 (abnormal) | exception | | ExitMethods.cs:82:15:82:29 | object creation of type Exception | ExitMethods.cs:82:9:82:30 | throw ...; | | | ExitMethods.cs:85:17:85:28 | enter ErrorAlways3 | ExitMethods.cs:85:41:85:55 | object creation of type Exception | | | ExitMethods.cs:85:17:85:28 | exit ErrorAlways3 (abnormal) | ExitMethods.cs:85:17:85:28 | exit ErrorAlways3 | | -| ExitMethods.cs:85:35:85:55 | throw ... | ExitMethods.cs:85:17:85:28 | exit ErrorAlways3 (abnormal) | exception(Exception) | +| ExitMethods.cs:85:35:85:55 | throw ... | ExitMethods.cs:85:17:85:28 | exit ErrorAlways3 (abnormal) | exception | | ExitMethods.cs:85:41:85:55 | object creation of type Exception | ExitMethods.cs:85:35:85:55 | throw ... | | | ExitMethods.cs:87:10:87:13 | enter Exit | ExitMethods.cs:88:5:90:5 | {...} | | | ExitMethods.cs:87:10:87:13 | exit Exit (abnormal) | ExitMethods.cs:87:10:87:13 | exit Exit | | @@ -1813,7 +1813,7 @@ | ExitMethods.cs:112:29:112:29 | (...) ... | ExitMethods.cs:112:33:112:37 | access to parameter input | | | ExitMethods.cs:112:29:112:37 | ... / ... | ExitMethods.cs:112:16:112:76 | ... ? ... : ... | | | ExitMethods.cs:112:33:112:37 | access to parameter input | ExitMethods.cs:112:29:112:37 | ... / ... | | -| ExitMethods.cs:112:41:112:76 | throw ... | ExitMethods.cs:110:13:110:21 | exit ThrowExpr (abnormal) | exception(ArgumentException) | +| ExitMethods.cs:112:41:112:76 | throw ... | ExitMethods.cs:110:13:110:21 | exit ThrowExpr (abnormal) | exception | | ExitMethods.cs:112:47:112:76 | object creation of type ArgumentException | ExitMethods.cs:112:41:112:76 | throw ... | | | ExitMethods.cs:112:69:112:75 | "input" | ExitMethods.cs:112:47:112:76 | object creation of type ArgumentException | | | ExitMethods.cs:115:16:115:34 | enter ExtensionMethodCall | ExitMethods.cs:116:5:118:5 | {...} | | @@ -1830,26 +1830,26 @@ | ExitMethods.cs:120:17:120:32 | enter FailingAssertion | ExitMethods.cs:121:5:124:5 | {...} | | | ExitMethods.cs:120:17:120:32 | exit FailingAssertion (abnormal) | ExitMethods.cs:120:17:120:32 | exit FailingAssertion | | | ExitMethods.cs:121:5:124:5 | {...} | ExitMethods.cs:122:9:122:29 | ...; | | -| ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | ExitMethods.cs:120:17:120:32 | exit FailingAssertion (abnormal) | exception(AssertFailedException) | +| ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | ExitMethods.cs:120:17:120:32 | exit FailingAssertion (abnormal) | exception | | ExitMethods.cs:122:9:122:29 | ...; | ExitMethods.cs:122:23:122:27 | false | | | ExitMethods.cs:122:23:122:27 | false | ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | false | | ExitMethods.cs:126:17:126:33 | enter FailingAssertion2 | ExitMethods.cs:127:5:130:5 | {...} | | | ExitMethods.cs:126:17:126:33 | exit FailingAssertion2 (abnormal) | ExitMethods.cs:126:17:126:33 | exit FailingAssertion2 | | | ExitMethods.cs:127:5:130:5 | {...} | ExitMethods.cs:128:9:128:27 | ...; | | -| ExitMethods.cs:128:9:128:26 | call to method FailingAssertion | ExitMethods.cs:126:17:126:33 | exit FailingAssertion2 (abnormal) | exception(AssertFailedException) | +| ExitMethods.cs:128:9:128:26 | call to method FailingAssertion | ExitMethods.cs:126:17:126:33 | exit FailingAssertion2 (abnormal) | exception | | ExitMethods.cs:128:9:128:26 | this access | ExitMethods.cs:128:9:128:26 | call to method FailingAssertion | | | ExitMethods.cs:128:9:128:27 | ...; | ExitMethods.cs:128:9:128:26 | this access | | | ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:48:132:48 | access to parameter b | | | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | ExitMethods.cs:132:10:132:20 | exit AssertFalse | | | ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | ExitMethods.cs:132:10:132:20 | exit AssertFalse | | -| ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | exception(AssertFailedException) | +| ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | exception | | ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | | | ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | true | | ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | false | | ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | ExitMethods.cs:135:5:138:5 | {...} | | | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 (abnormal) | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 | | | ExitMethods.cs:135:5:138:5 | {...} | ExitMethods.cs:136:9:136:26 | ...; | | -| ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 (abnormal) | exception(AssertFailedException) | +| ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 (abnormal) | exception | | ExitMethods.cs:136:9:136:25 | this access | ExitMethods.cs:136:21:136:24 | true | | | ExitMethods.cs:136:9:136:26 | ...; | ExitMethods.cs:136:9:136:25 | this access | | | ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | true | @@ -1859,11 +1859,11 @@ | ExitMethods.cs:142:9:145:53 | if (...) ... | ExitMethods.cs:142:13:142:13 | access to parameter b | | | ExitMethods.cs:142:13:142:13 | access to parameter b | ExitMethods.cs:143:13:143:43 | ...; | true | | ExitMethods.cs:142:13:142:13 | access to parameter b | ExitMethods.cs:145:13:145:53 | ...; | false | -| ExitMethods.cs:143:13:143:42 | call to method Throw | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | exception(ArgumentException) | +| ExitMethods.cs:143:13:143:42 | call to method Throw | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | exception | | ExitMethods.cs:143:13:143:43 | ...; | ExitMethods.cs:143:41:143:41 | access to parameter e | | | ExitMethods.cs:143:41:143:41 | access to parameter e | ExitMethods.cs:143:13:143:42 | call to method Throw | | | ExitMethods.cs:145:13:145:44 | call to method Capture | ExitMethods.cs:145:13:145:52 | call to method Throw | | -| ExitMethods.cs:145:13:145:52 | call to method Throw | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | exception(Exception) | +| ExitMethods.cs:145:13:145:52 | call to method Throw | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | exception | | ExitMethods.cs:145:13:145:53 | ...; | ExitMethods.cs:145:43:145:43 | access to parameter e | | | ExitMethods.cs:145:43:145:43 | access to parameter e | ExitMethods.cs:145:13:145:44 | call to method Capture | | | Extensions.cs:5:23:5:29 | enter ToInt32 | Extensions.cs:6:5:8:5 | {...} | | @@ -1912,18 +1912,18 @@ | Finally.cs:8:5:17:5 | {...} | Finally.cs:9:9:16:9 | try {...} ... | | | Finally.cs:9:9:16:9 | try {...} ... | Finally.cs:10:9:12:9 | {...} | | | Finally.cs:10:9:12:9 | {...} | Finally.cs:11:13:11:38 | ...; | | -| Finally.cs:11:13:11:37 | call to method WriteLine | Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | exception(Exception) | +| Finally.cs:11:13:11:37 | call to method WriteLine | Finally.cs:14:9:16:9 | [finally: exception] {...} | exception | | Finally.cs:11:13:11:37 | call to method WriteLine | Finally.cs:14:9:16:9 | {...} | | | Finally.cs:11:13:11:38 | ...; | Finally.cs:11:31:11:36 | "Try1" | | | Finally.cs:11:31:11:36 | "Try1" | Finally.cs:11:13:11:37 | call to method WriteLine | | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | | +| Finally.cs:14:9:16:9 | [finally: exception] {...} | Finally.cs:15:13:15:41 | [finally: exception] ...; | | | Finally.cs:14:9:16:9 | {...} | Finally.cs:15:13:15:41 | ...; | | -| Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:7:10:7:11 | exit M1 (abnormal) | exception(Exception) | +| Finally.cs:15:13:15:40 | [finally: exception] call to method WriteLine | Finally.cs:7:10:7:11 | exit M1 (abnormal) | exception | | Finally.cs:15:13:15:40 | call to method WriteLine | Finally.cs:7:10:7:11 | exit M1 (normal) | | | Finally.cs:15:13:15:41 | ...; | Finally.cs:15:31:15:39 | "Finally" | | -| Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | | +| Finally.cs:15:13:15:41 | [finally: exception] ...; | Finally.cs:15:31:15:39 | [finally: exception] "Finally" | | | Finally.cs:15:31:15:39 | "Finally" | Finally.cs:15:13:15:40 | call to method WriteLine | | -| Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | | +| Finally.cs:15:31:15:39 | [finally: exception] "Finally" | Finally.cs:15:13:15:40 | [finally: exception] call to method WriteLine | | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:20:5:52:5 | {...} | | | Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:19:10:19:11 | exit M2 | | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | exit M2 | | @@ -1931,7 +1931,7 @@ | Finally.cs:21:9:51:9 | try {...} ... | Finally.cs:22:9:25:9 | {...} | | | Finally.cs:22:9:25:9 | {...} | Finally.cs:23:13:23:38 | ...; | | | Finally.cs:23:13:23:37 | call to method WriteLine | Finally.cs:24:13:24:19 | return ...; | | -| Finally.cs:23:13:23:37 | call to method WriteLine | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | exception(Exception) | +| Finally.cs:23:13:23:37 | call to method WriteLine | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | exception | | Finally.cs:23:13:23:38 | ...; | Finally.cs:23:31:23:36 | "Try2" | | | Finally.cs:23:31:23:36 | "Try2" | Finally.cs:23:13:23:37 | call to method WriteLine | | | Finally.cs:24:13:24:19 | return ...; | Finally.cs:49:9:51:9 | [finally: return] {...} | return | @@ -1940,7 +1940,7 @@ | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:26:48:26:51 | [exception: Exception] true | | | Finally.cs:26:48:26:51 | [exception: Exception] true | Finally.cs:27:9:29:9 | {...} | true | | Finally.cs:27:9:29:9 | {...} | Finally.cs:28:13:28:18 | throw ...; | | -| Finally.cs:28:13:28:18 | throw ...; | Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | exception(IOException) | +| Finally.cs:28:13:28:18 | throw ...; | Finally.cs:49:9:51:9 | [finally: exception] {...} | exception | | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | match | | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | no-match | | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:31:9:40:9 | {...} | | @@ -1949,28 +1949,24 @@ | Finally.cs:33:13:35:13 | {...} | Finally.cs:34:17:34:32 | if (...) ... | | | Finally.cs:34:17:34:32 | if (...) ... | Finally.cs:34:21:34:24 | true | | | Finally.cs:34:21:34:24 | true | Finally.cs:34:27:34:32 | throw ...; | true | -| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | exception(ArgumentException) | -| Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | | -| Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | | -| Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | | +| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:37:13:39:13 | [finally: exception] {...} | exception | +| Finally.cs:37:13:39:13 | [finally: exception] {...} | Finally.cs:38:37:38:42 | [finally: exception] "Boo!" | | +| Finally.cs:38:17:38:44 | [finally: exception] throw ...; | Finally.cs:49:9:51:9 | [finally: exception] {...} | exception | +| Finally.cs:38:23:38:43 | [finally: exception] object creation of type Exception | Finally.cs:38:17:38:44 | [finally: exception] throw ...; | | +| Finally.cs:38:37:38:42 | [finally: exception] "Boo!" | Finally.cs:38:23:38:43 | [finally: exception] object creation of type Exception | | | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:42:9:43:9 | {...} | match | | Finally.cs:42:9:43:9 | {...} | Finally.cs:49:9:51:9 | {...} | | -| Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | | -| Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | | +| Finally.cs:49:9:51:9 | [finally: exception] {...} | Finally.cs:50:13:50:41 | [finally: exception] ...; | | | Finally.cs:49:9:51:9 | [finally: return] {...} | Finally.cs:50:13:50:41 | [finally: return] ...; | | | Finally.cs:49:9:51:9 | {...} | Finally.cs:50:13:50:41 | ...; | | -| Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (abnormal) | exception(Exception) | -| Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (abnormal) | exception(IOException) | +| Finally.cs:50:13:50:40 | [finally: exception] call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (abnormal) | exception | | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (normal) | return | | Finally.cs:50:13:50:40 | call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (normal) | | | Finally.cs:50:13:50:41 | ...; | Finally.cs:50:31:50:39 | "Finally" | | -| Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | | -| Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | | +| Finally.cs:50:13:50:41 | [finally: exception] ...; | Finally.cs:50:31:50:39 | [finally: exception] "Finally" | | | Finally.cs:50:13:50:41 | [finally: return] ...; | Finally.cs:50:31:50:39 | [finally: return] "Finally" | | | Finally.cs:50:31:50:39 | "Finally" | Finally.cs:50:13:50:40 | call to method WriteLine | | -| Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | | +| Finally.cs:50:31:50:39 | [finally: exception] "Finally" | Finally.cs:50:13:50:40 | [finally: exception] call to method WriteLine | | | Finally.cs:50:31:50:39 | [finally: return] "Finally" | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:55:5:72:5 | {...} | | | Finally.cs:54:10:54:11 | exit M3 (abnormal) | Finally.cs:54:10:54:11 | exit M3 | | @@ -1979,7 +1975,7 @@ | Finally.cs:56:9:71:9 | try {...} ... | Finally.cs:57:9:60:9 | {...} | | | Finally.cs:57:9:60:9 | {...} | Finally.cs:58:13:58:38 | ...; | | | Finally.cs:58:13:58:37 | call to method WriteLine | Finally.cs:59:13:59:19 | return ...; | | -| Finally.cs:58:13:58:37 | call to method WriteLine | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | exception(Exception) | +| Finally.cs:58:13:58:37 | call to method WriteLine | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | exception | | Finally.cs:58:13:58:38 | ...; | Finally.cs:58:31:58:36 | "Try3" | | | Finally.cs:58:31:58:36 | "Try3" | Finally.cs:58:13:58:37 | call to method WriteLine | | | Finally.cs:59:13:59:19 | return ...; | Finally.cs:69:9:71:9 | [finally: return] {...} | return | @@ -1988,30 +1984,26 @@ | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:61:48:61:51 | [exception: Exception] true | | | Finally.cs:61:48:61:51 | [exception: Exception] true | Finally.cs:62:9:64:9 | {...} | true | | Finally.cs:62:9:64:9 | {...} | Finally.cs:63:13:63:18 | throw ...; | | -| Finally.cs:63:13:63:18 | throw ...; | Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | exception(IOException) | +| Finally.cs:63:13:63:18 | throw ...; | Finally.cs:69:9:71:9 | [finally: exception] {...} | exception | | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | match | | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:65:35:65:35 | [exception: Exception] access to local variable e | | | Finally.cs:65:35:65:35 | [exception: Exception] access to local variable e | Finally.cs:65:35:65:43 | [exception: Exception] access to property Message | | | Finally.cs:65:35:65:43 | [exception: Exception] access to property Message | Finally.cs:65:48:65:51 | [exception: Exception] null | | | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:66:9:67:9 | {...} | true | -| Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | exception(Exception) | +| Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:69:9:71:9 | [finally: exception] {...} | exception | | Finally.cs:65:48:65:51 | [exception: Exception] null | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | | | Finally.cs:66:9:67:9 | {...} | Finally.cs:69:9:71:9 | {...} | | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | | -| Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | | +| Finally.cs:69:9:71:9 | [finally: exception] {...} | Finally.cs:70:13:70:41 | [finally: exception] ...; | | | Finally.cs:69:9:71:9 | [finally: return] {...} | Finally.cs:70:13:70:41 | [finally: return] ...; | | | Finally.cs:69:9:71:9 | {...} | Finally.cs:70:13:70:41 | ...; | | -| Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (abnormal) | exception(Exception) | -| Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (abnormal) | exception(IOException) | +| Finally.cs:70:13:70:40 | [finally: exception] call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (abnormal) | exception | | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (normal) | return | | Finally.cs:70:13:70:40 | call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (normal) | | | Finally.cs:70:13:70:41 | ...; | Finally.cs:70:31:70:39 | "Finally" | | -| Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | | -| Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | | +| Finally.cs:70:13:70:41 | [finally: exception] ...; | Finally.cs:70:31:70:39 | [finally: exception] "Finally" | | | Finally.cs:70:13:70:41 | [finally: return] ...; | Finally.cs:70:31:70:39 | [finally: return] "Finally" | | | Finally.cs:70:31:70:39 | "Finally" | Finally.cs:70:13:70:40 | call to method WriteLine | | -| Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | | +| Finally.cs:70:31:70:39 | [finally: exception] "Finally" | Finally.cs:70:13:70:40 | [finally: exception] call to method WriteLine | | | Finally.cs:70:31:70:39 | [finally: return] "Finally" | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:75:5:101:5 | {...} | | | Finally.cs:74:10:74:11 | exit M4 (abnormal) | Finally.cs:74:10:74:11 | exit M4 | | @@ -2078,49 +2070,49 @@ | Finally.cs:92:30:92:30 | [finally: break] 3 | Finally.cs:92:25:92:30 | [finally: break] ... == ... | | | Finally.cs:92:30:92:30 | [finally: continue] 3 | Finally.cs:92:25:92:30 | [finally: continue] ... == ... | | | Finally.cs:92:30:92:30 | [finally: return] 3 | Finally.cs:92:25:92:30 | [finally: return] ... == ... | | -| Finally.cs:93:25:93:46 | [finally: break] throw ...; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:93:25:93:46 | [finally: continue] throw ...; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:93:25:93:46 | [finally: return] throw ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:93:25:93:46 | throw ...; | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | exception(Exception) | +| Finally.cs:93:25:93:46 | [finally: break] throw ...; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | exception | +| Finally.cs:93:25:93:46 | [finally: continue] throw ...; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | exception | +| Finally.cs:93:25:93:46 | [finally: return] throw ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | exception | +| Finally.cs:93:25:93:46 | throw ...; | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | exception | | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: break] throw ...; | | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | exception(Exception) | +| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | exception | | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | exception(Exception) | +| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | exception | | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: return] throw ...; | | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | exception(Exception) | +| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | exception | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:25:93:46 | throw ...; | | -| Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | | +| Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | exception | +| Finally.cs:96:17:98:17 | [finally(1): exception] {...} | Finally.cs:97:21:97:24 | [finally(1): exception] ...; | | +| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | Finally.cs:97:21:97:24 | [finally: break, finally(1): exception] ...; | | | Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:97:21:97:24 | [finally: break] ...; | | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | | +| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception] ...; | | | Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:97:21:97:24 | [finally: continue] ...; | | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | | +| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | Finally.cs:97:21:97:24 | [finally: return, finally(1): exception] ...; | | | Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:97:21:97:24 | [finally: return] ...; | | | Finally.cs:96:17:98:17 | {...} | Finally.cs:97:21:97:24 | ...; | | -| Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | | -| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | | +| Finally.cs:97:21:97:21 | [finally(1): exception] access to local variable i | Finally.cs:97:21:97:23 | [finally(1): exception] ...-- | | +| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception] access to local variable i | Finally.cs:97:21:97:23 | [finally: break, finally(1): exception] ...-- | | | Finally.cs:97:21:97:21 | [finally: break] access to local variable i | Finally.cs:97:21:97:23 | [finally: break] ...-- | | -| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | | +| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception] access to local variable i | Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception] ...-- | | | Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | Finally.cs:97:21:97:23 | [finally: continue] ...-- | | -| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | | +| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception] access to local variable i | Finally.cs:97:21:97:23 | [finally: return, finally(1): exception] ...-- | | | Finally.cs:97:21:97:21 | [finally: return] access to local variable i | Finally.cs:97:21:97:23 | [finally: return] ...-- | | | Finally.cs:97:21:97:21 | access to local variable i | Finally.cs:97:21:97:23 | ...-- | | | Finally.cs:97:21:97:23 | ...-- | Finally.cs:77:16:77:16 | access to local variable i | | -| Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | exception(Exception) | -| Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | exception(Exception) | +| Finally.cs:97:21:97:23 | [finally(1): exception] ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | exception | +| Finally.cs:97:21:97:23 | [finally: break, finally(1): exception] ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | exception | | Finally.cs:97:21:97:23 | [finally: break] ...-- | Finally.cs:74:10:74:11 | exit M4 (normal) | break | -| Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | exception(Exception) | +| Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception] ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | exception | | Finally.cs:97:21:97:23 | [finally: continue] ...-- | Finally.cs:77:16:77:16 | access to local variable i | continue | -| Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | exception(Exception) | +| Finally.cs:97:21:97:23 | [finally: return, finally(1): exception] ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | exception | | Finally.cs:97:21:97:23 | [finally: return] ...-- | Finally.cs:74:10:74:11 | exit M4 (normal) | return | | Finally.cs:97:21:97:24 | ...; | Finally.cs:97:21:97:21 | access to local variable i | | -| Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | | -| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | | +| Finally.cs:97:21:97:24 | [finally(1): exception] ...; | Finally.cs:97:21:97:21 | [finally(1): exception] access to local variable i | | +| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception] ...; | Finally.cs:97:21:97:21 | [finally: break, finally(1): exception] access to local variable i | | | Finally.cs:97:21:97:24 | [finally: break] ...; | Finally.cs:97:21:97:21 | [finally: break] access to local variable i | | -| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | | +| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception] ...; | Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception] access to local variable i | | | Finally.cs:97:21:97:24 | [finally: continue] ...; | Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | | -| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | | +| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception] ...; | Finally.cs:97:21:97:21 | [finally: return, finally(1): exception] access to local variable i | | | Finally.cs:97:21:97:24 | [finally: return] ...; | Finally.cs:97:21:97:21 | [finally: return] access to local variable i | | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:104:5:119:5 | {...} | | | Finally.cs:103:10:103:11 | exit M5 (abnormal) | Finally.cs:103:10:103:11 | exit M5 | | @@ -2130,147 +2122,97 @@ | Finally.cs:106:9:111:9 | {...} | Finally.cs:107:13:108:23 | if (...) ... | | | Finally.cs:107:13:108:23 | if (...) ... | Finally.cs:107:17:107:21 | this access | | | Finally.cs:107:17:107:21 | access to field Field | Finally.cs:107:17:107:28 | access to property Length | | -| Finally.cs:107:17:107:21 | access to field Field | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | exception(NullReferenceException) | +| Finally.cs:107:17:107:21 | access to field Field | Finally.cs:113:9:118:9 | [finally: exception] {...} | exception | | Finally.cs:107:17:107:21 | this access | Finally.cs:107:17:107:21 | access to field Field | | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:107:33:107:33 | 0 | | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | exception(NullReferenceException) | +| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception] {...} | exception | | Finally.cs:107:17:107:33 | ... == ... | Finally.cs:108:17:108:23 | return ...; | true | | Finally.cs:107:17:107:33 | ... == ... | Finally.cs:109:13:110:49 | if (...) ... | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:107:17:107:33 | ... == ... | | | Finally.cs:108:17:108:23 | return ...; | Finally.cs:113:9:118:9 | [finally: return] {...} | return | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:109:17:109:21 | this access | | | Finally.cs:109:17:109:21 | access to field Field | Finally.cs:109:17:109:28 | access to property Length | | -| Finally.cs:109:17:109:21 | access to field Field | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | exception(NullReferenceException) | +| Finally.cs:109:17:109:21 | access to field Field | Finally.cs:113:9:118:9 | [finally: exception] {...} | exception | | Finally.cs:109:17:109:21 | this access | Finally.cs:109:17:109:21 | access to field Field | | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:33:109:33 | 1 | | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | exception(NullReferenceException) | +| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception] {...} | exception | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | true | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:113:9:118:9 | {...} | false | | Finally.cs:109:33:109:33 | 1 | Finally.cs:109:17:109:33 | ... == ... | | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | exception(OutOfMemoryException) | +| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:113:9:118:9 | [finally: exception] {...} | exception | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:17:110:49 | throw ...; | | -| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | | -| Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | | +| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:113:9:118:9 | [finally: exception] {...} | exception | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:114:13:115:41 | [finally: exception] if (...) ... | | | Finally.cs:113:9:118:9 | [finally: return] {...} | Finally.cs:114:13:115:41 | [finally: return] if (...) ... | | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:13:115:41 | if (...) ... | | -| Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | | -| Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | | -| Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | | +| Finally.cs:114:13:115:41 | [finally: exception] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception] this access | | | Finally.cs:114:13:115:41 | [finally: return] if (...) ... | Finally.cs:114:19:114:23 | [finally: return] this access | | | Finally.cs:114:13:115:41 | if (...) ... | Finally.cs:114:19:114:23 | this access | | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | false | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | false | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | false | +| Finally.cs:114:17:114:36 | [false, finally: exception] !... | Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | false | | Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | false | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:116:13:117:37 | if (...) ... | false | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | true | +| Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:115:17:115:41 | [finally: exception] ...; | true | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | true | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | true | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | | +| Finally.cs:114:19:114:23 | [finally: exception] access to field Field | Finally.cs:114:19:114:30 | [finally: exception] access to property Length | | +| Finally.cs:114:19:114:23 | [finally: exception] this access | Finally.cs:114:19:114:23 | [finally: exception] access to field Field | | | Finally.cs:114:19:114:23 | [finally: return] access to field Field | Finally.cs:114:19:114:30 | [finally: return] access to property Length | | | Finally.cs:114:19:114:23 | [finally: return] this access | Finally.cs:114:19:114:23 | [finally: return] access to field Field | | | Finally.cs:114:19:114:23 | access to field Field | Finally.cs:114:19:114:30 | access to property Length | | | Finally.cs:114:19:114:23 | this access | Finally.cs:114:19:114:23 | access to field Field | | -| Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | | -| Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | | -| Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | | +| Finally.cs:114:19:114:30 | [finally: exception] access to property Length | Finally.cs:114:35:114:35 | [finally: exception] 0 | | | Finally.cs:114:19:114:30 | [finally: return] access to property Length | Finally.cs:114:35:114:35 | [finally: return] 0 | | | Finally.cs:114:19:114:30 | access to property Length | Finally.cs:114:35:114:35 | 0 | | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [false] !... | true | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [true] !... | false | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | true | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | false | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | true | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | false | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | true | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | false | +| Finally.cs:114:19:114:35 | [finally: exception] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception] !... | true | +| Finally.cs:114:19:114:35 | [finally: exception] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception] !... | false | | Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [false, finally: return] !... | true | | Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [true, finally: return] !... | false | | Finally.cs:114:35:114:35 | 0 | Finally.cs:114:19:114:35 | ... == ... | | -| Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | | -| Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | | -| Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | | +| Finally.cs:114:35:114:35 | [finally: exception] 0 | Finally.cs:114:19:114:35 | [finally: exception] ... == ... | | | Finally.cs:114:35:114:35 | [finally: return] 0 | Finally.cs:114:19:114:35 | [finally: return] ... == ... | | -| Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | | -| Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | | -| Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | | +| Finally.cs:115:17:115:40 | [finally: exception] call to method WriteLine | Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | | | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | | | Finally.cs:115:17:115:40 | call to method WriteLine | Finally.cs:116:13:117:37 | if (...) ... | | | Finally.cs:115:17:115:41 | ...; | Finally.cs:115:35:115:39 | this access | | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | | +| Finally.cs:115:17:115:41 | [finally: exception] ...; | Finally.cs:115:35:115:39 | [finally: exception] this access | | | Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:115:35:115:39 | [finally: return] this access | | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | | +| Finally.cs:115:35:115:39 | [finally: exception] access to field Field | Finally.cs:115:17:115:40 | [finally: exception] call to method WriteLine | | +| Finally.cs:115:35:115:39 | [finally: exception] this access | Finally.cs:115:35:115:39 | [finally: exception] access to field Field | | | Finally.cs:115:35:115:39 | [finally: return] access to field Field | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | | | Finally.cs:115:35:115:39 | [finally: return] this access | Finally.cs:115:35:115:39 | [finally: return] access to field Field | | | Finally.cs:115:35:115:39 | access to field Field | Finally.cs:115:17:115:40 | call to method WriteLine | | | Finally.cs:115:35:115:39 | this access | Finally.cs:115:35:115:39 | access to field Field | | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | | +| Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception] this access | | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:116:17:116:21 | [finally: return] this access | | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:116:17:116:21 | this access | | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | | +| Finally.cs:116:17:116:21 | [finally: exception] access to field Field | Finally.cs:116:17:116:28 | [finally: exception] access to property Length | | +| Finally.cs:116:17:116:21 | [finally: exception] this access | Finally.cs:116:17:116:21 | [finally: exception] access to field Field | | | Finally.cs:116:17:116:21 | [finally: return] access to field Field | Finally.cs:116:17:116:28 | [finally: return] access to property Length | | | Finally.cs:116:17:116:21 | [finally: return] this access | Finally.cs:116:17:116:21 | [finally: return] access to field Field | | | Finally.cs:116:17:116:21 | access to field Field | Finally.cs:116:17:116:28 | access to property Length | | | Finally.cs:116:17:116:21 | this access | Finally.cs:116:17:116:21 | access to field Field | | -| Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | | -| Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | | -| Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | | +| Finally.cs:116:17:116:28 | [finally: exception] access to property Length | Finally.cs:116:32:116:32 | [finally: exception] 0 | | | Finally.cs:116:17:116:28 | [finally: return] access to property Length | Finally.cs:116:32:116:32 | [finally: return] 0 | | | Finally.cs:116:17:116:28 | access to property Length | Finally.cs:116:32:116:32 | 0 | | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:103:10:103:11 | exit M5 (normal) | false | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:117:17:117:37 | ...; | true | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception(Exception) | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | true | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception(NullReferenceException) | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | true | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception(OutOfMemoryException) | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | true | +| Finally.cs:116:17:116:32 | [finally: exception] ... > ... | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception | +| Finally.cs:116:17:116:32 | [finally: exception] ... > ... | Finally.cs:117:17:117:37 | [finally: exception] ...; | true | | Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:103:10:103:11 | exit M5 (normal) | return | | Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:117:17:117:37 | [finally: return] ...; | true | | Finally.cs:116:32:116:32 | 0 | Finally.cs:116:17:116:32 | ... > ... | | -| Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | | -| Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | | -| Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | | +| Finally.cs:116:32:116:32 | [finally: exception] 0 | Finally.cs:116:17:116:32 | [finally: exception] ... > ... | | | Finally.cs:116:32:116:32 | [finally: return] 0 | Finally.cs:116:17:116:32 | [finally: return] ... > ... | | -| Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception(Exception) | -| Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception(NullReferenceException) | -| Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception(OutOfMemoryException) | +| Finally.cs:117:17:117:36 | [finally: exception] call to method WriteLine | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception | | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | Finally.cs:103:10:103:11 | exit M5 (normal) | return | | Finally.cs:117:17:117:36 | call to method WriteLine | Finally.cs:103:10:103:11 | exit M5 (normal) | | | Finally.cs:117:17:117:37 | ...; | Finally.cs:117:35:117:35 | 1 | | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | | +| Finally.cs:117:17:117:37 | [finally: exception] ...; | Finally.cs:117:35:117:35 | [finally: exception] 1 | | | Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:117:35:117:35 | [finally: return] 1 | | | Finally.cs:117:35:117:35 | 1 | Finally.cs:117:17:117:36 | call to method WriteLine | | -| Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | | -| Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | | +| Finally.cs:117:35:117:35 | [finally: exception] 1 | Finally.cs:117:17:117:36 | [finally: exception] call to method WriteLine | | | Finally.cs:117:35:117:35 | [finally: return] 1 | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:122:5:131:5 | {...} | | | Finally.cs:121:10:121:11 | exit M6 (normal) | Finally.cs:121:10:121:11 | exit M6 | | @@ -2288,18 +2230,18 @@ | Finally.cs:134:5:145:5 | {...} | Finally.cs:135:9:143:9 | try {...} ... | | | Finally.cs:135:9:143:9 | try {...} ... | Finally.cs:136:9:138:9 | {...} | | | Finally.cs:136:9:138:9 | {...} | Finally.cs:137:13:137:37 | ...; | | -| Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | exception(Exception) | +| Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:140:9:143:9 | [finally: exception] {...} | exception | | Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:140:9:143:9 | {...} | | | Finally.cs:137:13:137:37 | ...; | Finally.cs:137:31:137:35 | "Try" | | | Finally.cs:137:31:137:35 | "Try" | Finally.cs:137:13:137:36 | call to method WriteLine | | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | | +| Finally.cs:140:9:143:9 | [finally: exception] {...} | Finally.cs:141:41:141:42 | [finally: exception] "" | | | Finally.cs:140:9:143:9 | {...} | Finally.cs:141:41:141:42 | "" | | -| Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | Finally.cs:133:10:133:11 | exit M7 (abnormal) | exception(ArgumentException) | -| Finally.cs:141:13:141:44 | throw ...; | Finally.cs:133:10:133:11 | exit M7 (abnormal) | exception(ArgumentException) | -| Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | | +| Finally.cs:141:13:141:44 | [finally: exception] throw ...; | Finally.cs:133:10:133:11 | exit M7 (abnormal) | exception | +| Finally.cs:141:13:141:44 | throw ...; | Finally.cs:133:10:133:11 | exit M7 (abnormal) | exception | +| Finally.cs:141:19:141:43 | [finally: exception] object creation of type ArgumentException | Finally.cs:141:13:141:44 | [finally: exception] throw ...; | | | Finally.cs:141:19:141:43 | object creation of type ArgumentException | Finally.cs:141:13:141:44 | throw ...; | | | Finally.cs:141:41:141:42 | "" | Finally.cs:141:19:141:43 | object creation of type ArgumentException | | -| Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | | +| Finally.cs:141:41:141:42 | [finally: exception] "" | Finally.cs:141:19:141:43 | [finally: exception] object creation of type ArgumentException | | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:148:5:170:5 | {...} | | | Finally.cs:147:10:147:11 | exit M8 (abnormal) | Finally.cs:147:10:147:11 | exit M8 | | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:147:10:147:11 | exit M8 | | @@ -2311,129 +2253,89 @@ | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | true | | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:155:9:169:9 | {...} | false | | Finally.cs:151:25:151:28 | null | Finally.cs:151:17:151:28 | ... == ... | | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | exception(ArgumentNullException) | +| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:155:9:169:9 | [finally: exception] {...} | exception | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:17:152:50 | throw ...; | | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | | +| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:155:9:169:9 | [finally: exception] {...} | exception | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:156:13:168:13 | [finally: exception] try {...} ... | | | Finally.cs:155:9:169:9 | {...} | Finally.cs:156:13:168:13 | try {...} ... | | -| Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | | -| Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | | +| Finally.cs:156:13:168:13 | [finally: exception] try {...} ... | Finally.cs:157:13:160:13 | [finally: exception] {...} | | | Finally.cs:156:13:168:13 | try {...} ... | Finally.cs:157:13:160:13 | {...} | | -| Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | | -| Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | | +| Finally.cs:157:13:160:13 | [finally: exception] {...} | Finally.cs:158:17:159:45 | [finally: exception] if (...) ... | | | Finally.cs:157:13:160:13 | {...} | Finally.cs:158:17:159:45 | if (...) ... | | -| Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | | -| Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | | +| Finally.cs:158:17:159:45 | [finally: exception] if (...) ... | Finally.cs:158:21:158:24 | [finally: exception] access to parameter args | | | Finally.cs:158:17:159:45 | if (...) ... | Finally.cs:158:21:158:24 | access to parameter args | | -| Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | | -| Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | | +| Finally.cs:158:21:158:24 | [finally: exception] access to parameter args | Finally.cs:158:21:158:31 | [finally: exception] access to property Length | | | Finally.cs:158:21:158:24 | access to parameter args | Finally.cs:158:21:158:31 | access to property Length | | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | exception(NullReferenceException) | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | exception(NullReferenceException) | +| Finally.cs:158:21:158:31 | [finally: exception] access to property Length | Finally.cs:158:36:158:36 | [finally: exception] 1 | | +| Finally.cs:158:21:158:31 | [finally: exception] access to property Length | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | exception | +| Finally.cs:158:21:158:31 | [finally: exception] access to property Length | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | exception | | Finally.cs:158:21:158:31 | access to property Length | Finally.cs:158:36:158:36 | 1 | | -| Finally.cs:158:21:158:31 | access to property Length | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:158:21:158:31 | access to property Length | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | exception(NullReferenceException) | +| Finally.cs:158:21:158:31 | access to property Length | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | exception | +| Finally.cs:158:21:158:31 | access to property Length | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | exception | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:147:10:147:11 | exit M8 (normal) | false | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:159:41:159:43 | "1" | true | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception(ArgumentNullException) | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | true | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception(Exception) | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | true | +| Finally.cs:158:21:158:36 | [finally: exception] ... == ... | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception | +| Finally.cs:158:21:158:36 | [finally: exception] ... == ... | Finally.cs:159:41:159:43 | [finally: exception] "1" | true | | Finally.cs:158:36:158:36 | 1 | Finally.cs:158:21:158:36 | ... == ... | | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:159:21:159:45 | throw ...; | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | | -| Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | | -| Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | exception(Exception) | +| Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:158:21:158:36 | [finally: exception] ... == ... | | +| Finally.cs:159:21:159:45 | [finally: exception] throw ...; | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | exception | +| Finally.cs:159:21:159:45 | throw ...; | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | exception | +| Finally.cs:159:27:159:44 | [finally: exception] object creation of type Exception | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | | +| Finally.cs:159:27:159:44 | [finally: exception] object creation of type Exception | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | exception | | Finally.cs:159:27:159:44 | object creation of type Exception | Finally.cs:159:21:159:45 | throw ...; | | -| Finally.cs:159:27:159:44 | object creation of type Exception | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | exception(Exception) | +| Finally.cs:159:27:159:44 | object creation of type Exception | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | exception | | Finally.cs:159:41:159:43 | "1" | Finally.cs:159:27:159:44 | object creation of type Exception | | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | | +| Finally.cs:159:41:159:43 | [finally: exception] "1" | Finally.cs:159:27:159:44 | [finally: exception] object creation of type Exception | | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | match | | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | match | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | match | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | match | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | match | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | match | +| Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | match | +| Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | match | | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | | | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | | +| Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | Finally.cs:161:39:161:39 | [finally: exception, exception: Exception] access to local variable e | | +| Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [finally: exception, exception: NullReferenceException] access to local variable e | | | Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | | | Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | | +| Finally.cs:161:39:161:39 | [finally: exception, exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception, exception: Exception] access to property Message | | +| Finally.cs:161:39:161:39 | [finally: exception, exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception, exception: NullReferenceException] access to property Message | | | Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [exception: Exception] "1" | | | Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | | +| Finally.cs:161:39:161:47 | [finally: exception, exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [finally: exception, exception: Exception] "1" | | +| Finally.cs:161:39:161:47 | [finally: exception, exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [finally: exception, exception: NullReferenceException] "1" | | | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:162:13:164:13 | {...} | true | | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:165:13:168:13 | catch {...} | false | | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | {...} | true | | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | false | +| Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | Finally.cs:162:13:164:13 | [finally: exception] {...} | true | +| Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | false | +| Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | [finally: exception] {...} | true | +| Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | false | | Finally.cs:161:52:161:54 | [exception: Exception] "1" | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | | | Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | | +| Finally.cs:161:52:161:54 | [finally: exception, exception: Exception] "1" | Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | | +| Finally.cs:161:52:161:54 | [finally: exception, exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | | +| Finally.cs:162:13:164:13 | [finally: exception] {...} | Finally.cs:163:17:163:43 | [finally: exception] ...; | | | Finally.cs:162:13:164:13 | {...} | Finally.cs:163:17:163:43 | ...; | | -| Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception(ArgumentNullException) | -| Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception(Exception) | +| Finally.cs:163:17:163:42 | [finally: exception] call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception | | Finally.cs:163:17:163:42 | call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (normal) | | | Finally.cs:163:17:163:43 | ...; | Finally.cs:163:35:163:38 | access to parameter args | | -| Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | | -| Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | | -| Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | | -| Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | | +| Finally.cs:163:17:163:43 | [finally: exception] ...; | Finally.cs:163:35:163:38 | [finally: exception] access to parameter args | | +| Finally.cs:163:35:163:38 | [finally: exception] access to parameter args | Finally.cs:163:40:163:40 | [finally: exception] 0 | | | Finally.cs:163:35:163:38 | access to parameter args | Finally.cs:163:40:163:40 | 0 | | -| Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | | -| Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | | +| Finally.cs:163:35:163:41 | [finally: exception] access to array element | Finally.cs:163:17:163:42 | [finally: exception] call to method WriteLine | | | Finally.cs:163:35:163:41 | access to array element | Finally.cs:163:17:163:42 | call to method WriteLine | | | Finally.cs:163:40:163:40 | 0 | Finally.cs:163:35:163:41 | access to array element | | -| Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | | -| Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | | +| Finally.cs:163:40:163:40 | [finally: exception] 0 | Finally.cs:163:35:163:41 | [finally: exception] access to array element | | +| Finally.cs:165:13:168:13 | [finally: exception] catch {...} | Finally.cs:166:13:168:13 | [finally: exception] {...} | | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:166:13:168:13 | {...} | | -| Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | | -| Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | | +| Finally.cs:166:13:168:13 | [finally: exception] {...} | Finally.cs:167:17:167:38 | [finally: exception] ...; | | | Finally.cs:166:13:168:13 | {...} | Finally.cs:167:17:167:38 | ...; | | -| Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception(ArgumentNullException) | -| Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception(Exception) | +| Finally.cs:167:17:167:37 | [finally: exception] call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception | | Finally.cs:167:17:167:37 | call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (normal) | | | Finally.cs:167:17:167:38 | ...; | Finally.cs:167:35:167:36 | "" | | -| Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | | -| Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | | +| Finally.cs:167:17:167:38 | [finally: exception] ...; | Finally.cs:167:35:167:36 | [finally: exception] "" | | | Finally.cs:167:35:167:36 | "" | Finally.cs:167:17:167:37 | call to method WriteLine | | -| Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | | -| Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | | +| Finally.cs:167:35:167:36 | [finally: exception] "" | Finally.cs:167:17:167:37 | [finally: exception] call to method WriteLine | | | Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | {...} | | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | call to constructor Exception | | | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | Finally.cs:172:11:172:20 | exit ExceptionA | | @@ -2455,64 +2357,45 @@ | Finally.cs:180:13:180:43 | if (...) ... | Finally.cs:180:17:180:18 | access to parameter b1 | | | Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | true | | Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | false | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | exception(ExceptionA) | +| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | exception | | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | exception(Exception) | +| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | exception | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | | -| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception, b1 (line 176): true] try {...} ... | | | Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | | -| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | | -| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | | +| Finally.cs:184:13:191:13 | [finally: exception, b1 (line 176): true] try {...} ... | Finally.cs:185:13:187:13 | [finally: exception, b1 (line 176): true] {...} | | | Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | | -| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | | -| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | | +| Finally.cs:185:13:187:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:186:17:186:47 | [finally: exception, b1 (line 176): true] if (...) ... | | | Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | | -| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | | -| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | | +| Finally.cs:186:17:186:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | | | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(Exception) | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(ExceptionA) | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | exception(ExceptionB) | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | exception(ExceptionB) | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | exception(ExceptionB) | +| Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception | +| Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | +| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | exception | +| Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | exception | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | exception(Exception) | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | exception(Exception) | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | exception(Exception) | -| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(Exception) | +| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | exception | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | exception | +| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | match | | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | match | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(Exception) | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | match | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | match | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(Exception) | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | match | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | match | +| Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception | +| Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | match | +| Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | match | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true | +| Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | true | +| Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | true | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | | +| Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:190:17:190:47 | [finally: exception, b1 (line 176): true] if (...) ... | | | Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | | -| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | | -| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | | +| Finally.cs:190:17:190:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | | | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | -| Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(ExceptionC) | -| Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(ExceptionC) | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | | +| Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | true | +| Finally.cs:190:25:190:47 | [finally: exception] throw ...; | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception | +| Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception] throw ...; | | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:196:5:214:5 | {...} | | | Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | exit M10 | | | Finally.cs:195:10:195:12 | exit M10 (normal) | Finally.cs:195:10:195:12 | exit M10 | | @@ -2522,102 +2405,59 @@ | Finally.cs:199:13:199:43 | if (...) ... | Finally.cs:199:17:199:18 | access to parameter b1 | | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | true | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:202:9:212:9 | {...} | false | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | exception(ExceptionA) | +| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:202:9:212:9 | [finally: exception] {...} | exception | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:21:199:43 | throw ...; | | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | | -| Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | | +| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:202:9:212:9 | [finally: exception] {...} | exception | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:203:13:210:13 | [finally: exception] try {...} ... | | | Finally.cs:202:9:212:9 | {...} | Finally.cs:203:13:210:13 | try {...} ... | | -| Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | | -| Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | | +| Finally.cs:203:13:210:13 | [finally: exception] try {...} ... | Finally.cs:204:13:206:13 | [finally: exception] {...} | | | Finally.cs:203:13:210:13 | try {...} ... | Finally.cs:204:13:206:13 | {...} | | -| Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | | -| Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | | +| Finally.cs:204:13:206:13 | [finally: exception] {...} | Finally.cs:205:17:205:47 | [finally: exception] if (...) ... | | | Finally.cs:204:13:206:13 | {...} | Finally.cs:205:17:205:47 | if (...) ... | | -| Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | | -| Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | | +| Finally.cs:205:17:205:47 | [finally: exception] if (...) ... | Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | | | Finally.cs:205:17:205:47 | if (...) ... | Finally.cs:205:21:205:22 | access to parameter b2 | | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | true | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | false | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | true | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | false | +| Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | true | +| Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception] {...} | false | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | true | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:208:13:210:13 | {...} | false | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | exception(ExceptionB) | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | exception(ExceptionB) | -| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | exception(ExceptionB) | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | exception(Exception) | +| Finally.cs:205:25:205:47 | [finally: exception] throw ...; | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | exception | +| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | exception | +| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | | +| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | exception | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:25:205:47 | throw ...; | | -| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | | +| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | exception | +| Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:209:17:209:47 | [finally(1): exception] if (...) ... | | +| Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:209:17:209:47 | [finally: exception, finally(1): exception] if (...) ... | | +| Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:209:17:209:47 | [finally: exception] if (...) ... | | | Finally.cs:208:13:210:13 | {...} | Finally.cs:209:17:209:47 | if (...) ... | | -| Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | | +| Finally.cs:209:17:209:47 | [finally(1): exception] if (...) ... | Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | | +| Finally.cs:209:17:209:47 | [finally: exception, finally(1): exception] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception, finally(1): exception] access to parameter b3 | | +| Finally.cs:209:17:209:47 | [finally: exception] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | | | Finally.cs:209:17:209:47 | if (...) ... | Finally.cs:209:21:209:22 | access to parameter b3 | | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(Exception) | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionB) | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(Exception) | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionB) | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | false | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(Exception) | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionB) | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | false | +| Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception | +| Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | true | +| Finally.cs:209:21:209:22 | [finally: exception, finally(1): exception] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception | +| Finally.cs:209:21:209:22 | [finally: exception, finally(1): exception] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | true | +| Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | true | +| Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception] ...; | false | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | true | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:211:13:211:29 | ...; | false | -| Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | | +| Finally.cs:209:25:209:47 | [finally(1): exception] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception | +| Finally.cs:209:25:209:47 | [finally: exception, finally(1): exception] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception | +| Finally.cs:209:25:209:47 | [finally: exception] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception | +| Finally.cs:209:25:209:47 | throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception | +| Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception] throw ...; | | +| Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception, finally(1): exception] throw ...; | | +| Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception] throw ...; | | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:25:209:47 | throw ...; | | -| Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | | -| Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | | +| Finally.cs:211:13:211:16 | [finally: exception] this access | Finally.cs:211:26:211:28 | [finally: exception] "0" | | | Finally.cs:211:13:211:16 | this access | Finally.cs:211:26:211:28 | "0" | | | Finally.cs:211:13:211:28 | ... = ... | Finally.cs:213:9:213:25 | ...; | | -| Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(Exception) | -| Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionA) | +| Finally.cs:211:13:211:28 | [finally: exception] ... = ... | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception | | Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:16 | this access | | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | | +| Finally.cs:211:13:211:29 | [finally: exception] ...; | Finally.cs:211:13:211:16 | [finally: exception] this access | | | Finally.cs:211:26:211:28 | "0" | Finally.cs:211:13:211:28 | ... = ... | | -| Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | | -| Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | | +| Finally.cs:211:26:211:28 | [finally: exception] "0" | Finally.cs:211:13:211:28 | [finally: exception] ... = ... | | | Finally.cs:213:9:213:12 | this access | Finally.cs:213:22:213:24 | "1" | | | Finally.cs:213:9:213:24 | ... = ... | Finally.cs:195:10:195:12 | exit M10 (normal) | | | Finally.cs:213:9:213:25 | ...; | Finally.cs:213:9:213:12 | this access | | @@ -2627,7 +2467,7 @@ | Finally.cs:217:5:231:5 | {...} | Finally.cs:218:9:229:9 | try {...} ... | | | Finally.cs:218:9:229:9 | try {...} ... | Finally.cs:219:9:221:9 | {...} | | | Finally.cs:219:9:221:9 | {...} | Finally.cs:220:13:220:37 | ...; | | -| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:222:9:225:9 | catch {...} | exception(Exception) | +| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:222:9:225:9 | catch {...} | exception | | Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:227:9:229:9 | {...} | | | Finally.cs:220:13:220:37 | ...; | Finally.cs:220:31:220:35 | "Try" | | | Finally.cs:220:31:220:35 | "Try" | Finally.cs:220:13:220:36 | call to method WriteLine | | @@ -2654,88 +2494,55 @@ | Finally.cs:239:17:240:43 | if (...) ... | Finally.cs:239:21:239:22 | access to parameter b1 | | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | true | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:243:13:253:13 | {...} | false | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | exception(ExceptionA) | +| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:243:13:253:13 | [finally: exception] {...} | exception | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:21:240:43 | throw ...; | | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | | -| Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | | +| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:243:13:253:13 | [finally: exception] {...} | exception | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:244:17:252:17 | [finally: exception] try {...} ... | | | Finally.cs:243:13:253:13 | {...} | Finally.cs:244:17:252:17 | try {...} ... | | -| Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | | -| Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | | +| Finally.cs:244:17:252:17 | [finally: exception] try {...} ... | Finally.cs:245:17:248:17 | [finally: exception] {...} | | | Finally.cs:244:17:252:17 | try {...} ... | Finally.cs:245:17:248:17 | {...} | | -| Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | | -| Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | | +| Finally.cs:245:17:248:17 | [finally: exception] {...} | Finally.cs:246:21:247:47 | [finally: exception] if (...) ... | | | Finally.cs:245:17:248:17 | {...} | Finally.cs:246:21:247:47 | if (...) ... | | -| Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | | -| Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | | +| Finally.cs:246:21:247:47 | [finally: exception] if (...) ... | Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | | | Finally.cs:246:21:247:47 | if (...) ... | Finally.cs:246:25:246:26 | access to parameter b2 | | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | true | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | false | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | true | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | false | +| Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | true | +| Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception] {...} | false | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | true | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:250:17:252:17 | {...} | false | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | exception(ExceptionA) | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | exception(ExceptionA) | -| Finally.cs:247:25:247:47 | throw ...; | Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | exception(ExceptionA) | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | exception(Exception) | +| Finally.cs:247:25:247:47 | [finally: exception] throw ...; | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | exception | +| Finally.cs:247:25:247:47 | throw ...; | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | exception | +| Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | | +| Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | exception | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:25:247:47 | throw ...; | | -| Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | | -| Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | | +| Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | exception | +| Finally.cs:250:17:252:17 | [finally(1): exception] {...} | Finally.cs:251:21:251:55 | [finally(1): exception] ...; | | +| Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | Finally.cs:251:21:251:55 | [finally: exception, finally(1): exception] ...; | | +| Finally.cs:250:17:252:17 | [finally: exception] {...} | Finally.cs:251:21:251:55 | [finally: exception] ...; | | | Finally.cs:250:17:252:17 | {...} | Finally.cs:251:21:251:55 | ...; | | -| Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | exception(ExceptionA) | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | exception(ExceptionA) | -| Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | exception(ExceptionA) | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | exception(ExceptionA) | +| Finally.cs:251:21:251:54 | [finally(1): exception] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception] {...} | exception | +| Finally.cs:251:21:251:54 | [finally: exception, finally(1): exception] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception] {...} | exception | +| Finally.cs:251:21:251:54 | [finally: exception] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception] {...} | exception | | Finally.cs:251:21:251:54 | call to method WriteLine | Finally.cs:254:13:254:45 | ...; | | | Finally.cs:251:21:251:55 | ...; | Finally.cs:251:39:251:53 | "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | | +| Finally.cs:251:21:251:55 | [finally(1): exception] ...; | Finally.cs:251:39:251:53 | [finally(1): exception] "Inner finally" | | +| Finally.cs:251:21:251:55 | [finally: exception, finally(1): exception] ...; | Finally.cs:251:39:251:53 | [finally: exception, finally(1): exception] "Inner finally" | | +| Finally.cs:251:21:251:55 | [finally: exception] ...; | Finally.cs:251:39:251:53 | [finally: exception] "Inner finally" | | | Finally.cs:251:39:251:53 | "Inner finally" | Finally.cs:251:21:251:54 | call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | | -| Finally.cs:254:13:254:44 | call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | exception(Exception) | +| Finally.cs:251:39:251:53 | [finally(1): exception] "Inner finally" | Finally.cs:251:21:251:54 | [finally(1): exception] call to method WriteLine | | +| Finally.cs:251:39:251:53 | [finally: exception, finally(1): exception] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception, finally(1): exception] call to method WriteLine | | +| Finally.cs:251:39:251:53 | [finally: exception] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception] call to method WriteLine | | +| Finally.cs:254:13:254:44 | call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception] {...} | exception | | Finally.cs:254:13:254:44 | call to method WriteLine | Finally.cs:257:9:259:9 | {...} | | | Finally.cs:254:13:254:45 | ...; | Finally.cs:254:31:254:43 | "Mid finally" | | | Finally.cs:254:31:254:43 | "Mid finally" | Finally.cs:254:13:254:44 | call to method WriteLine | | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | | +| Finally.cs:257:9:259:9 | [finally: exception] {...} | Finally.cs:258:13:258:47 | [finally: exception] ...; | | | Finally.cs:257:9:259:9 | {...} | Finally.cs:258:13:258:47 | ...; | | -| Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:233:10:233:12 | exit M12 (abnormal) | exception(Exception) | -| Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:233:10:233:12 | exit M12 (abnormal) | exception(ExceptionA) | +| Finally.cs:258:13:258:46 | [finally: exception] call to method WriteLine | Finally.cs:233:10:233:12 | exit M12 (abnormal) | exception | | Finally.cs:258:13:258:46 | call to method WriteLine | Finally.cs:260:9:260:34 | ...; | | | Finally.cs:258:13:258:47 | ...; | Finally.cs:258:31:258:45 | "Outer finally" | | -| Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | | -| Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | | +| Finally.cs:258:13:258:47 | [finally: exception] ...; | Finally.cs:258:31:258:45 | [finally: exception] "Outer finally" | | | Finally.cs:258:31:258:45 | "Outer finally" | Finally.cs:258:13:258:46 | call to method WriteLine | | -| Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | | +| Finally.cs:258:31:258:45 | [finally: exception] "Outer finally" | Finally.cs:258:13:258:46 | [finally: exception] call to method WriteLine | | | Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:233:10:233:12 | exit M12 (normal) | | | Finally.cs:260:9:260:34 | ...; | Finally.cs:260:27:260:32 | "Done" | | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:9:260:33 | call to method WriteLine | | @@ -2745,28 +2552,28 @@ | Finally.cs:264:5:274:5 | {...} | Finally.cs:265:9:273:9 | try {...} ... | | | Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:266:9:268:9 | {...} | | | Finally.cs:266:9:268:9 | {...} | Finally.cs:267:13:267:35 | ...; | | -| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | exception(Exception) | +| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:270:9:273:9 | [finally: exception] {...} | exception | | Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:270:9:273:9 | {...} | | | Finally.cs:267:13:267:35 | ...; | Finally.cs:267:31:267:33 | "1" | | | Finally.cs:267:31:267:33 | "1" | Finally.cs:267:13:267:34 | call to method WriteLine | | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | | +| Finally.cs:270:9:273:9 | [finally: exception] {...} | Finally.cs:271:13:271:35 | [finally: exception] ...; | | | Finally.cs:270:9:273:9 | {...} | Finally.cs:271:13:271:35 | ...; | | -| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | | +| Finally.cs:271:13:271:34 | [finally: exception] call to method WriteLine | Finally.cs:272:13:272:19 | [finally: exception] ...; | | | Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:272:13:272:19 | ...; | | | Finally.cs:271:13:271:35 | ...; | Finally.cs:271:31:271:33 | "3" | | -| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | | +| Finally.cs:271:13:271:35 | [finally: exception] ...; | Finally.cs:271:31:271:33 | [finally: exception] "3" | | | Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:34 | call to method WriteLine | | -| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | | +| Finally.cs:271:31:271:33 | [finally: exception] "3" | Finally.cs:271:13:271:34 | [finally: exception] call to method WriteLine | | +| Finally.cs:272:13:272:13 | [finally: exception] access to parameter i | Finally.cs:272:18:272:18 | [finally: exception] 3 | | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:18:272:18 | 3 | | | Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:18 | ... = ... | | | Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (normal) | | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | exception(Exception) | +| Finally.cs:272:13:272:18 | [finally: exception] ... + ... | Finally.cs:272:13:272:18 | [finally: exception] ... = ... | | +| Finally.cs:272:13:272:18 | [finally: exception] ... = ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | exception | | Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:13 | access to parameter i | | -| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | | +| Finally.cs:272:13:272:19 | [finally: exception] ...; | Finally.cs:272:13:272:13 | [finally: exception] access to parameter i | | | Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:18 | ... + ... | | -| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | | +| Finally.cs:272:18:272:18 | [finally: exception] 3 | Finally.cs:272:13:272:18 | [finally: exception] ... + ... | | | Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | {...} | | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | call to constructor Object | | | Foreach.cs:4:7:4:13 | exit Foreach (normal) | Foreach.cs:4:7:4:13 | exit Foreach | | @@ -3159,7 +2966,7 @@ | LoopUnrolling.cs:50:16:50:35 | call to method WriteLine | LoopUnrolling.cs:51:13:51:23 | goto ...; | | | LoopUnrolling.cs:50:16:50:36 | ...; | LoopUnrolling.cs:50:34:50:34 | access to local variable x | | | LoopUnrolling.cs:50:34:50:34 | access to local variable x | LoopUnrolling.cs:50:16:50:35 | call to method WriteLine | | -| LoopUnrolling.cs:51:13:51:23 | goto ...; | LoopUnrolling.cs:50:9:50:13 | Label: | goto(Label) | +| LoopUnrolling.cs:51:13:51:23 | goto ...; | LoopUnrolling.cs:50:9:50:13 | Label: | goto | | LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:56:5:65:5 | {...} | | | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:55:10:55:11 | exit M7 | | | LoopUnrolling.cs:56:5:65:5 | {...} | LoopUnrolling.cs:57:9:57:48 | ... ...; | | @@ -3261,27 +3068,27 @@ | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | MultiImplementationB.cs:3:22:3:22 | 0 | | | MultiImplementationA.cs:6:22:6:31 | exit get_P1 (abnormal) | MultiImplementationA.cs:6:22:6:31 | exit get_P1 | | | MultiImplementationA.cs:6:22:6:31 | exit get_P1 (normal) | MultiImplementationA.cs:6:22:6:31 | exit get_P1 | | -| MultiImplementationA.cs:6:22:6:31 | throw ... | MultiImplementationA.cs:6:22:6:31 | exit get_P1 (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:6:22:6:31 | throw ... | MultiImplementationA.cs:6:22:6:31 | exit get_P1 (abnormal) | exception | | MultiImplementationA.cs:6:28:6:31 | null | MultiImplementationA.cs:6:22:6:31 | throw ... | | | MultiImplementationA.cs:7:21:7:23 | enter get_P2 | MultiImplementationA.cs:7:25:7:39 | {...} | | | MultiImplementationA.cs:7:21:7:23 | enter get_P2 | MultiImplementationB.cs:4:25:4:37 | {...} | | | MultiImplementationA.cs:7:21:7:23 | exit get_P2 (abnormal) | MultiImplementationA.cs:7:21:7:23 | exit get_P2 | | | MultiImplementationA.cs:7:21:7:23 | exit get_P2 (normal) | MultiImplementationA.cs:7:21:7:23 | exit get_P2 | | | MultiImplementationA.cs:7:25:7:39 | {...} | MultiImplementationA.cs:7:33:7:36 | null | | -| MultiImplementationA.cs:7:27:7:37 | throw ...; | MultiImplementationA.cs:7:21:7:23 | exit get_P2 (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:7:27:7:37 | throw ...; | MultiImplementationA.cs:7:21:7:23 | exit get_P2 (abnormal) | exception | | MultiImplementationA.cs:7:33:7:36 | null | MultiImplementationA.cs:7:27:7:37 | throw ...; | | | MultiImplementationA.cs:7:41:7:43 | enter set_P2 | MultiImplementationA.cs:7:45:7:59 | {...} | | | MultiImplementationA.cs:7:41:7:43 | enter set_P2 | MultiImplementationB.cs:4:43:4:45 | {...} | | | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (abnormal) | MultiImplementationA.cs:7:41:7:43 | exit set_P2 | | | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (normal) | MultiImplementationA.cs:7:41:7:43 | exit set_P2 | | | MultiImplementationA.cs:7:45:7:59 | {...} | MultiImplementationA.cs:7:53:7:56 | null | | -| MultiImplementationA.cs:7:47:7:57 | throw ...; | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:7:47:7:57 | throw ...; | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (abnormal) | exception | | MultiImplementationA.cs:7:53:7:56 | null | MultiImplementationA.cs:7:47:7:57 | throw ...; | | | MultiImplementationA.cs:8:16:8:16 | enter M | MultiImplementationA.cs:8:29:8:32 | null | | | MultiImplementationA.cs:8:16:8:16 | enter M | MultiImplementationB.cs:5:23:5:23 | 2 | | | MultiImplementationA.cs:8:16:8:16 | exit M (abnormal) | MultiImplementationA.cs:8:16:8:16 | exit M | | | MultiImplementationA.cs:8:16:8:16 | exit M (normal) | MultiImplementationA.cs:8:16:8:16 | exit M | | -| MultiImplementationA.cs:8:23:8:32 | throw ... | MultiImplementationA.cs:8:16:8:16 | exit M (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:8:23:8:32 | throw ... | MultiImplementationA.cs:8:16:8:16 | exit M (abnormal) | exception | | MultiImplementationA.cs:8:29:8:32 | null | MultiImplementationA.cs:8:23:8:32 | throw ... | | | MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:13:20:13:20 | 0 | | | MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:24:16:24:16 | this access | | @@ -3347,7 +3154,7 @@ | MultiImplementationA.cs:28:7:28:8 | {...} | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | | | MultiImplementationA.cs:30:21:30:23 | enter get_P3 | MultiImplementationA.cs:30:34:30:37 | null | | | MultiImplementationA.cs:30:21:30:23 | exit get_P3 (abnormal) | MultiImplementationA.cs:30:21:30:23 | exit get_P3 | | -| MultiImplementationA.cs:30:28:30:37 | throw ... | MultiImplementationA.cs:30:21:30:23 | exit get_P3 (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:30:28:30:37 | throw ... | MultiImplementationA.cs:30:21:30:23 | exit get_P3 (abnormal) | exception | | MultiImplementationA.cs:30:34:30:37 | null | MultiImplementationA.cs:30:28:30:37 | throw ... | | | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | {...} | | | MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | | @@ -3359,12 +3166,12 @@ | MultiImplementationA.cs:36:9:36:10 | exit M1 (abnormal) | MultiImplementationA.cs:36:9:36:10 | exit M1 | | | MultiImplementationA.cs:36:9:36:10 | exit M1 (normal) | MultiImplementationA.cs:36:9:36:10 | exit M1 | | | MultiImplementationA.cs:36:14:36:28 | {...} | MultiImplementationA.cs:36:22:36:25 | null | | -| MultiImplementationA.cs:36:16:36:26 | throw ...; | MultiImplementationA.cs:36:9:36:10 | exit M1 (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:36:16:36:26 | throw ...; | MultiImplementationA.cs:36:9:36:10 | exit M1 (abnormal) | exception | | MultiImplementationA.cs:36:22:36:25 | null | MultiImplementationA.cs:36:16:36:26 | throw ...; | | | MultiImplementationA.cs:37:9:37:10 | enter M2 | MultiImplementationA.cs:37:14:37:28 | {...} | | | MultiImplementationA.cs:37:9:37:10 | exit M2 (abnormal) | MultiImplementationA.cs:37:9:37:10 | exit M2 | | | MultiImplementationA.cs:37:14:37:28 | {...} | MultiImplementationA.cs:37:22:37:25 | null | | -| MultiImplementationA.cs:37:16:37:26 | throw ...; | MultiImplementationA.cs:37:9:37:10 | exit M2 (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:37:16:37:26 | throw ...; | MultiImplementationA.cs:37:9:37:10 | exit M2 (abnormal) | exception | | MultiImplementationA.cs:37:22:37:25 | null | MultiImplementationA.cs:37:16:37:26 | throw ...; | | | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | MultiImplementationB.cs:1:7:1:8 | {...} | | | MultiImplementationB.cs:1:7:1:8 | {...} | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | | @@ -3377,29 +3184,29 @@ | MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationB.cs:11:20:11:20 | 1 | | | MultiImplementationB.cs:11:16:11:20 | ... = ... | MultiImplementationB.cs:22:16:22:16 | this access | | | MultiImplementationB.cs:11:20:11:20 | 1 | MultiImplementationB.cs:11:16:11:20 | ... = ... | | -| MultiImplementationB.cs:12:31:12:40 | throw ... | MultiImplementationA.cs:14:31:14:31 | exit get_Item (abnormal) | exception(NullReferenceException) | +| MultiImplementationB.cs:12:31:12:40 | throw ... | MultiImplementationA.cs:14:31:14:31 | exit get_Item (abnormal) | exception | | MultiImplementationB.cs:12:37:12:40 | null | MultiImplementationB.cs:12:31:12:40 | throw ... | | | MultiImplementationB.cs:13:40:13:54 | {...} | MultiImplementationB.cs:13:48:13:51 | null | | -| MultiImplementationB.cs:13:42:13:52 | throw ...; | MultiImplementationA.cs:15:36:15:38 | exit get_Item (abnormal) | exception(NullReferenceException) | +| MultiImplementationB.cs:13:42:13:52 | throw ...; | MultiImplementationA.cs:15:36:15:38 | exit get_Item (abnormal) | exception | | MultiImplementationB.cs:13:48:13:51 | null | MultiImplementationB.cs:13:42:13:52 | throw ...; | | | MultiImplementationB.cs:13:60:13:62 | {...} | MultiImplementationA.cs:15:54:15:56 | exit set_Item (normal) | | | MultiImplementationB.cs:15:5:17:5 | {...} | MultiImplementationB.cs:16:9:16:31 | M2(...) | | | MultiImplementationB.cs:16:9:16:31 | M2(...) | MultiImplementationA.cs:16:17:16:18 | exit M1 (normal) | | | MultiImplementationB.cs:16:9:16:31 | enter M2 | MultiImplementationB.cs:16:27:16:30 | null | | | MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | MultiImplementationB.cs:16:9:16:31 | exit M2 | | -| MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | exception(NullReferenceException) | +| MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | exception | | MultiImplementationB.cs:16:27:16:30 | null | MultiImplementationB.cs:16:21:16:30 | throw ... | | | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:11:16:11:16 | this access | | | MultiImplementationB.cs:18:22:18:36 | {...} | MultiImplementationB.cs:18:30:18:33 | null | | -| MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) | exception(NullReferenceException) | +| MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) | exception | | MultiImplementationB.cs:18:30:18:33 | null | MultiImplementationB.cs:18:24:18:34 | throw ...; | | | MultiImplementationB.cs:19:19:19:22 | call to constructor C2 | MultiImplementationB.cs:19:27:19:29 | {...} | | | MultiImplementationB.cs:19:24:19:24 | 1 | MultiImplementationB.cs:19:19:19:22 | call to constructor C2 | | | MultiImplementationB.cs:19:27:19:29 | {...} | MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | | | MultiImplementationB.cs:20:11:20:25 | {...} | MultiImplementationB.cs:20:19:20:22 | null | | -| MultiImplementationB.cs:20:13:20:23 | throw ...; | MultiImplementationA.cs:22:6:22:7 | exit ~C2 (abnormal) | exception(NullReferenceException) | +| MultiImplementationB.cs:20:13:20:23 | throw ...; | MultiImplementationA.cs:22:6:22:7 | exit ~C2 (abnormal) | exception | | MultiImplementationB.cs:20:19:20:22 | null | MultiImplementationB.cs:20:13:20:23 | throw ...; | | -| MultiImplementationB.cs:21:50:21:59 | throw ... | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion (abnormal) | exception(NullReferenceException) | +| MultiImplementationB.cs:21:50:21:59 | throw ... | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion (abnormal) | exception | | MultiImplementationB.cs:21:56:21:59 | null | MultiImplementationB.cs:21:50:21:59 | throw ... | | | MultiImplementationB.cs:22:16:22:16 | access to property P | MultiImplementationB.cs:22:32:22:34 | ... = ... | | | MultiImplementationB.cs:22:16:22:16 | this access | MultiImplementationB.cs:22:34:22:34 | 1 | | @@ -3772,7 +3579,7 @@ | PostDominance.cs:19:13:19:21 | [true] ... is ... | PostDominance.cs:20:45:20:53 | nameof(...) | true | | PostDominance.cs:19:18:19:21 | null | PostDominance.cs:19:13:19:21 | [false] ... is ... | no-match | | PostDominance.cs:19:18:19:21 | null | PostDominance.cs:19:13:19:21 | [true] ... is ... | match | -| PostDominance.cs:20:13:20:55 | throw ...; | PostDominance.cs:17:10:17:11 | exit M3 (abnormal) | exception(ArgumentNullException) | +| PostDominance.cs:20:13:20:55 | throw ...; | PostDominance.cs:17:10:17:11 | exit M3 (abnormal) | exception | | PostDominance.cs:20:19:20:54 | object creation of type ArgumentNullException | PostDominance.cs:20:13:20:55 | throw ...; | | | PostDominance.cs:20:45:20:53 | nameof(...) | PostDominance.cs:20:19:20:54 | object creation of type ArgumentNullException | | | PostDominance.cs:21:9:21:28 | call to method WriteLine | PostDominance.cs:17:10:17:11 | exit M3 (normal) | | @@ -3867,12 +3674,12 @@ | Switch.cs:16:13:16:19 | case ...: | Switch.cs:16:18:16:18 | 0 | | | Switch.cs:16:18:16:18 | 0 | Switch.cs:17:23:17:37 | object creation of type Exception | match | | Switch.cs:16:18:16:18 | 0 | Switch.cs:18:13:18:22 | case ...: | no-match | -| Switch.cs:17:17:17:38 | throw ...; | Switch.cs:10:10:10:11 | exit M2 (abnormal) | exception(Exception) | +| Switch.cs:17:17:17:38 | throw ...; | Switch.cs:10:10:10:11 | exit M2 (abnormal) | exception | | Switch.cs:17:23:17:37 | object creation of type Exception | Switch.cs:17:17:17:38 | throw ...; | | | Switch.cs:18:13:18:22 | case ...: | Switch.cs:18:18:18:21 | null | | | Switch.cs:18:18:18:21 | null | Switch.cs:19:17:19:29 | goto default; | match | | Switch.cs:18:18:18:21 | null | Switch.cs:20:13:20:23 | case ...: | no-match | -| Switch.cs:19:17:19:29 | goto default; | Switch.cs:30:13:30:20 | default: | goto(default) | +| Switch.cs:19:17:19:29 | goto default; | Switch.cs:30:13:30:20 | default: | goto | | Switch.cs:20:13:20:23 | case ...: | Switch.cs:20:18:20:22 | Int32 i | | | Switch.cs:20:18:20:22 | Int32 i | Switch.cs:21:17:22:27 | if (...) ... | match | | Switch.cs:20:18:20:22 | Int32 i | Switch.cs:24:13:24:56 | case ...: | no-match | @@ -3882,7 +3689,7 @@ | Switch.cs:21:21:21:29 | ... == ... | Switch.cs:23:27:23:27 | 0 | false | | Switch.cs:21:26:21:29 | null | Switch.cs:21:21:21:29 | ... == ... | | | Switch.cs:22:21:22:27 | return ...; | Switch.cs:10:10:10:11 | exit M2 (normal) | return | -| Switch.cs:23:17:23:28 | goto case ...; | Switch.cs:16:13:16:19 | case ...: | goto(0) | +| Switch.cs:23:17:23:28 | goto case ...; | Switch.cs:16:13:16:19 | case ...: | goto | | Switch.cs:23:27:23:27 | 0 | Switch.cs:23:17:23:28 | goto case ...; | | | Switch.cs:24:13:24:56 | case ...: | Switch.cs:24:18:24:25 | String s | | | Switch.cs:24:18:24:25 | String s | Switch.cs:24:32:24:32 | access to local variable s | match | @@ -3905,16 +3712,16 @@ | Switch.cs:27:13:27:39 | case ...: | Switch.cs:27:18:27:25 | Double d | | | Switch.cs:27:18:27:25 | Double d | Switch.cs:27:32:27:38 | call to method Throw | match | | Switch.cs:27:18:27:25 | Double d | Switch.cs:30:13:30:20 | default: | no-match | -| Switch.cs:27:32:27:38 | call to method Throw | Switch.cs:10:10:10:11 | exit M2 (abnormal) | exception(Exception) | +| Switch.cs:27:32:27:38 | call to method Throw | Switch.cs:10:10:10:11 | exit M2 (abnormal) | exception | | Switch.cs:28:13:28:17 | Label: | Switch.cs:29:17:29:23 | return ...; | | | Switch.cs:29:17:29:23 | return ...; | Switch.cs:10:10:10:11 | exit M2 (normal) | return | | Switch.cs:30:13:30:20 | default: | Switch.cs:31:17:31:27 | goto ...; | | -| Switch.cs:31:17:31:27 | goto ...; | Switch.cs:28:13:28:17 | Label: | goto(Label) | +| Switch.cs:31:17:31:27 | goto ...; | Switch.cs:28:13:28:17 | Label: | goto | | Switch.cs:35:10:35:11 | enter M3 | Switch.cs:36:5:42:5 | {...} | | | Switch.cs:35:10:35:11 | exit M3 (abnormal) | Switch.cs:35:10:35:11 | exit M3 | | | Switch.cs:36:5:42:5 | {...} | Switch.cs:37:9:41:9 | switch (...) {...} | | | Switch.cs:37:9:41:9 | switch (...) {...} | Switch.cs:37:17:37:23 | call to method Throw | | -| Switch.cs:37:17:37:23 | call to method Throw | Switch.cs:35:10:35:11 | exit M3 (abnormal) | exception(Exception) | +| Switch.cs:37:17:37:23 | call to method Throw | Switch.cs:35:10:35:11 | exit M3 (abnormal) | exception | | Switch.cs:44:10:44:11 | enter M4 | Switch.cs:45:5:53:5 | {...} | | | Switch.cs:44:10:44:11 | exit M4 (normal) | Switch.cs:44:10:44:11 | exit M4 | | | Switch.cs:45:5:53:5 | {...} | Switch.cs:46:9:52:9 | switch (...) {...} | | @@ -4013,7 +3820,7 @@ | Switch.cs:108:17:108:17 | 1 | Switch.cs:108:16:108:17 | -... | | | Switch.cs:111:17:111:21 | enter Throw | Switch.cs:111:34:111:48 | object creation of type Exception | | | Switch.cs:111:17:111:21 | exit Throw (abnormal) | Switch.cs:111:17:111:21 | exit Throw | | -| Switch.cs:111:28:111:48 | throw ... | Switch.cs:111:17:111:21 | exit Throw (abnormal) | exception(Exception) | +| Switch.cs:111:28:111:48 | throw ... | Switch.cs:111:17:111:21 | exit Throw (abnormal) | exception | | Switch.cs:111:34:111:48 | object creation of type Exception | Switch.cs:111:28:111:48 | throw ... | | | Switch.cs:113:9:113:11 | enter M10 | Switch.cs:114:5:121:5 | {...} | | | Switch.cs:113:9:113:11 | exit M10 (normal) | Switch.cs:113:9:113:11 | exit M10 | | @@ -4126,7 +3933,7 @@ | Switch.cs:156:28:156:31 | true | Switch.cs:156:41:156:45 | false | no-match | | Switch.cs:156:28:156:38 | ... => ... | Switch.cs:156:17:156:54 | ... switch { ... } | | | Switch.cs:156:36:156:38 | "a" | Switch.cs:156:28:156:38 | ... => ... | | -| Switch.cs:156:41:156:45 | false | Switch.cs:154:10:154:12 | exit M15 (abnormal) | exception(InvalidOperationException) | +| Switch.cs:156:41:156:45 | false | Switch.cs:154:10:154:12 | exit M15 (abnormal) | exception | | Switch.cs:156:41:156:45 | false | Switch.cs:156:50:156:52 | "b" | match | | Switch.cs:156:41:156:52 | ... => ... | Switch.cs:156:17:156:54 | ... switch { ... } | | | Switch.cs:156:50:156:52 | "b" | Switch.cs:156:41:156:52 | ... => ... | | @@ -4361,7 +4168,7 @@ | cflow.cs:42:17:42:38 | call to method WriteLine | cflow.cs:43:27:43:27 | 2 | | | cflow.cs:42:17:42:39 | ...; | cflow.cs:42:35:42:37 | "1" | | | cflow.cs:42:35:42:37 | "1" | cflow.cs:42:17:42:38 | call to method WriteLine | | -| cflow.cs:43:17:43:28 | goto case ...; | cflow.cs:44:13:44:19 | case ...: | goto(2) | +| cflow.cs:43:17:43:28 | goto case ...; | cflow.cs:44:13:44:19 | case ...: | goto | | cflow.cs:43:27:43:27 | 2 | cflow.cs:43:17:43:28 | goto case ...; | | | cflow.cs:44:13:44:19 | case ...: | cflow.cs:44:18:44:18 | 2 | | | cflow.cs:44:18:44:18 | 2 | cflow.cs:45:17:45:39 | ...; | match | @@ -4369,7 +4176,7 @@ | cflow.cs:45:17:45:38 | call to method WriteLine | cflow.cs:46:27:46:27 | 1 | | | cflow.cs:45:17:45:39 | ...; | cflow.cs:45:35:45:37 | "2" | | | cflow.cs:45:35:45:37 | "2" | cflow.cs:45:17:45:38 | call to method WriteLine | | -| cflow.cs:46:17:46:28 | goto case ...; | cflow.cs:41:13:41:19 | case ...: | goto(1) | +| cflow.cs:46:17:46:28 | goto case ...; | cflow.cs:41:13:41:19 | case ...: | goto | | cflow.cs:46:27:46:27 | 1 | cflow.cs:46:17:46:28 | goto case ...; | | | cflow.cs:47:13:47:19 | case ...: | cflow.cs:47:18:47:18 | 3 | | | cflow.cs:47:18:47:18 | 3 | cflow.cs:48:17:48:39 | ...; | match | @@ -4407,7 +4214,7 @@ | cflow.cs:63:23:63:33 | ... == ... | cflow.cs:63:21:63:34 | [false] !... | true | | cflow.cs:63:23:63:33 | ... == ... | cflow.cs:63:21:63:34 | [true] !... | false | | cflow.cs:63:32:63:33 | "" | cflow.cs:63:23:63:33 | ... == ... | | -| cflow.cs:64:21:64:55 | throw ...; | cflow.cs:37:17:37:22 | exit Switch (abnormal) | exception(NullReferenceException) | +| cflow.cs:64:21:64:55 | throw ...; | cflow.cs:37:17:37:22 | exit Switch (abnormal) | exception | | cflow.cs:64:27:64:54 | object creation of type NullReferenceException | cflow.cs:64:21:64:55 | throw ...; | | | cflow.cs:65:17:65:22 | break; | cflow.cs:67:16:67:16 | access to parameter a | break | | cflow.cs:67:9:67:17 | return ...; | cflow.cs:37:17:37:22 | exit Switch (normal) | return | @@ -4462,7 +4269,7 @@ | cflow.cs:92:13:92:27 | call to method Equals | cflow.cs:94:9:94:29 | ...; | false | | cflow.cs:92:20:92:20 | access to parameter s | cflow.cs:92:23:92:26 | null | | | cflow.cs:92:23:92:26 | null | cflow.cs:92:13:92:27 | call to method Equals | | -| cflow.cs:93:13:93:49 | throw ...; | cflow.cs:90:18:90:19 | exit M3 (abnormal) | exception(ArgumentNullException) | +| cflow.cs:93:13:93:49 | throw ...; | cflow.cs:90:18:90:19 | exit M3 (abnormal) | exception | | cflow.cs:93:19:93:48 | object creation of type ArgumentNullException | cflow.cs:93:13:93:49 | throw ...; | | | cflow.cs:93:45:93:47 | "s" | cflow.cs:93:19:93:48 | object creation of type ArgumentNullException | | | cflow.cs:94:9:94:28 | call to method WriteLine | cflow.cs:96:9:97:55 | if (...) ... | | @@ -4777,7 +4584,7 @@ | cflow.cs:200:61:200:61 | access to local variable b | cflow.cs:200:40:200:61 | [true] ... && ... | true | | cflow.cs:201:9:205:9 | {...} | cflow.cs:202:13:204:13 | {...} | | | cflow.cs:202:13:204:13 | {...} | cflow.cs:203:23:203:37 | object creation of type Exception | | -| cflow.cs:203:17:203:38 | throw ...; | cflow.cs:193:10:193:17 | exit Booleans (abnormal) | exception(Exception) | +| cflow.cs:203:17:203:38 | throw ...; | cflow.cs:193:10:193:17 | exit Booleans (abnormal) | exception | | cflow.cs:203:23:203:37 | object creation of type Exception | cflow.cs:203:17:203:38 | throw ...; | | | cflow.cs:208:10:208:11 | enter Do | cflow.cs:209:5:222:5 | {...} | | | cflow.cs:208:10:208:11 | exit Do (normal) | cflow.cs:208:10:208:11 | exit Do | | @@ -4873,7 +4680,7 @@ | cflow.cs:244:13:244:28 | ... > ... | cflow.cs:244:31:244:41 | goto ...; | true | | cflow.cs:244:13:244:28 | ... > ... | cflow.cs:246:9:258:9 | switch (...) {...} | false | | cflow.cs:244:28:244:28 | 0 | cflow.cs:244:13:244:28 | ... > ... | | -| cflow.cs:244:31:244:41 | goto ...; | cflow.cs:242:5:242:9 | Label: | goto(Label) | +| cflow.cs:244:31:244:41 | goto ...; | cflow.cs:242:5:242:9 | Label: | goto | | cflow.cs:246:9:258:9 | switch (...) {...} | cflow.cs:246:17:246:21 | this access | | | cflow.cs:246:17:246:21 | access to field Field | cflow.cs:246:17:246:28 | access to property Length | | | cflow.cs:246:17:246:21 | this access | cflow.cs:246:17:246:21 | access to field Field | | @@ -4883,7 +4690,7 @@ | cflow.cs:248:13:248:19 | case ...: | cflow.cs:248:18:248:18 | 0 | | | cflow.cs:248:18:248:18 | 0 | cflow.cs:249:17:249:29 | goto default; | match | | cflow.cs:248:18:248:18 | 0 | cflow.cs:250:13:250:19 | case ...: | no-match | -| cflow.cs:249:17:249:29 | goto default; | cflow.cs:255:13:255:20 | default: | goto(default) | +| cflow.cs:249:17:249:29 | goto default; | cflow.cs:255:13:255:20 | default: | goto | | cflow.cs:250:13:250:19 | case ...: | cflow.cs:250:18:250:18 | 1 | | | cflow.cs:250:18:250:18 | 1 | cflow.cs:251:17:251:37 | ...; | match | | cflow.cs:250:18:250:18 | 1 | cflow.cs:253:13:253:19 | case ...: | no-match | @@ -4894,7 +4701,7 @@ | cflow.cs:253:13:253:19 | case ...: | cflow.cs:253:18:253:18 | 2 | | | cflow.cs:253:18:253:18 | 2 | cflow.cs:254:17:254:27 | goto ...; | match | | cflow.cs:253:18:253:18 | 2 | cflow.cs:255:13:255:20 | default: | no-match | -| cflow.cs:254:17:254:27 | goto ...; | cflow.cs:242:5:242:9 | Label: | goto(Label) | +| cflow.cs:254:17:254:27 | goto ...; | cflow.cs:242:5:242:9 | Label: | goto | | cflow.cs:255:13:255:20 | default: | cflow.cs:256:17:256:37 | ...; | | | cflow.cs:256:17:256:36 | call to method WriteLine | cflow.cs:257:17:257:22 | break; | | | cflow.cs:256:17:256:37 | ...; | cflow.cs:256:35:256:35 | 0 | | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected b/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected index 7c5a64b7155..81c15438679 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected @@ -508,65 +508,45 @@ booleanNode | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | b1 (line 176): true | | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | b1 (line 176): true | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | b1 (line 176): false | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | b1 (line 176): true | -| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | b1 (line 176): true | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | b1 (line 176): true | | Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | b1 (line 176): false | -| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | b1 (line 176): true | -| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | b1 (line 176): true | +| Finally.cs:184:13:191:13 | [finally: exception, b1 (line 176): true] try {...} ... | b1 (line 176): true | | Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | b1 (line 176): false | -| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | b1 (line 176): true | -| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | b1 (line 176): true | +| Finally.cs:185:13:187:13 | [finally: exception, b1 (line 176): true] {...} | b1 (line 176): true | | Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | b1 (line 176): false | -| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | b1 (line 176): true | -| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | b1 (line 176): true | +| Finally.cs:186:17:186:47 | [finally: exception, b1 (line 176): true] if (...) ... | b1 (line 176): true | | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | b1 (line 176): false | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | b1 (line 176): true | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | b1 (line 176): true | +| Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | b1 (line 176): true | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | b1 (line 176): false | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | b2 (line 176): true | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | b1 (line 176): true | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | b2 (line 176): true | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | b1 (line 176): true | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | b2 (line 176): true | +| Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | b1 (line 176): true | +| Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | b2 (line 176): true | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | b1 (line 176): false | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | b2 (line 176): true | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b1 (line 176): true | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b2 (line 176): true | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b1 (line 176): true | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b2 (line 176): true | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b1 (line 176): true | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b2 (line 176): true | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b1 (line 176): false | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b1 (line 176): false | | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | +| Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true | +| Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | +| Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true | +| Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b1 (line 176): false | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b1 (line 176): false | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | +| Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true | +| Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | +| Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true | +| Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | b1 (line 176): false | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | b1 (line 176): true | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | b1 (line 176): true | +| Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | b1 (line 176): true | | Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | b1 (line 176): false | -| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | b1 (line 176): true | -| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | b1 (line 176): true | +| Finally.cs:190:17:190:47 | [finally: exception, b1 (line 176): true] if (...) ... | b1 (line 176): true | | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | b1 (line 176): false | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | b1 (line 176): true | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | b1 (line 176): true | +| Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | b1 (line 176): true | | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | b (line 55): false | | LoopUnrolling.cs:58:9:64:9 | [b (line 55): true] foreach (... ... in ...) ... | b (line 55): true | | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | b (line 55): false | @@ -614,41 +594,33 @@ finallyNode | BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | BreakInTry.cs:58:9:70:9 | try {...} ... | | BreakInTry.cs:67:28:67:31 | [finally: return] null | BreakInTry.cs:58:9:70:9 | try {...} ... | | BreakInTry.cs:68:21:68:26 | [finally: return] break; | BreakInTry.cs:58:9:70:9 | try {...} ... | -| CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | -| CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | -| CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | -| CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:9:9:16:9 | try {...} ... | -| Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:9:9:16:9 | try {...} ... | -| Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | Finally.cs:9:9:16:9 | try {...} ... | -| Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | Finally.cs:9:9:16:9 | try {...} ... | -| Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | Finally.cs:32:13:39:13 | try {...} ... | -| Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | Finally.cs:32:13:39:13 | try {...} ... | -| Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | Finally.cs:32:13:39:13 | try {...} ... | -| Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | Finally.cs:32:13:39:13 | try {...} ... | -| Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | Finally.cs:21:9:51:9 | try {...} ... | +| CompileTimeOperators.cs:36:9:38:9 | [finally: goto] {...} | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | +| CompileTimeOperators.cs:37:13:37:40 | [finally: goto] call to method WriteLine | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | +| CompileTimeOperators.cs:37:13:37:41 | [finally: goto] ...; | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | +| CompileTimeOperators.cs:37:31:37:39 | [finally: goto] "Finally" | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | +| Finally.cs:14:9:16:9 | [finally: exception] {...} | Finally.cs:9:9:16:9 | try {...} ... | +| Finally.cs:15:13:15:40 | [finally: exception] call to method WriteLine | Finally.cs:9:9:16:9 | try {...} ... | +| Finally.cs:15:13:15:41 | [finally: exception] ...; | Finally.cs:9:9:16:9 | try {...} ... | +| Finally.cs:15:31:15:39 | [finally: exception] "Finally" | Finally.cs:9:9:16:9 | try {...} ... | +| Finally.cs:37:13:39:13 | [finally: exception] {...} | Finally.cs:32:13:39:13 | try {...} ... | +| Finally.cs:38:17:38:44 | [finally: exception] throw ...; | Finally.cs:32:13:39:13 | try {...} ... | +| Finally.cs:38:23:38:43 | [finally: exception] object creation of type Exception | Finally.cs:32:13:39:13 | try {...} ... | +| Finally.cs:38:37:38:42 | [finally: exception] "Boo!" | Finally.cs:32:13:39:13 | try {...} ... | +| Finally.cs:49:9:51:9 | [finally: exception] {...} | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:49:9:51:9 | [finally: return] {...} | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:21:9:51:9 | try {...} ... | +| Finally.cs:50:13:50:40 | [finally: exception] call to method WriteLine | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | Finally.cs:21:9:51:9 | try {...} ... | +| Finally.cs:50:13:50:41 | [finally: exception] ...; | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:50:13:50:41 | [finally: return] ...; | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | Finally.cs:21:9:51:9 | try {...} ... | +| Finally.cs:50:31:50:39 | [finally: exception] "Finally" | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:50:31:50:39 | [finally: return] "Finally" | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | Finally.cs:56:9:71:9 | try {...} ... | +| Finally.cs:69:9:71:9 | [finally: exception] {...} | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:69:9:71:9 | [finally: return] {...} | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:56:9:71:9 | try {...} ... | +| Finally.cs:70:13:70:40 | [finally: exception] call to method WriteLine | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | Finally.cs:56:9:71:9 | try {...} ... | +| Finally.cs:70:13:70:41 | [finally: exception] ...; | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:70:13:70:41 | [finally: return] ...; | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | Finally.cs:56:9:71:9 | try {...} ... | +| Finally.cs:70:31:70:39 | [finally: exception] "Finally" | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:70:31:70:39 | [finally: return] "Finally" | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:89:13:99:13 | [finally: break] {...} | Finally.cs:79:13:99:13 | try {...} ... | | Finally.cs:89:13:99:13 | [finally: continue] {...} | Finally.cs:79:13:99:13 | try {...} ... | @@ -677,351 +649,190 @@ finallyNode | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:79:13:99:13 | try {...} ... | | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:79:13:99:13 | try {...} ... | | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:96:17:98:17 | [finally(1): exception] {...} | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:97:21:97:21 | [finally(1): exception] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:21 | [finally: break] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:21 | [finally: return] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:97:21:97:23 | [finally(1): exception] ...-- | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:97:21:97:23 | [finally: break, finally(1): exception] ...-- | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:23 | [finally: break] ...-- | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception] ...-- | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:23 | [finally: continue] ...-- | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:97:21:97:23 | [finally: return, finally(1): exception] ...-- | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:23 | [finally: return] ...-- | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:97:21:97:24 | [finally(1): exception] ...; | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception] ...; | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:24 | [finally: break] ...; | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception] ...; | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:24 | [finally: continue] ...; | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | Finally.cs:90:17:98:17 | try {...} ... | +| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception] ...; | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:24 | [finally: return] ...; | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:113:9:118:9 | [finally: return] {...} | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:114:13:115:41 | [finally: exception] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:13:115:41 | [finally: return] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:114:17:114:36 | [false, finally: exception] !... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:114:19:114:23 | [finally: exception] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:114:19:114:23 | [finally: exception] this access | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:19:114:23 | [finally: return] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:19:114:23 | [finally: return] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:114:19:114:30 | [finally: exception] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:19:114:30 | [finally: return] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:114:19:114:35 | [finally: exception] ... == ... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:114:35:114:35 | [finally: exception] 0 | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:35:114:35 | [finally: return] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:115:17:115:40 | [finally: exception] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:115:17:115:41 | [finally: exception] ...; | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:115:35:115:39 | [finally: exception] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:115:35:115:39 | [finally: exception] this access | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:115:35:115:39 | [finally: return] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:115:35:115:39 | [finally: return] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:116:17:116:21 | [finally: exception] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:116:17:116:21 | [finally: exception] this access | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:17:116:21 | [finally: return] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:17:116:21 | [finally: return] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:116:17:116:28 | [finally: exception] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:17:116:28 | [finally: return] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:116:17:116:32 | [finally: exception] ... > ... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:116:32:116:32 | [finally: exception] 0 | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:32:116:32 | [finally: return] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:117:17:117:36 | [finally: exception] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:117:17:117:37 | [finally: exception] ...; | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | Finally.cs:105:9:118:9 | try {...} ... | +| Finally.cs:117:35:117:35 | [finally: exception] 1 | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:117:35:117:35 | [finally: return] 1 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:135:9:143:9 | try {...} ... | -| Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | Finally.cs:135:9:143:9 | try {...} ... | -| Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | Finally.cs:135:9:143:9 | try {...} ... | -| Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | Finally.cs:135:9:143:9 | try {...} ... | -| Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:265:9:273:9 | try {...} ... | +| Finally.cs:140:9:143:9 | [finally: exception] {...} | Finally.cs:135:9:143:9 | try {...} ... | +| Finally.cs:141:13:141:44 | [finally: exception] throw ...; | Finally.cs:135:9:143:9 | try {...} ... | +| Finally.cs:141:19:141:43 | [finally: exception] object creation of type ArgumentException | Finally.cs:135:9:143:9 | try {...} ... | +| Finally.cs:141:41:141:42 | [finally: exception] "" | Finally.cs:135:9:143:9 | try {...} ... | +| Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:156:13:168:13 | [finally: exception] try {...} ... | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:157:13:160:13 | [finally: exception] {...} | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:158:17:159:45 | [finally: exception] if (...) ... | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:158:21:158:24 | [finally: exception] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:158:21:158:31 | [finally: exception] access to property Length | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:158:21:158:36 | [finally: exception] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:159:21:159:45 | [finally: exception] throw ...; | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:159:27:159:44 | [finally: exception] object creation of type Exception | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:159:41:159:43 | [finally: exception] "1" | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:161:39:161:39 | [finally: exception, exception: Exception] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:161:39:161:39 | [finally: exception, exception: NullReferenceException] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:161:39:161:47 | [finally: exception, exception: Exception] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:161:39:161:47 | [finally: exception, exception: NullReferenceException] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:161:52:161:54 | [finally: exception, exception: Exception] "1" | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:161:52:161:54 | [finally: exception, exception: NullReferenceException] "1" | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:162:13:164:13 | [finally: exception] {...} | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:163:17:163:42 | [finally: exception] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:163:17:163:43 | [finally: exception] ...; | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:163:35:163:38 | [finally: exception] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:163:35:163:41 | [finally: exception] access to array element | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:163:40:163:40 | [finally: exception] 0 | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:165:13:168:13 | [finally: exception] catch {...} | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:166:13:168:13 | [finally: exception] {...} | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:167:17:167:37 | [finally: exception] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:167:17:167:38 | [finally: exception] ...; | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:167:35:167:36 | [finally: exception] "" | Finally.cs:149:9:169:9 | try {...} ... | +| Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:184:13:191:13 | [finally: exception, b1 (line 176): true] try {...} ... | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:185:13:187:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:186:17:186:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:190:17:190:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:190:25:190:47 | [finally: exception] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:178:9:192:9 | try {...} ... | +| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:197:9:212:9 | try {...} ... | +| Finally.cs:203:13:210:13 | [finally: exception] try {...} ... | Finally.cs:197:9:212:9 | try {...} ... | +| Finally.cs:204:13:206:13 | [finally: exception] {...} | Finally.cs:197:9:212:9 | try {...} ... | +| Finally.cs:205:17:205:47 | [finally: exception] if (...) ... | Finally.cs:197:9:212:9 | try {...} ... | +| Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | Finally.cs:197:9:212:9 | try {...} ... | +| Finally.cs:205:25:205:47 | [finally: exception] throw ...; | Finally.cs:197:9:212:9 | try {...} ... | +| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:197:9:212:9 | try {...} ... | +| Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:209:17:209:47 | [finally(1): exception] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:209:17:209:47 | [finally: exception, finally(1): exception] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:209:17:209:47 | [finally: exception] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:209:21:209:22 | [finally: exception, finally(1): exception] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:209:25:209:47 | [finally(1): exception] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:209:25:209:47 | [finally: exception, finally(1): exception] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:209:25:209:47 | [finally: exception] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | +| Finally.cs:211:13:211:16 | [finally: exception] this access | Finally.cs:197:9:212:9 | try {...} ... | +| Finally.cs:211:13:211:28 | [finally: exception] ... = ... | Finally.cs:197:9:212:9 | try {...} ... | +| Finally.cs:211:13:211:29 | [finally: exception] ...; | Finally.cs:197:9:212:9 | try {...} ... | +| Finally.cs:211:26:211:28 | [finally: exception] "0" | Finally.cs:197:9:212:9 | try {...} ... | +| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:237:13:253:13 | try {...} ... | +| Finally.cs:244:17:252:17 | [finally: exception] try {...} ... | Finally.cs:237:13:253:13 | try {...} ... | +| Finally.cs:245:17:248:17 | [finally: exception] {...} | Finally.cs:237:13:253:13 | try {...} ... | +| Finally.cs:246:21:247:47 | [finally: exception] if (...) ... | Finally.cs:237:13:253:13 | try {...} ... | +| Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | Finally.cs:237:13:253:13 | try {...} ... | +| Finally.cs:247:25:247:47 | [finally: exception] throw ...; | Finally.cs:237:13:253:13 | try {...} ... | +| Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:237:13:253:13 | try {...} ... | +| Finally.cs:250:17:252:17 | [finally(1): exception] {...} | Finally.cs:244:17:252:17 | try {...} ... | +| Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | Finally.cs:244:17:252:17 | try {...} ... | +| Finally.cs:250:17:252:17 | [finally: exception] {...} | Finally.cs:244:17:252:17 | try {...} ... | +| Finally.cs:251:21:251:54 | [finally(1): exception] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | +| Finally.cs:251:21:251:54 | [finally: exception, finally(1): exception] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | +| Finally.cs:251:21:251:54 | [finally: exception] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | +| Finally.cs:251:21:251:55 | [finally(1): exception] ...; | Finally.cs:244:17:252:17 | try {...} ... | +| Finally.cs:251:21:251:55 | [finally: exception, finally(1): exception] ...; | Finally.cs:244:17:252:17 | try {...} ... | +| Finally.cs:251:21:251:55 | [finally: exception] ...; | Finally.cs:244:17:252:17 | try {...} ... | +| Finally.cs:251:39:251:53 | [finally(1): exception] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | +| Finally.cs:251:39:251:53 | [finally: exception, finally(1): exception] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | +| Finally.cs:251:39:251:53 | [finally: exception] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | +| Finally.cs:257:9:259:9 | [finally: exception] {...} | Finally.cs:235:9:259:9 | try {...} ... | +| Finally.cs:258:13:258:46 | [finally: exception] call to method WriteLine | Finally.cs:235:9:259:9 | try {...} ... | +| Finally.cs:258:13:258:47 | [finally: exception] ...; | Finally.cs:235:9:259:9 | try {...} ... | +| Finally.cs:258:31:258:45 | [finally: exception] "Outer finally" | Finally.cs:235:9:259:9 | try {...} ... | +| Finally.cs:270:9:273:9 | [finally: exception] {...} | Finally.cs:265:9:273:9 | try {...} ... | +| Finally.cs:271:13:271:34 | [finally: exception] call to method WriteLine | Finally.cs:265:9:273:9 | try {...} ... | +| Finally.cs:271:13:271:35 | [finally: exception] ...; | Finally.cs:265:9:273:9 | try {...} ... | +| Finally.cs:271:31:271:33 | [finally: exception] "3" | Finally.cs:265:9:273:9 | try {...} ... | +| Finally.cs:272:13:272:13 | [finally: exception] access to parameter i | Finally.cs:265:9:273:9 | try {...} ... | +| Finally.cs:272:13:272:18 | [finally: exception] ... + ... | Finally.cs:265:9:273:9 | try {...} ... | +| Finally.cs:272:13:272:18 | [finally: exception] ... = ... | Finally.cs:265:9:273:9 | try {...} ... | +| Finally.cs:272:13:272:19 | [finally: exception] ...; | Finally.cs:265:9:273:9 | try {...} ... | +| Finally.cs:272:18:272:18 | [finally: exception] 3 | Finally.cs:265:9:273:9 | try {...} ... | | cflow.cs:274:9:276:9 | [finally: return] {...} | cflow.cs:268:9:276:9 | try {...} ... | | cflow.cs:275:13:275:41 | [finally: return] call to method WriteLine | cflow.cs:268:9:276:9 | try {...} ... | | cflow.cs:275:13:275:42 | [finally: return] ...; | cflow.cs:268:9:276:9 | try {...} ... | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Nodes.ql b/csharp/ql/test/library-tests/controlflow/graph/Nodes.ql index fb937bfbd9f..3f4ed835fc2 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Nodes.ql +++ b/csharp/ql/test/library-tests/controlflow/graph/Nodes.ql @@ -12,7 +12,7 @@ class MyFinallySplitControlFlowNode extends ElementNode { exists(Splitting::FinallySplitting::FinallySplitType type | type = this.getASplit().(FinallySplit).getType() | - not type instanceof SuccessorTypes::NormalSuccessor + not type instanceof DirectSuccessor ) } diff --git a/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected b/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected index b8a976a78a6..2c4b9de438e 100644 --- a/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected +++ b/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected @@ -45,9 +45,9 @@ | patterns.cs:110:25:110:25 | 0 | patterns.cs:110:22:110:26 | (..., ...) | semmle.label | successor | | patterns.cs:111:13:111:17 | ( ... ) | patterns.cs:111:13:111:17 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:111:13:111:17 | ( ... ) | patterns.cs:111:14:111:14 | 1 | semmle.label | match | -| patterns.cs:111:13:111:17 | [match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception(InvalidOperationException) | +| patterns.cs:111:13:111:17 | [match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception | | patterns.cs:111:13:111:17 | [match] { ... } | patterns.cs:111:23:111:23 | 0 | semmle.label | match | -| patterns.cs:111:13:111:17 | [no-match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception(InvalidOperationException) | +| patterns.cs:111:13:111:17 | [no-match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception | | patterns.cs:111:13:111:26 | ... => ... | patterns.cs:108:24:112:9 | ... switch { ... } | semmle.label | successor | | patterns.cs:111:14:111:14 | 1 | patterns.cs:111:13:111:17 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:111:14:111:14 | 1 | patterns.cs:111:16:111:16 | 0 | semmle.label | match | @@ -89,9 +89,9 @@ | patterns.cs:118:32:118:33 | access to local variable x2 | patterns.cs:118:28:118:34 | (..., ...) | semmle.label | successor | | patterns.cs:119:13:119:28 | ( ... ) | patterns.cs:119:13:119:28 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:119:13:119:28 | ( ... ) | patterns.cs:119:14:119:19 | Int32 x2 | semmle.label | match | -| patterns.cs:119:13:119:28 | [match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception(InvalidOperationException) | +| patterns.cs:119:13:119:28 | [match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception | | patterns.cs:119:13:119:28 | [match] { ... } | patterns.cs:119:34:119:34 | 0 | semmle.label | match | -| patterns.cs:119:13:119:28 | [no-match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception(InvalidOperationException) | +| patterns.cs:119:13:119:28 | [no-match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception | | patterns.cs:119:13:119:38 | ... => ... | patterns.cs:115:20:120:9 | ... switch { ... } | semmle.label | successor | | patterns.cs:119:14:119:19 | Int32 x2 | patterns.cs:119:13:119:28 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:119:14:119:19 | Int32 x2 | patterns.cs:119:22:119:27 | Int32 y2 | semmle.label | match | @@ -148,7 +148,7 @@ | patterns.cs:130:17:130:17 | 2 | patterns.cs:130:13:130:18 | [match] { ... } | semmle.label | match | | patterns.cs:130:17:130:17 | 2 | patterns.cs:130:13:130:18 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:130:23:130:23 | 2 | patterns.cs:130:13:130:23 | ... => ... | semmle.label | successor | -| patterns.cs:131:13:131:22 | (..., ...) | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception(InvalidOperationException) | +| patterns.cs:131:13:131:22 | (..., ...) | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception | | patterns.cs:131:13:131:22 | (..., ...) | patterns.cs:131:27:131:27 | 3 | semmle.label | match | | patterns.cs:131:13:131:27 | ... => ... | patterns.cs:126:17:132:9 | ... switch { ... } | semmle.label | successor | | patterns.cs:131:18:131:18 | Int32 x | patterns.cs:131:21:131:21 | _ | semmle.label | successor | @@ -162,9 +162,9 @@ | patterns.cs:136:17:143:13 | ... switch { ... } | patterns.cs:136:13:143:13 | ... = ... | semmle.label | successor | | patterns.cs:138:17:138:17 | 1 | patterns.cs:138:28:138:50 | object creation of type ArgumentException | semmle.label | match | | patterns.cs:138:17:138:17 | 1 | patterns.cs:139:17:139:17 | 2 | semmle.label | no-match | -| patterns.cs:138:22:138:50 | throw ... | patterns.cs:145:9:148:9 | [exception: ArgumentException] catch (...) {...} | semmle.label | exception(ArgumentException) | +| patterns.cs:138:22:138:50 | throw ... | patterns.cs:145:9:148:9 | [exception: ArgumentException] catch (...) {...} | semmle.label | exception | | patterns.cs:138:28:138:50 | object creation of type ArgumentException | patterns.cs:138:22:138:50 | throw ... | semmle.label | successor | -| patterns.cs:138:28:138:50 | object creation of type ArgumentException | patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | semmle.label | exception(Exception) | +| patterns.cs:138:28:138:50 | object creation of type ArgumentException | patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | semmle.label | exception | | patterns.cs:139:17:139:17 | 2 | patterns.cs:139:22:139:22 | 3 | semmle.label | match | | patterns.cs:139:17:139:17 | 2 | patterns.cs:140:17:140:24 | Object y | semmle.label | no-match | | patterns.cs:139:17:139:22 | ... => ... | patterns.cs:136:17:143:13 | ... switch { ... } | semmle.label | successor | @@ -187,16 +187,16 @@ | patterns.cs:142:17:142:24 | access to type MyStruct | patterns.cs:142:17:142:36 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:142:17:142:24 | access to type MyStruct | patterns.cs:142:31:142:32 | 10 | semmle.label | match | | patterns.cs:142:17:142:36 | [match] { ... } | patterns.cs:142:41:142:41 | 6 | semmle.label | match | -| patterns.cs:142:17:142:36 | [match] { ... } | patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | semmle.label | exception(InvalidOperationException) | -| patterns.cs:142:17:142:36 | [no-match] { ... } | patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | semmle.label | exception(InvalidOperationException) | +| patterns.cs:142:17:142:36 | [match] { ... } | patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | semmle.label | exception | +| patterns.cs:142:17:142:36 | [no-match] { ... } | patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | semmle.label | exception | | patterns.cs:142:17:142:41 | ... => ... | patterns.cs:136:17:143:13 | ... switch { ... } | semmle.label | successor | | patterns.cs:142:26:142:34 | [match] { ... } | patterns.cs:142:17:142:36 | [match] { ... } | semmle.label | match | | patterns.cs:142:26:142:34 | [no-match] { ... } | patterns.cs:142:17:142:36 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:142:31:142:32 | 10 | patterns.cs:142:26:142:34 | [match] { ... } | semmle.label | match | | patterns.cs:142:31:142:32 | 10 | patterns.cs:142:26:142:34 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:142:41:142:41 | 6 | patterns.cs:142:17:142:41 | ... => ... | semmle.label | successor | -| patterns.cs:145:9:148:9 | [exception: ArgumentException] catch (...) {...} | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception(ArgumentException) | -| patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception(Exception) | +| patterns.cs:145:9:148:9 | [exception: ArgumentException] catch (...) {...} | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception | +| patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception | | patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | patterns.cs:145:41:145:42 | [exception: Exception] InvalidOperationException ex | semmle.label | match | | patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | patterns.cs:145:41:145:42 | [exception: InvalidOperationException] InvalidOperationException ex | semmle.label | match | | patterns.cs:145:41:145:42 | [exception: Exception] InvalidOperationException ex | patterns.cs:146:9:148:9 | {...} | semmle.label | successor | diff --git a/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.cs b/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.cs index 9470b4536dc..109be4aa995 100644 --- a/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.cs +++ b/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.cs @@ -233,3 +233,33 @@ public interface InterfaceB { void Foo(A2 a, object o, bool cond); } + +public class A3 +{ + public virtual void M1(object o) + { + this.M2(o); + } + + public virtual void M2(object o) + { + Sink(o); // should not have flow + } + + public static void Sink(object o) + { + } +} + +public class A4 : A3 +{ + public override void M2(object o) + { + Sink(o); // should have flow + } + + private void CallM1() + { + base.M1(new object()); + } +} diff --git a/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected b/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected index dfe1a951b27..955202f6afd 100644 --- a/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected @@ -59,6 +59,10 @@ edges | CallSensitivityFlow.cs:187:13:187:13 | access to local variable o : Object | CallSensitivityFlow.cs:188:14:188:14 | access to local variable o | provenance | | | CallSensitivityFlow.cs:187:17:187:30 | call to method CallMOut : Object | CallSensitivityFlow.cs:187:13:187:13 | access to local variable o : Object | provenance | | | CallSensitivityFlow.cs:205:40:205:40 | o : Object | CallSensitivityFlow.cs:208:18:208:18 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:239:35:239:35 | o : Object | CallSensitivityFlow.cs:241:17:241:17 | access to parameter o : Object | provenance | | +| CallSensitivityFlow.cs:241:17:241:17 | access to parameter o : Object | CallSensitivityFlow.cs:256:36:256:36 | o : Object | provenance | | +| CallSensitivityFlow.cs:256:36:256:36 | o : Object | CallSensitivityFlow.cs:258:14:258:14 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:263:17:263:28 | object creation of type Object : Object | CallSensitivityFlow.cs:239:35:239:35 | o : Object | provenance | | nodes | CallSensitivityFlow.cs:7:38:7:38 | o : Object | semmle.label | o : Object | | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | semmle.label | access to parameter o : Object | @@ -132,6 +136,11 @@ nodes | CallSensitivityFlow.cs:188:14:188:14 | access to local variable o | semmle.label | access to local variable o | | CallSensitivityFlow.cs:205:40:205:40 | o : Object | semmle.label | o : Object | | CallSensitivityFlow.cs:208:18:208:18 | access to parameter o | semmle.label | access to parameter o | +| CallSensitivityFlow.cs:239:35:239:35 | o : Object | semmle.label | o : Object | +| CallSensitivityFlow.cs:241:17:241:17 | access to parameter o : Object | semmle.label | access to parameter o : Object | +| CallSensitivityFlow.cs:256:36:256:36 | o : Object | semmle.label | o : Object | +| CallSensitivityFlow.cs:258:14:258:14 | access to parameter o | semmle.label | access to parameter o | +| CallSensitivityFlow.cs:263:17:263:28 | object creation of type Object : Object | semmle.label | object creation of type Object : Object | subpaths | CallSensitivityFlow.cs:85:26:85:37 | object creation of type Object : Object | CallSensitivityFlow.cs:7:38:7:38 | o : Object | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | CallSensitivityFlow.cs:85:14:85:44 | call to method FlowThrough | | CallSensitivityFlow.cs:105:26:105:37 | object creation of type Object : Object | CallSensitivityFlow.cs:7:38:7:38 | o : Object | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | CallSensitivityFlow.cs:105:14:105:41 | call to method FlowThrough | @@ -156,3 +165,4 @@ subpaths | CallSensitivityFlow.cs:172:37:172:48 | object creation of type Object : Object | CallSensitivityFlow.cs:172:37:172:48 | object creation of type Object : Object | CallSensitivityFlow.cs:188:14:188:14 | access to local variable o | $@ | CallSensitivityFlow.cs:188:14:188:14 | access to local variable o | access to local variable o | | CallSensitivityFlow.cs:182:21:182:32 | object creation of type Object : Object | CallSensitivityFlow.cs:182:21:182:32 | object creation of type Object : Object | CallSensitivityFlow.cs:208:18:208:18 | access to parameter o | $@ | CallSensitivityFlow.cs:208:18:208:18 | access to parameter o | access to parameter o | | CallSensitivityFlow.cs:185:21:185:32 | object creation of type Object : Object | CallSensitivityFlow.cs:185:21:185:32 | object creation of type Object : Object | CallSensitivityFlow.cs:164:14:164:14 | access to parameter o | $@ | CallSensitivityFlow.cs:164:14:164:14 | access to parameter o | access to parameter o | +| CallSensitivityFlow.cs:263:17:263:28 | object creation of type Object : Object | CallSensitivityFlow.cs:263:17:263:28 | object creation of type Object : Object | CallSensitivityFlow.cs:258:14:258:14 | access to parameter o | $@ | CallSensitivityFlow.cs:258:14:258:14 | access to parameter o | access to parameter o | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index a87c1fea375..36e23003fcc 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -20882,24 +20882,33 @@ summary | System.Xml;XmlDictionaryReader;CreateDictionaryReader;(System.Xml.XmlReader);Argument[0];ReturnValue;value;dfc-generated | | System.Xml;XmlDictionaryReader;CreateMtomReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding[],System.String,System.Xml.XmlDictionaryReaderQuotas,System.Int32,System.Xml.OnXmlDictionaryReaderClose);Argument[7];Argument[7].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlDictionaryReader;CreateMtomReader;(System.IO.Stream,System.Text.Encoding[],System.String,System.Xml.XmlDictionaryReaderQuotas,System.Int32,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | -| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | -| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[0].Element;ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas);Argument[0].Element;ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Xml.XmlDictionaryReaderQuotas);Argument[0].Element;ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[0];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[3];Argument[3].Parameter[delegate-self];value;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Xml.XmlDictionaryReaderQuotas);Argument[0];ReturnValue;taint;manual | | System.Xml;XmlDictionaryReader;GetAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];Argument[0];taint;df-generated | | System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlDictionaryReader;ReadContentAsBase64;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadContentAsBinHex;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadContentAsBinHex;(System.Int32);Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadContentAsChars;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | | System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];Argument[0];taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadContentAsString;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadContentAsString;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.String[],System.Int32);Argument[0].Element;ReturnValue;value;dfc-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.Xml.XmlDictionaryString[],System.Int32);Argument[0].Element.Property[System.Xml.XmlDictionaryString.Value];ReturnValue;value;dfc-generated | | System.Xml;XmlDictionaryReader;ReadContentAsUniqueId;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadElementContentAsString;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadElementContentAsBase64;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadElementContentAsBinHex;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadElementContentAsString;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlDictionaryReader;ReadElementContentAsUniqueId;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadString;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadString;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlDictionaryReader;ReadString;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;get_Quotas;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryString;ToString;();Argument[this].SyntheticField[System.Xml.XmlDictionaryString._value];ReturnValue;value;dfc-generated | @@ -21261,30 +21270,28 @@ summary | System.Xml;XmlNodeList;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Xml;XmlNodeList;Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNodeList;get_ItemOf;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlNodeReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlNodeReader;GetNamespacesInScope;(System.Xml.XmlNamespaceScope);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNodeReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;XmlNodeReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-manual | | System.Xml;XmlNodeReader;LookupPrefix;(System.String);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNodeReader;MoveToAttribute;(System.String);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlNodeReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlNodeReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlNodeReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlNodeReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlNodeReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;dfc-generated | -| System.Xml;XmlNodeReader;ReadString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;ReadString;();Argument[this];ReturnValue;taint;dfc-generated | +| System.Xml;XmlNodeReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlNodeReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlNodeReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlNodeReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlNodeReader;ReadString;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlNodeReader;XmlNodeReader;(System.Xml.XmlNode);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlNodeReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;get_LocalName;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;get_Name;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;get_NameTable;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;get_Prefix;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;get_SchemaInfo;();Argument[this];ReturnValue;value;dfc-generated | -| System.Xml;XmlNodeReader;get_Value;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlNodeReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;get_LocalName;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;get_Name;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;get_NameTable;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;get_Prefix;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;get_SchemaInfo;();Argument[this];ReturnValue;value;dfc-manual | +| System.Xml;XmlNodeReader;get_Value;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlNodeReader;get_XmlLang;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNotation;CloneNode;(System.Boolean);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNotation;WriteContentTo;(System.Xml.XmlWriter);Argument[this];Argument[0];taint;df-generated | @@ -21337,60 +21344,58 @@ summary | System.Xml;XmlReader;Create;(System.String,System.Xml.XmlReaderSettings);Argument[0];ReturnValue;taint;manual | | System.Xml;XmlReader;Create;(System.String,System.Xml.XmlReaderSettings,System.Xml.XmlParserContext);Argument[0];ReturnValue;taint;manual | | System.Xml;XmlReader;Create;(System.Xml.XmlReader,System.Xml.XmlReaderSettings);Argument[0];ReturnValue;taint;manual | -| System.Xml;XmlReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;GetValueAsync;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;XmlReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;GetValueAsync;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-manual | | System.Xml;XmlReader;MoveToAttribute;(System.String);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsObject;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsStringAsync;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsObject;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsObjectAsync;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadContentAsString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsStringAsync;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | | System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];Argument[1];taint;df-generated | | System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsObject;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsObject;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsString;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementString;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementString;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadInnerXml;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadOuterXml;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadSubtree;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Item;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Item;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_LocalName;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Name;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_NameTable;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Prefix;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_SchemaInfo;();Argument[this];ReturnValue;value;dfc-generated | +| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsObject;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsObject;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsString;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementString;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementString;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadInnerXml;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadInnerXmlAsync;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadOuterXml;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadOuterXmlAsync;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadSubtree;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadValueChunk;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadValueChunkAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Item;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Item;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_LocalName;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Name;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_NameTable;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Prefix;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_SchemaInfo;();Argument[this];ReturnValue;value;dfc-manual | | System.Xml;XmlReader;get_Settings;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Value;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlReader;get_Value;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlReader;get_XmlLang;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlReaderSettings;add_ValidationEventHandler;(System.Xml.Schema.ValidationEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlReaderSettings;remove_ValidationEventHandler;(System.Xml.Schema.ValidationEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -21430,43 +21435,44 @@ summary | System.Xml;XmlText;get_ParentNode;();Argument[this];ReturnValue;taint;manual | | System.Xml;XmlText;get_PreviousText;();Argument[this];ReturnValue;taint;manual | | System.Xml;XmlText;get_Value;();Argument[this];ReturnValue;taint;manual | -| System.Xml;XmlTextReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;GetNamespacesInScope;(System.Xml.XmlNamespaceScope);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;GetRemainder;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlTextReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;GetNamespacesInScope;(System.Xml.XmlNamespaceScope);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;GetRemainder;();Argument[this];ReturnValue;taint;manual | | System.Xml;XmlTextReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;XmlTextReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-manual | | System.Xml;XmlTextReader;LookupPrefix;(System.String);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlTextReader;MoveToAttribute;(System.String);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;dfc-generated | -| System.Xml;XmlTextReader;ReadString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;ReadString;();Argument[this];ReturnValue;taint;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];taint;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.Stream,System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];value;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.TextReader,System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];value;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];taint;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._nameTable];value;dfc-generated | -| System.Xml;XmlTextReader;get_BaseURI;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];ReturnValue;value;df-generated | -| System.Xml;XmlTextReader;get_BaseURI;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];ReturnValue;value;dfc-generated | -| System.Xml;XmlTextReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_BaseURI;();Argument[this];ReturnValue;taint;dfc-generated | +| System.Xml;XmlTextReader;ReadBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadChars;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.TextReader);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.TextReader,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.Stream);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.Stream,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.TextReader);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.TextReader,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlTextReader;get_Encoding;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_LocalName;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_Name;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_NameTable;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._nameTable];ReturnValue;value;df-generated | -| System.Xml;XmlTextReader;get_NameTable;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._nameTable];ReturnValue;value;dfc-generated | -| System.Xml;XmlTextReader;get_NameTable;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_NameTable;();Argument[this];ReturnValue;taint;dfc-generated | -| System.Xml;XmlTextReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_Prefix;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_Value;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlTextReader;get_LocalName;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;get_Name;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;get_NameTable;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;get_Prefix;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;get_Value;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlTextReader;get_XmlLang;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlTextReader;set_XmlResolver;(System.Xml.XmlResolver);Argument[0];Argument[this];taint;df-generated | | System.Xml;XmlTextWriter;LookupPrefix;(System.String);Argument[this];ReturnValue;taint;df-generated | @@ -21541,37 +21547,35 @@ summary | System.Xml;XmlUrlResolver;ResolveUri;(System.Uri,System.String);Argument[1];ReturnValue;taint;dfc-generated | | System.Xml;XmlUrlResolver;set_Credentials;(System.Net.ICredentials);Argument[0];Argument[this];taint;df-generated | | System.Xml;XmlUrlResolver;set_Proxy;(System.Net.IWebProxy);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlValidatingReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlValidatingReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlValidatingReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlValidatingReader;GetNamespacesInScope;(System.Xml.XmlNamespaceScope);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;XmlValidatingReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-manual | | System.Xml;XmlValidatingReader;LookupPrefix;(System.String);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;MoveToAttribute;(System.String);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;dfc-generated | -| System.Xml;XmlValidatingReader;ReadString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;ReadString;();Argument[this];ReturnValue;taint;dfc-generated | +| System.Xml;XmlValidatingReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlValidatingReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlValidatingReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlValidatingReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlValidatingReader;ReadString;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlValidatingReader;ReadTypedValue;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;XmlValidatingReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | | System.Xml;XmlValidatingReader;XmlValidatingReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | | System.Xml;XmlValidatingReader;XmlValidatingReader;(System.Xml.XmlReader);Argument[0];Argument[this];taint;df-generated | | System.Xml;XmlValidatingReader;add_ValidationEventHandler;(System.Xml.Schema.ValidationEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.Xml;XmlValidatingReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlValidatingReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlValidatingReader;get_Encoding;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;get_LocalName;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;get_Name;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;get_NameTable;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;get_Prefix;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlValidatingReader;get_LocalName;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlValidatingReader;get_Name;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlValidatingReader;get_NameTable;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlValidatingReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlValidatingReader;get_Prefix;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlValidatingReader;get_Reader;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;get_SchemaType;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;get_Schemas;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;get_Value;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlValidatingReader;get_Value;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlValidatingReader;get_XmlLang;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;remove_ValidationEventHandler;(System.Xml.Schema.ValidationEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlWhitespace;CloneNode;(System.Boolean);Argument[this];ReturnValue;taint;df-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index ef56fb2f1e2..25ac85e9548 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -16210,17 +16210,28 @@ | System.Xml;XmlDictionaryReader;CreateDictionaryReader;(System.Xml.XmlReader);Argument[0];ReturnValue;value;dfc-generated | | System.Xml;XmlDictionaryReader;CreateMtomReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding[],System.String,System.Xml.XmlDictionaryReaderQuotas,System.Int32,System.Xml.OnXmlDictionaryReaderClose);Argument[7];Argument[7].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlDictionaryReader;CreateMtomReader;(System.IO.Stream,System.Text.Encoding[],System.String,System.Xml.XmlDictionaryReaderQuotas,System.Int32,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | -| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | -| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[0].Element;ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas);Argument[0].Element;ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Xml.XmlDictionaryReaderQuotas);Argument[0].Element;ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[0];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[3];Argument[3].Parameter[delegate-self];value;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Xml.XmlDictionaryReaderQuotas);Argument[0];ReturnValue;taint;manual | | System.Xml;XmlDictionaryReader;GetAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];Argument[0];taint;df-generated | | System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];Argument[1];taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadContentAsBase64;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadContentAsBinHex;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadContentAsBinHex;(System.Int32);Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadContentAsChars;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | | System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];Argument[0];taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];Argument[1];taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.String[],System.Int32);Argument[0].Element;ReturnValue;value;dfc-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.Xml.XmlDictionaryString[],System.Int32);Argument[0].Element.Property[System.Xml.XmlDictionaryString.Value];ReturnValue;value;dfc-generated | | System.Xml;XmlDictionaryReader;ReadContentAsUniqueId;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadElementContentAsBase64;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadElementContentAsBinHex;();Argument[this];ReturnValue;taint;manual | | System.Xml;XmlDictionaryReader;ReadElementContentAsUniqueId;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;ReadString;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;get_Quotas;();Argument[this];ReturnValue;taint;df-generated | @@ -16503,8 +16514,6 @@ | System.Xml;XmlNodeChangedEventHandler;BeginInvoke;(System.Object,System.Xml.XmlNodeChangedEventArgs,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlNodeList;Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNodeList;get_ItemOf;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;dfc-generated | | System.Xml;XmlNodeReader;XmlNodeReader;(System.Xml.XmlNode);Argument[0].Element;Argument[this];taint;df-generated | | System.Xml;XmlNotation;get_PublicId;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNotation;get_SystemId;();Argument[this];ReturnValue;taint;df-generated | @@ -16539,60 +16548,58 @@ | System.Xml;XmlReader;Create;(System.String,System.Xml.XmlReaderSettings);Argument[0];ReturnValue;taint;manual | | System.Xml;XmlReader;Create;(System.String,System.Xml.XmlReaderSettings,System.Xml.XmlParserContext);Argument[0];ReturnValue;taint;manual | | System.Xml;XmlReader;Create;(System.Xml.XmlReader,System.Xml.XmlReaderSettings);Argument[0];ReturnValue;taint;manual | -| System.Xml;XmlReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;GetValueAsync;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;XmlReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;GetValueAsync;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-manual | | System.Xml;XmlReader;MoveToAttribute;(System.String);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsObject;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsStringAsync;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsObject;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsObjectAsync;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadContentAsString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsStringAsync;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | | System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];Argument[1];taint;df-generated | | System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsObject;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsObject;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsString;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementString;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementString;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadInnerXml;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadOuterXml;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadSubtree;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Item;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Item;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_LocalName;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Name;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_NameTable;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Prefix;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_SchemaInfo;();Argument[this];ReturnValue;value;dfc-generated | +| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsObject;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsObject;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsString;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementString;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementString;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadInnerXml;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadInnerXmlAsync;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadOuterXml;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadOuterXmlAsync;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadSubtree;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadValueChunk;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadValueChunkAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Item;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Item;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_LocalName;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Name;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_NameTable;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Prefix;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_SchemaInfo;();Argument[this];ReturnValue;value;dfc-manual | | System.Xml;XmlReader;get_Settings;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Value;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlReader;get_Value;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlReader;get_XmlLang;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlReaderSettings;add_ValidationEventHandler;(System.Xml.Schema.ValidationEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlReaderSettings;remove_ValidationEventHandler;(System.Xml.Schema.ValidationEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -16608,21 +16615,25 @@ | System.Xml;XmlSecureResolver;GetEntityAsync;(System.Uri,System.String,System.Type);Argument[0];ReturnValue.Property[System.Threading.Tasks.Task`1.Result];taint;df-generated | | System.Xml;XmlSecureResolver;GetEntityAsync;(System.Uri,System.String,System.Type);Argument[0];ReturnValue.Property[System.Threading.Tasks.Task`1.Result];taint;dfc-generated | | System.Xml;XmlText;SplitText;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;GetRemainder;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];taint;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.Stream,System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];value;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.TextReader,System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];value;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];taint;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._nameTable];value;dfc-generated | -| System.Xml;XmlTextReader;get_BaseURI;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];ReturnValue;value;df-generated | -| System.Xml;XmlTextReader;get_BaseURI;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];ReturnValue;value;dfc-generated | +| System.Xml;XmlTextReader;GetNamespacesInScope;(System.Xml.XmlNamespaceScope);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;GetRemainder;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlTextReader;ReadBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadChars;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.TextReader);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.TextReader,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.Stream);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.Stream,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.TextReader);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.TextReader,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | | System.Xml;XmlTextReader;get_Encoding;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_NameTable;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._nameTable];ReturnValue;value;df-generated | -| System.Xml;XmlTextReader;get_NameTable;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._nameTable];ReturnValue;value;dfc-generated | | System.Xml;XmlTextReader;set_XmlResolver;(System.Xml.XmlResolver);Argument[0];Argument[this];taint;df-generated | | System.Xml;XmlTextWriter;WriteDocType;(System.String,System.String,System.String,System.String);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextWriter._textWriter];taint;df-generated | | System.Xml;XmlTextWriter;WriteDocType;(System.String,System.String,System.String,System.String);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextWriter._textWriter];taint;dfc-generated | @@ -16653,8 +16664,6 @@ | System.Xml;XmlTextWriter;get_BaseStream;();Argument[this].SyntheticField[System.Xml.XmlTextWriter._textWriter].Property[System.IO.StreamWriter.BaseStream];ReturnValue;value;dfc-generated | | System.Xml;XmlUrlResolver;GetEntity;(System.Uri,System.String,System.Type);Argument[0].Property[System.Uri.LocalPath];ReturnValue;taint;dfc-generated | | System.Xml;XmlUrlResolver;set_Proxy;(System.Net.IWebProxy);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;dfc-generated | | System.Xml;XmlValidatingReader;ReadTypedValue;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;XmlValidatingReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | | System.Xml;XmlValidatingReader;XmlValidatingReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected index 8d0e2b8261d..7fa4581f5aa 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected @@ -35,7 +35,7 @@ | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | -| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | +| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception] SSA def(i) | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | | Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected index 272db29e6f4..02e4624488e 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected @@ -35,7 +35,7 @@ | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | ... = ... | | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | b | | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | -| Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | +| Consistency.cs:15:17:15:21 | [finally: exception] SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:9:25:30 | call to method Out | | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:25:9:25:30 | call to method Out | | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | ... = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected index 3dfc82d27ad..4a2158c6736 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected @@ -15,7 +15,7 @@ | Capture.cs:212:30:212:35 | exited | Capture.cs:212:30:212:71 | SSA def(exited) | Capture.cs:212:30:212:71 | EventHandler exited = ... | | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | ... = ... | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | -| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | +| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception] SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:29:25:29 | Consistency c | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | ... = ... | | Consistency.cs:44:11:44:11 | s | Consistency.cs:44:11:44:11 | SSA def(s) | Consistency.cs:44:11:44:11 | S s | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected index 9daa4269711..cc6a0e59546 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected @@ -35,7 +35,7 @@ | Capture.cs:212:30:212:35 | exited | Capture.cs:212:30:212:71 | SSA def(exited) | Capture.cs:213:29:213:34 | access to local variable exited | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:11:17:11:17 | access to parameter b | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:16:17:16:17 | access to local variable i | -| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:16:17:16:17 | access to local variable i | +| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception] SSA def(i) | Consistency.cs:16:17:16:17 | access to local variable i | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:26:13:26:13 | access to local variable c | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:27:13:27:13 | access to local variable c | | Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:26:13:26:19 | access to field Field | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected index d0e6b073f01..1219abdfe45 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected @@ -35,7 +35,7 @@ | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | SSA def(j) | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | SSA param(b) | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:15:17:15:21 | SSA def(i) | -| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | +| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception] SSA def(i) | Consistency.cs:15:17:15:21 | [finally: exception] SSA def(i) | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:29:25:29 | SSA def(c) | | Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | SSA def(c) | diff --git a/csharp/ql/test/library-tests/goto/Goto1.expected b/csharp/ql/test/library-tests/goto/Goto1.expected index e6c124726a3..0baaf5ef723 100644 --- a/csharp/ql/test/library-tests/goto/Goto1.expected +++ b/csharp/ql/test/library-tests/goto/Goto1.expected @@ -7,7 +7,7 @@ | goto.cs:5:5:20:5 | {...} | goto.cs:6:9:8:9 | {...} | semmle.label | successor | | goto.cs:6:9:8:9 | {...} | goto.cs:7:13:7:14 | s1: | semmle.label | successor | | goto.cs:7:13:7:14 | s1: | goto.cs:7:17:7:24 | goto ...; | semmle.label | successor | -| goto.cs:7:17:7:24 | goto ...; | goto.cs:9:9:9:10 | s2: | semmle.label | goto(s2) | +| goto.cs:7:17:7:24 | goto ...; | goto.cs:9:9:9:10 | s2: | semmle.label | goto | | goto.cs:9:9:9:10 | s2: | goto.cs:9:13:9:27 | ... ...; | semmle.label | successor | | goto.cs:9:13:9:27 | ... ...; | goto.cs:9:24:9:26 | "5" | semmle.label | successor | | goto.cs:9:20:9:26 | String s = ... | goto.cs:10:9:18:9 | switch (...) {...} | semmle.label | successor | @@ -18,24 +18,24 @@ | goto.cs:12:18:12:21 | null | goto.cs:12:24:12:25 | s3: | semmle.label | match | | goto.cs:12:18:12:21 | null | goto.cs:13:13:13:21 | case ...: | semmle.label | no-match | | goto.cs:12:24:12:25 | s3: | goto.cs:12:38:12:40 | "1" | semmle.label | successor | -| goto.cs:12:28:12:41 | goto case ...; | goto.cs:13:13:13:21 | case ...: | semmle.label | goto(1) | +| goto.cs:12:28:12:41 | goto case ...; | goto.cs:13:13:13:21 | case ...: | semmle.label | goto | | goto.cs:12:38:12:40 | "1" | goto.cs:12:28:12:41 | goto case ...; | semmle.label | successor | | goto.cs:13:13:13:21 | case ...: | goto.cs:13:18:13:20 | "1" | semmle.label | successor | | goto.cs:13:18:13:20 | "1" | goto.cs:13:23:13:24 | s4: | semmle.label | match | | goto.cs:13:18:13:20 | "1" | goto.cs:14:13:14:21 | case ...: | semmle.label | no-match | | goto.cs:13:23:13:24 | s4: | goto.cs:13:37:13:39 | "2" | semmle.label | successor | -| goto.cs:13:27:13:40 | goto case ...; | goto.cs:14:13:14:21 | case ...: | semmle.label | goto(2) | +| goto.cs:13:27:13:40 | goto case ...; | goto.cs:14:13:14:21 | case ...: | semmle.label | goto | | goto.cs:13:37:13:39 | "2" | goto.cs:13:27:13:40 | goto case ...; | semmle.label | successor | | goto.cs:14:13:14:21 | case ...: | goto.cs:14:18:14:20 | "2" | semmle.label | successor | | goto.cs:14:18:14:20 | "2" | goto.cs:14:23:14:24 | s5: | semmle.label | match | | goto.cs:14:18:14:20 | "2" | goto.cs:15:13:15:21 | case ...: | semmle.label | no-match | | goto.cs:14:23:14:24 | s5: | goto.cs:14:27:14:34 | goto ...; | semmle.label | successor | -| goto.cs:14:27:14:34 | goto ...; | goto.cs:9:9:9:10 | s2: | semmle.label | goto(s2) | +| goto.cs:14:27:14:34 | goto ...; | goto.cs:9:9:9:10 | s2: | semmle.label | goto | | goto.cs:15:13:15:21 | case ...: | goto.cs:15:18:15:20 | "3" | semmle.label | successor | | goto.cs:15:18:15:20 | "3" | goto.cs:15:23:15:24 | s6: | semmle.label | match | | goto.cs:15:18:15:20 | "3" | goto.cs:16:13:16:21 | case ...: | semmle.label | no-match | | goto.cs:15:23:15:24 | s6: | goto.cs:15:27:15:39 | goto default; | semmle.label | successor | -| goto.cs:15:27:15:39 | goto default; | goto.cs:17:13:17:20 | default: | semmle.label | goto(default) | +| goto.cs:15:27:15:39 | goto default; | goto.cs:17:13:17:20 | default: | semmle.label | goto | | goto.cs:16:13:16:21 | case ...: | goto.cs:16:18:16:20 | "4" | semmle.label | successor | | goto.cs:16:18:16:20 | "4" | goto.cs:16:23:16:24 | s7: | semmle.label | match | | goto.cs:16:18:16:20 | "4" | goto.cs:17:13:17:20 | default: | semmle.label | no-match | @@ -43,7 +43,7 @@ | goto.cs:16:27:16:32 | break; | goto.cs:19:9:19:10 | s9: | semmle.label | break | | goto.cs:17:13:17:20 | default: | goto.cs:17:22:17:23 | s8: | semmle.label | successor | | goto.cs:17:22:17:23 | s8: | goto.cs:17:36:17:39 | null | semmle.label | successor | -| goto.cs:17:26:17:40 | goto case ...; | goto.cs:12:13:12:22 | case ...: | semmle.label | goto(null) | +| goto.cs:17:26:17:40 | goto case ...; | goto.cs:12:13:12:22 | case ...: | semmle.label | goto | | goto.cs:17:36:17:39 | null | goto.cs:17:26:17:40 | goto case ...; | semmle.label | successor | | goto.cs:19:9:19:10 | s9: | goto.cs:19:12:19:12 | ; | semmle.label | successor | | goto.cs:19:12:19:12 | ; | goto.cs:4:17:4:20 | exit Main (normal) | semmle.label | successor | diff --git a/docs/codeql/ql-language-reference/expressions.rst b/docs/codeql/ql-language-reference/expressions.rst index 5c73681f7aa..327cabb6181 100644 --- a/docs/codeql/ql-language-reference/expressions.rst +++ b/docs/codeql/ql-language-reference/expressions.rst @@ -625,7 +625,7 @@ Then the evaluation of the ``depth`` predicate proceeds as follows: +-----------+--------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | **Stage** | **depth** | **Comments** | +===========+============================================+==========================================================================================================================================================================+ -| 0 |   | We always begin with the empty set. | +| 0 | | We always begin with the empty set. | +-----------+--------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 1 | ``(0, b), (0, d), (0, e)`` | The nodes with no children have depth 0. The recursive step for **a** and **c** fails to produce a value, since some of their children do not have values for ``depth``. | +-----------+--------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/go/codeql-extractor.yml b/go/codeql-extractor.yml index 49c8c75232f..af9fca0462f 100644 --- a/go/codeql-extractor.yml +++ b/go/codeql-extractor.yml @@ -9,6 +9,8 @@ column_kind: "utf8" build_modes: - autobuild - manual +default_queries: + - codeql/go-queries github_api_languages: - Go scc_languages: diff --git a/go/old-change-notes/2020-10-01-gomod-extraction.md b/go/old-change-notes/2020-10-01-gomod-extraction.md index ca0c0c72d50..a975a15973a 100644 --- a/go/old-change-notes/2020-10-01-gomod-extraction.md +++ b/go/old-change-notes/2020-10-01-gomod-extraction.md @@ -1,2 +1,2 @@ lgtm,codescanning -* The extractor now only extracts go.mod files belonging to extracted packages. In particular, vendored go.mod files will no longer be extracted unless the vendored package is explicitly passed to the extractor. This will remove unexpected `GoModExpr` and similar expressions seen by queries. +* The extractor now only extracts go.mod files belonging to extracted packages. In particular, vendored go.mod files will no longer be extracted unless the vendored package is explicitly passed to the extractor. This will remove unexpected `GoModExpr` and similar expressions seen by queries. diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 596a873b2c5..c30f8de8bc9 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.30 + +No user-facing changes. + ## 1.0.29 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.30.md b/go/ql/consistency-queries/change-notes/released/1.0.30.md new file mode 100644 index 00000000000..cb2cf6d0a27 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.30.md @@ -0,0 +1,3 @@ +## 1.0.30 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index 8751a216238..f04640951de 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.29 +lastReleaseVersion: 1.0.30 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 2cac181bfb5..574d10a1752 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.30-dev +version: 1.0.31-dev groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 0ddd2c37449..686ac94e11b 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.3.3 + +No user-facing changes. + ## 4.3.2 No user-facing changes. diff --git a/go/ql/lib/change-notes/2025-07-15-path-injection-sanitizers.md b/go/ql/lib/change-notes/2025-07-15-path-injection-sanitizers.md new file mode 100644 index 00000000000..004eb973de3 --- /dev/null +++ b/go/ql/lib/change-notes/2025-07-15-path-injection-sanitizers.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* The second argument of the `CreateTemp` function, from the `os` package, is no longer a path-injection sink due to proper sanitization by Go. +* The query "Uncontrolled data used in path expression" (`go/path-injection`) now detects sanitizing a path by adding `os.PathSeparator` or `\` to the beginning. \ No newline at end of file diff --git a/go/ql/lib/change-notes/released/4.3.3.md b/go/ql/lib/change-notes/released/4.3.3.md new file mode 100644 index 00000000000..d6710bacd7f --- /dev/null +++ b/go/ql/lib/change-notes/released/4.3.3.md @@ -0,0 +1,3 @@ +## 4.3.3 + +No user-facing changes. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 5b8421b639f..d7b7294771f 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.3.2 +lastReleaseVersion: 4.3.3 diff --git a/go/ql/lib/ext/os.model.yml b/go/ql/lib/ext/os.model.yml index b4f074146b7..7d2070b53ba 100644 --- a/go/ql/lib/ext/os.model.yml +++ b/go/ql/lib/ext/os.model.yml @@ -28,7 +28,7 @@ extensions: - ["os", "", False, "ReadDir", "", "", "Argument[0]", "path-injection", "manual"] - ["os", "", False, "ReadFile", "", "", "Argument[0]", "path-injection", "manual"] - ["os", "", False, "MkdirTemp", "", "", "Argument[0..1]", "path-injection", "manual"] - - ["os", "", False, "CreateTemp", "", "", "Argument[0..1]", "path-injection", "manual"] + - ["os", "", False, "CreateTemp", "", "", "Argument[0]", "path-injection", "manual"] - ["os", "", False, "WriteFile", "", "", "Argument[0]", "path-injection", "manual"] # command-injection - ["os", "", False, "StartProcess", "", "", "Argument[0]", "command-injection", "manual"] diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 2658d54432f..8c172af1e97 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 4.3.3-dev +version: 4.3.4-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/lib/semmle/go/Architectures.qll b/go/ql/lib/semmle/go/Architectures.qll index e509de4bc68..bb4face2407 100644 --- a/go/ql/lib/semmle/go/Architectures.qll +++ b/go/ql/lib/semmle/go/Architectures.qll @@ -28,7 +28,7 @@ class Architecture extends string { } /** - * Gets the integer and pointer type width for this architecture. + * Gets the integer and pointer type width for this architecture. * * As of the time of writing, this appears to always be identical -- there aren't * Go architectures with 64-bit pointers but 32-bit ints, for example. diff --git a/go/ql/lib/semmle/go/StringOps.qll b/go/ql/lib/semmle/go/StringOps.qll index 351617abf9d..3463e4fdf87 100644 --- a/go/ql/lib/semmle/go/StringOps.qll +++ b/go/ql/lib/semmle/go/StringOps.qll @@ -306,11 +306,12 @@ module StringOps { */ class StringFormatCall extends DataFlow::CallNode { string fmt; - Range f; StringFormatCall() { - this = f.getACall() and - fmt = this.getArgument(f.getFormatStringIndex()).getStringValue() and + exists(Range f | + this = f.getACall() and + fmt = this.getArgument(f.getFormatStringIndex()).getStringValue() + ) and fmt.regexpMatch(getFormatComponentRegex() + "*") } diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll index a770f047d65..20a147a6454 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll @@ -994,7 +994,7 @@ module Public { class ComponentReadNode extends ReadNode { override IR::ComponentReadInstruction insn; - /** Gets the data-flow node representing the base from which the field or element is read. */ + /** Gets the data-flow node representing the base from which the field or element is read. */ Node getBase() { result = DataFlow::instructionNode(insn.getBase()) } } diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll index 2cd1bbcc747..14ff455646c 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll @@ -367,7 +367,7 @@ module BarrierGuard { } /** - * Holds if `guard` marks a point in the control-flow graph where this node + * Holds if `guard` marks a point in the control-flow graph where `g` * is known to validate `nd`, which is represented by `ap`. * * This predicate exists to enforce a good join order in `getAGuardedNode`. @@ -378,7 +378,7 @@ module BarrierGuard { } /** - * Holds if `guard` marks a point in the control-flow graph where this node + * Holds if `guard` marks a point in the control-flow graph where `g` * is known to validate `nd`. */ private predicate guards(Node g, ControlFlow::ConditionGuardNode guard, Node nd) { diff --git a/go/ql/lib/semmle/go/frameworks/Beego.qll b/go/ql/lib/semmle/go/frameworks/Beego.qll index a9e296a1f97..952958cebf0 100644 --- a/go/ql/lib/semmle/go/frameworks/Beego.qll +++ b/go/ql/lib/semmle/go/frameworks/Beego.qll @@ -109,7 +109,7 @@ module Beego { override string getAContentType() { // Super-method provides content-types for `Body`, which requires us to search - // for `ContentType` and `Header` calls against the same `BeegoOutput` instance + // for `ContentType` and `Header` calls against the same `BeegoOutput` instance result = super.getAContentType() or // Specifically describe methods that set the content-type and body in one operation: diff --git a/go/ql/lib/semmle/go/security/TaintedPathCustomizations.qll b/go/ql/lib/semmle/go/security/TaintedPathCustomizations.qll index 39db60de483..747f2ab0d08 100644 --- a/go/ql/lib/semmle/go/security/TaintedPathCustomizations.qll +++ b/go/ql/lib/semmle/go/security/TaintedPathCustomizations.qll @@ -87,7 +87,7 @@ module TaintedPath { exists(DataFlow::CallNode cleanCall, StringOps::Concatenation concatNode | cleanCall = any(Function f | f.hasQualifiedName("path/filepath", "Clean")).getACall() and concatNode = cleanCall.getArgument(0) and - concatNode.getOperand(0).asExpr().(StringLit).getValue() = "/" and + concatNode.getOperand(0).getStringValue().prefix(1) = ["/", "\\"] and this = cleanCall.getResult() ) } diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index f86e390b56d..7ec3a3eab64 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.4.4 + +No user-facing changes. + ## 1.4.3 No user-facing changes. diff --git a/go/ql/src/InconsistentCode/MissingErrorCheck.qhelp b/go/ql/src/InconsistentCode/MissingErrorCheck.qhelp index d542a728cfe..0d5610e1391 100644 --- a/go/ql/src/InconsistentCode/MissingErrorCheck.qhelp +++ b/go/ql/src/InconsistentCode/MissingErrorCheck.qhelp @@ -22,7 +22,7 @@ the returned pointer.

-

The corrected version of user checks err before using ptr.

+

The corrected version of user checks err before using ptr.

diff --git a/go/ql/src/InconsistentCode/MissingErrorCheck.ql b/go/ql/src/InconsistentCode/MissingErrorCheck.ql index 8e277c6ae74..6a68904427d 100644 --- a/go/ql/src/InconsistentCode/MissingErrorCheck.ql +++ b/go/ql/src/InconsistentCode/MissingErrorCheck.ql @@ -22,7 +22,7 @@ predicate isNil(DataFlow::Node node) { node = Builtin::nil().getARead() } /** * Matches if `call` may return a nil pointer alongside an error value. * - * This is both an over- and under-estimate: over in that we assume opaque functions may use this + * This is both an over- and under-estimate: over in that we assume opaque functions may use this * convention, and under in that functions with bodies are only recognized if they use a literal * `nil` for the pointer return value at some return site. */ diff --git a/go/ql/src/Security/CWE-327/InsecureTLS.ql b/go/ql/src/Security/CWE-327/InsecureTLS.ql index a4a9ab1f549..dba6f2d54ca 100644 --- a/go/ql/src/Security/CWE-327/InsecureTLS.ql +++ b/go/ql/src/Security/CWE-327/InsecureTLS.ql @@ -211,7 +211,7 @@ module TlsInsecureCipherSuitesFlow = TaintTracking::Global @javacompilation - 1138 + 2925 @kotlincompilation - 2356 + 2025 @diagnostic - 57106 + 705818 @externalDataElement 1 + + @location_default + 915359999 + @file - 1291911 + 4338434 @folder - 211876 + 857155 @package - 96053 + 459294 @primitive - 5690 + 26329 @modifier - 6259 + 32179 @errortype - 22 + 2925 @classorinterface - 22273131 + 22649681 @kt_nullable_type - 262 - - - @location_default - 82315299 + 264 @kt_notnull_type - 156265 + 161049 @kt_type_alias - 707 + 625 @fielddecl - 210035 + 204459 @field - 2886451 + 9378976 @constructor - 1103682 + 3016133 @method - 15113893 + 38724113 @param - 16587479 + 41491584 @exception - 1232644 + 3735793 @typevariable - 864332 + 1331077 @wildcard - 458250 + 590939 @typebound - 581989 + 827900 @array - 190588 + 608492 @import - 356137 + 525435 @block - 707376 + 853492 @ifstmt - 188282 + 191468 @forstmt - 52504 + 53708 @enhancedforstmt - 21607 + 21973 @whilestmt - 13266 + 13464 @dostmt - 2251 + 2289 @trystmt - 58624 + 59613 @switchstmt - 10546 + 10724 @synchronizedstmt - 23121 + 45951 @returnstmt - 345793 + 323816 @throwstmt - 35917 + 36523 @breakstmt - 35329 + 35926 @continuestmt - 3257 + 3312 @emptystmt - 1561 + 1868 @exprstmt - 942102 - - - @assertstmt - 15158 - - - @localvariabledeclstmt - 318689 - - - @localtypedeclstmt - 3532 - - - @constructorinvocationstmt - 9165 - - - @superconstructorinvocationstmt - 182518 - - - @case - 107927 - - - @catchclause - 55201 + 958028 @labeledstmt - 4493 + 4490 + + + @assertstmt + 15410 + + + @localvariabledeclstmt + 486900 + + + @localtypedeclstmt + 3483 + + + @constructorinvocationstmt + 9319 + + + @superconstructorinvocationstmt + 189390 + + + @case + 109697 + + + @catchclause + 56134 @yieldstmt - 36 + 44 @errorstmt @@ -206,263 +206,275 @@ @whenbranch - 207292 + 204113 @arrayaccess - 409677 + 417372 @arraycreationexpr - 69247 + 70418 @arrayinit - 405405 + 579238 @assignexpr - 465407 + 473276 @assignaddexpr - 17016 + 17303 @assignsubexpr - 3505 + 3557 @assignmulexpr - 2153 + 2189 @assigndivexpr - 1071 - - - @assignandexpr - 3970 - - - @assignorexpr - 14528 - - - @booleanliteral - 524468 - - - @integerliteral - 1151446 - - - @longliteral - 185873 - - - @floatingpointliteral - 2824967 - - - @doubleliteral - 486619 - - - @characterliteral - 40016 - - - @stringliteral - 1262851 - - - @nullliteral - 355806 - - - @mulexpr - 204580 - - - @divexpr - 36264 - - - @remexpr - 3904 - - - @addexpr - 176986 - - - @subexpr - 84385 - - - @lshiftexpr - 8736 - - - @rshiftexpr - 4206 - - - @urshiftexpr - 9643 - - - @andbitexpr - 29089 - - - @orbitexpr - 11594 - - - @xorbitexpr - 1925 - - - @andlogicalexpr - 36742 - - - @orlogicalexpr - 31150 - - - @ltexpr - 66249 - - - @gtexpr - 17203 - - - @leexpr - 10529 - - - @geexpr - 13411 - - - @eqexpr - 104273 - - - @neexpr - 60975 - - - @postincexpr - 41857 - - - @postdecexpr - 11683 - - - @preincexpr - 23714 - - - @predecexpr - 3781 - - - @minusexpr - 744379 - - - @plusexpr - 53007 - - - @bitnotexpr - 8186 - - - @lognotexpr - 40110 - - - @castexpr - 93185 - - - @newexpr - 252083 - - - @conditionalexpr - 16047 - - - @instanceofexpr - 29542 - - - @localvariabledeclexpr - 385272 - - - @typeliteral - 98504 - - - @thisaccess - 490120 - - - @superaccess - 53021 - - - @varaccess - 2434277 - - - @methodaccess - 1512380 - - - @unannotatedtypeaccess - 2374849 - - - @arraytypeaccess - 120727 - - - @wildcardtypeaccess - 78834 - - - @declannotation - 6740832 + 1090 @assignremexpr - 62 + 325 + + + @assignandexpr + 4035 + + + @assignorexpr + 17197 @assignxorexpr - 1102 + 1135 @assignlshiftexpr - 916 + 930 @assignrshiftexpr - 1404 + 1428 @assignurshiftexpr - 431 + 437 + + + @booleanliteral + 1032682 + + + @integerliteral + 1173075 + + + @longliteral + 188939 + + + @floatingpointliteral + 2878044 + + + @doubleliteral + 494845 + + + @characterliteral + 40611 + + + @stringliteral + 2353526 + + + @nullliteral + 361821 + + + @mulexpr + 228663 + + + @divexpr + 37220 + + + @remexpr + 5205 + + + @addexpr + 179978 + + + @subexpr + 91953 + + + @lshiftexpr + 8866 + + + @rshiftexpr + 4269 + + + @urshiftexpr + 9804 + + + @andbitexpr + 29580 + + + @orbitexpr + 8772 + + + @xorbitexpr + 1958 + + + @andlogicalexpr + 37363 + + + @orlogicalexpr + 31676 + + + @ltexpr + 67577 + + + @gtexpr + 17459 + + + @leexpr + 10707 + + + @geexpr + 13638 + + + @eqexpr + 106035 + + + @neexpr + 62005 + + + @postincexpr + 42560 + + + @postdecexpr + 11880 + + + @preincexpr + 24115 + + + @predecexpr + 3845 + + + @minusexpr + 758361 + + + @plusexpr + 53903 + + + @bitnotexpr + 8325 + + + @lognotexpr + 40789 + + + @castexpr + 94761 + + + @newexpr + 256339 + + + @conditionalexpr + 16319 + + + @instanceofexpr + 30041 + + + @localvariabledeclexpr + 547241 + + + @typeliteral + 390900 + + + @thisaccess + 454776 + + + @superaccess + 35123 + + + @varaccess + 2475431 + + + @methodaccess + 1685726 + + + @unannotatedtypeaccess + 2416174 + + + @arraytypeaccess + 122768 + + + @wildcardtypeaccess + 80161 + + + @declannotation + 6854791 + + + @uniontypeaccess + 2580 + + + @lambdaexpr + 157421 + + + @memberref + 24296 @parexpr @@ -472,33 +484,21 @@ @packageaccess 1 - - @uniontypeaccess - 1010 - - - @lambdaexpr - 152268 - - - @memberref - 23859 - @annotatedtypeaccess - 1281 + 1302 @typeannotation - 1281 + 1302 @intersectiontypeaccess - 25 + 31 @switchexpr - 591 + 628 @errorexpr @@ -506,43 +506,43 @@ @whenexpr - 116200 + 114649 @getclassexpr - 733 + 568 @safecastexpr - 6086 + 6516 @implicitcastexpr - 28817 + 32568 @implicitnotnullexpr - 163412 + 159477 @implicitcoerciontounitexpr - 73781 + 72660 @notinstanceofexpr - 3981 + 4235 @stmtexpr - 50550 + 56622 @stringtemplateexpr - 24879 + 28942 @notnullexpr - 23342 + 11970 @unsafecoerceexpr @@ -550,15 +550,15 @@ @valueeqexpr - 85697 + 81195 @valueneexpr - 22980 + 21432 @propertyref - 8439 + 11930 @recordpatternexpr @@ -566,113 +566,113 @@ @localvar - 385272 + 547241 @module - 6092 + 131645 @requires - 3190 + 4159 @exports - 26163 + 336426 @opens - 716 + 14627 @uses - 7884 + 96539 @provides - 1792 + 2925 @javadoc - 985091 + 1001744 @javadocTag - 335808 + 341478 @javadocText - 2502848 + 2545161 @xmldtd - 569 + 578 @xmlelement - 20510401 - - - @xmlattribute - 24948200 + 233696238 @xmlnamespace - 2845 + 17552 + + + @xmlattribute + 281184985 @xmlcomment - 20643577 + 231835655 @xmlcharacters - 19508174 + 222401095 @config - 1 + 669552 @configName - 1 + 669552 @configValue - 1 + 669315 @ktcomment - 116780 + 122924 @ktcommentsection - 74919 + 78073 @kt_property - 2989117 + 3024536
compilations - 2356 + 2925 id - 2356 + 2925 kind - 94 + 2925 cwd - 94 + 2925 name - 2356 + 2925 @@ -686,7 +686,7 @@ 1 2 - 2356 + 2925 @@ -702,7 +702,7 @@ 1 2 - 2356 + 2925 @@ -718,7 +718,7 @@ 1 2 - 2356 + 2925 @@ -732,9 +732,9 @@ 12 - 25 - 26 - 94 + 1 + 2 + 2925 @@ -750,7 +750,7 @@ 1 2 - 94 + 2925 @@ -764,9 +764,9 @@ 12 - 25 - 26 - 94 + 1 + 2 + 2925 @@ -780,9 +780,9 @@ 12 - 25 - 26 - 94 + 1 + 2 + 2925 @@ -798,7 +798,7 @@ 1 2 - 94 + 2925 @@ -812,9 +812,9 @@ 12 - 25 - 26 - 94 + 1 + 2 + 2925 @@ -830,7 +830,7 @@ 1 2 - 2356 + 2925 @@ -846,7 +846,7 @@ 1 2 - 2356 + 2925 @@ -862,7 +862,7 @@ 1 2 - 2356 + 2925 @@ -872,30 +872,30 @@ compilation_started - 2261 + 2025 id - 2261 + 2025 compilation_info - 4523 + 8776 id - 2261 + 2925 info_key - 188 + 5850 info_value - 188 + 8776 @@ -909,7 +909,7 @@ 2 3 - 2261 + 2925 @@ -923,9 +923,9 @@ 12 - 2 - 3 - 2261 + 3 + 4 + 2925 @@ -939,9 +939,9 @@ 12 - 24 - 25 - 188 + 1 + 2 + 5850 @@ -957,7 +957,12 @@ 1 2 - 188 + 2925 + + + 2 + 3 + 2925 @@ -971,9 +976,9 @@ 12 - 24 - 25 - 188 + 1 + 2 + 8776 @@ -989,7 +994,7 @@ 1 2 - 188 + 8776 @@ -999,19 +1004,19 @@ compilation_args - 69266 + 49952 id - 2356 + 2025 num - 12062 + 4387 arg - 35151 + 22360 @@ -1022,45 +1027,45 @@ 12 + + 18 + 19 + 506 + 19 20 - 565 + 590 20 21 - 753 + 168 21 - 22 - 188 + 23 + 168 - 22 - 25 - 188 + 24 + 32 + 168 32 - 33 - 188 + 35 + 168 - 34 - 43 - 188 + 44 + 52 + 168 52 - 54 - 188 - - - 128 - 129 - 94 + 53 + 84 @@ -1073,45 +1078,45 @@ 12 + + 18 + 19 + 506 + 19 20 - 565 + 590 20 21 - 753 + 168 21 - 22 - 188 + 23 + 168 - 22 - 25 - 188 + 24 + 32 + 168 32 - 33 - 188 + 35 + 168 - 34 - 43 - 188 + 44 + 52 + 168 52 - 54 - 188 - - - 127 - 128 - 94 + 53 + 84 @@ -1127,32 +1132,42 @@ 1 2 - 7068 + 84 2 + 3 + 590 + + + 3 4 - 1036 + 843 4 6 - 942 + 253 + + + 6 + 7 + 590 7 - 9 - 942 + 10 + 337 - 9 - 20 - 282 + 11 + 19 + 168 - 25 - 26 - 1790 + 24 + 25 + 1518 @@ -1168,32 +1183,47 @@ 1 2 - 7350 + 337 2 3 - 188 + 1096 3 4 - 1507 + 928 4 6 - 1036 + 253 6 - 9 - 942 + 7 + 590 - 9 - 26 - 1036 + 7 + 10 + 337 + + + 10 + 13 + 337 + + + 13 + 20 + 337 + + + 24 + 25 + 168 @@ -1209,12 +1239,17 @@ 1 2 - 32607 + 20166 2 - 26 - 2544 + 13 + 1096 + + + 24 + 25 + 1096 @@ -1230,12 +1265,12 @@ 1 2 - 33078 + 20588 2 - 12 - 2073 + 13 + 1771 @@ -1245,19 +1280,19 @@ compilation_expanded_args - 69428 + 85214 id - 1138 + 682 num - 45527 + 18653 arg - 54632 + 70928 @@ -1269,14 +1304,34 @@ 12 - 42 - 43 - 569 + 24 + 25 + 136 - 80 - 81 - 569 + 25 + 26 + 272 + + + 139 + 140 + 45 + + + 143 + 144 + 90 + + + 408 + 409 + 90 + + + 410 + 411 + 45 @@ -1290,14 +1345,29 @@ 12 - 40 - 41 - 569 + 23 + 24 + 409 - 78 - 79 - 569 + 137 + 138 + 45 + + + 141 + 142 + 90 + + + 407 + 408 + 90 + + + 409 + 410 + 45 @@ -1313,12 +1383,27 @@ 1 2 - 21625 + 90 - 2 - 3 - 23901 + 3 + 4 + 12056 + + + 5 + 6 + 181 + + + 6 + 7 + 5186 + + + 12 + 16 + 1137 @@ -1333,13 +1418,28 @@ 1 - 2 - 35283 + 3 + 1091 - 2 - 3 - 10243 + 3 + 4 + 12056 + + + 4 + 6 + 272 + + + 6 + 7 + 5004 + + + 8 + 16 + 227 @@ -1355,12 +1455,12 @@ 1 2 - 42112 + 69791 - 2 - 3 - 12519 + 3 + 16 + 1137 @@ -1376,12 +1476,12 @@ 1 2 - 53494 + 70519 2 - 3 - 1138 + 5 + 409 @@ -1391,19 +1491,19 @@ compilation_compiling_files - 60809 + 67743 id - 757 + 682 num - 9485 + 17334 file - 60809 + 67743 @@ -1417,62 +1517,27 @@ 1 2 - 104 + 409 - 2 - 4 - 56 + 111 + 112 + 45 - 4 - 7 - 60 + 115 + 116 + 90 - 7 - 11 - 69 + 379 + 380 + 90 - 11 - 15 - 56 - - - 15 - 22 - 60 - - - 22 - 31 - 65 - - - 32 - 47 - 65 - - - 51 - 88 - 69 - - - 93 - 151 - 60 - - - 163 - 367 - 60 - - - 441 - 2179 - 26 + 381 + 382 + 45 @@ -1488,62 +1553,27 @@ 1 2 - 104 + 409 - 2 - 4 - 56 + 111 + 112 + 45 - 4 - 7 - 60 + 115 + 116 + 90 - 7 - 11 - 69 + 379 + 380 + 90 - 11 - 15 - 56 - - - 15 - 22 - 60 - - - 22 - 31 - 65 - - - 32 - 47 - 65 - - - 51 - 88 - 69 - - - 93 - 151 - 60 - - - 163 - 367 - 60 - - - 441 - 2179 - 26 + 381 + 382 + 45 @@ -1559,37 +1589,27 @@ 1 2 - 4080 - - - 2 - 3 - 452 + 90 3 4 - 2552 + 12010 - 4 + 5 + 6 + 181 + + + 6 7 - 805 + 5004 - 7 - 17 - 827 - - - 17 - 104 - 714 - - - 105 - 175 - 52 + 15 + 16 + 45 @@ -1605,37 +1625,27 @@ 1 2 - 4080 - - - 2 - 3 - 452 + 90 3 4 - 2552 + 12010 - 4 + 5 + 6 + 181 + + + 6 7 - 805 + 5004 - 7 - 17 - 827 - - - 17 - 104 - 714 - - - 105 - 175 - 52 + 15 + 16 + 45 @@ -1651,7 +1661,7 @@ 1 2 - 60809 + 67743 @@ -1667,7 +1677,7 @@ 1 2 - 60809 + 67743 @@ -1677,19 +1687,19 @@ compilation_compiling_files_completed - 60809 + 67743 id - 757 + 682 num - 9485 + 17334 result - 4 + 45 @@ -1703,62 +1713,27 @@ 1 2 - 104 + 409 - 2 - 4 - 56 + 111 + 112 + 45 - 4 - 7 - 60 + 115 + 116 + 90 - 7 - 11 - 69 + 379 + 380 + 90 - 11 - 15 - 56 - - - 15 - 22 - 60 - - - 22 - 31 - 65 - - - 32 - 47 - 65 - - - 51 - 88 - 69 - - - 93 - 151 - 60 - - - 163 - 367 - 60 - - - 441 - 2179 - 26 + 381 + 382 + 45 @@ -1774,7 +1749,7 @@ 1 2 - 757 + 682 @@ -1790,37 +1765,27 @@ 1 2 - 4080 - - - 2 - 3 - 452 + 90 3 4 - 2552 + 12010 - 4 + 5 + 6 + 181 + + + 6 7 - 805 + 5004 - 7 - 17 - 827 - - - 17 - 104 - 714 - - - 105 - 175 - 52 + 15 + 16 + 45 @@ -1836,7 +1801,7 @@ 1 2 - 9485 + 17334 @@ -1850,9 +1815,9 @@ 12 - 174 - 175 - 4 + 15 + 16 + 45 @@ -1866,9 +1831,9 @@ 12 - 2178 - 2179 - 4 + 381 + 382 + 45 @@ -1878,23 +1843,23 @@ compilation_time - 166778 + 273705 id - 238 + 682 num - 30464 + 17379 kind - 477 + 181 seconds - 83269 + 135988 @@ -1906,14 +1871,29 @@ 12 - 94 - 95 - 119 + 2 + 3 + 409 - 255 - 256 - 119 + 112 + 113 + 45 + + + 116 + 117 + 90 + + + 380 + 381 + 90 + + + 382 + 383 + 45 @@ -1929,7 +1909,7 @@ 4 5 - 238 + 682 @@ -1943,14 +1923,29 @@ 12 - 188 - 189 - 119 + 4 + 5 + 409 - 510 - 511 - 119 + 224 + 225 + 45 + + + 232 + 233 + 90 + + + 759 + 760 + 90 + + + 764 + 765 + 45 @@ -1966,646 +1961,200 @@ 1 2 - 19234 + 90 - - 2 - 3 - 11230 - - - - - - - num - kind - - - 12 - - - 4 - 5 - 30464 - - - - - - - num - seconds - - - 12 - 3 4 - 19353 + 12010 5 6 - 11110 + 181 + + + 6 + 7 + 5004 + + + 15 + 16 + 90 - kind - id - - - 12 - - - 2 - 3 - 477 - - - - - - - kind - num - - - 12 - - - 255 - 256 - 477 - - - - - - - kind - seconds - - - 12 - - - 1 - 2 - 238 - - - 348 - 349 - 119 - - - 349 - 350 - 119 - - - - - - - seconds - id - - - 12 - - - 1 - 2 - 83150 - - - 2 - 3 - 119 - - - - - - - seconds - num - - - 12 - - - 1 - 2 - 83150 - - - 255 - 256 - 119 - - - - - - - seconds + num kind 12 - 1 - 2 - 83150 + 4 + 5 + 17379 + + + + + + num + seconds + + + 12 + 3 4 - 119 - - - - - - - - - diagnostic_for - 57106 - - - diagnostic - 57106 - - - compilation - 374 - - - file_number - 6678 - - - file_number_diagnostic_number - 1248 - - - - - diagnostic - compilation - - - 12 - - - 1 - 2 - 57106 - - - - - - - diagnostic - file_number - - - 12 - - - 1 - 2 - 57106 - - - - - - - diagnostic - file_number_diagnostic_number - - - 12 - - - 1 - 2 - 57106 - - - - - - - compilation - diagnostic - - - 12 - - - 1 - 2 - 124 - - - 34 - 35 - 62 - - - 266 - 267 - 62 - - - 303 - 304 - 62 - - - 310 - 311 - 62 - - - - - - - compilation - file_number - - - 12 - - - 1 - 2 - 124 - - - 14 - 15 - 62 - - - 102 - 103 - 124 - - - 104 - 105 - 62 - - - - - - - compilation - file_number_diagnostic_number - - - 12 - - - 1 - 2 - 124 - - - 8 - 9 - 62 - - - 15 - 16 - 62 - - - 20 - 21 - 124 - - - - - - - file_number - diagnostic - - - 12 - - - 1 - 5 - 312 - - - 6 - 7 - 3682 + 90 7 8 - 312 + 12010 - 8 - 9 - 686 - - - 9 + 11 12 - 499 + 181 - 12 - 15 - 561 + 13 + 14 + 5004 - 17 - 30 - 561 - - - 47 - 48 - 62 + 16 + 32 + 90 - file_number - compilation + kind + id 12 - - 1 - 3 - 436 - - - 3 - 4 - 5367 - - - 4 - 5 - 873 - - - - - - - file_number - file_number_diagnostic_number - - - 12 - - - 1 - 2 - 124 - - - 2 - 3 - 3994 - - - 3 - 4 - 873 - - - 4 - 5 - 312 - - - 5 - 6 - 436 - - - 6 - 8 - 499 - - - 8 - 21 - 436 - - - - - - - file_number_diagnostic_number - diagnostic - - - 12 - - - 2 - 3 - 312 - - - 3 - 4 - 124 - - - 5 - 6 - 124 - - - 7 - 8 - 124 - - - 9 - 10 - 62 - - - 12 - 13 - 62 - - - 21 - 22 - 62 - - - 25 - 26 - 62 - - - 39 - 40 - 62 - - - 47 - 48 - 62 - - - 77 - 78 - 62 - - - 321 - 322 - 62 - - - 324 - 325 - 62 - - - - - - - file_number_diagnostic_number - compilation - - - 12 - - - 2 - 3 - 312 - - - 3 - 4 - 436 - - - 4 - 5 - 436 - - - 6 - 7 - 62 - - - - - - - file_number_diagnostic_number - file_number - - - 12 - - - 1 - 2 - 312 - - - 2 - 3 - 124 - - - 3 - 4 - 124 - - - 4 - 5 - 124 - - - 5 - 6 - 62 - - - 7 - 8 - 62 - - - 12 - 13 - 62 - 15 16 - 62 + 181 + + + + + + + kind + num + + + 12 + + + 382 + 383 + 181 + + + + + + + kind + seconds + + + 12 + + + 1 + 2 + 90 - 22 - 23 - 62 + 1490 + 1491 + 45 - 27 - 28 - 62 + 1499 + 1500 + 45 + + + + + + + seconds + id + + + 12 + + + 1 + 2 + 135806 - 41 - 42 - 62 + 2 + 16 + 181 + + + + + + + seconds + num + + + 12 + + + 1 + 2 + 135715 - 105 - 106 - 62 + 2 + 383 + 272 + + + + + + + seconds + kind + + + 12 + + + 1 + 2 + 135942 - 107 - 108 - 62 + 3 + 4 + 45 @@ -2615,19 +2164,19 @@ compilation_compiler_times - 2261 + 2025 id - 2261 + 2025 cpu_seconds - 94 + 84 elapsed_seconds - 2167 + 2025 @@ -2641,7 +2190,7 @@ 1 2 - 2261 + 2025 @@ -2657,7 +2206,7 @@ 1 2 - 2261 + 2025 @@ -2673,7 +2222,7 @@ 24 25 - 94 + 84 @@ -2687,9 +2236,9 @@ 12 - 23 - 24 - 94 + 24 + 25 + 84 @@ -2705,12 +2254,7 @@ 1 2 - 2073 - - - 2 - 3 - 94 + 2025 @@ -2726,7 +2270,7 @@ 1 2 - 2167 + 2025 @@ -2736,23 +2280,23 @@ compilation_finished - 2261 + 2925 id - 2261 + 2925 cpu_seconds - 94 + 2925 elapsed_seconds - 2261 + 2925 result - 94 + 2925 @@ -2766,7 +2310,7 @@ 1 2 - 2261 + 2925 @@ -2782,7 +2326,7 @@ 1 2 - 2261 + 2925 @@ -2798,7 +2342,7 @@ 1 2 - 2261 + 2925 @@ -2812,9 +2356,9 @@ 12 - 24 - 25 - 94 + 1 + 2 + 2925 @@ -2828,9 +2372,9 @@ 12 - 24 - 25 - 94 + 1 + 2 + 2925 @@ -2846,7 +2390,7 @@ 1 2 - 94 + 2925 @@ -2862,7 +2406,7 @@ 1 2 - 2261 + 2925 @@ -2878,7 +2422,7 @@ 1 2 - 2261 + 2925 @@ -2894,7 +2438,7 @@ 1 2 - 2261 + 2925 @@ -2908,9 +2452,9 @@ 12 - 24 - 25 - 94 + 1 + 2 + 2925 @@ -2926,7 +2470,7 @@ 1 2 - 94 + 2925 @@ -2940,9 +2484,9 @@ 12 - 24 - 25 - 94 + 1 + 2 + 2925 @@ -2952,35 +2496,35 @@ diagnostics - 57106 + 705818 id - 57106 + 705818 generated_by - 124 + 2 severity - 62 + 8 error_tag - 62 + 2 error_message - 1435 + 48861 full_error_message - 39319 + 2 location - 312 + 361043 @@ -2994,7 +2538,7 @@ 1 2 - 57106 + 705818 @@ -3010,7 +2554,7 @@ 1 2 - 57106 + 705818 @@ -3026,7 +2570,7 @@ 1 2 - 57106 + 705818 @@ -3042,7 +2586,7 @@ 1 2 - 57106 + 705818 @@ -3058,7 +2602,7 @@ 1 2 - 57106 + 705818 @@ -3074,7 +2618,7 @@ 1 2 - 57106 + 705818 @@ -3088,14 +2632,9 @@ 12 - 2 - 3 - 62 - - - 913 - 914 - 62 + 330823 + 330824 + 2 @@ -3109,9 +2648,9 @@ 12 - 1 - 2 - 124 + 4 + 5 + 2 @@ -3127,7 +2666,7 @@ 1 2 - 124 + 2 @@ -3141,14 +2680,9 @@ 12 - 2 - 3 - 62 - - - 21 - 22 - 62 + 22902 + 22903 + 2 @@ -3164,12 +2698,7 @@ 1 2 - 62 - - - 629 - 630 - 62 + 2 @@ -3178,6 +2707,22 @@ generated_by location + + + 12 + + + 169224 + 169225 + 2 + + + + + + + severity + id 12 @@ -3185,260 +2730,279 @@ 1 2 - 62 + 2 + + + 3 + 4 + 2 + + + 6 + 7 + 2 + + + 330813 + 330814 + 2 + + + + + + + severity + generated_by + + + 12 + + + 1 + 2 + 8 + + + + + + + severity + error_tag + + + 12 + + + 1 + 2 + 8 + + + + + + + severity + error_message + + + 12 + + + 1 + 2 + 2 + + + 3 + 4 + 4 + + + 22895 + 22896 + 2 + + + + + + + severity + full_error_message + + + 12 + + + 1 + 2 + 8 + + + + + + + severity + location + + + 12 + + + 1 + 2 + 2 + + + 2 + 3 + 2 + + + 3 + 4 + 2 + + + 169219 + 169220 + 2 + + + + + + + error_tag + id + + + 12 + + + 330823 + 330824 + 2 + + + + + + + error_tag + generated_by + + + 12 + + + 1 + 2 + 2 + + + + + + + error_tag + severity + + + 12 + + + 4 + 5 + 2 + + + + + + + error_tag + error_message + + + 12 + + + 22902 + 22903 + 2 + + + + + + + error_tag + full_error_message + + + 12 + + + 1 + 2 + 2 + + + + + + + error_tag + location + + + 12 + + + 169224 + 169225 + 2 + + + + + + + error_message + id + + + 12 + + + 1 + 2 + 6345 + + + 2 + 3 + 7079 + + + 3 + 4 + 4171 4 5 - 62 + 4815 - - - - - - severity - id - - - 12 - - - 915 - 916 - 62 - - - - - - - severity - generated_by - - - 12 - - - 2 - 3 - 62 - - - - - - - severity - error_tag - - - 12 - - - 1 - 2 - 62 - - - - - - - severity - error_message - - - 12 - - - 23 - 24 - 62 - - - - - - - severity - full_error_message - - - 12 - - - 630 - 631 - 62 - - - - - - - severity - location - - - 12 - 5 6 - 62 - - - - - - - error_tag - id - - - 12 - - - 915 - 916 - 62 - - - - - - - error_tag - generated_by - - - 12 - - - 2 - 3 - 62 - - - - - - - error_tag - severity - - - 12 - - - 1 - 2 - 62 - - - - - - - error_tag - error_message - - - 12 - - - 23 - 24 - 62 - - - - - - - error_tag - full_error_message - - - 12 - - - 630 - 631 - 62 - - - - - - - error_tag - location - - - 12 - - - 5 - 6 - 62 - - - - - - - error_message - id - - - 12 - - - 1 - 2 - 312 + 9477 - 2 - 3 - 249 + 6 + 9 + 3816 - 4 - 7 - 124 + 9 + 15 + 1909 - 7 - 10 - 124 - - - 13 + 15 16 - 124 + 11156 - 19 - 23 - 124 - - - 25 - 27 - 124 - - - 48 - 81 - 124 - - - 314 - 315 - 124 + 16 + 159326 + 91 @@ -3454,7 +3018,7 @@ 1 2 - 1435 + 48861 @@ -3470,7 +3034,7 @@ 1 2 - 1435 + 48861 @@ -3486,7 +3050,7 @@ 1 2 - 1435 + 48861 @@ -3502,55 +3066,479 @@ 1 2 - 312 + 48861 + + + + + + + error_message + location + + + 12 + + + 1 + 2 + 6353 2 3 - 249 + 7074 + + + 3 + 4 + 4171 + + + 4 + 5 + 4813 + + + 5 + 6 + 9477 + + + 6 + 9 + 3814 + + + 9 + 15 + 1909 + + + 15 + 16 + 11156 + + + 16 + 159326 + 91 + + + + + + + full_error_message + id + + + 12 + + + 330823 + 330824 + 2 + + + + + + + full_error_message + generated_by + + + 12 + + + 1 + 2 + 2 + + + + + + + full_error_message + severity + + + 12 + + + 4 + 5 + 2 + + + + + + + full_error_message + error_tag + + + 12 + + + 1 + 2 + 2 + + + + + + + full_error_message + error_message + + + 12 + + + 22902 + 22903 + 2 + + + + + + + full_error_message + location + + + 12 + + + 169224 + 169225 + 2 + + + + + + + location + id + + + 12 + + + 1 + 2 + 23210 + + + 2 + 3 + 330902 + + + 3 + 9 + 6929 + + + + + + + location + generated_by + + + 12 + + + 1 + 2 + 361043 + + + + + + + location + severity + + + 12 + + + 1 + 2 + 361041 + + + 2 + 3 + 2 + + + + + + + location + error_tag + + + 12 + + + 1 + 2 + 361043 + + + + + + + location + error_message + + + 12 + + + 1 + 2 + 23216 + + + 2 + 3 + 330900 + + + 3 + 4 + 6925 + + + + + + + location + full_error_message + + + 12 + + + 1 + 2 + 361043 + + + + + + + + + diagnostic_for + 705818 + + + diagnostic + 705818 + + + compilation + 2 + + + file_number + 2402 + + + file_number_diagnostic_number + 38757 + + + + + diagnostic + compilation + + + 12 + + + 1 + 2 + 705818 + + + + + + + diagnostic + file_number + + + 12 + + + 1 + 2 + 705818 + + + + + + + diagnostic + file_number_diagnostic_number + + + 12 + + + 1 + 2 + 705818 + + + + + + + compilation + diagnostic + + + 12 + + + 330823 + 330824 + 2 + + + + + + + compilation + file_number + + + 12 + + + 1126 + 1127 + 2 + + + + + + + compilation + file_number_diagnostic_number + + + 12 + + + 18166 + 18167 + 2 + + + + + + + file_number + diagnostic + + + 12 + + + 1 + 2 + 328 + + + 2 + 3 + 149 + + + 3 + 4 + 315 4 6 - 124 + 179 6 8 - 124 + 151 - 9 - 16 - 124 + 8 + 11 + 204 - 19 - 23 - 124 + 11 + 17 + 196 - 25 - 27 - 124 + 17 + 30 + 185 - 38 - 49 - 124 + 30 + 55 + 181 - 80 - 315 - 124 + 55 + 133 + 181 + + + 134 + 327 + 181 + + + 342 + 18167 + 147 - error_message - location + file_number + compilation 12 @@ -3558,20 +3546,15 @@ 1 2 - 1373 - - - 3 - 4 - 62 + 2402 - full_error_message - id + file_number + file_number_diagnostic_number 12 @@ -3579,215 +3562,131 @@ 1 2 - 37010 - - - 2 - 37 - 2309 - - - - - - - full_error_message - generated_by - - - 12 - - - 1 - 2 - 39319 - - - - - - - full_error_message - severity - - - 12 - - - 1 - 2 - 39319 - - - - - - - full_error_message - error_tag - - - 12 - - - 1 - 2 - 39319 - - - - - - - full_error_message - error_message - - - 12 - - - 1 - 2 - 39257 + 328 2 3 - 62 - - - - - - - full_error_message - location - - - 12 - - - 1 - 2 - 39319 - - - - - - - location - id - - - 12 - - - 2 - 3 - 62 + 149 3 4 - 62 + 315 4 - 5 - 62 + 6 + 179 6 - 7 - 62 + 8 + 151 - 900 - 901 - 62 + 8 + 11 + 204 + + + 11 + 17 + 196 + + + 17 + 30 + 185 + + + 30 + 55 + 181 + + + 55 + 133 + 181 + + + 134 + 327 + 181 + + + 342 + 18167 + 147 - location - generated_by + file_number_diagnostic_number + diagnostic 12 - - 1 - 2 - 312 - - - - - - - location - severity - - - 12 - - - 1 - 2 - 312 - - - - - - - location - error_tag - - - 12 - - - 1 - 2 - 312 - - - - - - - location - error_message - - - 12 - - - 1 - 2 - 187 - 2 - 3 - 62 + 5 + 981 - 20 + 5 + 6 + 3895 + + + 6 + 9 + 1790 + + + 9 + 10 + 5822 + + + 10 + 14 + 537 + + + 15 + 16 + 15926 + + + 16 21 - 62 + 2745 + + + 23 + 25 + 3208 + + + 25 + 57 + 2927 + + + 57 + 1127 + 921 - location - full_error_message + file_number_diagnostic_number + compilation 12 @@ -3795,17 +3694,68 @@ 1 2 - 187 + 38757 + + + + + + + file_number_diagnostic_number + file_number + + + 12 + + + 2 + 5 + 981 - 3 - 4 - 62 + 5 + 6 + 3895 - 624 - 625 - 62 + 6 + 9 + 1790 + + + 9 + 10 + 5822 + + + 10 + 14 + 537 + + + 15 + 16 + 15926 + + + 16 + 21 + 2745 + + + 23 + 25 + 3208 + + + 25 + 57 + 2927 + + + 57 + 1127 + 921 @@ -3959,11 +3909,11 @@ sourceLocationPrefix - 569 + 2925 prefix - 569 + 2925 @@ -4781,31 +4731,31 @@ locations_default - 82315299 + 915359999 id - 82315299 + 915359999 file - 1291911 + 4332583 beginLine - 538208 + 5932802 beginColumn - 33818 + 377382 endLine - 538471 + 5935727 endColumn - 119281 + 1404213 @@ -4819,7 +4769,7 @@ 1 2 - 82315299 + 915359999 @@ -4835,7 +4785,7 @@ 1 2 - 82315299 + 915359999 @@ -4851,7 +4801,7 @@ 1 2 - 82315299 + 915359999 @@ -4867,7 +4817,7 @@ 1 2 - 82315299 + 915359999 @@ -4883,7 +4833,7 @@ 1 2 - 82315299 + 915359999 @@ -4899,357 +4849,40 @@ 1 2 - 1131995 + 2600720 2 - 11 - 97522 + 6 + 394935 - 11 - 3605 - 62393 - - - - - - - file - beginLine - - - 12 - - - 1 - 2 - 1131995 - - - 2 - 9 - 97260 - - - 9 - 1830 - 62655 - - - - - - - file - beginColumn - - - 12 - - - 1 - 2 - 1131995 - - - 2 - 5 - 105911 - - - 5 - 105 - 54004 - - - - - - - file - endLine - - - 12 - - - 1 - 2 - 1131995 - - - 2 - 11 - 99619 - - - 11 - 1834 - 60296 - - - - - - - file - endColumn - - - 12 - - - 1 - 2 - 1131995 - - - 2 - 10 - 99619 - - - 10 - 205 - 60296 - - - - - - - beginLine - id - - - 12 - - - 1 - 14 - 42731 - - - 14 - 125 - 41158 - - - 125 - 142 - 41945 - - - 142 - 152 - 43255 - - - 152 - 159 - 49023 - - - 159 - 164 - 37226 - - - 164 - 169 - 46926 - - - 169 - 173 - 40896 - - - 173 - 178 - 45353 - - - 178 - 184 - 47450 - - - 184 - 193 - 43255 - - - 193 - 211 - 40372 - - - 211 - 4929 - 18613 - - - - - - - beginLine - file - - - 12 - - - 1 + 6 7 - 44042 + 359829 7 - 65 - 40896 + 12 + 351053 - 65 - 73 - 41945 + 12 + 680 + 327649 - 73 - 78 - 40372 - - - 78 - 81 - 36177 - - - 81 - 84 - 48761 - - - 84 - 86 - 40896 - - - 86 - 87 - 25691 - - - 87 - 89 - 48761 - - - 89 - 91 - 35129 - - - 91 - 94 - 44566 - - - 94 - 99 - 44828 - - - 99 - 142 - 40634 - - - 142 - 4929 - 5505 + 831 + 3605 + 298395 - beginLine - beginColumn - - - 12 - - - 1 - 5 - 42731 - - - 5 - 17 - 38274 - - - 17 - 19 - 34342 - - - 19 - 20 - 42207 - - - 20 - 21 - 55053 - - - 21 - 22 - 57412 - - - 22 - 23 - 65015 - - - 23 - 24 - 62393 - - - 24 - 25 - 46401 - - - 25 - 26 - 29099 - - - 26 - 29 - 49285 - - - 29 - 40 - 15991 - - - - - - - beginLine - endLine + file + beginLine 12 @@ -5257,658 +4890,45 @@ 1 2 - 173810 + 2600720 2 - 3 - 172761 - - - 3 4 - 92017 + 134570 4 5 - 40896 + 286693 5 - 11 - 41945 + 6 + 362755 - 11 - 97 - 16778 - - - - - - - beginLine - endColumn - - - 12 - - - 1 - 13 - 42207 - - - 13 - 60 - 41945 - - - 60 - 64 - 42469 - - - 64 - 66 - 42207 - - - 66 - 68 - 48499 - - - 68 - 69 - 26477 - - - 69 - 70 - 29361 - - - 70 - 72 - 49023 - - - 72 - 74 - 44042 - - - 74 - 76 - 33818 - - - 76 - 79 - 45091 - - - 79 - 83 - 40372 - - - 83 - 91 - 43255 - - - 91 - 103 - 9437 - - - - - - - beginColumn - id - - - 12 - - - 1 - 11 - 2883 - - - 15 - 24 - 2883 - - - 28 - 58 - 2883 - - - 58 - 88 - 2621 - - - 89 - 131 - 2621 - - - 131 - 196 - 2883 - - - 213 - 297 - 2621 - - - 307 - 496 - 2621 - - - 513 - 883 - 2621 - - - 933 - 1470 - 2621 - - - 1665 - 2279 - 2621 - - - 2295 - 2583 - 2621 - - - 2694 - 226487 - 1310 - - - - - - - beginColumn - file - - - 12 - - - 1 - 9 - 2359 - - - 9 - 11 - 2883 - - - 11 - 15 - 2097 - - - 15 - 19 - 2883 - - - 23 - 68 - 2621 - - - 69 - 78 - 2621 - - - 79 - 100 - 1835 - - - 100 - 104 - 2883 - - - 104 - 109 - 2621 - - - 109 - 112 - 1835 - - - 112 - 115 - 2621 - - - 115 - 117 - 2621 - - - 117 - 123 - 2621 - - - 145 - 4929 - 1310 - - - - - - - beginColumn - beginLine - - - 12 - - - 1 + 6 10 - 2883 + 353978 10 - 22 - 2883 + 1001 + 327649 - 23 - 39 - 2621 - - - 41 - 58 - 2621 - - - 58 - 84 - 2621 - - - 84 - 106 - 2621 - - - 108 - 166 - 2621 - - - 167 - 225 - 2621 - - - 230 - 376 - 2621 - - - 381 - 647 - 2621 - - - 657 - 941 - 2621 - - - 941 - 1090 - 2621 - - - 1102 - 2051 - 1835 + 1038 + 1830 + 266215 - beginColumn - endLine - - - 12 - - - 1 - 10 - 2883 - - - 10 - 22 - 2883 - - - 23 - 39 - 2621 - - - 41 - 59 - 2621 - - - 59 - 86 - 2621 - - - 86 - 109 - 2621 - - - 114 - 168 - 2621 - - - 170 - 224 - 2621 - - - 229 - 379 - 2621 - - - 382 - 647 - 2621 - - - 658 - 941 - 2621 - - - 941 - 1089 - 2621 - - - 1102 - 2051 - 1835 - - - - - - - beginColumn - endColumn - - - 12 - - - 1 - 8 - 2883 - - - 8 - 16 - 2883 - - - 16 - 23 - 2621 - - - 23 - 30 - 2621 - - - 30 - 36 - 2621 - - - 36 - 44 - 2621 - - - 46 - 55 - 2621 - - - 55 - 65 - 2883 - - - 65 - 76 - 2621 - - - 77 - 94 - 2621 - - - 94 - 117 - 2621 - - - 119 - 152 - 2621 - - - 153 - 393 - 1572 - - - - - - - endLine - id - - - 12 - - - 1 - 14 - 42207 - - - 14 - 124 - 41683 - - - 124 - 143 - 42207 - - - 143 - 152 - 45615 - - - 152 - 159 - 44042 - - - 159 - 164 - 40896 - - - 164 - 169 - 46664 - - - 169 - 173 - 41945 - - - 173 - 178 - 46401 - - - 178 - 184 - 41683 - - - 184 - 193 - 42993 - - - 193 - 212 - 41158 - - - 212 - 4929 - 20972 - - - - - - - endLine - file - - - 12 - - - 1 - 7 - 44304 - - - 7 - 66 - 43518 - - - 66 - 74 - 43780 - - - 74 - 80 - 48499 - - - 80 - 83 - 46401 - - - 83 - 85 - 36702 - - - 85 - 87 - 46926 - - - 87 - 89 - 48499 - - - 89 - 91 - 36439 - - - 91 - 94 - 47188 - - - 94 - 99 - 44304 - - - 99 - 130 - 40896 - - - 130 - 4929 - 11010 - - - - - - - endLine - beginLine + file + beginColumn 12 @@ -5916,110 +4936,85 @@ 1 2 - 136583 + 2600720 2 3 - 190064 + 125794 3 4 - 124000 + 798646 4 6 - 45877 + 356904 6 - 19 - 40896 + 85 + 245737 - 19 - 22 - 1048 + 85 + 105 + 204781 - endLine - beginColumn + file + endLine 12 1 + 2 + 2600720 + + + 2 5 - 42207 + 163824 5 + 6 + 430040 + + + 6 + 8 + 333500 + + + 8 17 - 38799 + 339351 17 - 19 - 31721 + 1691 + 330575 - 19 - 20 - 38274 - - - 20 - 21 - 57412 - - - 21 - 22 - 55577 - - - 22 - 23 - 65801 - - - 23 - 24 - 59771 - - - 24 - 25 - 45353 - - - 25 - 26 - 35653 - - - 26 - 29 - 49547 - - - 29 - 39 - 18351 + 1691 + 1834 + 134570 - endLine + file endColumn @@ -6027,73 +5022,1123 @@ 1 - 13 - 42731 + 2 + 2600720 - 13 - 60 - 41683 + 2 + 5 + 155048 - 60 + 5 + 6 + 351053 + + + 6 + 7 + 333500 + + + 7 + 12 + 371531 + + + 12 + 178 + 327649 + + + 178 + 205 + 193079 + + + + + + + beginLine + id + + + 12 + + + 1 + 89 + 450518 + + + 89 + 127 + 468071 + + + 127 + 138 + 476847 + + + 138 + 146 + 447593 + + + 146 + 154 + 479772 + + + 154 + 161 + 532430 + + + 161 + 167 + 511952 + + + 167 + 172 + 462220 + + + 172 + 178 + 462220 + + + 178 + 185 + 479772 + + + 185 + 194 + 450518 + + + 194 + 206 + 470996 + + + 206 + 1479 + 239886 + + + + + + + beginLine + file + + + 12 + + + 1 + 46 + 450518 + + + 47 + 66 + 497325 + + + 66 + 71 + 547058 + + + 71 + 76 + 476847 + + + 76 + 80 + 497325 + + + 80 + 83 + 441742 + + + 83 + 86 + 514878 + + + 86 + 89 + 482698 + + + 89 + 92 + 514878 + + + 92 + 95 + 509027 + + + 95 + 100 + 517803 + + + 100 + 154 + 447593 + + + 159 + 1479 + 35105 + + + + + + + beginLine + beginColumn + + + 12 + + + 1 + 14 + 482698 + + + 14 + 17 + 491474 + + + 17 + 18 + 371531 + + + 18 + 19 + 491474 + + + 19 + 20 + 655299 + + + 20 + 21 + 740137 + + + 21 + 22 + 705032 + + + 22 + 23 + 620194 + + + 23 + 24 + 529505 + + + 24 + 25 + 359829 + + + 25 + 29 + 468071 + + + 29 + 32 + 17552 + + + + + + + beginLine + endLine + + + 12 + + + 1 + 2 + 1901539 + + + 2 + 3 + 1980526 + + + 3 + 4 + 982949 + + + 4 + 5 + 465145 + + + 5 + 12 + 473922 + + + 12 + 99 + 128719 + + + + + + + beginLine + endColumn + + + 12 + + + 1 + 48 + 447593 + + + 48 + 59 + 421264 + + + 59 + 62 + 465145 + + + 62 64 - 41683 + 432965 64 66 - 41158 + 514878 66 + 67 + 339351 + + + 67 68 - 49023 + 254513 68 69 - 27002 + 327649 69 - 70 - 27526 - - - 70 71 - 29623 + 526580 71 73 - 44828 + 465145 73 75 - 35653 + 392009 75 - 77 - 35129 + 78 + 494400 - 77 - 80 - 40896 + 78 + 83 + 482698 + + + 83 + 107 + 368606 + + + + + + + beginColumn + id + + + 12 + + + 2 + 7 + 26329 + + + 8 + 12 + 32179 + + + 13 + 29 + 29254 + + + 30 + 73 + 29254 + + + 78 + 106 + 32179 + + + 108 + 183 + 29254 + + + 184 + 237 + 29254 + + + 250 + 341 + 29254 + + + 346 + 794 + 29254 + + + 805 + 1339 + 29254 + + + 1344 + 1967 + 29254 + + + 2066 + 2529 + 29254 + + + 2593 + 229061 + 23403 + + + + + + + beginColumn + file + + + 12 + + + 1 + 3 + 23403 + + + 3 + 4 + 17552 + + + 4 + 6 + 26329 + + + 6 + 11 + 29254 + + + 11 + 52 + 29254 + + + 71 + 79 + 26329 + + + 82 + 91 + 32179 + + + 92 + 99 + 29254 + + + 99 + 102 + 26329 + + + 102 + 104 + 17552 + + + 104 + 105 + 17552 + + + 105 + 107 + 32179 + + + 107 + 108 + 11701 + + + 108 + 109 + 23403 + + + 109 + 524 + 29254 + + + 591 + 1479 + 5850 + + + + + + + beginColumn + beginLine + + + 12 + + + 1 + 5 + 29254 + + + 7 + 11 + 29254 + + + 11 + 22 + 29254 + + + 25 + 43 + 29254 + + + 43 + 66 + 29254 + + + 66 + 91 + 29254 + + + 108 + 136 + 29254 + + + 142 + 169 + 29254 + + + 175 + 334 + 29254 + + + 341 + 583 + 29254 + + + 591 + 825 + 29254 + + + 874 + 1041 + 29254 + + + 1060 + 2021 + 26329 + + + + + + + beginColumn + endLine + + + 12 + + + 1 + 5 + 29254 + + + 7 + 11 + 29254 + + + 11 + 26 + 32179 + + + 26 + 45 + 29254 + + + 45 + 78 + 29254 + + + 78 + 113 + 29254 + + + 113 + 146 + 29254 + + + 146 + 204 + 29254 + + + 204 + 342 + 29254 + + + 357 + 592 + 29254 + + + 606 + 876 + 29254 + + + 922 + 1061 + 29254 + + + 1065 + 2021 + 23403 + + + + + + + beginColumn + endColumn + + + 12 + + + 1 + 4 + 26329 + + + 4 + 8 + 26329 + + + 8 + 15 + 29254 + + + 15 + 21 + 29254 + + + 21 + 29 + 32179 + + + 30 + 39 + 26329 + + + 41 + 47 + 29254 + + + 47 + 55 + 29254 + + + 56 + 65 + 29254 + + + 66 + 79 + 29254 80 + 101 + 29254 + + + 105 + 126 + 29254 + + + 131 + 208 + 29254 + + + 415 + 416 + 2925 + + + + + + + endLine + id + + + 12 + + + 1 85 - 43780 + 447593 85 - 119 - 37750 + 127 + 476847 + + + 127 + 138 + 482698 + + + 138 + 147 + 488549 + + + 147 + 154 + 453443 + + + 154 + 161 + 494400 + + + 161 + 167 + 497325 + + + 167 + 172 + 470996 + + + 172 + 178 + 450518 + + + 178 + 185 + 456369 + + + 185 + 193 + 456369 + + + 193 + 205 + 468071 + + + 205 + 1479 + 292544 + + + + + + + endLine + file + + + 12 + + + 1 + 46 + 450518 + + + 46 + 66 + 494400 + + + 66 + 71 + 503176 + + + 71 + 76 + 465145 + + + 76 + 80 + 500251 + + + 80 + 83 + 415413 + + + 83 + 86 + 491474 + + + 86 + 89 + 547058 + + + 89 + 92 + 497325 + + + 92 + 95 + 450518 + + + 95 + 99 + 465145 + + + 99 + 109 + 450518 + + + 109 + 1479 + 204781 + + + + + + + endLine + beginLine + + + 12 + + + 1 + 2 + 1550485 + + + 2 + 3 + 2068289 + + + 3 + 4 + 1366182 + + + 4 + 6 + 523654 + + + 6 + 21 + 427114 + + + + + + + endLine + beginColumn + + + 12 + + + 1 + 14 + 456369 + + + 14 + 17 + 470996 + + + 17 + 18 + 342277 + + + 18 + 19 + 491474 + + + 19 + 20 + 620194 + + + 20 + 21 + 804497 + + + 21 + 22 + 699181 + + + 22 + 23 + 576312 + + + 23 + 24 + 538281 + + + 24 + 25 + 412487 + + + 25 + 28 + 473922 + + + 28 + 33 + 49732 + + + + + + + endLine + endColumn + + + 12 + + + 1 + 48 + 450518 + + + 48 + 60 + 523654 + + + 60 + 63 + 547058 + + + 63 + 65 + 485623 + + + 65 + 66 + 283768 + + + 66 + 67 + 301320 + + + 67 + 68 + 251588 + + + 68 + 69 + 313022 + + + 69 + 71 + 506101 + + + 71 + 73 + 468071 + + + 73 + 75 + 415413 + + + 75 + 78 + 535356 + + + 78 + 83 + 453443 + + + 83 + 120 + 400785 @@ -6109,57 +6154,57 @@ 1 2 - 28050 + 318873 2 3 - 12321 + 122868 3 5 - 9699 + 111166 5 - 13 - 9699 + 9 + 111166 - 13 - 53 - 9175 + 9 + 18 + 108241 - 53 - 144 - 9175 + 19 + 61 + 105316 - 145 - 348 - 9175 + 62 + 198 + 105316 - 357 - 967 - 9175 + 202 + 482 + 105316 - 1050 - 2386 - 9175 + 489 + 1430 + 105316 - 2392 - 4931 - 9175 + 1448 + 3598 + 105316 - 4949 - 5933 - 4456 + 3743 + 6247 + 105316 @@ -6175,57 +6220,57 @@ 1 2 - 29099 + 330575 2 3 - 11797 + 114092 3 5 - 10224 + 122868 5 - 13 - 9699 + 10 + 122868 - 13 - 42 - 9175 + 10 + 24 + 108241 - 42 - 77 - 9175 + 24 + 51 + 105316 - 77 - 102 - 9175 + 52 + 94 + 108241 - 102 - 113 - 9175 + 94 + 107 + 108241 - 114 - 139 - 9175 + 107 + 120 + 105316 - 139 - 168 - 9175 + 120 + 147 + 108241 - 168 - 4929 - 3408 + 147 + 1479 + 70210 @@ -6241,57 +6286,57 @@ 1 2 - 29623 + 333500 2 3 - 12059 + 122868 3 5 - 9437 + 108241 5 - 13 - 9437 + 9 + 119943 - 13 - 51 - 9175 + 9 + 18 + 105316 - 51 - 113 - 9175 + 18 + 60 + 108241 - 114 - 266 - 9175 + 61 + 184 + 105316 - 269 - 636 - 9175 + 190 + 386 + 105316 - 648 - 1197 - 9175 + 399 + 942 + 105316 - 1198 - 1635 - 9437 + 968 + 1533 + 105316 - 1639 - 1722 - 3408 + 1542 + 1757 + 84837 @@ -6307,47 +6352,52 @@ 1 2 - 37488 + 418338 2 3 - 14156 + 157974 3 + 4 + 102390 + + + 4 6 - 10748 + 105316 6 - 14 - 10486 + 12 + 108241 - 14 - 25 - 10224 + 12 + 21 + 105316 - 25 - 36 - 9699 + 21 + 33 + 108241 - 36 - 47 - 9175 + 33 + 43 + 108241 - 47 + 43 54 - 9175 + 117017 54 - 65 - 8126 + 64 + 73136 @@ -6363,57 +6413,57 @@ 1 2 - 29623 + 333500 2 3 - 11797 + 122868 3 5 - 9437 + 111166 5 - 13 - 9437 + 9 + 111166 - 13 - 52 - 9175 + 9 + 18 + 105316 - 52 - 112 - 9175 + 18 + 60 + 105316 - 112 - 262 - 9175 + 61 + 182 + 105316 - 262 - 630 - 9175 + 182 + 372 + 108241 - 637 - 1186 - 9175 + 383 + 922 + 105316 - 1197 - 1625 - 9175 + 944 + 1519 + 105316 - 1632 - 1722 - 3932 + 1527 + 1757 + 90688 @@ -6423,15 +6473,15 @@ hasLocation - 53281114 + 70974218 locatableid - 53281114 + 70906932 id - 1717130 + 3080493 @@ -6445,7 +6495,12 @@ 1 2 - 53281114 + 70839647 + + + 2 + 3 + 67285 @@ -6461,62 +6516,72 @@ 1 2 - 294140 + 479772 2 3 - 182199 + 64359 3 + 4 + 266215 + + + 4 5 - 155983 + 231110 5 + 6 + 143346 + + + 6 7 - 126884 + 143346 7 + 8 + 146272 + + + 8 10 - 148905 + 242811 10 - 13 - 142089 + 14 + 257439 - 13 - 17 - 132651 + 14 + 19 + 231110 - 17 - 23 - 130030 + 19 + 26 + 239886 - 23 - 35 - 133175 + 26 + 44 + 231110 - 35 - 64 - 129505 + 44 + 81 + 236961 - 64 - 396 - 128981 - - - 405 - 9847 - 12583 + 81 + 881 + 166750 @@ -6526,23 +6591,23 @@ numlines - 41395164 + 467290086 element_id - 41395164 + 467290086 num_lines - 84414 + 939067 num_code - 83628 + 941993 num_comment - 258487 + 2881563 @@ -6556,7 +6621,7 @@ 1 2 - 41395164 + 467290086 @@ -6572,7 +6637,7 @@ 1 2 - 41395164 + 467290086 @@ -6588,7 +6653,7 @@ 1 2 - 41395164 + 467290086 @@ -6604,145 +6669,140 @@ 1 2 - 43780 + 509027 2 3 - 10748 + 111166 3 4 - 8389 + 93614 4 7 - 6816 - - - 7 - 14 - 6553 - - - 15 - 194 - 6553 - - - 320 - 149659 - 1572 - - - - - - - num_lines - num_code - - - 12 - - - 1 - 2 - 69471 - - - 2 - 3 - 9437 - - - 3 - 6 - 5505 - - - - - - - num_lines - num_comment - - - 12 - - - 1 - 2 - 51907 - - - 2 - 3 - 13370 - - - 3 - 4 - 7078 - - - 4 - 6 - 7340 - - - 6 - 987 - 4718 - - - - - - - num_code - element_id - - - 12 - - - 1 - 2 - 43255 - - - 2 - 3 - 10748 - - - 3 - 4 - 8389 - - - 4 - 7 - 7078 + 76061 7 15 - 6291 + 73136 16 - 214 - 6291 + 3454 + 73136 - 325 - 78746 - 1572 + 151799 + 151800 + 2925 + + + + + + + num_lines + num_code + + + 12 + + + 1 + 2 + 906887 + + + 2 + 4 + 32179 + + + + + + + num_lines + num_comment + + + 12 + + + 1 + 2 + 593865 + + + 2 + 3 + 149197 + + + 3 + 4 + 84837 + + + 4 + 7 + 76061 + + + 8 + 986 + 35105 + + + + + + + num_code + element_id + + + 12 + + + 1 + 2 + 511952 + + + 2 + 3 + 108241 + + + 3 + 4 + 93614 + + + 4 + 7 + 76061 + + + 7 + 15 + 73136 + + + 16 + 505 + 73136 + + + 76342 + 79249 + 5850 @@ -6758,17 +6818,12 @@ 1 2 - 70520 + 921515 2 - 3 - 7078 - - - 3 8 - 6029 + 20478 @@ -6784,27 +6839,27 @@ 1 2 - 50596 + 596790 2 3 - 13894 + 149197 3 4 - 7340 + 78987 4 - 6 - 6291 + 7 + 78987 - 6 - 987 - 5505 + 7 + 986 + 38030 @@ -6819,78 +6874,73 @@ 1 - 7 - 20972 + 5 + 219408 - 7 - 49 - 19399 + 5 + 41 + 225259 - 49 - 71 - 20186 + 41 + 70 + 239886 - 71 - 78 - 20710 + 70 + 75 + 225259 - 78 - 83 - 19923 + 75 + 82 + 231110 - 83 - 87 - 22283 + 82 + 86 + 219408 - 87 + 86 89 - 19137 + 193079 89 91 - 18351 + 207706 91 - 92 - 11010 - - - 92 93 - 13107 + 242811 93 94 - 14418 + 143346 94 95 - 13370 + 149197 95 97 - 20710 + 231110 97 - 119 - 19661 + 101 + 234035 - 120 - 75134 - 5243 + 101 + 75700 + 119943 @@ -6906,22 +6956,22 @@ 1 2 - 211560 + 2375461 2 3 - 22545 + 239886 3 7 - 19923 + 216482 7 - 120 - 4456 + 121 + 49732 @@ -6937,22 +6987,22 @@ 1 2 - 211560 + 2375461 2 3 - 22545 + 239886 3 7 - 19923 + 216482 7 122 - 4456 + 49732 @@ -6962,15 +7012,15 @@ files - 1291911 + 4338434 id - 1291911 + 4338434 name - 1291911 + 4338434 @@ -6984,7 +7034,7 @@ 1 2 - 1291911 + 4338434 @@ -7000,7 +7050,7 @@ 1 2 - 1291911 + 4338434 @@ -7010,15 +7060,15 @@ folders - 211876 + 857155 id - 211876 + 857155 name - 211876 + 857155 @@ -7032,7 +7082,7 @@ 1 2 - 211876 + 857155 @@ -7048,7 +7098,7 @@ 1 2 - 211876 + 857155 @@ -7058,15 +7108,15 @@ containerparent - 1496393 + 5189739 parent - 212871 + 871782 child - 1496393 + 5189739 @@ -7080,32 +7130,32 @@ 1 2 - 125311 + 585088 2 3 - 18613 + 58508 3 - 5 - 18613 + 6 + 76061 - 5 - 10 - 18088 + 6 + 12 + 67285 - 10 - 20 - 15991 + 12 + 45 + 67285 - 20 - 194 - 16253 + 55 + 192 + 17552 @@ -7121,7 +7171,7 @@ 1 2 - 1496393 + 5189739 @@ -7131,15 +7181,15 @@ cupackage - 1129635 + 2589018 id - 1129635 + 2589018 packageid - 85463 + 216482 @@ -7153,7 +7203,7 @@ 1 2 - 1129635 + 2589018 @@ -7169,57 +7219,62 @@ 1 2 - 18351 + 46807 2 3 - 11797 + 17552 3 4 - 6029 + 17552 4 5 - 5505 + 14627 5 - 7 - 4980 + 6 + 8776 - 7 + 6 + 8 + 17552 + + + 8 9 - 6291 + 5850 9 - 11 - 6553 + 10 + 17552 - 11 - 17 - 7864 + 10 + 15 + 17552 - 17 + 15 26 - 6816 + 17552 26 - 53 - 6553 + 40 + 17552 - 54 - 187 - 4718 + 41 + 80 + 17552 @@ -7229,19 +7284,19 @@ jarManifestMain - 132371 + 161093 fileid - 8960 + 11300 keyName - 9676 + 10098 value - 67858 + 82590 @@ -7255,67 +7310,57 @@ 1 5 - 358 + 480 5 6 - 1792 + 2885 6 7 - 1075 + 1081 9 - 10 - 358 - - - 13 15 - 597 + 961 15 - 16 - 716 + 17 + 961 - 16 - 18 - 716 + 17 + 19 + 721 - 18 - 21 - 716 + 19 + 20 + 841 - 21 + 20 23 - 477 + 961 23 26 - 597 + 841 26 - 27 - 358 + 28 + 961 - 27 - 29 - 716 - - - 29 + 28 36 - 477 + 601 @@ -7331,67 +7376,67 @@ 1 5 - 358 + 480 5 6 - 1792 + 2885 6 7 - 1075 + 1081 8 - 11 - 597 + 12 + 841 - 11 + 12 13 - 597 + 360 14 15 - 597 + 721 15 16 - 597 + 601 16 17 - 358 + 601 17 18 - 716 + 841 18 19 - 358 + 601 19 21 - 716 + 721 21 23 - 597 + 961 23 29 - 597 + 601 @@ -7407,42 +7452,47 @@ 1 2 - 4420 + 4448 2 4 - 716 + 721 4 6 - 597 + 841 6 - 12 - 836 + 10 + 601 - 18 - 30 - 836 + 11 + 31 + 841 - 30 - 34 - 716 + 33 + 40 + 841 - 34 - 42 - 836 + 40 + 49 + 601 - 42 - 76 - 716 + 50 + 66 + 841 + + + 73 + 95 + 360 @@ -7458,42 +7508,42 @@ 1 2 - 4898 + 4928 2 3 - 597 + 721 3 4 - 716 + 721 4 9 - 836 + 841 - 13 - 18 - 716 + 10 + 19 + 841 - 18 - 31 - 836 + 19 + 30 + 841 - 32 - 42 - 836 + 37 + 50 + 841 - 51 - 54 - 238 + 50 + 66 + 360 @@ -7509,17 +7559,22 @@ 1 2 - 58659 + 70688 2 - 4 - 5615 + 3 + 4928 - 4 - 76 - 3584 + 3 + 12 + 6251 + + + 12 + 95 + 721 @@ -7535,17 +7590,17 @@ 1 2 - 56269 + 69606 2 3 - 6570 + 7934 3 5 - 5017 + 5049 @@ -7555,23 +7610,23 @@ jarManifestEntries - 30196 + 216010 fileid - 61 + 344 entryName - 30124 + 213715 keyName - 27 + 143 value - 30158 + 213056 @@ -7585,72 +7640,67 @@ 1 2 - 4 + 28 - 4 - 10 - 3 + 7 + 38 + 28 - 10 - 12 - 4 + 55 + 56 + 14 - 12 - 31 - 4 + 59 + 60 + 28 - 65 - 82 - 4 + 68 + 76 + 28 - 123 - 164 - 4 + 88 + 103 + 28 - 178 - 240 - 4 + 113 + 150 + 28 - 253 - 294 - 4 + 176 + 322 + 28 - 307 - 357 - 4 + 330 + 387 + 28 - 361 - 395 - 4 + 603 + 771 + 28 - 433 - 461 - 4 + 872 + 1420 + 28 - 591 - 662 - 4 + 1831 + 1963 + 28 - 957 - 2267 - 4 - - - 3647 - 3762 - 3 + 5533 + 5534 + 14 @@ -7666,12 +7716,17 @@ 1 2 - 57 + 301 6 - 10 - 3 + 7 + 14 + + + 7 + 8 + 28 @@ -7687,72 +7742,67 @@ 1 2 - 4 + 14 - 3 - 8 - 4 + 4 + 5 + 28 - 9 - 13 - 4 + 17 + 56 + 28 - 24 - 66 - 4 + 59 + 60 + 28 - 70 - 124 - 4 + 68 + 76 + 28 - 127 - 179 - 4 + 88 + 103 + 28 - 195 - 254 - 4 + 109 + 150 + 28 - 265 - 308 - 4 + 176 + 321 + 28 - 320 - 362 - 4 + 330 + 387 + 28 - 381 - 434 - 4 + 603 + 770 + 28 - 434 - 592 - 4 + 851 + 1420 + 28 - 618 - 958 - 4 + 1803 + 1961 + 28 - 1671 - 3648 - 4 - - - 3761 - 3762 - 1 + 5509 + 5510 + 14 @@ -7768,12 +7818,12 @@ 1 2 - 30108 + 213228 2 - 26 - 16 + 21 + 487 @@ -7789,12 +7839,12 @@ 1 2 - 30121 + 213471 - 6 - 10 - 3 + 2 + 8 + 243 @@ -7810,12 +7860,12 @@ 1 2 - 30120 + 213156 - 3 - 26 - 4 + 2 + 20 + 559 @@ -7831,22 +7881,27 @@ 1 2 - 21 + 14 2 3 - 3 + 14 3 4 - 1 + 86 - 32 - 33 - 1 + 9 + 10 + 14 + + + 11 + 12 + 14 @@ -7859,30 +7914,30 @@ 12 - - 1 - 2 - 21 - 2 3 - 1 + 14 - 11 - 12 - 1 + 9 + 10 + 86 - 369 - 370 - 1 + 37 + 38 + 14 - 19366 - 19367 - 1 + 2415 + 2416 + 14 + + + 12451 + 12452 + 14 @@ -7898,22 +7953,27 @@ 1 2 - 22 + 28 2 3 - 1 + 57 - 369 - 370 - 1 + 8 + 9 + 28 - 19390 - 19391 - 1 + 2432 + 2433 + 14 + + + 12404 + 12405 + 14 @@ -7929,12 +7989,12 @@ 1 2 - 30156 + 212468 2 - 3 - 1 + 11 + 587 @@ -7950,12 +8010,12 @@ 1 2 - 30156 + 211693 - 11 - 12 - 1 + 2 + 38 + 1362 @@ -7971,12 +8031,12 @@ 1 2 - 30150 + 212998 2 3 - 7 + 57 @@ -7986,15 +8046,15 @@ packages - 96053 + 459294 id - 96053 + 459294 nodeName - 96053 + 459294 @@ -8008,7 +8068,7 @@ 1 2 - 96053 + 459294 @@ -8024,7 +8084,7 @@ 1 2 - 96053 + 459294 @@ -8034,15 +8094,15 @@ primitives - 5690 + 26329 id - 5690 + 26329 nodeName - 5690 + 26329 @@ -8056,7 +8116,7 @@ 1 2 - 5690 + 26329 @@ -8072,7 +8132,7 @@ 1 2 - 5690 + 26329 @@ -8082,15 +8142,15 @@ modifiers - 6259 + 32179 id - 6259 + 32179 nodeName - 6259 + 32179 @@ -8104,7 +8164,7 @@ 1 2 - 6259 + 32179 @@ -8120,7 +8180,7 @@ 1 2 - 6259 + 32179 @@ -8130,34 +8190,34 @@ error_type - 22 + 2925 id - 22 + 2925 classes_or_interfaces - 22273131 + 22649681 id - 22273131 + 22649681 nodeName - 5754222 + 5851507 parentid - 734 + 746 sourceid - 26258 + 26702 @@ -8171,7 +8231,7 @@ 1 2 - 22273131 + 22649681 @@ -8187,7 +8247,7 @@ 1 2 - 22273131 + 22649681 @@ -8203,7 +8263,7 @@ 1 2 - 22273131 + 22649681 @@ -8219,27 +8279,27 @@ 1 2 - 3703195 + 3765807 2 3 - 866201 + 880844 3 5 - 424184 + 431356 5 12 - 451316 + 458946 12 9655 - 309324 + 314553 @@ -8255,12 +8315,12 @@ 1 2 - 5753464 + 5850737 2 29 - 757 + 769 @@ -8276,12 +8336,12 @@ 1 2 - 5753210 + 5850478 2 3091 - 1011 + 1028 @@ -8297,62 +8357,62 @@ 1 2 - 132 + 135 2 3 - 40 + 41 3 5 - 63 + 64 5 7 - 46 + 47 7 8 - 57 + 58 8 11 - 63 + 64 11 23 - 57 + 58 23 41 - 63 + 64 42 158 - 57 + 58 162 1034 - 57 + 58 1315 34752 - 57 + 58 36100 2058753 - 34 + 35 @@ -8368,32 +8428,32 @@ 1 2 - 132 + 135 2 3 - 40 + 41 3 4 - 28 + 29 4 5 - 40 + 41 5 6 - 34 + 35 6 7 - 40 + 41 7 @@ -8403,32 +8463,32 @@ 9 15 - 57 + 58 15 24 - 63 + 64 24 56 - 57 + 58 57 178 - 57 + 58 186 3066 - 57 + 58 3515 65688 - 57 + 58 298524 @@ -8449,57 +8509,57 @@ 1 2 - 150 + 152 2 3 - 80 + 82 3 4 - 34 + 35 4 5 - 63 + 64 5 7 - 40 + 41 7 9 - 63 + 64 9 11 - 63 + 64 12 15 - 46 + 47 16 23 - 57 + 58 25 41 - 57 + 58 47 113 - 57 + 58 113 @@ -8520,17 +8580,17 @@ 1 2 - 23281 + 23675 2 15 - 1994 + 2027 15 448199 - 982 + 999 @@ -8546,17 +8606,17 @@ 1 2 - 23281 + 23675 2 10 - 2005 + 2039 10 100263 - 971 + 987 @@ -8572,7 +8632,7 @@ 1 2 - 26258 + 26702 @@ -8582,26 +8642,26 @@ file_class - 17711 + 18779 id - 17711 + 18779 class_object - 22283 + 23013 id - 22283 + 23013 instance - 22283 + 23013 @@ -8615,7 +8675,7 @@ 1 2 - 22283 + 23013 @@ -8631,7 +8691,7 @@ 1 2 - 22283 + 23013 @@ -8641,19 +8701,19 @@ type_companion_object - 41945 + 42587 id - 41945 + 42587 instance - 41945 + 42587 companion_object - 41945 + 42587 @@ -8667,7 +8727,7 @@ 1 2 - 41945 + 42587 @@ -8683,7 +8743,7 @@ 1 2 - 41945 + 42587 @@ -8699,7 +8759,7 @@ 1 2 - 41945 + 42587 @@ -8715,7 +8775,7 @@ 1 2 - 41945 + 42587 @@ -8731,7 +8791,7 @@ 1 2 - 41945 + 42587 @@ -8747,7 +8807,7 @@ 1 2 - 41945 + 42587 @@ -8757,15 +8817,15 @@ kt_nullable_types - 262 + 264 id - 262 + 264 classid - 262 + 264 @@ -8779,7 +8839,7 @@ 1 2 - 262 + 264 @@ -8795,7 +8855,7 @@ 1 2 - 262 + 264 @@ -8805,15 +8865,15 @@ kt_notnull_types - 156265 + 161049 id - 156265 + 161049 classid - 156265 + 161049 @@ -8827,7 +8887,7 @@ 1 2 - 156265 + 161049 @@ -8843,7 +8903,7 @@ 1 2 - 156265 + 161049 @@ -8853,19 +8913,19 @@ kt_type_alias - 707 + 625 id - 707 + 625 name - 583 + 614 kttypeid - 12 + 11 @@ -8879,7 +8939,7 @@ 1 2 - 707 + 625 @@ -8895,7 +8955,7 @@ 1 2 - 707 + 625 @@ -8911,12 +8971,12 @@ 1 2 - 459 + 602 2 3 - 124 + 11 @@ -8932,7 +8992,7 @@ 1 2 - 583 + 614 @@ -8946,9 +9006,9 @@ 12 - 57 - 58 - 12 + 55 + 56 + 11 @@ -8962,9 +9022,9 @@ 12 - 47 - 48 - 12 + 54 + 55 + 11 @@ -8974,48 +9034,37 @@ isInterface - 21473562 + 21836595 id - 21473562 + 21836595 isRecord - 417 + 11019 id - 417 - - - - - - isCanonicalConstr - 417 - - - constructorid - 417 + 11019 fielddecls - 210035 + 204459 id - 210035 + 204459 parentid - 24609 + 16879 @@ -9029,7 +9078,7 @@ 1 2 - 210035 + 204459 @@ -9044,53 +9093,53 @@ 1 - 2 - 6180 - - - 2 3 - 2975 + 227 3 4 - 2769 + 3275 4 6 - 1694 + 272 6 7 - 2563 + 3867 7 - 9 - 938 + 8 + 90 9 - 12 - 1922 + 10 + 2411 12 - 15 - 1877 + 13 + 2684 15 - 24 - 1854 + 16 + 1273 - 24 + 17 + 25 + 1501 + + + 27 145 - 1831 + 1273 @@ -9100,19 +9149,19 @@ fieldDeclaredIn - 210035 + 204459 fieldId - 135178 + 69063 fieldDeclId - 210035 + 204459 pos - 22 + 45 @@ -9125,18 +9174,13 @@ 1 - 2 - 94498 - - - 2 3 - 6501 + 2183 3 4 - 34177 + 66879 @@ -9152,7 +9196,7 @@ 1 2 - 135178 + 69063 @@ -9168,7 +9212,7 @@ 1 2 - 210035 + 204459 @@ -9184,7 +9228,7 @@ 1 2 - 210035 + 204459 @@ -9198,9 +9242,9 @@ 12 - 5905 - 5906 - 22 + 1518 + 1519 + 45 @@ -9214,9 +9258,9 @@ 12 - 9175 - 9176 - 22 + 4494 + 4495 + 45 @@ -9226,23 +9270,23 @@ fields - 2886451 + 9378976 id - 2886451 + 9378976 nodeName - 2508459 + 7831415 typeid - 182623 + 848379 parentid - 249278 + 1515380 @@ -9256,7 +9300,7 @@ 1 2 - 2886451 + 9378976 @@ -9272,7 +9316,7 @@ 1 2 - 2886451 + 9378976 @@ -9288,7 +9332,7 @@ 1 2 - 2886451 + 9378976 @@ -9304,12 +9348,12 @@ 1 2 - 2356342 + 7430629 2 - 302 - 152116 + 211 + 400785 @@ -9325,12 +9369,12 @@ 1 2 - 2425714 + 7609082 2 - 183 - 82744 + 57 + 222333 @@ -9346,12 +9390,12 @@ 1 2 - 2356342 + 7430629 2 - 302 - 152116 + 211 + 400785 @@ -9367,237 +9411,232 @@ 1 2 - 124952 + 517803 2 3 - 21104 + 87763 3 4 - 10447 - - - 4 - 8 - 14835 - - - 8 - 9650 - 11283 - - - - - - - typeid - nodeName - - - 12 - - - 1 - 2 - 130385 - - - 2 - 3 - 17969 - - - 3 - 5 - 16716 - - - 5 - 20 - 13790 - - - 22 - 8913 - 3761 - - - - - - - typeid - parentid - - - 12 - - - 1 - 2 - 154205 - - - 2 - 3 - 18596 - - - 3 - 679 - 9820 - - - - - - - parentid - id - - - 12 - - - 1 - 2 - 115132 - - - 2 - 3 - 25074 - - - 3 - 4 - 20477 - - - 4 - 5 - 15253 - - - 5 - 6 - 12328 - - - 6 - 8 - 18387 - - - 8 - 14 - 19641 - - - 14 - 93 - 18805 - - - 95 - 1772 - 4179 - - - - - - - parentid - nodeName - - - 12 - - - 1 - 2 - 115132 - - - 2 - 3 - 25074 - - - 3 - 4 - 20477 - - - 4 - 5 - 15253 - - - 5 - 6 - 12328 - - - 6 - 8 - 18387 - - - 8 - 14 - 19641 - - - 14 - 93 - 18805 - - - 95 - 1772 - 4179 - - - - - - - parentid - typeid - - - 12 - - - 1 - 2 - 165280 - - - 2 - 3 - 39909 - - - 3 - 4 - 20895 + 87763 4 7 - 18805 + 73136 7 - 27 - 4387 + 41 + 64359 + + + 43 + 1685 + 17552 + + + + + + + typeid + nodeName + + + 12 + + + 1 + 2 + 523654 + + + 2 + 3 + 87763 + + + 3 + 4 + 87763 + + + 4 + 7 + 67285 + + + 7 + 40 + 64359 + + + 41 + 1407 + 17552 + + + + + + + typeid + parentid + + + 12 + + + 1 + 2 + 728435 + + + 2 + 4 + 76061 + + + 4 + 345 + 43881 + + + + + + + parentid + id + + + 12 + + + 1 + 2 + 798646 + + + 2 + 3 + 131645 + + + 3 + 4 + 143346 + + + 4 + 5 + 76061 + + + 5 + 7 + 108241 + + + 7 + 12 + 117017 + + + 12 + 68 + 114092 + + + 68 + 258 + 26329 + + + + + + + parentid + nodeName + + + 12 + + + 1 + 2 + 798646 + + + 2 + 3 + 131645 + + + 3 + 4 + 143346 + + + 4 + 5 + 76061 + + + 5 + 7 + 108241 + + + 7 + 12 + 117017 + + + 12 + 68 + 114092 + + + 68 + 258 + 26329 + + + + + + + parentid + typeid + + + 12 + + + 1 + 2 + 1102892 + + + 2 + 3 + 172601 + + + 3 + 4 + 134570 + + + 4 + 16 + 105316 @@ -9607,15 +9646,15 @@ fieldsKotlinType - 2667261 + 2709722 id - 2667261 + 2709722 kttypeid - 208 + 212 @@ -9629,7 +9668,7 @@ 1 2 - 2667261 + 2709722 @@ -9643,9 +9682,9 @@ 12 - 12765 - 12766 - 208 + 12767 + 12768 + 212 @@ -9655,31 +9694,31 @@ constrs - 1103682 + 3016133 id - 1103682 + 3016133 nodeName - 597980 + 1512455 signature - 938261 + 2919593 typeid - 524 + 2925 parentid - 777558 + 1594367 sourceid - 788044 + 2688483 @@ -9693,7 +9732,7 @@ 1 2 - 1103682 + 3016133 @@ -9709,7 +9748,7 @@ 1 2 - 1103682 + 3016133 @@ -9725,7 +9764,7 @@ 1 2 - 1103682 + 3016133 @@ -9741,7 +9780,7 @@ 1 2 - 1103682 + 3016133 @@ -9757,7 +9796,7 @@ 1 2 - 1103682 + 3016133 @@ -9773,58 +9812,63 @@ 1 2 - 363874 + 863006 2 3 - 145759 + 348127 3 4 - 38274 + 93614 4 - 12 - 45615 - - - 12 - 36 - 4456 - - - - - - - nodeName - signature - - - 12 - - - 1 - 2 - 412373 - - - 2 - 3 - 116397 - - - 3 5 - 49285 + 111166 5 19 - 19923 + 96539 + + + + + + + nodeName + signature + + + 12 + + + 1 + 2 + 880558 + + + 2 + 3 + 345202 + + + 3 + 4 + 90688 + + + 4 + 6 + 137495 + + + 6 + 19 + 58508 @@ -9840,7 +9884,7 @@ 1 2 - 597980 + 1512455 @@ -9856,17 +9900,12 @@ 1 2 - 520120 + 1468573 2 - 3 - 54528 - - - 3 - 36 - 23332 + 7 + 43881 @@ -9882,22 +9921,27 @@ 1 2 - 379603 + 877633 2 3 - 145497 + 345202 3 - 5 - 51120 + 4 + 93614 - 5 - 32 - 21759 + 4 + 6 + 134570 + + + 6 + 19 + 61434 @@ -9913,12 +9957,12 @@ 1 2 - 869575 + 2866935 2 - 36 - 68685 + 7 + 52658 @@ -9934,7 +9978,7 @@ 1 2 - 938261 + 2919593 @@ -9950,7 +9994,7 @@ 1 2 - 938261 + 2919593 @@ -9966,12 +10010,12 @@ 1 2 - 869575 + 2866935 2 - 36 - 68685 + 7 + 52658 @@ -9987,12 +10031,12 @@ 1 2 - 891597 + 2887414 2 - 23 - 46664 + 4 + 32179 @@ -10006,14 +10050,9 @@ 12 - 22 - 23 - 262 - - - 4188 - 4189 - 262 + 1031 + 1032 + 2925 @@ -10027,14 +10066,9 @@ 12 - 1 - 2 - 262 - - - 2280 - 2281 - 262 + 517 + 518 + 2925 @@ -10048,14 +10082,9 @@ 12 - 1 - 2 - 262 - - - 3578 - 3579 - 262 + 998 + 999 + 2925 @@ -10069,14 +10098,9 @@ 12 - 22 - 23 - 262 - - - 2944 - 2945 - 262 + 545 + 546 + 2925 @@ -10090,14 +10114,9 @@ 12 - 22 - 23 - 262 - - - 2984 - 2985 - 262 + 919 + 920 + 2925 @@ -10113,22 +10132,27 @@ 1 2 - 588281 + 947844 2 3 - 120068 + 359829 3 + 4 + 87763 + + + 4 6 - 61869 + 137495 6 19 - 7340 + 61434 @@ -10144,7 +10168,7 @@ 1 2 - 777558 + 1594367 @@ -10160,22 +10184,27 @@ 1 2 - 588281 + 947844 2 3 - 120068 + 359829 3 + 4 + 87763 + + + 4 6 - 61869 + 137495 6 19 - 7340 + 61434 @@ -10191,7 +10220,7 @@ 1 2 - 777558 + 1594367 @@ -10207,22 +10236,27 @@ 1 2 - 588281 + 947844 2 3 - 120068 + 359829 3 + 4 + 87763 + + + 4 6 - 61869 + 137495 6 19 - 7340 + 61434 @@ -10238,12 +10272,12 @@ 1 2 - 737710 + 2589018 2 - 219 - 50334 + 53 + 99465 @@ -10259,12 +10293,12 @@ 1 2 - 737710 + 2589018 2 - 178 - 50334 + 49 + 99465 @@ -10280,12 +10314,12 @@ 1 2 - 737710 + 2589018 2 - 178 - 50334 + 49 + 99465 @@ -10301,7 +10335,7 @@ 1 2 - 788044 + 2688483 @@ -10317,12 +10351,12 @@ 1 2 - 737710 + 2589018 2 - 219 - 50334 + 53 + 99465 @@ -10332,15 +10366,15 @@ constrsKotlinType - 1103682 + 1126860 id - 1103682 + 1126860 kttypeid - 262 + 264 @@ -10354,7 +10388,7 @@ 1 2 - 1103682 + 1126860 @@ -10368,9 +10402,9 @@ 12 - 4210 - 4211 - 262 + 4260 + 4261 + 264 @@ -10380,31 +10414,31 @@ methods - 15113893 + 38724113 id - 15113893 + 38724113 nodeName - 3165025 + 15305927 signature - 4608463 + 20940334 typeid - 1843228 + 3867438 parentid - 1782931 + 3607073 sourceid - 9250220 + 33645541 @@ -10418,7 +10452,7 @@ 1 2 - 15113893 + 38724113 @@ -10434,7 +10468,7 @@ 1 2 - 15113893 + 38724113 @@ -10450,7 +10484,7 @@ 1 2 - 15113893 + 38724113 @@ -10466,7 +10500,7 @@ 1 2 - 15113893 + 38724113 @@ -10482,7 +10516,7 @@ 1 2 - 15113893 + 38724113 @@ -10498,32 +10532,22 @@ 1 2 - 1845587 + 10323894 2 3 - 561540 + 2553913 3 - 4 - 218114 + 5 + 1366182 - 4 - 7 - 277624 - - - 7 - 61 - 238038 - - - 61 - 1769 - 24118 + 5 + 297 + 1061936 @@ -10539,17 +10563,17 @@ 1 2 - 2647264 + 12842703 2 3 - 306986 + 1647025 3 - 308 - 210774 + 100 + 816199 @@ -10565,22 +10589,17 @@ 1 2 - 2651983 + 13772994 2 - 3 - 257176 + 5 + 1164327 - 3 - 25 - 238300 - - - 25 - 752 - 17564 + 5 + 217 + 368606 @@ -10596,27 +10615,22 @@ 1 2 - 1943110 + 11298068 2 3 - 536111 + 1962973 3 - 4 - 207628 + 5 + 1187730 - 4 - 7 - 249311 - - - 7 - 1120 - 228863 + 5 + 297 + 857155 @@ -10632,27 +10646,22 @@ 1 2 - 1905621 + 10458465 2 3 - 589067 + 2603645 3 - 4 - 213396 + 5 + 1240388 - 4 - 7 - 254292 - - - 7 - 811 - 202647 + 5 + 267 + 1003427 @@ -10668,27 +10677,22 @@ 1 2 - 3143266 + 16473180 2 3 - 751080 + 2533435 3 - 5 - 358893 + 9 + 1623621 - 5 - 152 - 345785 - - - 155 - 1117 - 9437 + 9 + 297 + 310097 @@ -10704,7 +10708,7 @@ 1 2 - 4608463 + 20940334 @@ -10720,17 +10724,12 @@ 1 2 - 4140250 + 19565375 2 - 5 - 362301 - - - 5 - 750 - 105911 + 217 + 1374959 @@ -10746,27 +10745,22 @@ 1 2 - 3144052 + 16473180 2 3 - 750818 + 2533435 3 - 5 - 358369 + 9 + 1623621 - 5 - 152 - 345785 - - - 155 - 1117 - 9437 + 9 + 297 + 310097 @@ -10782,22 +10776,22 @@ 1 2 - 3232137 + 16642855 2 3 - 780704 + 2559764 3 - 6 - 397692 + 10 + 1573889 - 6 - 806 - 197928 + 10 + 267 + 163824 @@ -10813,94 +10807,104 @@ 1 2 - 915453 + 2047811 2 3 - 377244 + 769392 3 4 - 167256 + 260364 4 + 7 + 315948 + + + 7 + 22 + 295469 + + + 22 + 3081 + 178452 + + + + + + + typeid + nodeName + + + 12 + + + 1 + 2 + 2375461 + + + 2 + 3 + 740137 + + + 3 6 - 153099 + 342277 + + + 6 + 19 + 292544 + + + 19 + 1469 + 117017 + + + + + + + typeid + signature + + + 12 + + + 1 + 2 + 2299399 + + + 2 + 3 + 743062 + + + 3 + 6 + 351053 6 15 - 140254 + 292544 15 - 10397 - 89919 - - - - - - - typeid - nodeName - - - 12 - - - 1 - 2 - 1203826 - - - 2 - 3 - 363612 - - - 3 - 6 - 160964 - - - 6 - 2934 - 114824 - - - - - - - typeid - signature - - - 12 - - - 1 - 2 - 1183115 - - - 2 - 3 - 361514 - - - 3 - 6 - 165945 - - - 6 - 4201 - 132651 + 1842 + 181377 @@ -10916,27 +10920,27 @@ 1 2 - 1068028 + 2381312 2 3 - 396119 + 813273 3 4 - 153886 + 257439 4 - 8 - 146283 + 10 + 304246 - 8 - 2901 - 78909 + 10 + 672 + 111166 @@ -10952,32 +10956,32 @@ 1 2 - 992265 + 2062438 2 3 - 349717 + 778168 3 4 - 151789 + 257439 4 - 6 - 149167 + 7 + 304246 - 6 - 16 - 140254 + 7 + 23 + 318873 - 16 - 6502 - 60034 + 23 + 2847 + 146272 @@ -10993,235 +10997,230 @@ 1 2 - 511993 + 1372033 2 3 - 206055 + 157974 3 4 - 160964 + 318873 4 - 5 - 100930 - - - 5 - 7 - 139992 - - - 7 - 10 - 153099 - - - 10 - 13 - 159915 - - - 13 - 21 - 162013 - - - 21 - 40 - 140778 - - - 40 - 319 - 47188 - - - - - - - parentid - nodeName - - - 12 - - - 1 - 2 - 518547 - - - 2 - 3 - 206317 - - - 3 - 4 - 170140 - - - 4 - 5 - 108533 - - - 5 - 7 - 131865 - - - 7 - 10 - 163324 - - - 10 - 13 - 153886 - - - 13 - 18 - 116397 - - - 18 - 27 - 136846 - - - 27 - 290 - 77074 - - - - - - - parentid - signature - - - 12 - - - 1 - 2 - 511993 - - - 2 - 3 - 206055 - - - 3 - 4 - 160964 - - - 4 - 5 - 100930 - - - 5 - 7 - 139992 - - - 7 - 10 - 153099 - - - 10 - 13 - 159915 - - - 13 - 21 - 162013 - - - 21 - 40 - 140778 - - - 40 - 319 - 47188 - - - - - - - parentid - typeid - - - 12 - - - 1 - 2 - 611613 - - - 2 - 3 - 246690 - - - 3 - 4 - 198453 - - - 4 - 5 - 126621 - - - 5 6 - 102503 + 277917 6 - 7 - 77074 + 9 + 266215 - 7 - 8 - 122951 - - - 8 + 9 11 - 160178 + 295469 11 - 35 - 133962 + 18 + 298395 - 37 - 78 - 2883 + 18 + 30 + 277917 + + + 30 + 69 + 272066 + + + 69 + 409 + 70210 + + + + + + + parentid + nodeName + + + 12 + + + 1 + 2 + 1389586 + + + 2 + 3 + 152123 + + + 3 + 4 + 345202 + + + 4 + 6 + 277917 + + + 6 + 9 + 283768 + + + 9 + 11 + 298395 + + + 11 + 18 + 298395 + + + 18 + 29 + 286693 + + + 29 + 291 + 272066 + + + 390 + 391 + 2925 + + + + + + + parentid + signature + + + 12 + + + 1 + 2 + 1372033 + + + 2 + 3 + 157974 + + + 3 + 4 + 318873 + + + 4 + 6 + 277917 + + + 6 + 9 + 266215 + + + 9 + 11 + 295469 + + + 11 + 18 + 298395 + + + 18 + 30 + 277917 + + + 30 + 69 + 272066 + + + 69 + 409 + 70210 + + + + + + + parentid + typeid + + + 12 + + + 1 + 2 + 1494902 + + + 2 + 3 + 295469 + + + 3 + 4 + 380307 + + + 4 + 5 + 213557 + + + 5 + 6 + 213557 + + + 6 + 7 + 304246 + + + 7 + 9 + 248662 + + + 9 + 13 + 301320 + + + 13 + 41 + 155048 @@ -11237,52 +11236,52 @@ 1 2 - 511993 + 1372033 2 3 - 206055 + 157974 3 4 - 160964 + 318873 4 - 5 - 100930 + 6 + 277917 - 5 - 7 - 139992 + 6 + 9 + 266215 - 7 - 10 - 153099 + 9 + 11 + 295469 - 10 - 13 - 159915 + 11 + 18 + 298395 - 13 - 21 - 162013 + 18 + 30 + 277917 - 21 - 40 - 140778 + 30 + 69 + 272066 - 40 - 319 - 47188 + 69 + 409 + 70210 @@ -11298,17 +11297,12 @@ 1 2 - 8524569 + 32343718 2 - 50 - 695241 - - - 52 - 296 - 30410 + 100 + 1301822 @@ -11324,7 +11318,7 @@ 1 2 - 9250220 + 33645541 @@ -11340,12 +11334,12 @@ 1 2 - 9204343 + 33578256 2 - 294 - 45877 + 99 + 67285 @@ -11361,12 +11355,12 @@ 1 2 - 8968401 + 33156992 2 - 219 - 281819 + 53 + 488549 @@ -11382,17 +11376,12 @@ 1 2 - 8524569 + 32343718 2 - 50 - 695241 - - - 52 - 296 - 30410 + 100 + 1301822 @@ -11402,15 +11391,15 @@ methodsKotlinType - 15113893 + 15270811 id - 15113893 + 15270811 kttypeid - 262 + 264 @@ -11424,7 +11413,7 @@ 1 2 - 15113893 + 15270811 @@ -11438,9 +11427,9 @@ 12 - 57652 - 57653 - 262 + 57730 + 57731 + 264 @@ -11450,27 +11439,27 @@ params - 16587479 + 41491584 id - 16587479 + 41491584 typeid - 1772707 + 3662656 pos - 5767 + 58508 parentid - 8942448 + 24883834 sourceid - 10111931 + 37787971 @@ -11484,7 +11473,7 @@ 1 2 - 16587479 + 41491584 @@ -11500,7 +11489,7 @@ 1 2 - 16587479 + 41491584 @@ -11516,7 +11505,7 @@ 1 2 - 16587479 + 41491584 @@ -11532,7 +11521,7 @@ 1 2 - 16587479 + 41491584 @@ -11548,68 +11537,68 @@ 1 2 - 935901 + 1752341 2 3 - 269759 + 547058 3 4 - 130816 + 280842 4 - 6 - 158080 + 5 + 257439 - 6 - 12 - 138943 - - - 12 - 326 - 133438 - - - 343 - 6748 - 5767 - - - - - - - typeid - pos - - - 12 - - - 1 - 2 - 1442651 - - - 2 - 3 - 185345 - - - 3 + 5 9 - 136321 + 324724 9 - 17 - 8389 + 18 + 280842 + + + 18 + 3026 + 219408 + + + + + + + typeid + pos + + + 12 + + + 1 + 2 + 2706036 + + + 2 + 3 + 506101 + + + 3 + 5 + 307171 + + + 5 + 15 + 143346 @@ -11625,32 +11614,37 @@ 1 2 - 968933 + 1913240 2 3 - 262943 + 494400 3 4 - 134486 + 272066 4 - 6 - 149691 + 5 + 236961 - 6 - 13 - 137894 + 5 + 9 + 283768 - 13 - 4336 - 118757 + 9 + 21 + 280842 + + + 21 + 2094 + 181377 @@ -11666,32 +11660,37 @@ 1 2 - 998032 + 1778670 2 3 - 248787 + 582163 3 4 - 136846 + 283768 4 6 - 153362 + 324724 6 - 13 - 137894 + 11 + 310097 - 13 - 5757 - 97784 + 11 + 39 + 274991 + + + 40 + 2921 + 108241 @@ -11707,189 +11706,274 @@ 1 2 - 524 - - - 50 - 53 - 524 - - - 104 - 106 - 524 - - - 157 - 165 - 524 - - - 214 - 231 - 524 - - - 291 - 315 - 524 - - - 485 - 606 - 524 - - - 804 - 1067 - 524 - - - 1445 - 2015 - 524 - - - 3087 - 5218 - 524 - - - 12756 - 34112 - 524 - - - - - - - pos - typeid - - - 12 - - - 1 - 2 - 524 + 5850 2 - 5 - 524 + 3 + 5850 - 6 - 7 - 524 + 3 + 4 + 5850 + + + 5 + 6 + 2925 + + + 7 + 8 + 2925 11 - 14 - 524 + 12 + 2925 15 - 20 - 524 + 16 + 2925 - 27 - 37 - 524 + 22 + 23 + 2925 - 57 - 75 - 524 - - - 97 - 153 - 524 - - - 201 - 289 - 524 - - - 406 - 789 - 524 - - - 1997 - 5152 - 524 - - - - - - - pos - parentid - - - 12 - - - 1 - 2 - 524 + 34 + 35 + 2925 50 - 53 - 524 + 51 + 2925 - 104 - 106 - 524 + 78 + 79 + 2925 - 157 - 165 - 524 + 128 + 129 + 2925 - 214 - 231 - 524 + 215 + 216 + 2925 - 291 - 315 - 524 + 567 + 568 + 2925 - 485 - 606 - 524 + 1284 + 1285 + 2925 - 804 - 1067 - 524 + 3249 + 3250 + 2925 - 1445 - 2015 - 524 + 8506 + 8507 + 2925 + + + + + + + pos + typeid + + + 12 + + + 1 + 2 + 5850 - 3087 - 5218 - 524 + 2 + 3 + 5850 - 12756 - 34112 - 524 + 3 + 4 + 5850 + + + 5 + 6 + 5850 + + + 8 + 9 + 2925 + + + 9 + 10 + 2925 + + + 14 + 15 + 2925 + + + 20 + 21 + 2925 + + + 26 + 27 + 2925 + + + 28 + 29 + 2925 + + + 42 + 43 + 2925 + + + 70 + 71 + 2925 + + + 109 + 110 + 2925 + + + 208 + 209 + 2925 + + + 450 + 451 + 2925 + + + 964 + 965 + 2925 + + + + + + + pos + parentid + + + 12 + + + 1 + 2 + 5850 + + + 2 + 3 + 5850 + + + 3 + 4 + 5850 + + + 5 + 6 + 2925 + + + 7 + 8 + 2925 + + + 11 + 12 + 2925 + + + 15 + 16 + 2925 + + + 22 + 23 + 2925 + + + 34 + 35 + 2925 + + + 50 + 51 + 2925 + + + 78 + 79 + 2925 + + + 128 + 129 + 2925 + + + 215 + 216 + 2925 + + + 567 + 568 + 2925 + + + 1284 + 1285 + 2925 + + + 3249 + 3250 + 2925 + + + 8506 + 8507 + 2925 @@ -11905,57 +11989,87 @@ 1 2 - 524 + 5850 2 - 5 - 524 + 3 + 5850 - 6 + 3 + 4 + 5850 + + + 5 + 6 + 2925 + + + 7 8 - 524 + 2925 11 - 15 - 524 + 12 + 2925 - 16 - 29 - 524 + 15 + 16 + 2925 - 39 - 63 - 524 + 22 + 23 + 2925 - 101 - 144 - 524 + 34 + 35 + 2925 - 210 - 386 - 524 + 50 + 51 + 2925 - 628 - 1069 - 524 + 77 + 78 + 2925 - 1958 - 3765 - 524 + 127 + 128 + 2925 - 8596 - 21529 - 524 + 212 + 213 + 2925 + + + 558 + 559 + 2925 + + + 1247 + 1248 + 2925 + + + 2999 + 3000 + 2925 + + + 7541 + 7542 + 2925 @@ -11971,27 +12085,22 @@ 1 2 - 5598369 + 15379063 2 3 - 1976404 + 5748499 3 4 - 558395 + 2097543 4 - 10 - 682133 - - - 10 - 23 - 127146 + 21 + 1658727 @@ -12007,17 +12116,22 @@ 1 2 - 6239868 + 16993909 2 3 - 2032767 + 5748499 3 - 23 - 669811 + 5 + 2003929 + + + 5 + 11 + 137495 @@ -12033,27 +12147,22 @@ 1 2 - 5598369 + 15379063 2 3 - 1976404 + 5748499 3 4 - 558395 + 2097543 4 - 10 - 682133 - - - 10 - 23 - 127146 + 21 + 1658727 @@ -12069,27 +12178,22 @@ 1 2 - 5598369 + 15379063 2 3 - 1976404 + 5748499 3 4 - 558395 + 2097543 4 - 10 - 682133 - - - 10 - 23 - 127146 + 21 + 1658727 @@ -12105,12 +12209,12 @@ 1 2 - 9415117 + 36570986 2 - 296 - 696814 + 100 + 1216985 @@ -12126,12 +12230,12 @@ 1 2 - 9877563 + 37246764 2 - 296 - 234368 + 100 + 541207 @@ -12147,7 +12251,7 @@ 1 2 - 10111931 + 37787971 @@ -12163,12 +12267,12 @@ 1 2 - 9415117 + 36570986 2 - 296 - 696814 + 100 + 1216985 @@ -12178,15 +12282,15 @@ paramsKotlinType - 16587479 + 16773557 id - 16587479 + 16773557 kttypeid - 262 + 264 @@ -12200,7 +12304,7 @@ 1 2 - 16587479 + 16773557 @@ -12214,9 +12318,9 @@ 12 - 63273 - 63274 - 262 + 63411 + 63412 + 264 @@ -12226,15 +12330,15 @@ paramName - 2140514 + 3934150 id - 2140514 + 3934150 nodeName - 319307 + 41443 @@ -12248,7 +12352,7 @@ 1 2 - 2140514 + 3934150 @@ -12264,37 +12368,42 @@ 1 2 - 136321 + 12976 2 3 - 61869 + 9556 3 4 - 34342 + 3218 4 5 - 23332 + 3118 5 - 8 - 24904 + 7 + 3721 - 8 - 19 - 24118 + 7 + 13 + 3118 - 19 - 770 - 14418 + 13 + 42 + 3118 + + + 42 + 19048 + 2615 @@ -12304,30 +12413,30 @@ isVarargsParam - 684318 + 695853 param - 684318 + 695853 exceptions - 1232644 + 3735793 id - 1232644 + 3735793 typeid - 36990 + 187228 parentid - 987367 + 3273572 @@ -12341,7 +12450,7 @@ 1 2 - 1232644 + 3735793 @@ -12357,7 +12466,7 @@ 1 2 - 1232644 + 3735793 @@ -12373,47 +12482,52 @@ 1 2 - 11950 + 43881 2 3 - 3983 + 23403 3 4 - 4552 + 23403 4 - 7 - 2276 + 5 + 14627 - 7 + 5 8 - 2845 + 14627 - 9 - 13 - 3414 + 8 + 11 + 14627 - 20 - 35 - 2845 + 11 + 23 + 14627 - 41 - 93 - 2845 + 23 + 34 + 14627 - 106 - 813 - 2276 + 35 + 65 + 14627 + + + 67 + 556 + 8776 @@ -12429,47 +12543,52 @@ 1 2 - 11950 + 43881 2 3 - 3983 + 23403 3 4 - 4552 + 23403 4 - 7 - 2276 + 5 + 14627 - 7 + 5 8 - 2845 + 14627 - 9 - 13 - 3414 + 8 + 11 + 14627 - 20 - 35 - 2845 + 11 + 23 + 14627 - 41 - 93 - 2845 + 23 + 34 + 14627 - 106 - 813 - 2276 + 35 + 65 + 14627 + + + 67 + 556 + 8776 @@ -12485,17 +12604,17 @@ 1 2 - 755179 + 2913743 2 3 - 224220 + 274991 3 6 - 7967 + 84837 @@ -12511,17 +12630,17 @@ 1 2 - 755179 + 2913743 2 3 - 224220 + 274991 3 6 - 7967 + 84837 @@ -12531,41 +12650,41 @@ isAnnotType - 35103 + 61434 interfaceid - 35103 + 61434 isAnnotElem - 49101 + 58508 methodid - 49101 + 58508 annotValue - 1421553 + 3223840 parentid - 1172586 + 1184805 id2 - 1074 + 58508 value - 1421553 + 3223840 @@ -12579,12 +12698,22 @@ 1 2 - 1135381 + 155048 2 - 18 - 37205 + 3 + 784019 + + + 4 + 5 + 73136 + + + 7 + 8 + 172601 @@ -12600,12 +12729,22 @@ 1 2 - 1133350 + 155048 2 - 20 - 39235 + 3 + 784019 + + + 4 + 5 + 73136 + + + 7 + 8 + 172601 @@ -12618,65 +12757,45 @@ 12 - - 1 - 2 - 198 - 2 3 - 95 + 2925 3 4 - 88 + 2925 - 5 - 8 - 88 + 6 + 7 + 2925 - 8 - 16 - 88 + 21 + 22 + 5850 - 20 - 25 - 88 + 25 + 26 + 11701 - 34 - 59 - 66 + 59 + 60 + 20478 - 86 - 102 - 80 + 64 + 65 + 5850 - 121 - 185 - 51 - - - 203 - 684 - 80 - - - 1733 - 1734 - 125 - - - 1842 - 153327 - 22 + 204 + 205 + 5850 @@ -12689,65 +12808,45 @@ 12 - - 1 - 2 - 198 - 2 3 - 88 + 2925 3 4 - 88 + 2925 - 4 - 8 - 95 + 6 + 7 + 2925 - 8 - 16 - 88 + 21 + 22 + 5850 - 20 - 25 - 88 + 25 + 26 + 11701 - 34 - 59 - 66 + 59 + 60 + 20478 - 86 - 102 - 80 + 64 + 65 + 5850 - 127 - 185 - 51 - - - 203 - 684 - 80 - - - 1733 - 1734 - 88 - - - 1734 - 153327 - 58 + 204 + 205 + 5850 @@ -12763,7 +12862,7 @@ 1 2 - 1421553 + 3223840 @@ -12779,7 +12878,7 @@ 1 2 - 1421553 + 3223840 @@ -12789,45 +12888,45 @@ isEnumType - 56888 + 149197 classid - 56888 + 149197 isEnumConst - 435967 + 1091190 fieldid - 435967 + 1091190 typeVars - 864332 + 1331077 id - 864332 + 1331077 nodeName - 11797 + 43881 pos - 1048 + 8776 parentid - 612137 + 1117519 @@ -12841,7 +12940,7 @@ 1 2 - 864332 + 1331077 @@ -12857,7 +12956,7 @@ 1 2 - 864332 + 1331077 @@ -12873,7 +12972,7 @@ 1 2 - 864332 + 1331077 @@ -12889,47 +12988,62 @@ 1 2 - 2883 + 11701 2 3 - 1572 + 2925 - 3 - 4 - 1310 + 5 + 6 + 2925 - 4 + 6 7 - 1048 - - - 7 - 10 - 1048 + 2925 10 - 28 - 1048 + 11 + 2925 - 36 - 70 - 1048 + 19 + 20 + 2925 - 71 - 412 - 1048 + 28 + 29 + 2925 - 605 - 724 - 786 + 37 + 38 + 2925 + + + 49 + 50 + 2925 + + + 53 + 54 + 2925 + + + 56 + 57 + 2925 + + + 186 + 187 + 2925 @@ -12945,22 +13059,17 @@ 1 2 - 7078 + 23403 2 3 - 3145 + 14627 3 4 - 1310 - - - 4 - 5 - 262 + 5850 @@ -12976,47 +13085,62 @@ 1 2 - 2883 + 11701 2 3 - 1572 + 2925 - 3 - 4 - 1310 + 5 + 6 + 2925 - 4 + 6 7 - 1048 - - - 7 - 10 - 1048 + 2925 10 - 28 - 1048 + 11 + 2925 - 36 - 70 - 1048 + 19 + 20 + 2925 - 71 - 412 - 1048 + 28 + 29 + 2925 - 605 - 724 - 786 + 37 + 38 + 2925 + + + 49 + 50 + 2925 + + + 53 + 54 + 2925 + + + 56 + 57 + 2925 + + + 186 + 187 + 2925 @@ -13032,22 +13156,17 @@ 6 7 - 262 + 2925 - 89 - 90 - 262 + 67 + 68 + 2925 - 867 - 868 - 262 - - - 2335 - 2336 - 262 + 382 + 383 + 2925 @@ -13061,24 +13180,19 @@ 12 - 2 - 3 - 262 + 4 + 5 + 2925 - 13 - 14 - 262 + 8 + 9 + 2925 - 21 - 22 - 262 - - - 34 - 35 - 262 + 12 + 13 + 2925 @@ -13094,22 +13208,17 @@ 6 7 - 262 + 2925 - 89 - 90 - 262 + 67 + 68 + 2925 - 867 - 868 - 262 - - - 2335 - 2336 - 262 + 382 + 383 + 2925 @@ -13125,17 +13234,17 @@ 1 2 - 384846 + 921515 2 3 - 203958 + 178452 3 - 5 - 23332 + 4 + 17552 @@ -13151,17 +13260,17 @@ 1 2 - 384846 + 921515 2 3 - 203958 + 178452 3 - 5 - 23332 + 4 + 17552 @@ -13177,17 +13286,17 @@ 1 2 - 384846 + 921515 2 3 - 203958 + 178452 3 - 5 - 23332 + 4 + 17552 @@ -13197,19 +13306,19 @@ wildcards - 458250 + 590939 id - 458250 + 590939 nodeName - 74976 + 152123 kind - 524 + 5850 @@ -13223,7 +13332,7 @@ 1 2 - 458250 + 590939 @@ -13239,7 +13348,7 @@ 1 2 - 458250 + 590939 @@ -13255,22 +13364,32 @@ 1 2 - 56363 + 108241 2 3 - 7340 + 5850 - 3 - 7 - 6029 + 4 + 9 + 11701 - 7 - 170 - 5243 + 11 + 12 + 5850 + + + 12 + 13 + 8776 + + + 13 + 36 + 11701 @@ -13286,7 +13405,7 @@ 1 2 - 74976 + 152123 @@ -13300,14 +13419,9 @@ 12 - 795 - 796 - 262 - - - 953 - 954 - 262 + 101 + 102 + 5850 @@ -13321,14 +13435,14 @@ 12 - 94 - 95 - 262 + 19 + 20 + 2925 - 192 - 193 - 262 + 33 + 34 + 2925 @@ -13338,23 +13452,23 @@ typeBounds - 581989 + 827900 id - 581989 + 827900 typeid - 392449 + 547058 pos - 262 + 2925 parentid - 581989 + 827900 @@ -13368,7 +13482,7 @@ 1 2 - 581989 + 827900 @@ -13384,7 +13498,7 @@ 1 2 - 581989 + 827900 @@ -13400,7 +13514,7 @@ 1 2 - 581989 + 827900 @@ -13416,17 +13530,17 @@ 1 2 - 288635 + 392009 2 3 - 94900 + 137495 3 - 52 - 8913 + 30 + 17552 @@ -13442,7 +13556,7 @@ 1 2 - 392449 + 547058 @@ -13458,17 +13572,17 @@ 1 2 - 288635 + 392009 2 3 - 94900 + 137495 3 - 52 - 8913 + 30 + 17552 @@ -13482,9 +13596,9 @@ 12 - 2220 - 2221 - 262 + 283 + 284 + 2925 @@ -13498,9 +13612,9 @@ 12 - 1497 - 1498 - 262 + 187 + 188 + 2925 @@ -13514,9 +13628,9 @@ 12 - 2220 - 2221 - 262 + 283 + 284 + 2925 @@ -13532,7 +13646,7 @@ 1 2 - 581989 + 827900 @@ -13548,7 +13662,7 @@ 1 2 - 581989 + 827900 @@ -13564,7 +13678,7 @@ 1 2 - 581989 + 827900 @@ -13574,19 +13688,19 @@ typeArgs - 53854237 + 54764697 argumentid - 1430551 + 1454742 pos - 57 + 58 parentid - 22244248 + 22620310 @@ -13600,17 +13714,17 @@ 1 2 - 865848 + 880486 2 3 - 470615 + 478577 3 11 - 94087 + 95677 @@ -13626,57 +13740,57 @@ 1 2 - 64071 + 65160 2 3 - 433698 + 441030 3 5 - 100595 + 102296 5 6 - 35547 + 36148 6 7 - 201249 + 204651 7 11 - 39437 + 40103 11 12 - 218178 + 221867 12 15 - 111421 + 113305 15 29 - 108138 + 109966 29 341 - 107450 + 109267 341 757580 - 10762 + 10944 @@ -13730,13 +13844,13 @@ 5 - 142042 - 142043 + 142043 + 142044 5 - 161580 - 161581 + 161581 + 161582 5 @@ -13791,13 +13905,13 @@ 5 - 3800219 - 3800220 + 3800220 + 3800221 5 - 3848466 - 3848467 + 3848467 + 3848468 5 @@ -13814,22 +13928,22 @@ 1 2 - 296162 + 301169 2 3 - 13666793 + 13897847 3 4 - 7750153 + 7881175 4 11 - 531138 + 540117 @@ -13845,22 +13959,22 @@ 1 2 - 278869 + 283583 2 3 - 13599976 + 13829900 3 4 - 7768574 + 7899907 4 11 - 596828 + 606918 @@ -13870,37 +13984,37 @@ isParameterized - 22244248 + 22620310 memberid - 22244248 + 22620310 isRaw - 100406 + 251588 memberid - 100406 + 251588 isAnonymClass - 157916 + 162493 classid - 157916 + 162493 parent - 157916 + 162493 @@ -13914,7 +14028,7 @@ 1 2 - 157916 + 162493 @@ -13930,7 +14044,7 @@ 1 2 - 157916 + 162493 @@ -13940,15 +14054,15 @@ isLocalClassOrInterface - 3532 + 3483 typeid - 3532 + 3483 parent - 3532 + 3483 @@ -13962,7 +14076,7 @@ 1 2 - 3532 + 3483 @@ -13978,7 +14092,7 @@ 1 2 - 3532 + 3483 @@ -13986,28 +14100,39 @@ + + isImplicitClass + 4 + + + classid + 4 + + + + isDefConstr - 139376 + 99109 constructorid - 139376 + 99109 lambdaKind - 152268 + 157421 exprId - 152268 + 157421 bodyKind - 12 + 11 @@ -14021,7 +14146,7 @@ 1 2 - 152268 + 157421 @@ -14035,9 +14160,9 @@ 12 - 12267 - 12268 - 12 + 13842 + 13843 + 11 @@ -14045,29 +14170,40 @@ + + isCanonicalConstr + 845 + + + constructorid + 845 + + + + arrays - 190588 + 608492 id - 190588 + 608492 nodeName - 115349 + 465145 elementtypeid - 189277 + 599716 dimension - 524 + 5850 componenttypeid - 190588 + 608492 @@ -14081,7 +14217,7 @@ 1 2 - 190588 + 608492 @@ -14097,7 +14233,7 @@ 1 2 - 190588 + 608492 @@ -14113,7 +14249,7 @@ 1 2 - 190588 + 608492 @@ -14129,7 +14265,7 @@ 1 2 - 190588 + 608492 @@ -14145,17 +14281,12 @@ 1 2 - 92279 + 430040 2 - 3 - 19137 - - - 3 - 87 - 3932 + 26 + 35105 @@ -14171,17 +14302,12 @@ 1 2 - 92279 + 430040 2 - 3 - 19137 - - - 3 - 87 - 3932 + 26 + 35105 @@ -14197,7 +14323,7 @@ 1 2 - 115349 + 465145 @@ -14213,122 +14339,117 @@ 1 2 - 92279 + 430040 + + + 2 + 26 + 35105 + + + + + + + elementtypeid + id + + + 12 + + + 1 + 2 + 590939 2 3 - 19137 + 8776 + + + + + + elementtypeid + nodeName + + + 12 + + + 1 + 2 + 590939 + + + 2 + 3 + 8776 + + + + + + + elementtypeid + dimension + + + 12 + + + 1 + 2 + 590939 + + + 2 + 3 + 8776 + + + + + + + elementtypeid + componenttypeid + + + 12 + + + 1 + 2 + 590939 + + + 2 + 3 + 8776 + + + + + + + dimension + id + + + 12 + 3 - 87 - 3932 - - - - - - - elementtypeid - id - - - 12 - - - 1 - 2 - 187966 + 4 + 2925 - 2 - 3 - 1310 - - - - - - - elementtypeid - nodeName - - - 12 - - - 1 - 2 - 187966 - - - 2 - 3 - 1310 - - - - - - - elementtypeid - dimension - - - 12 - - - 1 - 2 - 187966 - - - 2 - 3 - 1310 - - - - - - - elementtypeid - componenttypeid - - - 12 - - - 1 - 2 - 187966 - - - 2 - 3 - 1310 - - - - - - - dimension - id - - - 12 - - - 5 - 6 - 262 - - - 722 - 723 - 262 + 205 + 206 + 2925 @@ -14342,14 +14463,14 @@ 12 - 5 - 6 - 262 + 3 + 4 + 2925 - 435 - 436 - 262 + 156 + 157 + 2925 @@ -14363,14 +14484,14 @@ 12 - 5 - 6 - 262 + 3 + 4 + 2925 - 722 - 723 - 262 + 205 + 206 + 2925 @@ -14384,14 +14505,14 @@ 12 - 5 - 6 - 262 + 3 + 4 + 2925 - 722 - 723 - 262 + 205 + 206 + 2925 @@ -14407,7 +14528,7 @@ 1 2 - 190588 + 608492 @@ -14423,7 +14544,7 @@ 1 2 - 190588 + 608492 @@ -14439,7 +14560,7 @@ 1 2 - 190588 + 608492 @@ -14455,7 +14576,7 @@ 1 2 - 190588 + 608492 @@ -14465,15 +14586,15 @@ enclInReftype - 564162 + 1146774 child - 564162 + 1146774 parent - 156245 + 327649 @@ -14487,7 +14608,7 @@ 1 2 - 564162 + 1146774 @@ -14503,32 +14624,32 @@ 1 2 - 92803 + 166750 2 3 - 24642 + 78987 3 4 - 11797 + 20478 4 - 7 - 14418 + 6 + 26329 - 7 - 55 - 11797 + 6 + 23 + 29254 - 55 - 265 - 786 + 35 + 67 + 5850 @@ -14538,15 +14659,15 @@ extendsReftype - 27274828 + 27735936 id1 - 22257941 + 22634234 id2 - 17181115 + 17471575 @@ -14560,12 +14681,12 @@ 1 2 - 20991189 + 21346068 2 6 - 1266751 + 1288166 @@ -14581,17 +14702,17 @@ 1 2 - 13982285 + 14218666 2 3 - 1947557 + 1980482 3 - 937651 - 1251272 + 937652 + 1272426 @@ -14601,15 +14722,15 @@ implInterface - 3052545 + 4771400 id1 - 757262 + 2278921 id2 - 2275463 + 854229 @@ -14623,37 +14744,27 @@ 1 2 - 210026 + 769392 2 3 - 50055 + 991725 3 4 - 67412 + 55583 4 5 - 62038 + 459294 5 6 - 19332 - - - 6 - 7 - 305928 - - - 7 - 10 - 42469 + 2925 @@ -14669,12 +14780,22 @@ 1 2 - 2200047 + 687479 2 - 63705 - 75416 + 3 + 93614 + + + 3 + 134 + 64359 + + + 136 + 509 + 8776 @@ -14684,15 +14805,15 @@ permits - 3703 + 37356 id1 - 1075 + 18659 id2 - 3703 + 135 @@ -14706,27 +14827,17 @@ 1 2 - 358 + 12 2 3 - 358 + 18634 3 - 4 - 119 - - - 9 10 - 119 - - - 10 - 11 - 119 + 12 @@ -14742,7 +14853,12 @@ 1 2 - 3703 + 123 + + + 3014 + 3015 + 12 @@ -14752,15 +14868,15 @@ hasModifier - 48527772 + 97268116 id1 - 24369293 + 56847244 id2 - 63 + 32179 @@ -14774,17 +14890,17 @@ 1 2 - 356153 + 24117367 2 3 - 23867801 + 25038882 3 4 - 145338 + 7690994 @@ -14798,59 +14914,54 @@ 12 - 22 - 23 - 5 + 9 + 10 + 5850 - 27 - 28 - 5 + 17 + 18 + 2925 - 100 - 101 - 5 + 201 + 202 + 2925 - 262 - 263 - 5 + 212 + 213 + 2925 - 712 - 713 - 5 + 470 + 471 + 2925 - 1374 - 1375 - 5 + 756 + 757 + 2925 - 11041 - 11042 - 5 + 4486 + 4487 + 2925 - 63640 - 63641 - 5 + 4669 + 4670 + 2925 - 242567 - 242568 - 5 + 4793 + 4794 + 2925 - 3864462 - 3864463 - 5 - - - 4211558 - 4211559 - 5 + 17627 + 17628 + 2925 @@ -14860,23 +14971,23 @@ imports - 356137 + 525435 id - 356137 + 525435 holder - 54477 + 31483 name - 8004 + 45 kind - 358 + 45 @@ -14890,7 +15001,7 @@ 1 2 - 356137 + 525435 @@ -14906,7 +15017,7 @@ 1 2 - 356137 + 525435 @@ -14922,7 +15033,7 @@ 1 2 - 356137 + 525435 @@ -14937,121 +15048,81 @@ 1 - 2 - 24730 - - - 2 3 - 8960 + 454 3 4 - 5017 - - - 4 - 6 - 4420 + 20564 6 - 10 - 4181 - - - 10 - 30 - 4181 - - - 31 - 113 - 2986 - - - - - - - holder - name - - - 12 - - - 1 - 2 - 51132 - - - 2 - 8 - 3345 - - - - - - - holder - kind - - - 12 - - - 1 - 2 - 51610 - - - 2 - 3 - 2867 - - - - - - - name - id - - - 12 - - - 1 - 2 - 3584 - - - 2 - 3 - 1792 - - - 3 - 4 - 836 - - - 4 - 9 - 716 + 7 + 3503 9 - 32 - 716 + 13 + 2911 - 45 - 2676 - 358 + 13 + 88 + 2502 + + + 90 + 554 + 1546 + + + + + + + holder + name + + + 12 + + + 1 + 2 + 31483 + + + + + + + holder + kind + + + 12 + + + 1 + 2 + 31483 + + + + + + + name + id + + + 12 + + + 11549 + 11550 + 45 @@ -15065,19 +15136,9 @@ 12 - 1 - 2 - 7048 - - - 2 - 3 - 716 - - - 3 - 442 - 238 + 692 + 693 + 45 @@ -15093,12 +15154,7 @@ 1 2 - 7884 - - - 2 - 3 - 119 + 45 @@ -15112,19 +15168,9 @@ 12 - 13 - 14 - 119 - - - 306 - 307 - 119 - - - 2662 - 2663 - 119 + 11549 + 11550 + 45 @@ -15138,19 +15184,9 @@ 12 - 5 - 6 - 119 - - - 39 - 40 - 119 - - - 436 - 437 - 119 + 692 + 693 + 45 @@ -15166,12 +15202,7 @@ 1 2 - 238 - - - 66 - 67 - 119 + 45 @@ -15181,27 +15212,27 @@ stmts - 2441387 + 2482660 id - 2441387 + 2482660 kind - 9674 + 9838 parent - 1353860 + 1376748 idx - 15934 + 16203 bodydecl - 367630 + 373845 @@ -15215,7 +15246,7 @@ 1 2 - 2441387 + 2482660 @@ -15231,7 +15262,7 @@ 1 2 - 2441387 + 2482660 @@ -15247,7 +15278,7 @@ 1 2 - 2441387 + 2482660 @@ -15263,7 +15294,7 @@ 1 2 - 2441387 + 2482660 @@ -15279,77 +15310,77 @@ 1 2 - 1707 + 1736 6 7 - 569 + 578 7 8 - 569 + 578 17 18 - 569 + 578 20 21 - 569 + 578 23 24 - 569 + 578 33 34 - 569 + 578 83 84 - 569 + 578 91 92 - 569 + 578 97 98 - 569 + 578 265 266 - 569 + 578 312 313 - 569 + 578 560 561 - 569 + 578 1243 1244 - 569 + 578 1530 1531 - 569 + 578 @@ -15365,72 +15396,72 @@ 1 2 - 2276 + 2314 7 8 - 569 + 578 12 13 - 569 + 578 17 18 - 569 + 578 21 22 - 569 + 578 33 34 - 569 + 578 71 72 - 569 + 578 81 82 - 569 + 578 91 92 - 569 + 578 246 247 - 569 + 578 265 266 - 569 + 578 271 272 - 569 + 578 716 717 - 569 + 578 1192 1193 - 569 + 578 @@ -15446,57 +15477,57 @@ 1 2 - 2276 + 2314 3 4 - 569 + 578 4 5 - 569 + 578 6 7 - 1138 + 1157 7 8 - 569 + 578 8 9 - 1138 + 1157 10 11 - 1138 + 1157 13 14 - 569 + 578 17 18 - 569 + 578 21 22 - 569 + 578 26 27 - 569 + 578 @@ -15512,67 +15543,67 @@ 1 2 - 2276 + 2314 7 8 - 1138 + 1157 17 18 - 569 + 578 20 21 - 569 + 578 21 22 - 569 + 578 53 54 - 569 + 578 54 55 - 569 + 578 91 92 - 569 + 578 119 120 - 569 + 578 179 180 - 569 + 578 211 212 - 569 + 578 431 432 - 569 + 578 646 647 - 569 + 578 @@ -15588,22 +15619,22 @@ 1 2 - 989074 + 1005795 2 3 - 191782 + 195024 3 6 - 107557 + 109375 6 27 - 65445 + 66551 @@ -15619,17 +15650,17 @@ 1 2 - 1081267 + 1099546 2 3 - 194058 + 197339 3 6 - 78534 + 79861 @@ -15645,22 +15676,22 @@ 1 2 - 989074 + 1005795 2 3 - 191782 + 195024 3 6 - 107557 + 109375 6 27 - 65445 + 66551 @@ -15676,7 +15707,7 @@ 1 2 - 1353860 + 1376748 @@ -15692,67 +15723,67 @@ 3 5 - 1138 + 1157 5 6 - 1138 + 1157 6 7 - 2276 + 2314 10 15 - 1138 + 1157 15 16 - 1138 + 1157 17 20 - 1138 + 1157 24 32 - 1138 + 1157 40 43 - 1138 + 1157 55 72 - 1138 + 1157 83 94 - 1138 + 1157 115 160 - 1138 + 1157 204 386 - 1138 + 1157 939 1919 - 1138 + 1157 @@ -15768,47 +15799,47 @@ 1 2 - 2276 + 2314 2 3 - 3983 + 4050 3 5 - 1138 + 1157 5 6 - 2276 + 2314 6 7 - 2276 + 2314 7 9 - 1138 + 1157 9 10 - 1138 + 1157 12 14 - 1138 + 1157 16 17 - 569 + 578 @@ -15824,67 +15855,67 @@ 3 5 - 1138 + 1157 5 6 - 1138 + 1157 6 7 - 2276 + 2314 10 15 - 1138 + 1157 15 16 - 1138 + 1157 17 20 - 1138 + 1157 24 32 - 1138 + 1157 40 43 - 1138 + 1157 55 72 - 1138 + 1157 83 94 - 1138 + 1157 115 160 - 1138 + 1157 204 386 - 1138 + 1157 939 1919 - 1138 + 1157 @@ -15900,67 +15931,67 @@ 3 5 - 1138 + 1157 5 6 - 1138 + 1157 6 7 - 2276 + 2314 10 15 - 1138 + 1157 15 16 - 1138 + 1157 17 20 - 1138 + 1157 24 32 - 1138 + 1157 40 43 - 1138 + 1157 54 56 - 1138 + 1157 68 87 - 1138 + 1157 104 138 - 1138 + 1157 167 226 - 1138 + 1157 337 647 - 1138 + 1157 @@ -15976,47 +16007,47 @@ 1 2 - 17641 + 17939 2 3 - 157637 + 160302 3 4 - 38128 + 38773 4 5 - 33576 + 34143 5 7 - 24470 + 24884 7 10 - 29023 + 29514 10 16 - 30730 + 31250 16 34 - 27885 + 28356 34 131 - 8536 + 8680 @@ -16032,32 +16063,32 @@ 1 2 - 17641 + 17939 2 3 - 193489 + 196760 3 4 - 77965 + 79283 4 5 - 29592 + 30092 5 7 - 33007 + 33565 7 11 - 15934 + 16203 @@ -16073,27 +16104,27 @@ 1 2 - 17641 + 17939 2 3 - 261780 + 266206 4 5 - 33576 + 34143 5 10 - 31299 + 31828 10 88 - 23332 + 23727 @@ -16109,37 +16140,37 @@ 1 2 - 175279 + 178242 2 3 - 63737 + 64815 3 4 - 27885 + 28356 4 5 - 18210 + 18518 5 7 - 30161 + 30671 7 11 - 29592 + 30092 11 28 - 22763 + 23148 @@ -16149,27 +16180,27 @@ exprs - 7410663 + 7535946 id - 7410663 + 7535946 kind - 1618 + 203 typeid - 115976 + 44680 parent - 5075638 + 4830350 idx - 1426 + 1604 @@ -16183,7 +16214,7 @@ 1 2 - 7410663 + 7535946 @@ -16199,7 +16230,7 @@ 1 2 - 7410663 + 7535946 @@ -16215,7 +16246,7 @@ 1 2 - 7410663 + 7535946 @@ -16231,7 +16262,7 @@ 1 2 - 7410663 + 7535946 @@ -16246,63 +16277,63 @@ 1 - 3 - 137 + 29 + 18 - 3 - 9 - 137 + 45 + 159 + 18 - 13 - 31 - 137 + 159 + 412 + 18 - 31 - 76 - 137 + 423 + 903 + 18 - 85 - 161 - 109 + 1538 + 2086 + 18 - 186 - 307 - 137 + 2170 + 5511 + 18 - 378 - 492 - 137 + 6292 + 8043 + 18 - 494 - 659 - 137 + 9355 + 15242 + 18 - 708 - 1063 - 137 + 16690 + 29935 + 18 - 1114 - 2997 - 137 + 32849 + 68100 + 18 - 3119 - 9319 - 137 + 74170 + 409104 + 18 - 10083 - 75330 - 137 + 748133 + 748134 + 3 @@ -16318,37 +16349,42 @@ 1 2 - 768 + 66 2 3 - 246 + 18 3 - 6 - 137 + 4 + 18 - 18 - 48 - 137 + 4 + 5 + 27 - 48 - 152 - 137 + 5 + 54 + 18 - 246 - 1578 - 137 + 99 + 303 + 18 - 2399 - 2509 - 54 + 331 + 3462 + 18 + + + 3755 + 11926 + 18 @@ -16363,63 +16399,63 @@ 1 - 3 - 137 + 29 + 18 - 3 - 9 - 137 + 45 + 142 + 15 - 13 - 31 - 137 + 158 + 383 + 18 - 31 - 76 - 137 + 408 + 568 + 18 - 81 - 177 - 137 + 879 + 1933 + 18 - 183 - 357 - 137 + 2085 + 4466 + 18 - 378 - 482 - 137 + 4738 + 6394 + 18 - 572 - 708 - 137 + 7532 + 10892 + 18 - 708 - 1060 - 137 + 11806 + 21746 + 18 - 1102 - 3043 - 137 + 28126 + 48464 + 18 - 5490 - 10002 - 137 + 62759 + 319892 + 18 - 16929 - 60299 - 109 + 405045 + 586179 + 6 @@ -16435,93 +16471,123 @@ 1 2 - 246 + 21 2 3 - 521 + 24 3 4 - 246 + 12 + + + 4 + 5 + 30 + + + 5 + 7 + 18 + + + 7 + 9 + 15 + + + 9 + 13 + 18 + + + 13 + 19 + 12 + + + 21 + 57 + 15 + + + 64 + 133 + 18 + + + 179 + 514 + 18 + + + + + + + typeid + id + + + 12 + + + 1 + 2 + 8996 + + + 2 + 3 + 6180 + + + 3 + 4 + 2069 4 6 - 137 + 3734 6 8 - 137 + 3068 8 11 - 137 + 3597 - 12 - 27 - 137 + 11 + 16 + 3685 - 46 - 49 - 54 - - - - - - - typeid - id - - - 12 - - - 1 - 2 - 48881 + 16 + 25 + 3451 - 2 - 3 - 13002 + 25 + 45 + 3466 - 3 - 6 - 10697 + 45 + 106 + 3366 - 6 - 10 - 9628 - - - 10 - 17 - 9271 - - - 17 - 32 - 8722 - - - 32 - 89 - 8750 - - - 89 - 52561 - 7022 + 106 + 462822 + 3062 @@ -16537,350 +16603,360 @@ 1 2 - 57851 + 12971 2 3 - 18543 + 8456 3 4 - 8914 + 5247 4 5 - 14455 + 6247 5 6 - 9737 - - - 6 - 32 - 6473 - - - - - - - typeid - parent - - - 12 - - - 1 - 2 - 49045 - - - 2 - 3 - 13413 - - - 3 - 5 - 8668 - - - 5 - 8 - 8530 - - - 8 - 13 - 9244 - - - 13 - 24 - 8750 - - - 24 - 57 - 8805 - - - 57 - 851 - 8722 - - - 890 - 37212 - 795 - - - - - - - typeid - idx - - - 12 - - - 1 - 2 - 58673 - - - 2 - 3 - 18378 - - - 3 - 4 - 14730 - - - 4 - 5 - 19119 - - - 5 - 50 - 5074 - - - - - - - parent - id - - - 12 - - - 1 - 2 - 3222211 - - - 2 - 3 - 1522614 - - - 3 - 48 - 330812 - - - - - - - parent - kind - - - 12 - - - 1 - 2 - 3525291 - - - 2 - 3 - 1385461 - - - 3 - 8 - 164884 - - - - - - - parent - typeid - - - 12 - - - 1 - 2 - 4085559 - - - 2 - 3 - 832078 - - - 3 - 10 - 157999 - - - - - - - parent - idx - - - 12 - - - 1 - 2 - 3222211 - - - 2 - 3 - 1522614 - - - 3 - 48 - 330812 - - - - - - - idx - id - - - 12 - - - 1 - 2 - 82 - - - 2 - 3 - 466 - - - 3 - 4 - 82 - - - 4 - 5 - 54 - - - 5 - 6 - 82 - - - 6 - 8 - 109 - - - 8 - 19 - 109 - - - 24 - 37 - 109 - - - 75 - 343 - 109 - - - 536 - 6117 - 109 - - - 7863 - 137171 - 109 - - - - - - - idx - kind - - - 12 - - - 1 - 2 - 164 - - - 2 - 3 - 521 - - - 3 - 4 - 27 - - - 4 - 5 - 246 + 5882 6 7 - 54 + 2929 + + + 7 + 39 + 2947 + + + + + + + typeid + parent + + + 12 + + + 1 + 2 + 9036 + + + 2 + 3 + 6201 + + + 3 + 4 + 2306 + + + 4 + 5 + 2449 + + + 5 + 7 + 3603 + + + 7 + 10 + 3819 + + + 10 + 14 + 3476 + + + 14 + 22 + 3561 + + + 22 + 39 + 3466 + + + 39 + 86 + 3378 + + + 86 + 17855 + 3351 + + + 21746 + 314116 + 30 + + + + + + + typeid + idx + + + 12 + + + 1 + 2 + 12998 + + + 2 + 3 + 8583 + + + 3 + 4 + 7243 + + + 4 + 5 + 12324 + + + 5 + 11 + 3387 + + + 11 + 516 + 142 + + + + + + + parent + id + + + 12 + + + 1 + 2 + 2682992 + + + 2 + 3 + 1888447 + + + 3 + 513 + 258910 + + + + + + + parent + kind + + + 12 + + + 1 + 2 + 3150223 + + + 2 + 3 + 1565093 + + + 3 + 8 + 115033 + + + + + + + parent + typeid + + + 12 + + + 1 + 2 + 3752681 + + + 2 + 3 + 958080 + + + 3 + 17 + 119588 + + + + + + + parent + idx + + + 12 + + + 1 + 2 + 2682992 + + + 2 + 3 + 1888447 + + + 3 + 513 + 258910 + + + + + + + idx + id + + + 12 + + + 1 + 6 + 12 + + + 6 + 7 + 464 7 8 - 109 + 425 8 - 13 - 109 + 10 + 130 - 13 - 26 - 109 + 10 + 12 + 100 - 27 - 59 - 82 + 12 + 34 + 133 + + + 35 + 75 + 124 + + + 85 + 406 + 121 + + + 406 + 1272806 + 91 + + + + + + + idx + kind + + + 12 + + + 1 + 2 + 36 + + + 3 + 4 + 893 + + + 4 + 5 + 130 + + + 5 + 6 + 148 + + + 6 + 8 + 94 + + + 8 + 12 + 121 + + + 12 + 15 + 121 + + + 16 + 66 + 57 @@ -16896,47 +16972,47 @@ 1 2 - 82 - - - 2 - 3 - 521 + 3 3 4 - 54 + 893 4 5 - 246 + 130 - 7 - 12 - 109 + 5 + 6 + 48 - 12 - 20 - 109 + 6 + 7 + 103 - 29 - 66 - 109 + 8 + 9 + 136 - 80 - 1212 - 109 + 9 + 14 + 142 - 1956 - 3022 - 82 + 14 + 167 + 121 + + + 275 + 10578 + 24 @@ -16951,58 +17027,48 @@ 1 - 2 - 82 - - - 2 - 3 - 466 - - - 3 - 4 - 82 - - - 4 - 5 - 54 - - - 5 6 - 82 + 12 6 + 7 + 464 + + + 7 8 - 109 + 425 8 - 19 - 109 + 10 + 130 - 24 - 37 - 109 + 10 + 12 + 100 - 75 - 343 - 109 + 12 + 34 + 133 - 536 - 6117 - 109 + 35 + 75 + 124 - 7863 - 137171 - 109 + 85 + 406 + 121 + + + 406 + 1272806 + 91 @@ -17012,15 +17078,15 @@ exprsKotlinType - 7410663 + 7535946 id - 7410663 + 7535946 kttypeid - 156277 + 53074 @@ -17034,7 +17100,7 @@ 1 2 - 7410663 + 7535946 @@ -17050,12 +17116,12 @@ 1 2 - 152777 + 50880 2 - 584083 - 3500 + 88650 + 2193 @@ -17065,15 +17131,15 @@ callableEnclosingExpr - 7298994 + 7436130 id - 7298994 + 7436130 callable_id - 19876 + 20250 @@ -17087,7 +17153,7 @@ 1 2 - 7298994 + 7436130 @@ -17103,72 +17169,72 @@ 1 2 - 711 + 724 2 3 - 1691 + 1722 3 5 - 1604 + 1634 5 6 - 806 + 821 6 7 - 1955 + 1992 7 9 - 1374 + 1400 9 13 - 1825 + 1859 13 18 - 1574 + 1603 18 26 - 1530 + 1559 26 42 - 1530 + 1559 42 73 - 1504 + 1532 73 177 - 1495 + 1524 179 - 1146 - 1491 + 1147 + 1519 1148 37742 - 780 + 795 @@ -17178,15 +17244,15 @@ statementEnclosingExpr - 7258638 + 7395016 id - 7258638 + 7395016 statement_id - 525773 + 535644 @@ -17200,7 +17266,7 @@ 1 2 - 7258638 + 7395016 @@ -17216,62 +17282,62 @@ 1 3 - 29125 + 29668 3 5 - 47077 + 47961 5 7 - 48473 + 49379 7 8 - 36041 + 36718 8 9 - 38144 + 38861 9 10 - 50446 + 51394 10 11 - 29212 + 29756 11 12 - 127048 + 129435 12 35 - 35322 + 35994 35 40 - 44623 + 45461 40 81 - 40221 + 40977 82 210 - 34 + 35 @@ -17281,15 +17347,15 @@ isParenthesized - 94652 + 95723 id - 94652 + 95723 parentheses - 5 + 6 @@ -17303,7 +17369,7 @@ 1 2 - 94652 + 95723 @@ -17317,14 +17383,14 @@ 12 - 58 - 59 - 2 + 42 + 43 + 3 - 34605 - 34606 - 2 + 31462 + 31463 + 3 @@ -17334,37 +17400,37 @@ when_if - 56072 + 53119 id - 56072 + 53119 when_branch_else - 70057 + 68708 id - 70057 + 68708 callableBinding - 1832514 + 1987914 callerid - 1832514 + 1987914 callee - 264310 + 247374 @@ -17378,7 +17444,7 @@ 1 2 - 1832514 + 1987914 @@ -17394,32 +17460,32 @@ 1 2 - 162994 + 151872 2 3 - 33136 + 29997 3 4 - 16271 + 14932 4 7 - 22271 + 20764 7 - 20 - 19902 + 19 + 19023 - 20 - 46115 - 9734 + 19 + 68828 + 10784 @@ -17429,15 +17495,15 @@ memberRefBinding - 23208 + 23625 id - 23208 + 23625 callable - 11197 + 11257 @@ -17451,7 +17517,7 @@ 1 2 - 23208 + 23625 @@ -17467,22 +17533,22 @@ 1 2 - 7862 + 8000 2 3 - 2075 + 1943 3 - 7 - 940 + 6 + 864 - 7 - 912 - 319 + 6 + 938 + 448 @@ -17492,15 +17558,15 @@ propertyRefGetBinding - 8437 + 11923 id - 8437 + 11923 getter - 5101 + 7256 @@ -17514,7 +17580,7 @@ 1 2 - 8437 + 11923 @@ -17530,17 +17596,17 @@ 1 2 - 1854 + 2624 2 3 - 3163 + 4611 3 6 - 82 + 20 @@ -17550,15 +17616,15 @@ propertyRefFieldBinding - 4 + 6 id - 4 + 6 field - 4 + 6 @@ -17572,7 +17638,7 @@ 1 2 - 4 + 6 @@ -17588,7 +17654,7 @@ 1 2 - 4 + 6 @@ -17598,15 +17664,15 @@ propertyRefSetBinding - 2226 + 1697 id - 2226 + 1697 setter - 1094 + 848 @@ -17620,7 +17686,7 @@ 1 2 - 2226 + 1697 @@ -17633,20 +17699,10 @@ 12 - - 1 - 2 - 32 - 2 3 - 994 - - - 3 - 5 - 67 + 848 @@ -17656,15 +17712,15 @@ variableBinding - 2434277 + 2475431 expr - 2434277 + 2475431 variable - 572528 + 582207 @@ -17678,7 +17734,7 @@ 1 2 - 2434277 + 2475431 @@ -17694,37 +17750,37 @@ 1 2 - 205791 + 209270 2 3 - 120945 + 122990 3 4 - 85022 + 86459 4 5 - 45967 + 46744 5 7 - 40059 + 40736 7 14 - 43072 + 43800 14 464 - 31669 + 32204 @@ -17734,23 +17790,23 @@ localvars - 385272 + 547241 id - 385272 + 547241 nodeName - 139995 + 35581 typeid - 49510 + 2048 parentid - 385272 + 547241 @@ -17764,7 +17820,7 @@ 1 2 - 385272 + 547241 @@ -17780,7 +17836,7 @@ 1 2 - 385272 + 547241 @@ -17796,7 +17852,7 @@ 1 2 - 385272 + 547241 @@ -17812,27 +17868,12 @@ 1 2 - 83655 + 33579 2 - 3 - 26178 - - - 3 - 5 - 10243 - - - 5 - 9 - 11950 - - - 9 - 42 - 7967 + 4488 + 2001 @@ -17848,17 +17889,12 @@ 1 2 - 124630 + 35253 2 - 3 - 13089 - - - 3 - 19 - 2276 + 20 + 328 @@ -17874,27 +17910,12 @@ 1 2 - 83655 + 33579 2 - 3 - 26178 - - - 3 - 5 - 10243 - - - 5 - 9 - 11950 - - - 9 - 42 - 7967 + 4488 + 2001 @@ -17910,47 +17931,57 @@ 1 2 - 16503 + 516 2 - 3 - 9105 + 4 + 187 - 3 - 5 - 2276 + 4 + 20 + 156 - 5 - 6 - 5121 + 21 + 31 + 109 - 6 - 7 - 2845 + 35 + 54 + 156 - 7 - 8 - 2845 + 57 + 64 + 156 - 8 - 12 - 4552 + 72 + 120 + 187 - 14 - 30 - 3983 + 128 + 217 + 156 - 51 - 76 - 2276 + 223 + 354 + 156 + + + 374 + 712 + 156 + + + 794 + 14075 + 109 @@ -17966,32 +17997,27 @@ 1 2 - 23332 + 1532 2 3 - 9105 + 187 3 4 - 6259 + 140 4 - 6 - 3983 + 353 + 156 - 6 - 14 - 3983 - - - 14 - 35 - 2845 + 501 + 1266 + 31 @@ -18007,47 +18033,57 @@ 1 2 - 16503 + 516 2 - 3 - 9105 + 4 + 187 - 3 - 5 - 2276 + 4 + 20 + 156 - 5 - 6 - 5121 + 21 + 31 + 109 - 6 - 7 - 2845 + 35 + 54 + 156 - 7 - 8 - 2845 + 57 + 64 + 156 - 8 - 12 - 4552 + 72 + 120 + 187 - 14 - 30 - 3983 + 128 + 217 + 156 - 51 - 76 - 2276 + 223 + 354 + 156 + + + 374 + 712 + 156 + + + 794 + 14075 + 109 @@ -18063,7 +18099,7 @@ 1 2 - 385272 + 547241 @@ -18079,7 +18115,7 @@ 1 2 - 385272 + 547241 @@ -18095,7 +18131,7 @@ 1 2 - 385272 + 547241 @@ -18105,15 +18141,15 @@ localvarsKotlinType - 149446 + 152463 id - 149446 + 152463 kttypeid - 2 + 11 @@ -18127,7 +18163,7 @@ 1 2 - 149446 + 152463 @@ -18141,9 +18177,9 @@ 12 - 59940 - 59941 - 2 + 13406 + 13407 + 11 @@ -18153,19 +18189,19 @@ namestrings - 4022471 + 4087878 name - 23402 + 23364 value - 22183 + 22145 parent - 4022471 + 4087878 @@ -18179,7 +18215,7 @@ 1 2 - 23402 + 23364 @@ -18195,42 +18231,42 @@ 1 2 - 9604 + 9396 2 3 - 3811 + 3830 3 - 5 - 2163 + 4 + 1126 - 5 - 9 - 1773 + 4 + 7 + 2133 - 9 - 21 - 1795 + 7 + 15 + 1868 - 21 - 69 - 1760 + 15 + 37 + 1767 - 69 - 385 - 1756 + 37 + 163 + 1758 - 390 + 163 412517 - 737 + 1484 @@ -18246,12 +18282,12 @@ 1 2 - 21576 + 21526 2 12 - 607 + 618 @@ -18267,42 +18303,42 @@ 1 2 - 9118 + 8905 2 3 - 3594 + 3609 3 5 - 1925 + 1943 5 9 - 1669 + 1700 9 21 - 1691 + 1722 21 - 67 - 1678 - - - 67 - 318 + 64 1665 - 320 + 64 + 292 + 1661 + + + 292 413340 - 841 + 936 @@ -18318,7 +18354,7 @@ 1 2 - 4022471 + 4087878 @@ -18334,7 +18370,7 @@ 1 2 - 4022471 + 4087878 @@ -18344,15 +18380,15 @@ modules - 6092 + 131645 id - 6092 + 131645 name - 6092 + 131645 @@ -18366,7 +18402,7 @@ 1 2 - 6092 + 131645 @@ -18382,7 +18418,7 @@ 1 2 - 6092 + 131645 @@ -18403,15 +18439,15 @@ cumodule - 188761 + 1690907 fileId - 188761 + 1690907 moduleId - 836 + 2925 @@ -18425,7 +18461,7 @@ 1 2 - 188761 + 1690907 @@ -18439,34 +18475,9 @@ 12 - 12 - 13 - 238 - - - 36 - 37 - 119 - - - 72 - 73 - 119 - - - 75 - 76 - 119 - - - 415 - 416 - 119 - - - 958 - 959 - 119 + 578 + 579 + 2925 @@ -18476,15 +18487,15 @@ directives - 37991 + 450518 id - 836 + 2925 directive - 37991 + 450518 @@ -18496,39 +18507,9 @@ 12 - 3 - 4 - 119 - - - 4 - 5 - 119 - - - 7 - 8 - 119 - - - 9 - 10 - 119 - - - 43 - 44 - 119 - - - 89 - 90 - 119 - - - 163 - 164 - 119 + 154 + 155 + 2925 @@ -18544,7 +18525,7 @@ 1 2 - 37991 + 450518 @@ -18554,15 +18535,15 @@ requires - 3190 + 4159 id - 3190 + 4159 target - 377 + 221 @@ -18576,7 +18557,7 @@ 1 2 - 3190 + 4159 @@ -18592,52 +18573,47 @@ 1 2 - 33 + 59 2 3 - 40 + 17 3 - 4 - 23 + 16 + 15 - 4 - 5 - 23 + 16 + 17 + 35 - 5 - 6 - 33 + 17 + 22 + 18 - 6 - 9 - 10 + 22 + 40 + 18 - 9 - 10 - 142 + 40 + 41 + 21 - 10 - 11 - 30 + 41 + 44 + 18 - 11 - 29 - 30 - - - 56 - 73 - 6 + 44 + 125 + 14 @@ -18647,37 +18623,37 @@ isTransitive - 597 + 1485 id - 597 + 1485 isStatic - 33 + 34 id - 33 + 34 exports - 26163 + 336426 id - 26163 + 336426 target - 26163 + 336426 @@ -18691,7 +18667,7 @@ 1 2 - 26163 + 336426 @@ -18707,7 +18683,7 @@ 1 2 - 26163 + 336426 @@ -18717,15 +18693,15 @@ exportsTo - 22579 + 456369 id - 9676 + 187228 target - 5734 + 128719 @@ -18739,27 +18715,32 @@ 1 2 - 5495 + 93614 2 3 - 1792 + 43881 3 4 - 836 + 20478 4 - 6 - 716 + 5 + 11701 - 6 - 19 - 836 + 5 + 14 + 14627 + + + 22 + 23 + 2925 @@ -18775,47 +18756,37 @@ 1 2 - 1672 + 38030 2 3 - 1194 + 38030 3 4 - 716 + 8776 4 5 - 358 + 11701 5 - 6 - 477 - - - 6 7 - 238 + 11701 - 8 - 10 - 477 + 7 + 11 + 11701 - 10 + 11 13 - 358 - - - 13 - 14 - 238 + 8776 @@ -18825,15 +18796,15 @@ opens - 716 + 14627 id - 716 + 14627 target - 716 + 14627 @@ -18847,7 +18818,7 @@ 1 2 - 716 + 14627 @@ -18863,7 +18834,7 @@ 1 2 - 716 + 14627 @@ -18873,15 +18844,15 @@ opensTo - 716 + 14627 id - 716 + 14627 target - 238 + 2925 @@ -18895,7 +18866,7 @@ 1 2 - 716 + 14627 @@ -18908,15 +18879,10 @@ 12 - - 1 - 2 - 119 - 5 6 - 119 + 2925 @@ -18926,15 +18892,15 @@ uses - 7884 + 96539 id - 7884 + 96539 serviceInterface - 7884 + 96539 @@ -18948,7 +18914,7 @@ 1 2 - 7884 + 96539 @@ -18964,7 +18930,7 @@ 1 2 - 7884 + 96539 @@ -18974,15 +18940,15 @@ provides - 1792 + 2925 id - 1792 + 2925 serviceInterface - 1792 + 2925 @@ -18996,7 +18962,7 @@ 1 2 - 1792 + 2925 @@ -19012,7 +18978,7 @@ 1 2 - 1792 + 2925 @@ -19022,15 +18988,15 @@ providesWith - 4181 + 4327 id - 1792 + 1923 serviceImpl - 4181 + 4327 @@ -19044,27 +19010,27 @@ 1 2 - 955 + 1081 2 3 - 119 + 120 3 4 - 119 + 120 4 5 - 477 + 480 6 7 - 119 + 120 @@ -19080,7 +19046,7 @@ 1 2 - 4181 + 4327 @@ -19089,49 +19055,60 @@ - javadoc - 985091 + isNullDefaultCase + 50 id - 985091 + 50 + + + + + + javadoc + 1001744 + + + id + 1001744 isNormalComment - 649898 + 660885 commentid - 649898 + 660885 isEolComment - 610062 + 620375 commentid - 610062 + 620375 hasJavadoc - 435352 + 444514 documentableid - 368199 + 64761 javadocid - 435352 + 67363 @@ -19145,17 +19122,17 @@ 1 2 - 320396 + 57383 2 - 3 - 44957 + 14 + 4992 - 3 - 27 - 2845 + 14 + 258 + 2385 @@ -19171,7 +19148,12 @@ 1 2 - 435352 + 66416 + + + 2 + 1326 + 946 @@ -19181,23 +19163,23 @@ javadocTag - 335808 + 341478 id - 335808 + 341478 name - 577 + 587 parentid - 114110 + 116037 idx - 4789 + 4869 @@ -19211,7 +19193,7 @@ 1 2 - 335808 + 341478 @@ -19227,7 +19209,7 @@ 1 2 - 335808 + 341478 @@ -19243,7 +19225,7 @@ 1 2 - 335808 + 341478 @@ -19259,37 +19241,37 @@ 34 35 - 82 + 83 69 70 - 82 + 83 203 204 - 82 + 83 405 406 - 82 + 83 608 609 - 82 + 83 968 969 - 82 + 83 1780 1781 - 82 + 83 @@ -19305,37 +19287,37 @@ 34 35 - 82 + 83 69 70 - 82 + 83 158 159 - 82 + 83 404 405 - 82 + 83 608 609 - 82 + 83 668 669 - 82 + 83 969 970 - 82 + 83 @@ -19351,32 +19333,32 @@ 17 18 - 82 + 83 21 22 - 82 + 83 31 32 - 82 + 83 35 36 - 165 + 167 38 39 - 82 + 83 41 42 - 82 + 83 @@ -19392,37 +19374,37 @@ 1 2 - 33192 + 33753 2 3 - 24935 + 25356 3 4 - 18660 + 18975 4 5 - 13128 + 13350 5 6 - 9990 + 10159 6 7 - 7678 + 7808 7 11 - 6522 + 6633 @@ -19438,27 +19420,27 @@ 1 2 - 39963 + 40638 2 3 - 38642 + 39294 3 4 - 21137 + 21494 4 5 - 12220 + 12426 5 6 - 2146 + 2183 @@ -19474,37 +19456,37 @@ 1 2 - 33192 + 33753 2 3 - 24935 + 25356 3 4 - 18660 + 18975 4 5 - 13128 + 13350 5 6 - 9990 + 10159 6 7 - 7678 + 7808 7 11 - 6522 + 6633 @@ -19520,57 +19502,57 @@ 1 2 - 1238 + 1259 2 3 - 247 + 251 4 5 - 330 + 335 5 6 - 412 + 419 6 8 - 330 + 335 8 17 - 412 + 419 21 34 - 412 + 419 38 72 - 412 + 419 76 152 - 412 + 419 199 504 - 412 + 419 603 713 - 165 + 167 @@ -19586,37 +19568,37 @@ 1 2 - 1321 + 1343 2 3 - 330 + 335 3 4 - 743 + 755 4 5 - 412 + 419 5 6 - 412 + 419 6 7 - 908 + 923 7 8 - 660 + 671 @@ -19632,57 +19614,57 @@ 1 2 - 1238 + 1259 2 3 - 247 + 251 4 5 - 330 + 335 5 6 - 412 + 419 6 8 - 330 + 335 8 17 - 412 + 419 21 34 - 412 + 419 38 72 - 412 + 419 76 152 - 412 + 419 199 504 - 412 + 419 603 713 - 165 + 167 @@ -19692,23 +19674,23 @@ javadocText - 2502848 + 2545161 id - 2502848 + 2545161 text - 1370363 + 1393530 parentid - 1169475 + 1189246 idx - 42112 + 42824 @@ -19722,7 +19704,7 @@ 1 2 - 2502848 + 2545161 @@ -19738,7 +19720,7 @@ 1 2 - 2502848 + 2545161 @@ -19754,7 +19736,7 @@ 1 2 - 2502848 + 2545161 @@ -19770,17 +19752,17 @@ 1 2 - 1139314 + 1158575 2 3 - 149670 + 152200 3 147 - 81379 + 82755 @@ -19796,17 +19778,17 @@ 1 2 - 1140452 + 1159732 2 3 - 149101 + 151621 3 88 - 80810 + 82176 @@ -19822,12 +19804,12 @@ 1 2 - 1346462 + 1369225 2 32 - 23901 + 24305 @@ -19843,22 +19825,22 @@ 1 2 - 870135 + 884845 2 3 - 159344 + 162038 3 12 - 83086 + 84491 12 75 - 56908 + 57870 @@ -19874,22 +19856,22 @@ 1 2 - 870135 + 884845 2 3 - 159344 + 162038 3 12 - 84225 + 85648 12 67 - 55770 + 56713 @@ -19905,22 +19887,22 @@ 1 2 - 870135 + 884845 2 3 - 159344 + 162038 3 12 - 83086 + 84491 12 75 - 56908 + 57870 @@ -19936,42 +19918,42 @@ 2 3 - 21056 + 21412 3 5 - 2276 + 2314 5 7 - 3414 + 3472 7 11 - 2276 + 2314 12 16 - 3414 + 3472 19 102 - 3414 + 3472 108 154 - 3414 + 3472 181 2056 - 2845 + 2893 @@ -19987,47 +19969,47 @@ 1 2 - 569 + 578 2 3 - 20487 + 20833 3 5 - 2845 + 2893 5 7 - 3414 + 3472 7 13 - 3414 + 3472 13 23 - 3414 + 3472 27 47 - 3414 + 3472 47 123 - 3414 + 3472 254 1252 - 1138 + 1157 @@ -20043,42 +20025,42 @@ 2 3 - 21056 + 21412 3 5 - 2276 + 2314 5 7 - 3414 + 3472 7 11 - 2276 + 2314 12 16 - 3414 + 3472 19 102 - 3414 + 3472 108 154 - 3414 + 3472 181 2056 - 2845 + 2893 @@ -20088,15 +20070,15 @@ xmlEncoding - 154148 + 1717236 id - 154148 + 1717236 encoding - 262 + 2925 @@ -20110,7 +20092,7 @@ 1 2 - 154148 + 1717236 @@ -20124,9 +20106,9 @@ 12 - 588 - 589 - 262 + 587 + 588 + 2925 @@ -20136,27 +20118,27 @@ xmlDTDs - 569 + 578 id - 569 + 578 root - 569 + 578 publicId - 569 + 578 systemId - 569 + 578 fileid - 569 + 578 @@ -20170,7 +20152,7 @@ 1 2 - 569 + 578 @@ -20186,7 +20168,7 @@ 1 2 - 569 + 578 @@ -20202,7 +20184,7 @@ 1 2 - 569 + 578 @@ -20218,7 +20200,7 @@ 1 2 - 569 + 578 @@ -20234,7 +20216,7 @@ 1 2 - 569 + 578 @@ -20250,7 +20232,7 @@ 1 2 - 569 + 578 @@ -20266,7 +20248,7 @@ 1 2 - 569 + 578 @@ -20282,7 +20264,7 @@ 1 2 - 569 + 578 @@ -20298,7 +20280,7 @@ 1 2 - 569 + 578 @@ -20314,7 +20296,7 @@ 1 2 - 569 + 578 @@ -20330,7 +20312,7 @@ 1 2 - 569 + 578 @@ -20346,7 +20328,7 @@ 1 2 - 569 + 578 @@ -20362,7 +20344,7 @@ 1 2 - 569 + 578 @@ -20378,7 +20360,7 @@ 1 2 - 569 + 578 @@ -20394,7 +20376,7 @@ 1 2 - 569 + 578 @@ -20410,7 +20392,7 @@ 1 2 - 569 + 578 @@ -20426,7 +20408,7 @@ 1 2 - 569 + 578 @@ -20442,7 +20424,7 @@ 1 2 - 569 + 578 @@ -20458,7 +20440,7 @@ 1 2 - 569 + 578 @@ -20474,7 +20456,7 @@ 1 2 - 569 + 578 @@ -20484,27 +20466,27 @@ xmlElements - 20510401 + 233696238 id - 20510401 + 233696238 name - 65015 + 740137 parentid - 529033 + 5929876 idx - 232533 + 3042462 fileid - 154148 + 1717236 @@ -20518,7 +20500,7 @@ 1 2 - 20510401 + 233696238 @@ -20534,7 +20516,7 @@ 1 2 - 20510401 + 233696238 @@ -20550,7 +20532,7 @@ 1 2 - 20510401 + 233696238 @@ -20566,7 +20548,7 @@ 1 2 - 20510401 + 233696238 @@ -20582,57 +20564,57 @@ 1 2 - 20448 + 234035 2 3 - 7864 + 87763 3 4 - 3145 + 40956 4 6 - 5767 + 67285 6 8 - 4718 + 52658 8 9 - 2359 + 20478 9 10 - 4456 + 49732 10 18 - 5505 + 58508 18 - 48 - 4980 + 39 + 55583 - 52 - 250 - 4980 + 41 + 200 + 55583 - 342 - 73380 - 786 + 242 + 73955 + 17552 @@ -20648,52 +20630,47 @@ 1 2 - 23856 + 283768 2 3 - 8913 + 96539 3 - 4 - 3408 - - - 4 5 - 2883 + 67285 5 6 - 3670 + 43881 6 8 - 5505 + 61434 8 10 - 5505 + 58508 10 - 21 - 5243 + 19 + 55583 - 22 - 128 - 4980 + 20 + 111 + 55583 - 130 - 229 - 1048 + 114 + 230 + 17552 @@ -20709,37 +20686,32 @@ 1 2 - 35915 + 406636 2 3 - 9437 + 108241 3 4 - 4718 + 55583 4 - 6 - 3932 + 7 + 64359 - 6 - 9 - 3932 + 7 + 12 + 58508 - 9 - 38 - 4980 - - - 45 - 888 - 2097 + 12 + 1041 + 46807 @@ -20755,42 +20727,37 @@ 1 2 - 35391 + 412487 2 3 - 7078 + 76061 3 - 4 - 3408 - - - 4 5 - 2621 + 61434 5 - 7 - 5767 + 6 + 43881 - 7 - 16 - 4980 + 6 + 11 + 58508 - 17 - 114 - 5243 + 11 + 35 + 55583 - 118 + 41 131 - 524 + 32179 @@ -20806,32 +20773,32 @@ 1 2 - 321929 + 3615849 2 3 - 82579 + 906887 3 4 - 34342 + 380307 4 8 - 41158 + 470996 8 - 777 - 43255 + 817 + 447593 - 777 - 888 - 5767 + 817 + 1041 + 108241 @@ -20847,17 +20814,17 @@ 1 2 - 436754 + 4911821 2 3 - 56101 + 611417 3 17 - 36177 + 406636 @@ -20873,32 +20840,32 @@ 1 2 - 321929 + 3615849 2 3 - 82579 + 906887 3 4 - 34342 + 380307 4 8 - 41158 + 470996 8 - 777 - 43255 + 817 + 447593 - 777 - 888 - 5767 + 817 + 1041 + 108241 @@ -20914,7 +20881,7 @@ 1 2 - 529033 + 5929876 @@ -20927,70 +20894,70 @@ 12 + + 1 + 2 + 447593 + 2 - 8 - 19661 + 62 + 228184 - 9 - 76 - 18613 + 62 + 73 + 228184 - 76 - 82 - 17564 + 73 + 81 + 231110 - 82 - 89 - 16778 + 81 + 88 + 254513 - 89 + 88 92 - 15205 + 236961 92 - 95 - 18351 - - - 95 97 - 20448 + 234035 97 98 - 28837 + 61434 98 99 - 17826 + 260364 99 - 104 - 21234 + 101 + 236961 - 104 - 106 - 17826 + 101 + 105 + 228184 - 106 - 159 - 17564 + 105 + 112 + 242811 - 162 - 2019 - 2621 + 112 + 2028 + 152123 @@ -21006,22 +20973,22 @@ 1 2 - 188491 + 447593 2 - 5 - 17302 + 3 + 2103394 - 5 - 9 - 19923 + 3 + 7 + 269140 - 9 - 150 - 6816 + 7 + 152 + 222333 @@ -21034,70 +21001,70 @@ 12 + + 1 + 2 + 447593 + 2 - 8 - 19661 + 62 + 228184 - 9 - 76 - 18613 + 62 + 73 + 228184 - 76 - 82 - 17564 + 73 + 81 + 231110 - 82 - 89 - 16778 + 81 + 88 + 254513 - 89 + 88 92 - 15205 + 236961 92 - 95 - 18351 - - - 95 97 - 20448 + 234035 97 98 - 28837 + 61434 98 99 - 17826 + 260364 99 - 104 - 21234 + 101 + 236961 - 104 - 106 - 17826 + 101 + 105 + 228184 - 106 - 159 - 17564 + 105 + 112 + 242811 - 162 - 2019 - 2621 + 112 + 2028 + 152123 @@ -21110,70 +21077,70 @@ 12 + + 1 + 2 + 447593 + 2 - 8 - 19661 + 62 + 228184 - 9 - 76 - 18613 + 62 + 73 + 228184 - 76 - 82 - 17564 + 73 + 81 + 231110 - 82 - 89 - 16778 + 81 + 88 + 254513 - 89 + 88 92 - 15205 + 236961 92 - 95 - 18351 - - - 95 97 - 20448 + 234035 97 98 - 28837 + 61434 98 99 - 17826 + 260364 99 - 104 - 21234 + 101 + 236961 - 104 - 106 - 17826 + 101 + 105 + 228184 - 106 - 139 - 17564 + 105 + 110 + 242811 - 141 - 589 - 2621 + 110 + 588 + 152123 @@ -21189,57 +21156,52 @@ 1 2 - 11272 + 131645 2 3 - 25953 + 289619 3 4 - 34080 + 362755 4 5 - 14418 + 155048 5 7 - 11534 + 125794 7 10 - 12845 + 157974 10 31 - 12059 + 134570 35 - 694 - 11797 + 676 + 134570 - 738 - 776 - 3932 + 686 + 818 + 117017 - 777 - 779 - 12583 - - - 788 - 889 - 3670 + 818 + 1044 + 108241 @@ -21255,37 +21217,37 @@ 1 2 - 11272 + 131645 2 3 - 76812 + 857155 3 4 - 26740 + 280842 4 5 - 12583 + 140421 5 6 - 11797 + 140421 6 9 - 12583 + 140421 9 69 - 2359 + 26329 @@ -21301,27 +21263,27 @@ 1 2 - 11272 + 131645 2 3 - 109319 + 1202357 3 4 - 11010 + 125794 4 6 - 11272 + 128719 6 - 165 - 11272 + 164 + 128719 @@ -21337,42 +21299,42 @@ 1 2 - 39061 + 441742 2 3 - 42207 + 456369 3 4 - 17040 + 184303 4 7 - 12845 + 149197 7 17 - 12845 + 143346 - 18 - 763 - 11797 + 17 + 732 + 131645 - 764 - 777 - 12583 + 732 + 817 + 102390 - 777 - 888 - 5767 + 817 + 1041 + 108241 @@ -21382,31 +21344,31 @@ xmlAttrs - 24948200 + 281184985 id - 24948200 + 281184985 elementid - 20335805 + 228699578 name - 98571 + 1091190 value - 1576089 + 17815959 idx - 6029 + 67285 fileid - 153886 + 1711385 @@ -21420,7 +21382,7 @@ 1 2 - 24948200 + 281184985 @@ -21436,7 +21398,7 @@ 1 2 - 24948200 + 281184985 @@ -21452,7 +21414,7 @@ 1 2 - 24948200 + 281184985 @@ -21468,7 +21430,7 @@ 1 2 - 24948200 + 281184985 @@ -21484,7 +21446,7 @@ 1 2 - 24948200 + 281184985 @@ -21500,17 +21462,17 @@ 1 2 - 18609237 + 209122501 2 6 - 1529163 + 17306931 6 24 - 197404 + 2270145 @@ -21526,17 +21488,17 @@ 1 2 - 18609237 + 209122501 2 6 - 1531785 + 17336186 6 23 - 194782 + 2240890 @@ -21552,17 +21514,17 @@ 1 2 - 18619461 + 209239519 2 6 - 1539387 + 17423949 6 21 - 176956 + 2036109 @@ -21578,17 +21540,17 @@ 1 2 - 18609237 + 209122501 2 6 - 1529163 + 17306931 6 24 - 197404 + 2270145 @@ -21604,7 +21566,7 @@ 1 2 - 20335805 + 228699578 @@ -21620,133 +21582,133 @@ 1 2 - 20448 + 228184 2 3 - 10748 + 117017 3 4 - 6029 + 58508 4 5 - 3408 + 43881 5 6 - 5767 + 64359 6 8 - 7078 + 78987 8 11 - 8126 + 78987 + + + 11 + 20 + 84837 + + + 20 + 39 + 90688 + + + 39 + 76 + 81912 + + + 78 + 150 + 81912 + + + 152 + 75273 + 81912 + + + + + + + name + elementid + + + 12 + + + 1 + 2 + 228184 + + + 2 + 3 + 117017 + + + 3 + 4 + 58508 + + + 4 + 5 + 43881 + + + 5 + 6 + 64359 + + + 6 + 8 + 78987 + + + 8 + 11 + 87763 11 22 - 7602 + 81912 - 23 - 38 - 7864 - - - 38 - 79 - 7864 - - - 81 - 168 - 7602 - - - 168 - 74700 - 6029 - - - - - - - name - elementid - - - 12 - - - 1 - 2 - 20448 - - - 2 - 3 - 10748 - - - 3 - 4 - 6029 - - - 4 - 5 - 3408 - - - 5 - 6 - 5767 - - - 6 - 8 - 7078 - - - 8 - 11 - 8913 - - - 11 - 25 - 8389 - - - 25 + 22 39 - 8126 + 84837 - 43 - 91 - 7864 + 39 + 76 + 81912 - 91 - 227 - 7602 + 78 + 150 + 84837 - 227 - 74700 - 4194 + 152 + 75273 + 78987 @@ -21762,42 +21724,42 @@ 1 2 - 41420 + 459294 2 3 - 15467 + 166750 3 4 - 6553 + 76061 4 - 5 - 7078 + 6 + 99465 - 5 - 9 - 8126 + 6 + 11 + 81912 - 9 - 21 - 7602 + 12 + 28 + 81912 - 22 - 64 - 8126 + 28 + 70 + 81912 - 68 - 2100 - 4194 + 71 + 2141 + 43881 @@ -21813,37 +21775,37 @@ 1 2 - 38799 + 435891 2 3 - 18351 + 193079 3 4 - 9437 + 111166 4 5 - 10486 + 117017 5 - 7 - 6291 + 8 + 99465 - 7 - 10 - 7864 + 8 + 13 + 96539 - 10 + 13 21 - 7340 + 38030 @@ -21859,52 +21821,52 @@ 1 2 - 34342 + 389084 2 3 - 10224 + 96539 3 4 - 5243 + 55583 4 5 - 4718 + 49732 5 6 - 7340 + 87763 6 - 9 - 8126 + 8 + 81912 - 9 - 17 - 8651 + 8 + 15 + 81912 - 17 - 34 - 7602 + 15 + 27 + 87763 - 36 - 91 - 7602 + 27 + 65 + 81912 - 91 - 223 - 4718 + 68 + 221 + 78987 @@ -21920,37 +21882,37 @@ 1 2 - 860924 + 9694924 2 3 - 233057 + 2615347 3 5 - 120854 + 1345704 5 - 31 - 118757 + 19 + 1357406 - 31 - 91 - 124000 + 19 + 89 + 1348630 - 91 - 1111 - 118232 + 89 + 101 + 1360331 - 3397 - 3398 - 262 + 101 + 3454 + 93614 @@ -21966,32 +21928,37 @@ 1 2 - 878227 + 9882152 2 3 - 222047 + 2498329 3 5 - 122427 + 1357406 5 - 33 - 124262 + 20 + 1345704 - 33 - 93 - 121640 + 20 + 90 + 1339853 - 93 - 3398 - 107484 + 90 + 102 + 1345704 + + + 119 + 3454 + 46807 @@ -22007,17 +21974,17 @@ 1 2 - 1430330 + 16163082 2 4 - 126884 + 1436393 4 53 - 18875 + 216482 @@ -22033,17 +22000,17 @@ 1 2 - 1305281 + 14709136 2 3 - 190588 + 2214561 3 20 - 80220 + 892260 @@ -22059,32 +22026,32 @@ 1 2 - 1014548 + 11432638 2 3 - 170926 + 1916166 3 - 10 - 122427 + 9 + 1339853 - 10 - 83 - 119805 + 9 + 80 + 1372033 - 83 + 80 99 - 120330 + 1442244 99 - 182 - 28050 + 181 + 313022 @@ -22100,62 +22067,62 @@ 1 6 - 524 + 5850 12 14 - 524 + 5850 17 - 26 - 524 + 25 + 5850 - 39 - 56 - 524 + 38 + 59 + 5850 - 83 - 110 - 524 + 88 + 116 + 5850 - 153 - 232 - 524 + 159 + 242 + 5850 - 316 - 400 - 524 + 324 + 407 + 5850 - 468 - 545 - 524 + 480 + 563 + 5850 - 626 - 754 - 524 + 647 + 777 + 5850 - 951 - 1491 - 524 + 974 + 1518 + 5850 - 4718 - 6587 - 524 + 4792 + 6693 + 5850 - 77571 - 77572 - 262 + 78176 + 78177 + 2925 @@ -22171,62 +22138,62 @@ 1 6 - 524 + 5850 12 14 - 524 + 5850 17 - 26 - 524 + 25 + 5850 - 39 - 56 - 524 + 38 + 59 + 5850 - 83 - 110 - 524 + 88 + 116 + 5850 - 153 - 232 - 524 + 159 + 242 + 5850 - 316 - 400 - 524 + 324 + 407 + 5850 - 468 - 545 - 524 + 480 + 563 + 5850 - 626 - 754 - 524 + 647 + 777 + 5850 - 951 - 1491 - 524 + 974 + 1518 + 5850 - 4718 - 6587 - 524 + 4792 + 6693 + 5850 - 77571 - 77572 - 262 + 78176 + 78177 + 2925 @@ -22242,62 +22209,62 @@ 1 4 - 524 + 5850 7 10 - 524 + 5850 11 17 - 524 + 5850 18 - 23 - 524 + 24 + 5850 - 26 - 38 - 524 + 25 + 36 + 5850 - 39 - 49 - 524 + 38 + 48 + 5850 - 57 - 67 - 524 + 53 + 66 + 5850 - 72 - 79 - 524 + 71 + 77 + 5850 - 95 - 101 - 524 + 96 + 99 + 5850 - 105 - 106 - 524 + 103 + 105 + 5850 - 106 - 132 - 524 + 108 + 131 + 5850 - 140 - 141 - 262 + 139 + 140 + 2925 @@ -22313,62 +22280,62 @@ 1 5 - 524 + 5850 7 10 - 524 + 5850 11 - 18 - 524 + 17 + 5850 22 - 32 - 524 + 33 + 5850 - 46 - 63 - 524 + 50 + 60 + 5850 - 85 - 119 - 524 + 84 + 121 + 5850 - 142 - 185 - 524 + 140 + 182 + 5850 - 212 - 228 - 524 + 217 + 236 + 5850 - 253 - 275 - 524 + 254 + 272 + 5850 - 307 - 423 - 524 + 299 + 424 + 5850 580 - 1324 - 524 + 1357 + 5850 - 3579 - 3580 - 262 + 3647 + 3648 + 2925 @@ -22384,62 +22351,62 @@ 1 6 - 524 + 5850 7 8 - 524 + 5850 10 - 19 - 524 + 18 + 5850 - 23 - 36 - 524 + 22 + 37 + 5850 - 45 - 59 - 524 + 44 + 58 + 5850 - 73 - 97 - 524 + 71 + 93 + 5850 - 115 - 131 - 524 + 111 + 127 + 5850 - 140 - 148 - 524 + 137 + 145 + 5850 - 168 - 181 - 524 + 165 + 178 + 5850 - 248 + 245 363 - 524 + 5850 - 473 - 530 - 524 + 477 + 533 + 5850 - 587 - 588 - 262 + 585 + 586 + 2925 @@ -22455,72 +22422,72 @@ 1 3 - 11534 + 128719 3 5 - 11797 + 131645 5 6 - 7078 + 78987 6 7 - 11797 + 134570 7 8 - 9961 + 111166 8 10 - 11272 + 122868 10 15 - 12583 + 140421 15 - 27 - 11797 + 28 + 137495 - 27 - 41 - 11797 + 28 + 44 + 137495 - 41 - 65 - 11797 + 44 + 67 + 131645 - 65 - 157 - 12583 + 68 + 184 + 128719 - 162 - 817 - 11797 + 186 + 835 + 128719 - 818 - 832 - 12845 + 848 + 880 + 73136 - 832 - 1187 - 5243 + 880 + 1163 + 125794 @@ -22536,52 +22503,52 @@ 1 2 - 17564 + 201855 2 3 - 36177 + 397860 3 4 - 21759 + 231110 4 5 - 14942 + 160899 5 - 8 - 13894 + 7 + 119943 - 8 - 14 - 11797 + 7 + 11 + 128719 - 14 - 295 - 11797 + 11 + 40 + 128719 - 330 - 775 - 9699 + 40 + 693 + 128719 - 776 - 778 - 12583 + 717 + 817 + 108241 - 787 + 817 888 - 3670 + 105316 @@ -22597,62 +22564,62 @@ 1 2 - 9699 + 99465 2 3 - 12583 + 134570 3 4 - 9699 + 96539 4 5 - 12845 + 122868 5 6 - 23332 + 304246 6 7 - 22021 + 248662 7 8 - 9699 + 111166 8 12 - 11797 + 131645 12 18 - 13370 + 140421 18 24 - 13107 + 140421 24 - 37 - 12059 + 35 + 131645 - 37 + 35 55 - 3670 + 49732 @@ -22668,67 +22635,67 @@ 1 3 - 13370 + 146272 3 4 - 7602 + 87763 4 5 - 14156 + 160899 5 6 - 17040 + 190153 6 8 - 12059 + 134570 8 12 - 13632 + 149197 12 - 19 - 11797 + 20 + 134570 - 19 + 20 27 - 13370 + 131645 27 41 - 11797 + 137495 42 - 170 - 11797 + 137 + 128719 - 205 - 780 - 11010 + 149 + 813 + 128719 - 781 - 783 - 12583 + 813 + 822 + 76061 - 791 + 822 893 - 3670 + 105316 @@ -22744,47 +22711,47 @@ 1 2 - 15205 + 155048 2 3 - 14680 + 160899 3 4 - 29099 + 336426 4 5 - 29885 + 342277 5 6 - 17826 + 198930 6 10 - 13107 + 149197 10 12 - 8913 + 99465 12 15 - 13370 + 140421 15 24 - 11797 + 128719 @@ -22794,23 +22761,23 @@ xmlNs - 247214 + 2785023 id - 1572 + 17552 prefixName - 1835 + 20478 URI - 1572 + 17552 fileid - 143924 + 1617771 @@ -22824,12 +22791,12 @@ 1 2 - 1310 + 14627 2 3 - 262 + 2925 @@ -22845,7 +22812,7 @@ 1 2 - 1572 + 17552 @@ -22861,110 +22828,110 @@ 2 3 - 262 + 2925 20 21 - 262 + 2925 - 88 - 89 - 262 - - - 167 - 168 - 262 - - - 213 - 214 - 262 - - - 453 - 454 - 262 - - - - - - - prefixName - id - - - 12 - - - 1 - 2 - 1835 - - - - - - - prefixName - URI - - - 12 - - - 1 - 2 - 1835 - - - - - - - prefixName - fileid - - - 12 - - - 1 - 2 - 262 - - - 2 - 3 - 262 - - - 20 - 21 - 262 - - - 88 - 89 - 262 + 95 + 96 + 2925 166 167 - 262 + 2925 - 213 - 214 - 262 + 218 + 219 + 2925 - 453 - 454 - 262 + 451 + 452 + 2925 + + + + + + + prefixName + id + + + 12 + + + 1 + 2 + 20478 + + + + + + + prefixName + URI + + + 12 + + + 1 + 2 + 20478 + + + + + + + prefixName + fileid + + + 12 + + + 1 + 2 + 2925 + + + 2 + 3 + 2925 + + + 20 + 21 + 2925 + + + 95 + 96 + 2925 + + + 165 + 166 + 2925 + + + 218 + 219 + 2925 + + + 451 + 452 + 2925 @@ -22980,7 +22947,7 @@ 1 2 - 1572 + 17552 @@ -22996,12 +22963,12 @@ 1 2 - 1310 + 14627 2 3 - 262 + 2925 @@ -23017,32 +22984,32 @@ 2 3 - 262 + 2925 20 21 - 262 + 2925 - 88 - 89 - 262 + 95 + 96 + 2925 - 167 - 168 - 262 + 166 + 167 + 2925 - 213 - 214 - 262 + 218 + 219 + 2925 - 453 - 454 - 262 + 451 + 452 + 2925 @@ -23058,17 +23025,17 @@ 1 2 - 64228 + 713808 2 3 - 56101 + 640672 3 4 - 23594 + 263290 @@ -23084,17 +23051,17 @@ 1 2 - 64228 + 713808 2 3 - 56101 + 640672 3 4 - 23594 + 263290 @@ -23110,17 +23077,17 @@ 1 2 - 64228 + 713808 2 3 - 56101 + 640672 3 4 - 23594 + 263290 @@ -23130,19 +23097,19 @@ xmlHasNs - 4987018 + 56753630 elementId - 4987018 + 56753630 nsId - 1572 + 17552 fileid - 143137 + 1606069 @@ -23156,7 +23123,7 @@ 1 2 - 4987018 + 56753630 @@ -23172,7 +23139,7 @@ 1 2 - 4987018 + 56753630 @@ -23188,32 +23155,32 @@ 13 14 - 262 + 2925 84 85 - 262 + 2925 - 2426 - 2427 - 262 + 2515 + 2516 + 2925 - 2733 - 2734 - 262 + 2776 + 2777 + 2925 - 3704 - 3705 - 262 + 3759 + 3760 + 2925 - 10063 - 10064 - 262 + 10253 + 10254 + 2925 @@ -23229,32 +23196,32 @@ 2 3 - 262 + 2925 20 21 - 262 + 2925 - 86 - 87 - 262 + 92 + 93 + 2925 - 164 - 165 - 262 + 163 + 164 + 2925 - 209 - 210 - 262 + 213 + 214 + 2925 - 453 - 454 - 262 + 451 + 452 + 2925 @@ -23270,77 +23237,72 @@ 1 3 - 8651 + 93614 3 5 - 12059 + 131645 5 6 - 6553 + 73136 6 7 - 12583 + 143346 7 8 - 9437 + 105316 8 10 - 11797 + 128719 10 15 - 12583 + 137495 15 - 25 - 10748 + 26 + 128719 - 25 - 36 - 11010 + 26 + 39 + 128719 - 36 - 49 - 11272 + 40 + 53 + 122868 - 49 - 54 - 2883 + 53 + 61 + 32179 - 54 - 55 - 11272 + 62 + 63 + 166750 - 55 - 81 - 11010 + 63 + 97 + 122868 - 81 - 298 - 10748 - - - 298 - 833 - 524 + 99 + 889 + 90688 @@ -23356,17 +23318,17 @@ 1 2 - 64490 + 716733 2 3 - 55577 + 631896 3 4 - 23069 + 257439 @@ -23376,23 +23338,23 @@ xmlComments - 20643577 + 231835655 id - 20643577 + 231835655 text - 325861 + 3785525 parentid - 161751 + 1796223 fileid - 151264 + 1682130 @@ -23406,7 +23368,7 @@ 1 2 - 20643577 + 231835655 @@ -23422,7 +23384,7 @@ 1 2 - 20643577 + 231835655 @@ -23438,7 +23400,7 @@ 1 2 - 20643577 + 231835655 @@ -23454,67 +23416,62 @@ 1 2 - 44828 + 509027 2 7 - 26740 + 313022 7 - 32 - 27002 + 19 + 339351 - 32 - 61 - 24642 + 19 + 62 + 336426 - 61 + 62 76 - 24642 + 310097 76 84 - 26215 + 318873 84 - 90 - 24118 + 91 + 339351 - 90 - 94 - 21496 - - - 94 + 91 95 - 11534 + 286693 95 96 - 19399 + 210632 96 98 - 27002 + 295469 98 100 - 24380 + 269140 100 - 460 - 23856 + 457 + 257439 @@ -23530,67 +23487,67 @@ 1 2 - 45353 + 517803 2 6 - 25953 + 301320 6 - 32 - 27526 + 18 + 286693 - 32 - 61 - 24904 + 18 + 58 + 286693 - 61 - 75 - 25429 + 58 + 72 + 313022 - 75 - 84 - 28575 + 72 + 81 + 301320 - 84 - 90 - 23594 + 81 + 88 + 304246 - 90 + 88 94 - 23069 + 348127 94 95 - 12845 + 146272 95 96 - 19923 + 216482 96 98 - 27526 + 310097 98 100 - 25953 + 286693 100 - 460 - 15205 + 457 + 166750 @@ -23606,67 +23563,67 @@ 1 2 - 47450 + 541207 2 7 - 25691 + 298395 7 - 32 - 25691 + 19 + 327649 - 32 - 61 - 24904 + 19 + 62 + 330575 - 61 + 62 75 - 25429 + 289619 75 - 84 - 28575 + 83 + 315948 - 84 + 83 90 - 23594 + 304246 90 94 - 23069 + 251588 94 95 - 12845 + 146272 95 96 - 19923 + 216482 96 98 - 27526 + 310097 98 100 - 25953 + 286693 100 - 460 - 15205 + 457 + 166750 @@ -23682,22 +23639,22 @@ 1 2 - 128719 + 1424691 2 - 724 - 12321 + 674 + 137495 - 726 - 830 - 14942 + 697 + 869 + 128719 - 831 + 869 941 - 5767 + 105316 @@ -23713,27 +23670,22 @@ 1 2 - 128719 + 1424691 2 - 697 - 12321 + 645 + 137495 - 697 - 795 - 6553 - - - 795 - 827 - 12321 + 677 + 838 + 128719 838 899 - 1835 + 105316 @@ -23749,7 +23701,7 @@ 1 2 - 161751 + 1796223 @@ -23765,27 +23717,27 @@ 1 2 - 115611 + 1287195 2 - 549 - 11534 + 511 + 128719 - 579 - 829 - 7864 + 514 + 866 + 108241 - 829 - 832 - 12583 + 868 + 870 + 146272 - 834 + 879 941 - 3670 + 11701 @@ -23801,27 +23753,27 @@ 1 2 - 115611 + 1287195 2 - 536 - 11534 + 495 + 128719 - 560 - 795 - 9961 + 495 + 835 + 108241 - 795 - 812 - 11534 + 837 + 839 + 146272 - 819 + 843 899 - 2621 + 11701 @@ -23837,12 +23789,12 @@ 1 2 - 143662 + 1600218 2 6 - 7602 + 81912 @@ -23852,31 +23804,31 @@ xmlChars - 19508174 + 222401095 id - 19508174 + 222401095 text - 14981766 + 169646548 parentid - 19508174 + 222401095 idx - 262 + 2925 isCDATA - 524 + 5850 fileid - 34080 + 383233 @@ -23890,7 +23842,7 @@ 1 2 - 19508174 + 222401095 @@ -23906,7 +23858,7 @@ 1 2 - 19508174 + 222401095 @@ -23922,7 +23874,7 @@ 1 2 - 19508174 + 222401095 @@ -23938,7 +23890,7 @@ 1 2 - 19508174 + 222401095 @@ -23954,7 +23906,7 @@ 1 2 - 19508174 + 222401095 @@ -23970,17 +23922,17 @@ 1 2 - 12819230 + 145722260 2 3 - 1346439 + 14832005 3 - 128 - 816095 + 204 + 9092282 @@ -23996,17 +23948,17 @@ 1 2 - 12819230 + 145722260 2 3 - 1346439 + 14832005 3 - 128 - 816095 + 204 + 9092282 @@ -24022,7 +23974,7 @@ 1 2 - 14981766 + 169646548 @@ -24038,7 +23990,7 @@ 1 2 - 14981766 + 169646548 @@ -24054,12 +24006,12 @@ 1 2 - 14334499 + 162239321 2 76 - 647266 + 7407226 @@ -24075,7 +24027,7 @@ 1 2 - 19508174 + 222401095 @@ -24091,7 +24043,7 @@ 1 2 - 19508174 + 222401095 @@ -24107,7 +24059,7 @@ 1 2 - 19508174 + 222401095 @@ -24123,7 +24075,7 @@ 1 2 - 19508174 + 222401095 @@ -24139,7 +24091,7 @@ 1 2 - 19508174 + 222401095 @@ -24153,9 +24105,9 @@ 12 - 74414 - 74415 - 262 + 76023 + 76024 + 2925 @@ -24169,9 +24121,9 @@ 12 - 57148 - 57149 - 262 + 57990 + 57991 + 2925 @@ -24185,9 +24137,9 @@ 12 - 74414 - 74415 - 262 + 76023 + 76024 + 2925 @@ -24203,7 +24155,7 @@ 2 3 - 262 + 2925 @@ -24217,9 +24169,9 @@ 12 - 130 - 131 - 262 + 131 + 132 + 2925 @@ -24233,14 +24185,14 @@ 12 - 518 - 519 - 262 + 519 + 520 + 2925 - 73896 - 73897 - 262 + 75504 + 75505 + 2925 @@ -24254,14 +24206,14 @@ 12 - 492 - 493 - 262 + 493 + 494 + 2925 - 56656 - 56657 - 262 + 57497 + 57498 + 2925 @@ -24275,14 +24227,14 @@ 12 - 518 - 519 - 262 + 519 + 520 + 2925 - 73896 - 73897 - 262 + 75504 + 75505 + 2925 @@ -24298,7 +24250,7 @@ 1 2 - 524 + 5850 @@ -24314,12 +24266,12 @@ 98 99 - 262 + 2925 - 130 - 131 - 262 + 131 + 132 + 2925 @@ -24335,57 +24287,57 @@ 1 2 - 2883 + 32179 2 - 23 - 2621 + 24 + 29254 24 243 - 2621 + 29254 294 - 566 - 2621 + 501 + 29254 - 610 - 686 - 2621 + 521 + 653 + 29254 - 691 - 764 - 2621 + 661 + 756 + 29254 - 765 - 775 - 2621 + 762 + 811 + 35105 - 775 - 776 - 786 + 812 + 816 + 20478 - 776 - 777 - 9437 + 816 + 817 + 61434 - 777 - 803 - 2621 + 817 + 818 + 73136 - 807 - 888 - 2621 + 825 + 1041 + 14627 @@ -24401,67 +24353,67 @@ 1 2 - 2883 + 32179 2 21 - 2621 + 29254 - 22 - 188 - 2621 + 23 + 189 + 29254 - 208 - 492 - 2621 + 212 + 434 + 29254 - 525 - 589 - 2621 + 434 + 557 + 29254 - 590 - 638 - 2621 + 565 + 634 + 29254 - 639 - 651 - 2621 + 645 + 669 + 29254 - 652 - 656 - 2359 + 669 + 675 + 32179 - 656 - 659 - 3145 + 675 + 677 + 20478 - 659 - 663 - 2883 + 677 + 681 + 29254 - 663 - 667 - 2621 + 681 + 685 + 35105 - 667 - 701 - 2621 + 685 + 690 + 32179 - 702 - 744 - 1835 + 690 + 1041 + 26329 @@ -24477,57 +24429,57 @@ 1 2 - 2883 + 32179 2 - 23 - 2621 + 24 + 29254 24 243 - 2621 + 29254 294 - 566 - 2621 + 501 + 29254 - 610 - 686 - 2621 + 521 + 653 + 29254 - 691 - 764 - 2621 + 661 + 756 + 29254 - 765 - 775 - 2621 + 762 + 811 + 35105 - 775 - 776 - 786 + 812 + 816 + 20478 - 776 - 777 - 9437 + 816 + 817 + 61434 - 777 - 803 - 2621 + 817 + 818 + 73136 - 807 - 888 - 2621 + 825 + 1041 + 14627 @@ -24543,7 +24495,7 @@ 1 2 - 34080 + 383233 @@ -24559,12 +24511,12 @@ 1 2 - 8389 + 96539 2 3 - 25691 + 286693 @@ -24574,15 +24526,15 @@ xmllocations - 86011718 + 973620234 xmlElement - 85766076 + 970852763 location - 80598169 + 912103979 @@ -24596,12 +24548,12 @@ 1 2 - 85764503 + 970835211 2 - 454 - 1572 + 452 + 17552 @@ -24617,12 +24569,12 @@ 1 2 - 78771195 + 891394755 2 25 - 1826974 + 20709224 @@ -24632,30 +24584,30 @@ configs - 1 + 669552 id - 1 + 669552 configNames - 1 + 669552 id - 1 + 669552 config - 1 + 669552 name - 1 + 13871 @@ -24669,7 +24621,7 @@ 1 2 - 1 + 669552 @@ -24685,7 +24637,7 @@ 1 2 - 1 + 669552 @@ -24697,7 +24649,13 @@ 12 - + + + 1 + 2 + 669552 + + @@ -24707,7 +24665,13 @@ 12 - + + + 1 + 2 + 669552 + + @@ -24717,7 +24681,68 @@ 12 - + + + 1 + 2 + 2157 + + + 2 + 13 + 1088 + + + 13 + 33 + 1048 + + + 33 + 42 + 1044 + + + 42 + 53 + 1094 + + + 53 + 59 + 1122 + + + 59 + 63 + 1008 + + + 63 + 65 + 1008 + + + 65 + 67 + 1192 + + + 67 + 96 + 986 + + + 96 + 97 + 1809 + + + 99 + 132 + 311 + + @@ -24727,7 +24752,68 @@ 12 - + + + 1 + 2 + 2157 + + + 2 + 13 + 1088 + + + 13 + 33 + 1048 + + + 33 + 42 + 1044 + + + 42 + 53 + 1094 + + + 53 + 59 + 1122 + + + 59 + 63 + 1008 + + + 63 + 65 + 1008 + + + 65 + 67 + 1192 + + + 67 + 96 + 986 + + + 96 + 97 + 1809 + + + 99 + 132 + 311 + + @@ -24735,19 +24821,19 @@ configValues - 1 + 669315 id - 1 + 669315 config - 1 + 669315 value - 1 + 483226 @@ -24761,7 +24847,7 @@ 1 2 - 1 + 669315 @@ -24777,7 +24863,7 @@ 1 2 - 1 + 669315 @@ -24789,7 +24875,13 @@ 12 - + + + 1 + 2 + 669315 + + @@ -24799,7 +24891,13 @@ 12 - + + + 1 + 2 + 669315 + + @@ -24809,7 +24907,23 @@ 12 - + + + 1 + 2 + 416999 + + + 2 + 3 + 42151 + + + 3 + 547 + 24074 + + @@ -24819,7 +24933,23 @@ 12 - + + + 1 + 2 + 416999 + + + 2 + 3 + 42151 + + + 3 + 547 + 24074 + + @@ -24827,15 +24957,15 @@ configLocations - 1 + 2008421 locatable - 1 + 2008421 location - 1 + 2008421 @@ -24845,7 +24975,13 @@ 12 - + + + 1 + 2 + 2008421 + + @@ -24855,7 +24991,13 @@ 12 - + + + 1 + 2 + 2008421 + + @@ -24863,19 +25005,19 @@ ktComments - 116780 + 122924 id - 116780 + 122924 kind - 13 + 12 text - 15129 + 15880 @@ -24889,7 +25031,7 @@ 1 2 - 116780 + 122924 @@ -24905,7 +25047,7 @@ 1 2 - 116780 + 122924 @@ -24919,18 +25061,18 @@ 12 - 794 - 795 + 951 + 952 4 - 8820 - 8821 + 10006 + 10007 4 - 17201 - 17202 + 19068 + 19069 4 @@ -24945,18 +25087,18 @@ 12 - 20 - 21 + 22 + 23 4 - 680 - 681 + 810 + 811 4 - 2774 - 2775 + 3047 + 3048 4 @@ -24973,42 +25115,42 @@ 1 2 - 6780 + 7500 2 3 - 692 + 1109 3 4 - 1506 + 1342 4 5 - 126 + 192 5 6 - 3436 + 1445 6 - 16 - 1258 + 7 + 2280 - 16 - 32 - 1201 + 7 + 19 + 1150 - 33 - 4236 - 126 + 24 + 4801 + 859 @@ -25024,7 +25166,7 @@ 1 2 - 15129 + 15880 @@ -25034,19 +25176,19 @@ ktCommentSections - 74919 + 78073 id - 74919 + 78073 comment - 74910 + 78065 content - 8109 + 8736 @@ -25060,7 +25202,7 @@ 1 2 - 74919 + 78073 @@ -25076,7 +25218,7 @@ 1 2 - 74919 + 78073 @@ -25092,7 +25234,7 @@ 1 2 - 74902 + 78057 2 @@ -25113,7 +25255,7 @@ 1 2 - 74902 + 78057 2 @@ -25134,52 +25276,47 @@ 1 2 - 3170 + 3529 2 3 - 522 + 937 3 5 - 518 + 564 5 6 - 962 + 438 6 - 9 - 622 + 7 + 982 - 9 - 10 - 34 + 7 + 12 + 442 - 10 - 11 - 718 + 12 + 16 + 499 - 11 - 21 - 675 + 18 + 31 + 773 - 21 - 37 - 622 - - - 42 - 504 - 261 + 31 + 575 + 569 @@ -25195,52 +25332,47 @@ 1 2 - 3170 + 3529 2 3 - 522 + 937 3 5 - 518 + 564 5 6 - 962 + 438 6 - 9 - 622 + 7 + 982 - 9 - 10 - 34 + 7 + 12 + 442 - 10 - 11 - 718 + 12 + 16 + 499 - 11 - 21 - 675 + 18 + 31 + 773 - 21 - 37 - 622 - - - 42 - 504 - 261 + 31 + 575 + 569 @@ -25250,15 +25382,15 @@ ktCommentSectionNames - 4034 + 3673 id - 4034 + 3673 name - 12 + 11 @@ -25272,7 +25404,7 @@ 1 2 - 4034 + 3673 @@ -25286,9 +25418,9 @@ 12 - 325 - 326 - 12 + 323 + 324 + 11 @@ -25298,15 +25430,15 @@ ktCommentSectionSubjectNames - 4034 + 3673 id - 4034 + 3673 subjectname - 2643 + 2388 @@ -25320,7 +25452,7 @@ 1 2 - 4034 + 3673 @@ -25336,22 +25468,22 @@ 1 2 - 2010 + 1819 2 3 - 397 + 341 3 - 9 - 198 + 6 + 181 - 10 + 8 16 - 37 + 45 @@ -25361,15 +25493,15 @@ ktCommentOwners - 76609 + 79801 id - 74810 + 77967 owner - 71853 + 74856 @@ -25383,12 +25515,12 @@ 1 2 - 73186 + 76329 2 6 - 1624 + 1637 @@ -25404,12 +25536,12 @@ 1 2 - 69697 + 72407 2 - 5 - 2155 + 13 + 2448 @@ -25419,19 +25551,19 @@ ktExtensionFunctions - 166732 + 149983 id - 166732 + 149983 typeid - 13632 + 13755 kttypeid - 262 + 264 @@ -25445,7 +25577,7 @@ 1 2 - 166732 + 149983 @@ -25461,7 +25593,7 @@ 1 2 - 166732 + 149983 @@ -25477,37 +25609,42 @@ 1 2 - 7864 + 7935 2 3 - 524 + 529 3 4 - 786 + 793 - 5 - 6 - 1310 + 4 + 5 + 1058 6 - 13 - 1048 + 10 + 1058 - 13 - 30 - 1048 + 10 + 17 + 1058 - 35 - 227 - 1048 + 31 + 99 + 1058 + + + 184 + 185 + 264 @@ -25523,7 +25660,7 @@ 1 2 - 13632 + 13755 @@ -25537,9 +25674,9 @@ 12 - 636 - 637 - 262 + 567 + 568 + 264 @@ -25555,7 +25692,7 @@ 52 53 - 262 + 264 @@ -25565,15 +25702,15 @@ ktProperties - 2989117 + 3024536 id - 2989117 + 3024536 nodeName - 1848733 + 1863287 @@ -25587,7 +25724,7 @@ 1 2 - 2989117 + 3024536 @@ -25603,17 +25740,17 @@ 1 2 - 1614626 + 1625747 2 4 - 155721 + 156861 4 352 - 78385 + 80678 @@ -25623,15 +25760,15 @@ ktPropertyGetters - 816357 + 830861 id - 816357 + 830861 getter - 816357 + 830861 @@ -25645,7 +25782,7 @@ 1 2 - 816357 + 830861 @@ -25661,7 +25798,7 @@ 1 2 - 816357 + 830861 @@ -25671,15 +25808,15 @@ ktPropertySetters - 53073 + 53910 id - 53073 + 53910 setter - 53073 + 53910 @@ -25693,7 +25830,7 @@ 1 2 - 53073 + 53910 @@ -25709,7 +25846,7 @@ 1 2 - 53073 + 53910 @@ -25719,15 +25856,15 @@ ktPropertyBackingFields - 2459964 + 2496205 id - 2459964 + 2496205 backingField - 2459964 + 2496205 @@ -25741,7 +25878,7 @@ 1 2 - 2459964 + 2496205 @@ -25757,7 +25894,7 @@ 1 2 - 2459964 + 2496205 @@ -25767,15 +25904,15 @@ ktSyntheticBody - 1497 + 3319 id - 1497 + 3319 kind - 124 + 301 @@ -25789,7 +25926,7 @@ 1 2 - 1497 + 3319 @@ -25803,9 +25940,9 @@ 12 - 12 - 13 - 124 + 11 + 12 + 301 @@ -25815,37 +25952,37 @@ ktLocalFunction - 1573 + 1714 id - 1573 + 1714 ktInitializerAssignment - 69820 + 57546 id - 69820 + 57546 ktPropertyDelegates - 4944 + 6938 id - 4944 + 6938 variableId - 4944 + 6938 @@ -25859,7 +25996,7 @@ 1 2 - 4944 + 6938 @@ -25875,7 +26012,7 @@ 1 2 - 4944 + 6938 @@ -25885,15 +26022,15 @@ compiler_generated - 268390 + 266747 id - 268390 + 266747 kind - 148 + 136 @@ -25907,7 +26044,7 @@ 1 2 - 268390 + 266747 @@ -25921,59 +26058,59 @@ 12 - 61 - 62 - 12 + 15 + 16 + 11 - 84 - 85 - 24 + 70 + 71 + 11 - 94 - 95 - 12 + 86 + 87 + 22 - 143 - 144 - 12 + 114 + 115 + 11 - 186 - 187 - 12 + 146 + 147 + 11 - 203 - 204 - 12 + 246 + 247 + 11 - 737 - 738 - 12 + 588 + 589 + 11 - 1028 - 1029 - 12 + 1148 + 1149 + 11 - 1275 - 1276 - 12 + 1354 + 1355 + 11 - 5140 - 5141 - 12 + 5444 + 5445 + 11 - 12589 - 12590 - 12 + 14161 + 14162 + 11 @@ -25983,15 +26120,15 @@ ktFunctionOriginalNames - 216279 + 218494 id - 216279 + 218494 name - 25167 + 25658 @@ -26005,7 +26142,7 @@ 1 2 - 216279 + 218494 @@ -26021,22 +26158,22 @@ 1 2 - 19923 + 20368 2 4 - 1835 + 1851 6 16 - 2097 + 2116 22 339 - 1310 + 1322 @@ -26046,25 +26183,14 @@ ktDataClasses - 15467 + 15606 id - 15467 - - - - - - isNullDefaultCase - 50 - - - id - 50 + 15606 - + \ No newline at end of file diff --git a/java/ql/lib/experimental/quantum/JCA.qll b/java/ql/lib/experimental/quantum/JCA.qll index dc86c463750..108835c2c94 100644 --- a/java/ql/lib/experimental/quantum/JCA.qll +++ b/java/ql/lib/experimental/quantum/JCA.qll @@ -269,7 +269,7 @@ module JCAModel { } /** - * Data-flow configuration modelling flow from a cipher string literal to a cipher algorithm consumer. + * Data-flow configuration modeling flow from a cipher string literal to a cipher algorithm consumer. */ private module CipherAlgorithmStringToCipherConsumerConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node src) { src.asExpr() instanceof CipherStringLiteral } @@ -404,9 +404,7 @@ module JCAModel { * For example, in `Cipher.getInstance(algorithm)`, this class represents `algorithm`. */ class CipherGetInstanceAlgorithmArg extends CipherAlgorithmValueConsumer instanceof Expr { - CipherGetInstanceCall call; - - CipherGetInstanceAlgorithmArg() { this = call.getAlgorithmArg() } + CipherGetInstanceAlgorithmArg() { this = any(CipherGetInstanceCall call).getAlgorithmArg() } override Crypto::ConsumerInputDataFlowNode getInputNode() { result.asExpr() = this } @@ -1333,7 +1331,7 @@ module JCAModel { } /** - * Data-flow configuration modelling flow from a key agreement string literal to a key agreement algorithm consumer. + * Data-flow configuration modeling flow from a key agreement string literal to a key agreement algorithm consumer. */ private module KeyAgreementAlgorithmStringToConsumerConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node src) { src.asExpr() instanceof KeyAgreementStringLiteral } @@ -1539,11 +1537,9 @@ module JCAModel { } class MacOperationCall extends Crypto::MacOperationInstance instanceof MethodCall { - Expr output; - MacOperationCall() { super.getMethod().getDeclaringType().hasQualifiedName("javax.crypto", "Mac") and - ( + exists(Expr output | super.getMethod().hasStringSignature(["doFinal()", "doFinal(byte[])"]) and this = output or super.getMethod().hasStringSignature("doFinal(byte[], int)") and diff --git a/java/ql/lib/experimental/quantum/Language.qll b/java/ql/lib/experimental/quantum/Language.qll index 975a8ad8e1f..e203d2a1587 100644 --- a/java/ql/lib/experimental/quantum/Language.qll +++ b/java/ql/lib/experimental/quantum/Language.qll @@ -113,7 +113,7 @@ private class ConstantDataSource extends Crypto::GenericConstantSourceInstance i } /** - * An instance of random number generation, modelled as the expression + * An instance of random number generation, modeled as the expression * tied to an output node (i.e., the result of the source of randomness) */ abstract class RandomnessInstance extends Crypto::RandomNumberGenerationInstance { diff --git a/java/ql/lib/printAst.ql b/java/ql/lib/printAst.ql index cd72403de90..8ea0efaed5f 100644 --- a/java/ql/lib/printAst.ql +++ b/java/ql/lib/printAst.ql @@ -18,8 +18,8 @@ external string selectedSourceFile(); class PrintAstConfigurationOverride extends PrintAstConfiguration { /** - * Holds if the location matches the selected file in the VS Code extension and - * the element is `fromSource`. + * Holds if the location `l` matches the selected file in the VS Code extension and + * the element `e` is `fromSource`. */ override predicate shouldPrint(Element e, Location l) { super.shouldPrint(e, l) and diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 93be6469202..69cadd5a6b0 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.6.1-dev +version: 7.6.2-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/lib/semmle/code/java/CompilationUnit.qll b/java/ql/lib/semmle/code/java/CompilationUnit.qll index 546c3d26ea3..5b26828b47c 100644 --- a/java/ql/lib/semmle/code/java/CompilationUnit.qll +++ b/java/ql/lib/semmle/code/java/CompilationUnit.qll @@ -33,5 +33,13 @@ class CompilationUnit extends Element, File { */ Module getModule() { cumodule(this, result) } + /** + * Holds if this compilation unit represents a compact source file. + * A compact source file contains an implicitly declared top-level class. + */ + predicate isCompactSourceFile() { + exists(Class c | c.getCompilationUnit() = this and c.isImplicit()) + } + override string getAPrimaryQlClass() { result = "CompilationUnit" } } diff --git a/java/ql/lib/semmle/code/java/Concurrency.qll b/java/ql/lib/semmle/code/java/Concurrency.qll index 0e510db3443..7322f16068c 100644 --- a/java/ql/lib/semmle/code/java/Concurrency.qll +++ b/java/ql/lib/semmle/code/java/Concurrency.qll @@ -26,7 +26,8 @@ predicate locallySynchronizedOnThis(Expr e, RefType thisType) { } /** - * Holds if `e` is synchronized by a `synchronized` modifier on the enclosing (static) method. + * Holds if `e` is synchronized by a `synchronized` modifier on the enclosing (static) method + * declared in the type `classType`. */ predicate locallySynchronizedOnClass(Expr e, RefType classType) { exists(SynchronizedCallable c | c = e.getEnclosingCallable() | diff --git a/java/ql/lib/semmle/code/java/Conversions.qll b/java/ql/lib/semmle/code/java/Conversions.qll index 76b74fd1eb7..779eb7620be 100644 --- a/java/ql/lib/semmle/code/java/Conversions.qll +++ b/java/ql/lib/semmle/code/java/Conversions.qll @@ -100,12 +100,12 @@ class InvocationConversionContext extends ConversionSite { * See the Java Language Specification, Section 5.4. */ class StringConversionContext extends ConversionSite { - AddExpr a; - StringConversionContext() { - a.getAnOperand() = this and - not this.getType() instanceof TypeString and - a.getAnOperand().getType() instanceof TypeString + exists(AddExpr a | + a.getAnOperand() = this and + not this.getType() instanceof TypeString and + a.getAnOperand().getType() instanceof TypeString + ) } override Type getConversionTarget() { result instanceof TypeString } diff --git a/java/ql/lib/semmle/code/java/Member.qll b/java/ql/lib/semmle/code/java/Member.qll index 7d84dbd379d..17fe696972f 100644 --- a/java/ql/lib/semmle/code/java/Member.qll +++ b/java/ql/lib/semmle/code/java/Member.qll @@ -848,6 +848,9 @@ class Field extends Member, ExprParent, @field, Variable { override string getAPrimaryQlClass() { result = "Field" } } +overlay[local] +private class DiscardableField extends DiscardableReferableLocatable, @field { } + /** An instance field. */ class InstanceField extends Field { InstanceField() { not this.isStatic() } diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index a4872a32c91..2aea8b006ae 100644 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -291,7 +291,7 @@ class TryStmt extends Stmt, @trystmt { CatchClause getACatchClause() { result.getParent() = this } /** - * Gets the `catch` clause at the specified (zero-based) position + * Gets the `catch` clause at the specified (zero-based) position `index` * in this `try` statement. */ CatchClause getCatchClause(int index) { @@ -305,7 +305,7 @@ class TryStmt extends Stmt, @trystmt { /** Gets a resource variable declaration, if any. */ LocalVariableDeclStmt getAResourceDecl() { result.getParent() = this and result.getIndex() <= -3 } - /** Gets the resource variable declaration at the specified position in this `try` statement. */ + /** Gets the resource variable declaration at the specified position `index` in this `try` statement. */ LocalVariableDeclStmt getResourceDecl(int index) { result = this.getAResourceDecl() and index = -3 - result.getIndex() @@ -314,7 +314,7 @@ class TryStmt extends Stmt, @trystmt { /** Gets a resource expression, if any. */ VarAccess getAResourceExpr() { result.getParent() = this and result.getIndex() <= -3 } - /** Gets the resource expression at the specified position in this `try` statement. */ + /** Gets the resource expression at the specified position `index` in this `try` statement. */ VarAccess getResourceExpr(int index) { result = this.getAResourceExpr() and index = -3 - result.getIndex() @@ -323,7 +323,7 @@ class TryStmt extends Stmt, @trystmt { /** Gets a resource in this `try` statement, if any. */ ExprParent getAResource() { result = this.getAResourceDecl() or result = this.getAResourceExpr() } - /** Gets the resource at the specified position in this `try` statement. */ + /** Gets the resource at the specified position `index` in this `try` statement. */ ExprParent getResource(int index) { result = this.getResourceDecl(index) or result = this.getResourceExpr(index) } diff --git a/java/ql/lib/semmle/code/java/Type.qll b/java/ql/lib/semmle/code/java/Type.qll index dd646e74285..ef5cc5d941c 100644 --- a/java/ql/lib/semmle/code/java/Type.qll +++ b/java/ql/lib/semmle/code/java/Type.qll @@ -15,6 +15,7 @@ module; import Member import Modifier import JDK +private import semmle.code.java.Overlay /** * Holds if reference type `t` is an immediate super-type of `sub`. @@ -699,6 +700,15 @@ class Class extends ClassOrInterface { /** Holds if this class is an anonymous class. */ predicate isAnonymous() { isAnonymClass(this.getSourceDeclaration(), _) } + /** Holds if this class is an implicit class (compact source file). */ + predicate isImplicit() { isImplicitClass(this.getSourceDeclaration()) } + + /** Holds if this is an auxiliary program element generated by the compiler. */ + override predicate isCompilerGenerated() { + super.isCompilerGenerated() or + this.isImplicit() + } + /** * Gets an annotation that applies to this class. * @@ -998,6 +1008,10 @@ class ClassOrInterface extends RefType, @classorinterface { CompanionObject getCompanionObject() { type_companion_object(this, _, result) } } +overlay[local] +private class DiscardableClassOrInterface extends DiscardableReferableLocatable, @classorinterface { +} + private string getAPublicObjectMethodSignature() { exists(Method m | m.getDeclaringType() instanceof TypeObject and diff --git a/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll b/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll index e974f711ec4..b08c59d4630 100644 --- a/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll +++ b/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll @@ -7,10 +7,9 @@ module; import java import Dominance private import codeql.controlflow.BasicBlock as BB +private import codeql.controlflow.SuccessorType private module Input implements BB::InputSig { - import SuccessorType - /** Hold if `t` represents a conditional successor type. */ predicate successorTypeIsCondition(SuccessorType t) { none() } @@ -34,7 +33,7 @@ private module Input implements BB::InputSig { result = getASpecificSuccessor(node, t) or node.getASuccessor() = result and - t instanceof NormalSuccessor and + t instanceof DirectSuccessor and not result = getASpecificSuccessor(node, _) } @@ -96,7 +95,17 @@ class BasicBlock extends BbImpl::BasicBlock { 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) } + BasicBlock getASuccessor(SuccessorType t) { result = super.getASuccessor(t) } + + BasicBlock getASuccessor() { result = super.getASuccessor() } + + BasicBlock getImmediateDominator() { result = super.getImmediateDominator() } + + predicate inDominanceFrontier(BasicBlock df) { super.inDominanceFrontier(df) } + + predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } + + predicate postDominates(BasicBlock bb) { super.postDominates(bb) } /** * DEPRECATED: Use `getASuccessor` instead. @@ -145,3 +154,15 @@ class BasicBlock extends BbImpl::BasicBlock { class ExitBlock extends BasicBlock { ExitBlock() { this.getLastNode() instanceof ControlFlow::ExitNode } } + +private class BasicBlockAlias = BasicBlock; + +module Cfg implements BB::CfgSig { + class ControlFlowNode = BbImpl::ControlFlowNode; + + class BasicBlock = BasicBlockAlias; + + class EntryBasicBlock extends BasicBlock instanceof BbImpl::EntryBasicBlock { } + + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { BbImpl::dominatingEdge(bb1, bb2) } +} diff --git a/java/ql/lib/semmle/code/java/controlflow/Guards.qll b/java/ql/lib/semmle/code/java/controlflow/Guards.qll index a3cffbae459..51d6a62f43b 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Guards.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Guards.qll @@ -139,20 +139,13 @@ private predicate isNonFallThroughPredecessor(SwitchCase sc, ControlFlowNode pre ) } -private module GuardsInput implements SharedGuards::InputSig { +private module GuardsInput implements SharedGuards::InputSig { private import java as J private import semmle.code.java.dataflow.internal.BaseSSA private import semmle.code.java.dataflow.NullGuards as NullGuards - import SuccessorType - - class ControlFlowNode = J::ControlFlowNode; class NormalExitNode = ControlFlow::NormalExitNode; - class BasicBlock = J::BasicBlock; - - predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { J::dominatingEdge(bb1, bb2) } - class AstNode = ExprParent; class Expr = J::Expr; @@ -382,7 +375,7 @@ private module GuardsInput implements SharedGuards::InputSig { } } -private module GuardsImpl = SharedGuards::Make; +private module GuardsImpl = SharedGuards::Make; private module LogicInputCommon { private import semmle.code.java.dataflow.NullGuards as NullGuards diff --git a/java/ql/lib/semmle/code/java/controlflow/SuccessorType.qll b/java/ql/lib/semmle/code/java/controlflow/SuccessorType.qll deleted file mode 100644 index feabc47552f..00000000000 --- a/java/ql/lib/semmle/code/java/controlflow/SuccessorType.qll +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Provides different types of control flow successor types. - */ -overlay[local?] -module; - -import java -private import codeql.util.Boolean - -private newtype TSuccessorType = - TNormalSuccessor() or - TBooleanSuccessor(Boolean branch) or - TExceptionSuccessor() - -/** The type of a control flow successor. */ -class SuccessorType extends TSuccessorType { - /** Gets a textual representation of successor type. */ - string toString() { result = "SuccessorType" } -} - -/** A normal control flow successor. */ -class NormalSuccessor extends SuccessorType, TNormalSuccessor { } - -/** - * An exceptional control flow successor. - * - * This marks control flow edges that are taken when an exception is thrown. - */ -class ExceptionSuccessor extends SuccessorType, TExceptionSuccessor { } - -/** - * A conditional control flow successor. - * - * This currently only includes boolean successors (`BooleanSuccessor`). - */ -class ConditionalSuccessor extends SuccessorType, TBooleanSuccessor { - /** Gets the Boolean value of this successor. */ - boolean getValue() { this = TBooleanSuccessor(result) } -} - -/** - * A Boolean control flow successor. - * - * For example, this program fragment: - * - * ```java - * if (x < 0) - * return 0; - * else - * return 1; - * ``` - * - * has a control flow graph containing Boolean successors: - * - * ``` - * if - * | - * x < 0 - * / \ - * / \ - * / \ - * true false - * | \ - * return 0 return 1 - * ``` - */ -class BooleanSuccessor = ConditionalSuccessor; - -/** - * A nullness control flow successor. This is currently unused for Java. - */ -class NullnessSuccessor extends ConditionalSuccessor { - NullnessSuccessor() { none() } -} 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 5c0fbb88d66..e50581c7e14 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll @@ -157,17 +157,7 @@ private module BaseSsaImpl { private import BaseSsaImpl -private module SsaInput implements SsaImplCommon::InputSig { - private import java as J - - class BasicBlock = J::BasicBlock; - - class ControlFlowNode = J::ControlFlowNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result.immediatelyDominates(bb) } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - +private module SsaInput implements SsaImplCommon::InputSig { class SourceVariable = BaseSsaSourceVariable; /** @@ -199,7 +189,7 @@ private module SsaInput implements SsaImplCommon::InputSig { } } -private module Impl = SsaImplCommon::Make; +private module Impl = SsaImplCommon::Make; private import Cached 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 f9313959226..5af24642477 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll @@ -470,7 +470,8 @@ private predicate enhancedForStmtStep(Node node1, Node node2, Type containerType } /** - * Holds if the step from `node1` to `node2` reads a value from an array. + * Holds if the step from `node1` to `node2` reads a value from an array, where + * the elements are of type `elemType`. * This covers ordinary array reads as well as array iteration through enhanced * `for` statements. */ 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 8b9087ecbdc..1721569e45a 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -69,28 +69,10 @@ private predicate closureFlowStep(Expr e1, Expr e2) { ) } -private module CaptureInput implements VariableCapture::InputSig { +private module CaptureInput implements VariableCapture::InputSig { private import java as J - class BasicBlock instanceof J::BasicBlock { - string toString() { result = super.toString() } - - ControlFlowNode getNode(int i) { result = super.getNode(i) } - - int length() { result = super.length() } - - Callable getEnclosingCallable() { result = super.getEnclosingCallable() } - - Location getLocation() { result = super.getLocation() } - } - - class ControlFlowNode = J::ControlFlowNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { - result.(J::BasicBlock).immediatelyDominates(bb) - } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.(J::BasicBlock).getASuccessor() } + Callable basicBlockGetEnclosingCallable(BasicBlock bb) { result = bb.getEnclosingCallable() } //TODO: support capture of `this` in lambdas class CapturedVariable instanceof LocalScopeVariable { @@ -165,7 +147,7 @@ class CapturedVariable = CaptureInput::CapturedVariable; class CapturedParameter = CaptureInput::CapturedParameter; -module CaptureFlow = VariableCapture::Flow; +module CaptureFlow = VariableCapture::Flow; private CaptureFlow::ClosureNode asClosureNode(Node n) { result = n.(CaptureNode).getSynthesizedCaptureNode() 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 ab2f7f89cb4..4b436edc6aa 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -263,8 +263,8 @@ class Content extends TContent { /** * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. + * The location spans column `sc` of line `sl` to + * column `ec` of line `el` in file `path`. * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ @@ -362,8 +362,8 @@ class ContentSet instanceof Content { /** * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. + * The location spans column `sc` of line `sl` to + * column `ec` of line `el` in file `path`. * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ 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 51da69e9d64..dc2cb7e7d00 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -166,17 +166,7 @@ private predicate uncertainVariableUpdate(TrackedVar v, ControlFlowNode n, Basic uncertainVariableUpdate(v.getQualifier(), n, b, i) } -private module SsaInput implements SsaImplCommon::InputSig { - private import java as J - - class BasicBlock = J::BasicBlock; - - class ControlFlowNode = J::ControlFlowNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result.immediatelyDominates(bb) } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - +private module SsaInput implements SsaImplCommon::InputSig { class SourceVariable = SsaSourceVariable; /** @@ -218,7 +208,7 @@ private module SsaInput implements SsaImplCommon::InputSig { } } -import SsaImplCommon::Make as Impl +import SsaImplCommon::Make as Impl final class Definition = Impl::Definition; 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 8789661af7d..6363b8f7ed3 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 @@ -204,7 +204,7 @@ private module Impl { /** Gets the character value of expression `e`. */ string getCharValue(Expr e) { result = e.(CharacterLiteral).getValue() } - /** Gets the constant `float` value of non-`ConstantIntegerExpr` expressions. */ + /** Gets the constant `float` value of non-`ConstantIntegerExpr` expression `e`. */ float getNonIntegerValue(Expr e) { result = e.(LongLiteral).getValue().toFloat() or result = e.(FloatLiteral).getValue().toFloat() or @@ -256,12 +256,12 @@ private module Impl { exists(EnhancedForStmt for | def = for.getVariable()) } - /** Returns the operand of the operation if `def` is a decrement. */ + /** Returns the operand of the operation if `e` is a decrement. */ Expr getDecrementOperand(Element e) { result = e.(PostDecExpr).getExpr() or result = e.(PreDecExpr).getExpr() } - /** Returns the operand of the operation if `def` is an increment. */ + /** Returns the operand of the operation if `e` is an increment. */ Expr getIncrementOperand(Element e) { result = e.(PostIncExpr).getExpr() or result = e.(PreIncExpr).getExpr() } diff --git a/java/ql/lib/semmle/code/java/frameworks/Mockito.qll b/java/ql/lib/semmle/code/java/frameworks/Mockito.qll index 1a8d987a38e..a8559060d30 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Mockito.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Mockito.qll @@ -223,10 +223,10 @@ class MockitoInjectedField extends MockitoAnnotatedField { // If there is no initializer for this field, and there is a most mockable constructor, // then we are doing a parameterized injection of mocks into a most mockable constructor. result = mockInjectedClass.getAMostMockableConstructor() - else - if this.usingPropertyInjection() - then - // We will call the no-arg constructor if the field wasn't initialized. + else ( + this.usingPropertyInjection() and + // We will call the no-arg constructor if the field wasn't initialized. + ( not exists(this.getInitializer()) and result = mockInjectedClass.getNoArgsConstructor() or @@ -241,9 +241,8 @@ class MockitoInjectedField extends MockitoAnnotatedField { // once, but we instead assume that there are sufficient mocks to go around. mockedField.getType().(RefType).getAnAncestor() = result.getParameterType(0) ) - else - // There's no instance, and no no-arg constructor we can call, so injection fails. - none() + ) + ) ) } @@ -253,18 +252,16 @@ class MockitoInjectedField extends MockitoAnnotatedField { * Field injection only occurs if property injection and not constructor injection is used. */ Field getASetField() { - if this.usingPropertyInjection() - then - result = this.getMockInjectedClass().getASetField() and - exists(MockitoMockedField mockedField | - mockedField.getDeclaringType() = this.getDeclaringType() and - mockedField.isValid() - | - // We make a simplifying assumption here - in theory, each mock can only be injected - // once, but we instead assume that there are sufficient mocks to go around. - mockedField.getType().(RefType).getAnAncestor() = result.getType() - ) - else none() + this.usingPropertyInjection() and + result = this.getMockInjectedClass().getASetField() and + exists(MockitoMockedField mockedField | + mockedField.getDeclaringType() = this.getDeclaringType() and + mockedField.isValid() + | + // We make a simplifying assumption here - in theory, each mock can only be injected + // once, but we instead assume that there are sufficient mocks to go around. + mockedField.getType().(RefType).getAnAncestor() = result.getType() + ) } } 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 2b003b3c94e..d59976c0c6c 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 @@ -35,14 +35,14 @@ class SessionEjb extends EJB { // Either the EJB does not declare any business interfaces explicitly // and implements a single interface candidate, // which is then considered to be the business interface... - count(this.getAnExplicitBusinessInterface()) = 0 and + not exists(this.getAnExplicitBusinessInterface()) and count(this.getAnImplementedBusinessInterfaceCandidate()) = 1 and result = this.getAnImplementedBusinessInterfaceCandidate() or // ...or each business interface needs to be declared explicitly. ( count(this.getAnImplementedBusinessInterfaceCandidate()) != 1 or - count(this.getAnExplicitBusinessInterface()) != 0 + exists(this.getAnExplicitBusinessInterface()) ) and result = this.getAnExplicitBusinessInterface() } diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll index 98acdbc1c55..89867398148 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll @@ -55,7 +55,7 @@ private predicate isVarargs(Argument arg, DataFlow::ImplicitVarargsArray varargs arg.isVararg() and arg.getCall() = varargs.getCall() } -/** Holds if `store` closes `file`. */ +/** Holds if `closeCall` closes `file`. */ private predicate closesFile(DataFlow::Node file, Call closeCall) { closeCall.getCallee() instanceof CloseFileMethod and if closeCall.getCallee().isStatic() diff --git a/java/ql/lib/semmle/code/java/security/FileWritable.qll b/java/ql/lib/semmle/code/java/security/FileWritable.qll index d1833bf64d4..a5efad31bcb 100644 --- a/java/ql/lib/semmle/code/java/security/FileWritable.qll +++ b/java/ql/lib/semmle/code/java/security/FileWritable.qll @@ -89,7 +89,7 @@ private VarAccess getFileForPathConversion(Expr pathExpr) { } /** - * Holds if `fileAccess` is used in the `setWorldWritableExpr` to set the file to be world writable. + * Holds if `fileAccess` is used in the `setWorldWritable` to set the file to be world writable. */ private predicate fileSetWorldWritable(VarAccess fileAccess, Expr setWorldWritable) { // Calls to `File.setWritable(.., false)`. diff --git a/java/ql/lib/semmle/code/java/security/TempDirUtils.qll b/java/ql/lib/semmle/code/java/security/TempDirUtils.qll index 3d1623fa334..21e289ef1ad 100644 --- a/java/ql/lib/semmle/code/java/security/TempDirUtils.qll +++ b/java/ql/lib/semmle/code/java/security/TempDirUtils.qll @@ -26,7 +26,8 @@ class MethodFileCreateTempFile extends Method { } /** - * Holds if `expDest` is some constructor call `new java.io.File(expSource)`, where the specific `File` constructor being used has `paramCount` parameters. + * Holds if `expSource` is an argument to a constructor call `exprDest` (constructor from `java.io.File`), where + * the specific `File` constructor being used has `paramCount` parameters. */ predicate isFileConstructorArgument(Expr expSource, Expr exprDest, int paramCount) { exists(ConstructorCall construtorCall | diff --git a/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll b/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll index ce0f649eff3..f5968898adc 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll @@ -552,7 +552,7 @@ private DataFlow::Node getASafelyConfiguredParser() { } /** - * Holds if `parseMethodQualifierExpr` is a `jodd.json.JsonParser` instance that is configured unsafely + * Holds if `parserExpr` is a `jodd.json.JsonParser` instance that is configured unsafely * and which never appears to be configured safely. */ private predicate joddJsonParserConfiguredUnsafely(Expr parserExpr) { diff --git a/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/old.dbscheme b/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/old.dbscheme new file mode 100644 index 00000000000..1b8f5f4c747 --- /dev/null +++ b/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/old.dbscheme @@ -0,0 +1,1236 @@ +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * javac A.java B.java C.java + * + * 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: + * + * javac A.java B.java C.java + */ + unique int id : @compilation, + int kind: int ref, + string cwd : string ref, + string name : string ref +); + +case @compilation.kind of + 1 = @javacompilation +| 2 = @kotlincompilation +; + +compilation_started( + int id : @compilation ref +) + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * javac A.java B.java C.java + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--javac-args` + * 2 | A.java + * 3 | B.java + * 4 | C.java + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@@@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * javac A.java B.java C.java + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | A.java + * 1 | B.java + * 2 | C.java + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * For each file recorded in `compilation_compiling_files`, + * there will be a corresponding row in + * `compilation_compiling_files_completed` once extraction + * of that file is complete. The `result` will indicate the + * extraction result: + * + * 0: Successfully extracted + * 1: Errors were encountered, but extraction recovered + * 2: Errors were encountered, and extraction could not recover + */ +#keyset[id, num] +compilation_compiling_files_completed( + int id : @compilation ref, + int num : int ref, + int result : int 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 +); + +/** + * The `cpu_seconds` and `elapsed_seconds` are the CPU time and elapsed + * time (respectively) that the original compilation (not the extraction) + * took for compiler invocation `id`. + */ +compilation_compiler_times( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float 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`. + * The `result` will indicate the extraction result: + * + * 0: Successfully extracted + * 1: Errors were encountered, but extraction recovered + * 2: Errors were encountered, and extraction could not recover + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref, + int result : int ref +); + +diagnostics( + unique int id: @diagnostic, + string generated_by: string ref, // TODO: Sync this with the other languages? + 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 +); + +/** + * 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( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/* + * External artifacts + */ + +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +sourceLocationPrefix( + string prefix : string ref +); + +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path: string ref +); + +/* + * SMAP + */ + +smap_header( + int outputFileId: @file ref, + string outputFilename: string ref, + string defaultStratum: string ref +); + +smap_files( + int outputFileId: @file ref, + string stratum: string ref, + int inputFileNum: int ref, + string inputFileName: string ref, + int inputFileId: @file ref +); + +smap_lines( + int outputFileId: @file ref, + string stratum: string ref, + int inputFileNum: int ref, + int inputStartLine: int ref, + int inputLineCount: int ref, + int outputStartLine: int ref, + int outputLineIncrement: int ref +); + +/* + * Locations and files + */ + +@location = @location_default ; + +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 +); + +hasLocation( + int locatableid: @locatable ref, + int id: @location ref +); + +@sourceline = @locatable ; + +#keyset[element_id] +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int 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 +); + +/* + * Java + */ + +cupackage( + unique int id: @file ref, + int packageid: @package ref +); + +#keyset[fileid,keyName] +jarManifestMain( + int fileid: @file ref, + string keyName: string ref, + string value: string ref +); + +#keyset[fileid,entryName,keyName] +jarManifestEntries( + int fileid: @file ref, + string entryName: string ref, + string keyName: string ref, + string value: string ref +); + +packages( + unique int id: @package, + string nodeName: string ref +); + +primitives( + unique int id: @primitive, + string nodeName: string ref +); + +modifiers( + unique int id: @modifier, + string nodeName: string ref +); + +/** + * An errortype is used when the extractor is unable to extract a type + * correctly for some reason. + */ +error_type( + unique int id: @errortype +); + +classes_or_interfaces( + unique int id: @classorinterface, + string nodeName: string ref, + int parentid: @package ref, + int sourceid: @classorinterface ref +); + +file_class( + int id: @classorinterface ref +); + +class_object( + unique int id: @classorinterface ref, + unique int instance: @field ref +); + +type_companion_object( + unique int id: @classorinterface ref, + unique int instance: @field ref, + unique int companion_object: @classorinterface ref +); + +kt_nullable_types( + unique int id: @kt_nullable_type, + int classid: @reftype ref +) + +kt_notnull_types( + unique int id: @kt_notnull_type, + int classid: @reftype ref +) + +kt_type_alias( + unique int id: @kt_type_alias, + string name: string ref, + int kttypeid: @kt_type ref +) + +@kt_type = @kt_nullable_type | @kt_notnull_type + +isInterface( + unique int id: @classorinterface ref +); + +isRecord( + unique int id: @classorinterface ref +); + +fielddecls( + unique int id: @fielddecl, + int parentid: @reftype ref +); + +#keyset[fieldId] #keyset[fieldDeclId,pos] +fieldDeclaredIn( + int fieldId: @field ref, + int fieldDeclId: @fielddecl ref, + int pos: int ref +); + +fields( + unique int id: @field, + string nodeName: string ref, + int typeid: @type ref, + int parentid: @reftype ref +); + +fieldsKotlinType( + unique int id: @field ref, + int kttypeid: @kt_type ref +); + +constrs( + unique int id: @constructor, + string nodeName: string ref, + string signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @constructor ref +); + +constrsKotlinType( + unique int id: @constructor ref, + int kttypeid: @kt_type ref +); + +methods( + unique int id: @method, + string nodeName: string ref, + string signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @method ref +); + +methodsKotlinType( + unique int id: @method ref, + int kttypeid: @kt_type ref +); + +#keyset[parentid,pos] +params( + unique int id: @param, + int typeid: @type ref, + int pos: int ref, + int parentid: @callable ref, + int sourceid: @param ref +); + +paramsKotlinType( + unique int id: @param ref, + int kttypeid: @kt_type ref +); + +paramName( + unique int id: @param ref, + string nodeName: string ref +); + +isVarargsParam( + int param: @param ref +); + +exceptions( + unique int id: @exception, + int typeid: @type ref, + int parentid: @callable ref +); + +isAnnotType( + int interfaceid: @classorinterface ref +); + +isAnnotElem( + int methodid: @method ref +); + +annotValue( + int parentid: @annotation ref, + int id2: @method ref, + unique int value: @expr ref +); + +isEnumType( + int classid: @classorinterface ref +); + +isEnumConst( + int fieldid: @field ref +); + +#keyset[parentid,pos] +typeVars( + unique int id: @typevariable, + string nodeName: string ref, + int pos: int ref, + int parentid: @classorinterfaceorcallable ref +); + +wildcards( + unique int id: @wildcard, + string nodeName: string ref, + int kind: int ref +); + +#keyset[parentid,pos] +typeBounds( + unique int id: @typebound, + int typeid: @reftype ref, + int pos: int ref, + int parentid: @boundedtype ref +); + +#keyset[parentid,pos] +typeArgs( + int argumentid: @reftype ref, + int pos: int ref, + int parentid: @classorinterfaceorcallable ref +); + +isParameterized( + int memberid: @member ref +); + +isRaw( + int memberid: @member ref +); + +#keyset[classid] #keyset[parent] +isAnonymClass( + int classid: @classorinterface ref, + int parent: @classinstancexpr ref +); + +#keyset[typeid] #keyset[parent] +isLocalClassOrInterface( + int typeid: @classorinterface ref, + int parent: @localtypedeclstmt ref +); + +isDefConstr( + int constructorid: @constructor ref +); + +#keyset[exprId] +lambdaKind( + int exprId: @lambdaexpr ref, + int bodyKind: int ref +); + +isCanonicalConstr( + int constructorid: @constructor ref +); + +arrays( + unique int id: @array, + string nodeName: string ref, + int elementtypeid: @type ref, + int dimension: int ref, + int componenttypeid: @type ref +); + +enclInReftype( + unique int child: @reftype ref, + int parent: @reftype ref +); + +extendsReftype( + int id1: @reftype ref, + int id2: @classorinterface ref +); + +implInterface( + int id1: @classorarray ref, + int id2: @classorinterface ref +); + +permits( + int id1: @classorinterface ref, + int id2: @classorinterface ref +); + +hasModifier( + int id1: @modifiable ref, + int id2: @modifier ref +); + +imports( + unique int id: @import, + int holder: @classorinterfaceorpackage ref, + string name: string ref, + int kind: int ref +); + +#keyset[parent,idx] +stmts( + unique int id: @stmt, + int kind: int ref, + int parent: @stmtparent ref, + int idx: int ref, + int bodydecl: @callable ref +); + +@stmtparent = @callable | @stmt | @switchexpr | @whenexpr| @stmtexpr; + +case @stmt.kind of + 0 = @block +| 1 = @ifstmt +| 2 = @forstmt +| 3 = @enhancedforstmt +| 4 = @whilestmt +| 5 = @dostmt +| 6 = @trystmt +| 7 = @switchstmt +| 8 = @synchronizedstmt +| 9 = @returnstmt +| 10 = @throwstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @emptystmt +| 14 = @exprstmt +| 15 = @labeledstmt +| 16 = @assertstmt +| 17 = @localvariabledeclstmt +| 18 = @localtypedeclstmt +| 19 = @constructorinvocationstmt +| 20 = @superconstructorinvocationstmt +| 21 = @case +| 22 = @catchclause +| 23 = @yieldstmt +| 24 = @errorstmt +| 25 = @whenbranch +; + +#keyset[parent,idx] +exprs( + unique int id: @expr, + int kind: int ref, + int typeid: @type ref, + int parent: @exprparent ref, + int idx: int ref +); + +exprsKotlinType( + unique int id: @expr ref, + int kttypeid: @kt_type ref +); + +callableEnclosingExpr( + unique int id: @expr ref, + int callable_id: @callable ref +); + +statementEnclosingExpr( + unique int id: @expr ref, + int statement_id: @stmt ref +); + +isParenthesized( + unique int id: @expr ref, + int parentheses: int ref +); + +case @expr.kind of + 1 = @arrayaccess +| 2 = @arraycreationexpr +| 3 = @arrayinit +| 4 = @assignexpr +| 5 = @assignaddexpr +| 6 = @assignsubexpr +| 7 = @assignmulexpr +| 8 = @assigndivexpr +| 9 = @assignremexpr +| 10 = @assignandexpr +| 11 = @assignorexpr +| 12 = @assignxorexpr +| 13 = @assignlshiftexpr +| 14 = @assignrshiftexpr +| 15 = @assignurshiftexpr +| 16 = @booleanliteral +| 17 = @integerliteral +| 18 = @longliteral +| 19 = @floatingpointliteral +| 20 = @doubleliteral +| 21 = @characterliteral +| 22 = @stringliteral +| 23 = @nullliteral +| 24 = @mulexpr +| 25 = @divexpr +| 26 = @remexpr +| 27 = @addexpr +| 28 = @subexpr +| 29 = @lshiftexpr +| 30 = @rshiftexpr +| 31 = @urshiftexpr +| 32 = @andbitexpr +| 33 = @orbitexpr +| 34 = @xorbitexpr +| 35 = @andlogicalexpr +| 36 = @orlogicalexpr +| 37 = @ltexpr +| 38 = @gtexpr +| 39 = @leexpr +| 40 = @geexpr +| 41 = @eqexpr +| 42 = @neexpr +| 43 = @postincexpr +| 44 = @postdecexpr +| 45 = @preincexpr +| 46 = @predecexpr +| 47 = @minusexpr +| 48 = @plusexpr +| 49 = @bitnotexpr +| 50 = @lognotexpr +| 51 = @castexpr +| 52 = @newexpr +| 53 = @conditionalexpr +| 54 = @parexpr // deprecated +| 55 = @instanceofexpr +| 56 = @localvariabledeclexpr +| 57 = @typeliteral +| 58 = @thisaccess +| 59 = @superaccess +| 60 = @varaccess +| 61 = @methodaccess +| 62 = @unannotatedtypeaccess +| 63 = @arraytypeaccess +| 64 = @packageaccess +| 65 = @wildcardtypeaccess +| 66 = @declannotation +| 67 = @uniontypeaccess +| 68 = @lambdaexpr +| 69 = @memberref +| 70 = @annotatedtypeaccess +| 71 = @typeannotation +| 72 = @intersectiontypeaccess +| 73 = @switchexpr +| 74 = @errorexpr +| 75 = @whenexpr +| 76 = @getclassexpr +| 77 = @safecastexpr +| 78 = @implicitcastexpr +| 79 = @implicitnotnullexpr +| 80 = @implicitcoerciontounitexpr +| 81 = @notinstanceofexpr +| 82 = @stmtexpr +| 83 = @stringtemplateexpr +| 84 = @notnullexpr +| 85 = @unsafecoerceexpr +| 86 = @valueeqexpr +| 87 = @valueneexpr +| 88 = @propertyref +| 89 = @recordpatternexpr +; + +/** Holds if this `when` expression was written as an `if` expression. */ +when_if(unique int id: @whenexpr ref); + +/** Holds if this `when` branch was written as an `else` branch. */ +when_branch_else(unique int id: @whenbranch ref); + +@classinstancexpr = @newexpr | @lambdaexpr | @memberref | @propertyref + +@annotation = @declannotation | @typeannotation +@typeaccess = @unannotatedtypeaccess | @annotatedtypeaccess + +@assignment = @assignexpr + | @assignop; + +@unaryassignment = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr; + +@assignop = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + | @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + | @assignurshiftexpr; + +@literal = @booleanliteral + | @integerliteral + | @longliteral + | @floatingpointliteral + | @doubleliteral + | @characterliteral + | @stringliteral + | @nullliteral; + +@binaryexpr = @mulexpr + | @divexpr + | @remexpr + | @addexpr + | @subexpr + | @lshiftexpr + | @rshiftexpr + | @urshiftexpr + | @andbitexpr + | @orbitexpr + | @xorbitexpr + | @andlogicalexpr + | @orlogicalexpr + | @ltexpr + | @gtexpr + | @leexpr + | @geexpr + | @eqexpr + | @neexpr + | @valueeqexpr + | @valueneexpr; + +@unaryexpr = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr + | @minusexpr + | @plusexpr + | @bitnotexpr + | @lognotexpr + | @notnullexpr; + +@caller = @classinstancexpr + | @methodaccess + | @constructorinvocationstmt + | @superconstructorinvocationstmt; + +callableBinding( + unique int callerid: @caller ref, + int callee: @callable ref +); + +memberRefBinding( + unique int id: @expr ref, + int callable: @callable ref +); + +propertyRefGetBinding( + unique int id: @expr ref, + int getter: @callable ref +); + +propertyRefFieldBinding( + unique int id: @expr ref, + int field: @field ref +); + +propertyRefSetBinding( + unique int id: @expr ref, + int setter: @callable ref +); + +@exprparent = @stmt | @expr | @whenbranch | @callable | @field | @fielddecl | @classorinterface | @param | @localvar | @typevariable; + +variableBinding( + unique int expr: @varaccess ref, + int variable: @variable ref +); + +@variable = @localscopevariable | @field; + +@localscopevariable = @localvar | @param; + +localvars( + unique int id: @localvar, + string nodeName: string ref, + int typeid: @type ref, + int parentid: @localvariabledeclexpr ref +); + +localvarsKotlinType( + unique int id: @localvar ref, + int kttypeid: @kt_type ref +); + +@namedexprorstmt = @breakstmt + | @continuestmt + | @labeledstmt + | @literal; + +namestrings( + string name: string ref, + string value: string ref, + unique int parent: @namedexprorstmt ref +); + +/* + * Modules + */ + +#keyset[name] +modules( + unique int id: @module, + string name: string ref +); + +isOpen( + int id: @module ref +); + +#keyset[fileId] +cumodule( + int fileId: @file ref, + int moduleId: @module ref +); + +@directive = @requires + | @exports + | @opens + | @uses + | @provides + +#keyset[directive] +directives( + int id: @module ref, + int directive: @directive ref +); + +requires( + unique int id: @requires, + int target: @module ref +); + +isTransitive( + int id: @requires ref +); + +isStatic( + int id: @requires ref +); + +exports( + unique int id: @exports, + int target: @package ref +); + +exportsTo( + int id: @exports ref, + int target: @module ref +); + +opens( + unique int id: @opens, + int target: @package ref +); + +opensTo( + int id: @opens ref, + int target: @module ref +); + +uses( + unique int id: @uses, + string serviceInterface: string ref +); + +provides( + unique int id: @provides, + string serviceInterface: string ref +); + +providesWith( + int id: @provides ref, + string serviceImpl: string ref +); + +isNullDefaultCase( + int id: @case ref +); + +/* + * Javadoc + */ + +javadoc( + unique int id: @javadoc +); + +isNormalComment( + int commentid : @javadoc ref +); + +isEolComment( + int commentid : @javadoc ref +); + +hasJavadoc( + int documentableid: @member ref, + int javadocid: @javadoc ref +); + +#keyset[parentid,idx] +javadocTag( + unique int id: @javadocTag, + string name: string ref, + int parentid: @javadocParent ref, + int idx: int ref +); + +#keyset[parentid,idx] +javadocText( + unique int id: @javadocText, + string text: string ref, + int parentid: @javadocParent ref, + int idx: int ref +); + +@javadocParent = @javadoc | @javadocTag; +@javadocElement = @javadocTag | @javadocText; + +@classorinterfaceorpackage = @classorinterface | @package; +@classorinterfaceorcallable = @classorinterface | @callable; +@boundedtype = @typevariable | @wildcard; +@reftype = @classorinterface | @array | @boundedtype | @errortype; +@classorarray = @classorinterface | @array; +@type = @primitive | @reftype; +@callable = @method | @constructor; + +/** A program element that has a name. */ +@element = @package | @modifier | @annotation | @errortype | + @locatableElement; + +@locatableElement = @file | @primitive | @classorinterface | @method | @constructor | @param | @exception | @field | + @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl | @kt_type | @kt_type_alias | + @kt_property; + +@modifiable = @member_modifiable| @param | @localvar | @typevariable; + +@member_modifiable = @classorinterface | @method | @constructor | @field | @kt_property; + +@member = @method | @constructor | @field | @reftype ; + +/** A program element that has a location. */ +@locatable = @typebound | @javadoc | @javadocTag | @javadocText | @xmllocatable | @ktcomment | + @locatableElement; + +@top = @element | @locatable | @folder; + +/* + * 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; + +/* + * configuration files with key value pairs + */ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +ktComments( + unique int id: @ktcomment, + int kind: int ref, + string text : string ref +) + +ktCommentSections( + unique int id: @ktcommentsection, + int comment: @ktcomment ref, + string content : string ref +) + +ktCommentSectionNames( + unique int id: @ktcommentsection ref, + string name : string ref +) + +ktCommentSectionSubjectNames( + unique int id: @ktcommentsection ref, + string subjectname : string ref +) + +#keyset[id, owner] +ktCommentOwners( + int id: @ktcomment ref, + int owner: @top ref +) + +ktExtensionFunctions( + unique int id: @method ref, + int typeid: @type ref, + int kttypeid: @kt_type ref +) + +ktProperties( + unique int id: @kt_property, + string nodeName: string ref +) + +ktPropertyGetters( + unique int id: @kt_property ref, + int getter: @method ref +) + +ktPropertySetters( + unique int id: @kt_property ref, + int setter: @method ref +) + +ktPropertyBackingFields( + unique int id: @kt_property ref, + int backingField: @field ref +) + +ktSyntheticBody( + unique int id: @callable ref, + int kind: int ref + // 1: ENUM_VALUES + // 2: ENUM_VALUEOF + // 3: ENUM_ENTRIES +) + +ktLocalFunction( + unique int id: @method ref +) + +ktInitializerAssignment( + unique int id: @assignexpr ref +) + +ktPropertyDelegates( + unique int id: @kt_property ref, + unique int variableId: @variable ref +) + +/** + * If `id` is a compiler generated element, then the kind indicates the + * reason that the compiler generated it. + * See `Element.compilerGeneratedReason()` for an explanation of what + * each `kind` means. + */ +compiler_generated( + unique int id: @element ref, + int kind: int ref +) + +ktFunctionOriginalNames( + unique int id: @method ref, + string name: string ref +) + +ktDataClasses( + unique int id: @classorinterface ref +) diff --git a/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/semmlecode.dbscheme b/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/semmlecode.dbscheme new file mode 100644 index 00000000000..9f6026c4009 --- /dev/null +++ b/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/semmlecode.dbscheme @@ -0,0 +1,1240 @@ +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * javac A.java B.java C.java + * + * 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: + * + * javac A.java B.java C.java + */ + unique int id : @compilation, + int kind: int ref, + string cwd : string ref, + string name : string ref +); + +case @compilation.kind of + 1 = @javacompilation +| 2 = @kotlincompilation +; + +compilation_started( + int id : @compilation ref +) + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * javac A.java B.java C.java + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--javac-args` + * 2 | A.java + * 3 | B.java + * 4 | C.java + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@@@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * javac A.java B.java C.java + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | A.java + * 1 | B.java + * 2 | C.java + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * For each file recorded in `compilation_compiling_files`, + * there will be a corresponding row in + * `compilation_compiling_files_completed` once extraction + * of that file is complete. The `result` will indicate the + * extraction result: + * + * 0: Successfully extracted + * 1: Errors were encountered, but extraction recovered + * 2: Errors were encountered, and extraction could not recover + */ +#keyset[id, num] +compilation_compiling_files_completed( + int id : @compilation ref, + int num : int ref, + int result : int 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 +); + +/** + * The `cpu_seconds` and `elapsed_seconds` are the CPU time and elapsed + * time (respectively) that the original compilation (not the extraction) + * took for compiler invocation `id`. + */ +compilation_compiler_times( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float 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`. + * The `result` will indicate the extraction result: + * + * 0: Successfully extracted + * 1: Errors were encountered, but extraction recovered + * 2: Errors were encountered, and extraction could not recover + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref, + int result : int ref +); + +diagnostics( + unique int id: @diagnostic, + string generated_by: string ref, // TODO: Sync this with the other languages? + 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 +); + +/** + * 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( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/* + * External artifacts + */ + +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +sourceLocationPrefix( + string prefix : string ref +); + +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path: string ref +); + +/* + * SMAP + */ + +smap_header( + int outputFileId: @file ref, + string outputFilename: string ref, + string defaultStratum: string ref +); + +smap_files( + int outputFileId: @file ref, + string stratum: string ref, + int inputFileNum: int ref, + string inputFileName: string ref, + int inputFileId: @file ref +); + +smap_lines( + int outputFileId: @file ref, + string stratum: string ref, + int inputFileNum: int ref, + int inputStartLine: int ref, + int inputLineCount: int ref, + int outputStartLine: int ref, + int outputLineIncrement: int ref +); + +/* + * Locations and files + */ + +@location = @location_default ; + +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 +); + +hasLocation( + int locatableid: @locatable ref, + int id: @location ref +); + +@sourceline = @locatable ; + +#keyset[element_id] +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int 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 +); + +/* + * Java + */ + +cupackage( + unique int id: @file ref, + int packageid: @package ref +); + +#keyset[fileid,keyName] +jarManifestMain( + int fileid: @file ref, + string keyName: string ref, + string value: string ref +); + +#keyset[fileid,entryName,keyName] +jarManifestEntries( + int fileid: @file ref, + string entryName: string ref, + string keyName: string ref, + string value: string ref +); + +packages( + unique int id: @package, + string nodeName: string ref +); + +primitives( + unique int id: @primitive, + string nodeName: string ref +); + +modifiers( + unique int id: @modifier, + string nodeName: string ref +); + +/** + * An errortype is used when the extractor is unable to extract a type + * correctly for some reason. + */ +error_type( + unique int id: @errortype +); + +classes_or_interfaces( + unique int id: @classorinterface, + string nodeName: string ref, + int parentid: @package ref, + int sourceid: @classorinterface ref +); + +file_class( + int id: @classorinterface ref +); + +class_object( + unique int id: @classorinterface ref, + unique int instance: @field ref +); + +type_companion_object( + unique int id: @classorinterface ref, + unique int instance: @field ref, + unique int companion_object: @classorinterface ref +); + +kt_nullable_types( + unique int id: @kt_nullable_type, + int classid: @reftype ref +) + +kt_notnull_types( + unique int id: @kt_notnull_type, + int classid: @reftype ref +) + +kt_type_alias( + unique int id: @kt_type_alias, + string name: string ref, + int kttypeid: @kt_type ref +) + +@kt_type = @kt_nullable_type | @kt_notnull_type + +isInterface( + unique int id: @classorinterface ref +); + +isRecord( + unique int id: @classorinterface ref +); + +fielddecls( + unique int id: @fielddecl, + int parentid: @reftype ref +); + +#keyset[fieldId] #keyset[fieldDeclId,pos] +fieldDeclaredIn( + int fieldId: @field ref, + int fieldDeclId: @fielddecl ref, + int pos: int ref +); + +fields( + unique int id: @field, + string nodeName: string ref, + int typeid: @type ref, + int parentid: @reftype ref +); + +fieldsKotlinType( + unique int id: @field ref, + int kttypeid: @kt_type ref +); + +constrs( + unique int id: @constructor, + string nodeName: string ref, + string signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @constructor ref +); + +constrsKotlinType( + unique int id: @constructor ref, + int kttypeid: @kt_type ref +); + +methods( + unique int id: @method, + string nodeName: string ref, + string signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @method ref +); + +methodsKotlinType( + unique int id: @method ref, + int kttypeid: @kt_type ref +); + +#keyset[parentid,pos] +params( + unique int id: @param, + int typeid: @type ref, + int pos: int ref, + int parentid: @callable ref, + int sourceid: @param ref +); + +paramsKotlinType( + unique int id: @param ref, + int kttypeid: @kt_type ref +); + +paramName( + unique int id: @param ref, + string nodeName: string ref +); + +isVarargsParam( + int param: @param ref +); + +exceptions( + unique int id: @exception, + int typeid: @type ref, + int parentid: @callable ref +); + +isAnnotType( + int interfaceid: @classorinterface ref +); + +isAnnotElem( + int methodid: @method ref +); + +annotValue( + int parentid: @annotation ref, + int id2: @method ref, + unique int value: @expr ref +); + +isEnumType( + int classid: @classorinterface ref +); + +isEnumConst( + int fieldid: @field ref +); + +#keyset[parentid,pos] +typeVars( + unique int id: @typevariable, + string nodeName: string ref, + int pos: int ref, + int parentid: @classorinterfaceorcallable ref +); + +wildcards( + unique int id: @wildcard, + string nodeName: string ref, + int kind: int ref +); + +#keyset[parentid,pos] +typeBounds( + unique int id: @typebound, + int typeid: @reftype ref, + int pos: int ref, + int parentid: @boundedtype ref +); + +#keyset[parentid,pos] +typeArgs( + int argumentid: @reftype ref, + int pos: int ref, + int parentid: @classorinterfaceorcallable ref +); + +isParameterized( + int memberid: @member ref +); + +isRaw( + int memberid: @member ref +); + +#keyset[classid] #keyset[parent] +isAnonymClass( + int classid: @classorinterface ref, + int parent: @classinstancexpr ref +); + +#keyset[typeid] #keyset[parent] +isLocalClassOrInterface( + int typeid: @classorinterface ref, + int parent: @localtypedeclstmt ref +); + +isImplicitClass( + unique int classid: @classorinterface ref +); + +isDefConstr( + int constructorid: @constructor ref +); + +#keyset[exprId] +lambdaKind( + int exprId: @lambdaexpr ref, + int bodyKind: int ref +); + +isCanonicalConstr( + int constructorid: @constructor ref +); + +arrays( + unique int id: @array, + string nodeName: string ref, + int elementtypeid: @type ref, + int dimension: int ref, + int componenttypeid: @type ref +); + +enclInReftype( + unique int child: @reftype ref, + int parent: @reftype ref +); + +extendsReftype( + int id1: @reftype ref, + int id2: @classorinterface ref +); + +implInterface( + int id1: @classorarray ref, + int id2: @classorinterface ref +); + +permits( + int id1: @classorinterface ref, + int id2: @classorinterface ref +); + +hasModifier( + int id1: @modifiable ref, + int id2: @modifier ref +); + +imports( + unique int id: @import, + int holder: @classorinterfaceorpackage ref, + string name: string ref, + int kind: int ref +); + +#keyset[parent,idx] +stmts( + unique int id: @stmt, + int kind: int ref, + int parent: @stmtparent ref, + int idx: int ref, + int bodydecl: @callable ref +); + +@stmtparent = @callable | @stmt | @switchexpr | @whenexpr| @stmtexpr; + +case @stmt.kind of + 0 = @block +| 1 = @ifstmt +| 2 = @forstmt +| 3 = @enhancedforstmt +| 4 = @whilestmt +| 5 = @dostmt +| 6 = @trystmt +| 7 = @switchstmt +| 8 = @synchronizedstmt +| 9 = @returnstmt +| 10 = @throwstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @emptystmt +| 14 = @exprstmt +| 15 = @labeledstmt +| 16 = @assertstmt +| 17 = @localvariabledeclstmt +| 18 = @localtypedeclstmt +| 19 = @constructorinvocationstmt +| 20 = @superconstructorinvocationstmt +| 21 = @case +| 22 = @catchclause +| 23 = @yieldstmt +| 24 = @errorstmt +| 25 = @whenbranch +; + +#keyset[parent,idx] +exprs( + unique int id: @expr, + int kind: int ref, + int typeid: @type ref, + int parent: @exprparent ref, + int idx: int ref +); + +exprsKotlinType( + unique int id: @expr ref, + int kttypeid: @kt_type ref +); + +callableEnclosingExpr( + unique int id: @expr ref, + int callable_id: @callable ref +); + +statementEnclosingExpr( + unique int id: @expr ref, + int statement_id: @stmt ref +); + +isParenthesized( + unique int id: @expr ref, + int parentheses: int ref +); + +case @expr.kind of + 1 = @arrayaccess +| 2 = @arraycreationexpr +| 3 = @arrayinit +| 4 = @assignexpr +| 5 = @assignaddexpr +| 6 = @assignsubexpr +| 7 = @assignmulexpr +| 8 = @assigndivexpr +| 9 = @assignremexpr +| 10 = @assignandexpr +| 11 = @assignorexpr +| 12 = @assignxorexpr +| 13 = @assignlshiftexpr +| 14 = @assignrshiftexpr +| 15 = @assignurshiftexpr +| 16 = @booleanliteral +| 17 = @integerliteral +| 18 = @longliteral +| 19 = @floatingpointliteral +| 20 = @doubleliteral +| 21 = @characterliteral +| 22 = @stringliteral +| 23 = @nullliteral +| 24 = @mulexpr +| 25 = @divexpr +| 26 = @remexpr +| 27 = @addexpr +| 28 = @subexpr +| 29 = @lshiftexpr +| 30 = @rshiftexpr +| 31 = @urshiftexpr +| 32 = @andbitexpr +| 33 = @orbitexpr +| 34 = @xorbitexpr +| 35 = @andlogicalexpr +| 36 = @orlogicalexpr +| 37 = @ltexpr +| 38 = @gtexpr +| 39 = @leexpr +| 40 = @geexpr +| 41 = @eqexpr +| 42 = @neexpr +| 43 = @postincexpr +| 44 = @postdecexpr +| 45 = @preincexpr +| 46 = @predecexpr +| 47 = @minusexpr +| 48 = @plusexpr +| 49 = @bitnotexpr +| 50 = @lognotexpr +| 51 = @castexpr +| 52 = @newexpr +| 53 = @conditionalexpr +| 54 = @parexpr // deprecated +| 55 = @instanceofexpr +| 56 = @localvariabledeclexpr +| 57 = @typeliteral +| 58 = @thisaccess +| 59 = @superaccess +| 60 = @varaccess +| 61 = @methodaccess +| 62 = @unannotatedtypeaccess +| 63 = @arraytypeaccess +| 64 = @packageaccess +| 65 = @wildcardtypeaccess +| 66 = @declannotation +| 67 = @uniontypeaccess +| 68 = @lambdaexpr +| 69 = @memberref +| 70 = @annotatedtypeaccess +| 71 = @typeannotation +| 72 = @intersectiontypeaccess +| 73 = @switchexpr +| 74 = @errorexpr +| 75 = @whenexpr +| 76 = @getclassexpr +| 77 = @safecastexpr +| 78 = @implicitcastexpr +| 79 = @implicitnotnullexpr +| 80 = @implicitcoerciontounitexpr +| 81 = @notinstanceofexpr +| 82 = @stmtexpr +| 83 = @stringtemplateexpr +| 84 = @notnullexpr +| 85 = @unsafecoerceexpr +| 86 = @valueeqexpr +| 87 = @valueneexpr +| 88 = @propertyref +| 89 = @recordpatternexpr +; + +/** Holds if this `when` expression was written as an `if` expression. */ +when_if(unique int id: @whenexpr ref); + +/** Holds if this `when` branch was written as an `else` branch. */ +when_branch_else(unique int id: @whenbranch ref); + +@classinstancexpr = @newexpr | @lambdaexpr | @memberref | @propertyref + +@annotation = @declannotation | @typeannotation +@typeaccess = @unannotatedtypeaccess | @annotatedtypeaccess + +@assignment = @assignexpr + | @assignop; + +@unaryassignment = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr; + +@assignop = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + | @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + | @assignurshiftexpr; + +@literal = @booleanliteral + | @integerliteral + | @longliteral + | @floatingpointliteral + | @doubleliteral + | @characterliteral + | @stringliteral + | @nullliteral; + +@binaryexpr = @mulexpr + | @divexpr + | @remexpr + | @addexpr + | @subexpr + | @lshiftexpr + | @rshiftexpr + | @urshiftexpr + | @andbitexpr + | @orbitexpr + | @xorbitexpr + | @andlogicalexpr + | @orlogicalexpr + | @ltexpr + | @gtexpr + | @leexpr + | @geexpr + | @eqexpr + | @neexpr + | @valueeqexpr + | @valueneexpr; + +@unaryexpr = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr + | @minusexpr + | @plusexpr + | @bitnotexpr + | @lognotexpr + | @notnullexpr; + +@caller = @classinstancexpr + | @methodaccess + | @constructorinvocationstmt + | @superconstructorinvocationstmt; + +callableBinding( + unique int callerid: @caller ref, + int callee: @callable ref +); + +memberRefBinding( + unique int id: @expr ref, + int callable: @callable ref +); + +propertyRefGetBinding( + unique int id: @expr ref, + int getter: @callable ref +); + +propertyRefFieldBinding( + unique int id: @expr ref, + int field: @field ref +); + +propertyRefSetBinding( + unique int id: @expr ref, + int setter: @callable ref +); + +@exprparent = @stmt | @expr | @whenbranch | @callable | @field | @fielddecl | @classorinterface | @param | @localvar | @typevariable; + +variableBinding( + unique int expr: @varaccess ref, + int variable: @variable ref +); + +@variable = @localscopevariable | @field; + +@localscopevariable = @localvar | @param; + +localvars( + unique int id: @localvar, + string nodeName: string ref, + int typeid: @type ref, + int parentid: @localvariabledeclexpr ref +); + +localvarsKotlinType( + unique int id: @localvar ref, + int kttypeid: @kt_type ref +); + +@namedexprorstmt = @breakstmt + | @continuestmt + | @labeledstmt + | @literal; + +namestrings( + string name: string ref, + string value: string ref, + unique int parent: @namedexprorstmt ref +); + +/* + * Modules + */ + +#keyset[name] +modules( + unique int id: @module, + string name: string ref +); + +isOpen( + int id: @module ref +); + +#keyset[fileId] +cumodule( + int fileId: @file ref, + int moduleId: @module ref +); + +@directive = @requires + | @exports + | @opens + | @uses + | @provides + +#keyset[directive] +directives( + int id: @module ref, + int directive: @directive ref +); + +requires( + unique int id: @requires, + int target: @module ref +); + +isTransitive( + int id: @requires ref +); + +isStatic( + int id: @requires ref +); + +exports( + unique int id: @exports, + int target: @package ref +); + +exportsTo( + int id: @exports ref, + int target: @module ref +); + +opens( + unique int id: @opens, + int target: @package ref +); + +opensTo( + int id: @opens ref, + int target: @module ref +); + +uses( + unique int id: @uses, + string serviceInterface: string ref +); + +provides( + unique int id: @provides, + string serviceInterface: string ref +); + +providesWith( + int id: @provides ref, + string serviceImpl: string ref +); + +isNullDefaultCase( + int id: @case ref +); + +/* + * Javadoc + */ + +javadoc( + unique int id: @javadoc +); + +isNormalComment( + int commentid : @javadoc ref +); + +isEolComment( + int commentid : @javadoc ref +); + +hasJavadoc( + int documentableid: @member ref, + int javadocid: @javadoc ref +); + +#keyset[parentid,idx] +javadocTag( + unique int id: @javadocTag, + string name: string ref, + int parentid: @javadocParent ref, + int idx: int ref +); + +#keyset[parentid,idx] +javadocText( + unique int id: @javadocText, + string text: string ref, + int parentid: @javadocParent ref, + int idx: int ref +); + +@javadocParent = @javadoc | @javadocTag; +@javadocElement = @javadocTag | @javadocText; + +@classorinterfaceorpackage = @classorinterface | @package; +@classorinterfaceorcallable = @classorinterface | @callable; +@boundedtype = @typevariable | @wildcard; +@reftype = @classorinterface | @array | @boundedtype | @errortype; +@classorarray = @classorinterface | @array; +@type = @primitive | @reftype; +@callable = @method | @constructor; + +/** A program element that has a name. */ +@element = @package | @modifier | @annotation | @errortype | + @locatableElement; + +@locatableElement = @file | @primitive | @classorinterface | @method | @constructor | @param | @exception | @field | + @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl | @kt_type | @kt_type_alias | + @kt_property; + +@modifiable = @member_modifiable| @param | @localvar | @typevariable; + +@member_modifiable = @classorinterface | @method | @constructor | @field | @kt_property; + +@member = @method | @constructor | @field | @reftype ; + +/** A program element that has a location. */ +@locatable = @typebound | @javadoc | @javadocTag | @javadocText | @xmllocatable | @ktcomment | + @locatableElement; + +@top = @element | @locatable | @folder; + +/* + * 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; + +/* + * configuration files with key value pairs + */ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +ktComments( + unique int id: @ktcomment, + int kind: int ref, + string text : string ref +) + +ktCommentSections( + unique int id: @ktcommentsection, + int comment: @ktcomment ref, + string content : string ref +) + +ktCommentSectionNames( + unique int id: @ktcommentsection ref, + string name : string ref +) + +ktCommentSectionSubjectNames( + unique int id: @ktcommentsection ref, + string subjectname : string ref +) + +#keyset[id, owner] +ktCommentOwners( + int id: @ktcomment ref, + int owner: @top ref +) + +ktExtensionFunctions( + unique int id: @method ref, + int typeid: @type ref, + int kttypeid: @kt_type ref +) + +ktProperties( + unique int id: @kt_property, + string nodeName: string ref +) + +ktPropertyGetters( + unique int id: @kt_property ref, + int getter: @method ref +) + +ktPropertySetters( + unique int id: @kt_property ref, + int setter: @method ref +) + +ktPropertyBackingFields( + unique int id: @kt_property ref, + int backingField: @field ref +) + +ktSyntheticBody( + unique int id: @callable ref, + int kind: int ref + // 1: ENUM_VALUES + // 2: ENUM_VALUEOF + // 3: ENUM_ENTRIES +) + +ktLocalFunction( + unique int id: @method ref +) + +ktInitializerAssignment( + unique int id: @assignexpr ref +) + +ktPropertyDelegates( + unique int id: @kt_property ref, + unique int variableId: @variable ref +) + +/** + * If `id` is a compiler generated element, then the kind indicates the + * reason that the compiler generated it. + * See `Element.compilerGeneratedReason()` for an explanation of what + * each `kind` means. + */ +compiler_generated( + unique int id: @element ref, + int kind: int ref +) + +ktFunctionOriginalNames( + unique int id: @method ref, + string name: string ref +) + +ktDataClasses( + unique int id: @classorinterface ref +) diff --git a/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/upgrade.properties b/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/upgrade.properties new file mode 100644 index 00000000000..3ecad4ebaa4 --- /dev/null +++ b/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/upgrade.properties @@ -0,0 +1,2 @@ +description: Add support for Java 25 compact source files by introducing isImplicitClass table +compatibility: full diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 81ce9022d91..ffd5648cddf 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,19 @@ +## 1.7.0 + +### New Queries + +* The query `java/insecure-spring-actuator-config` has been promoted from experimental to the main query pack as `java/spring-boot-exposed-actuators-config`. Its results will now appear by default. This query detects exposure of Spring Boot actuators through configuration files. It was originally submitted as an experimental query [by @luchua-bc](https://github.com/github/codeql/pull/5384). + +### Query Metadata Changes + +* The tag `maintainability` has been removed from `java/run-finalizers-on-exit` and the tags `quality`, `correctness`, and `performance` have been added. +* The tag `maintainability` has been removed from `java/garbage-collection` and the tags `quality` and `correctness` have been added. + +### Minor Analysis Improvements + +* Fixed a bug that was causing false negatives in rare cases in the query `java/dereferenced-value-may-be-null`. +* Removed the `java/empty-statement` query that was subsumed by the `java/empty-block` query. + ## 1.6.3 No user-facing changes. diff --git a/java/ql/src/Likely Bugs/Comparison/HashedButNoHash.ql b/java/ql/src/Likely Bugs/Comparison/HashedButNoHash.ql index f8b1cd85552..bb370bead3b 100644 --- a/java/ql/src/Likely Bugs/Comparison/HashedButNoHash.ql +++ b/java/ql/src/Likely Bugs/Comparison/HashedButNoHash.ql @@ -14,7 +14,7 @@ import java import Equality -/** A class that defines an `equals` method but no `hashCode` method. */ +/** Holds if `c` defines an `equals` method but no `hashCode` method. */ predicate eqNoHash(Class c) { exists(Method m | m = c.getAMethod() | m instanceof EqualsMethod and diff --git a/java/ql/src/Likely Bugs/Concurrency/NotifyWithoutSynch.ql b/java/ql/src/Likely Bugs/Concurrency/NotifyWithoutSynch.ql index 89dbedd0253..48f547575ee 100644 --- a/java/ql/src/Likely Bugs/Concurrency/NotifyWithoutSynch.ql +++ b/java/ql/src/Likely Bugs/Concurrency/NotifyWithoutSynch.ql @@ -78,7 +78,7 @@ private predicate synchronizedThisAccess(MethodCall ma, Type thisType) { /** * Auxiliary predicate for `unsynchronizedVarAccess`. Holds if - * there is an enclosing `synchronized` statement on the variable. + * there is an enclosing `synchronized` statement on the variable access `x`. */ predicate synchronizedVarAccess(VarAccess x) { exists(SynchronizedStmt s, VarAccess y | diff --git a/java/ql/src/Likely Bugs/Termination/SpinOnField.ql b/java/ql/src/Likely Bugs/Termination/SpinOnField.ql index 8675bbd418b..d1a7d49db55 100644 --- a/java/ql/src/Likely Bugs/Termination/SpinOnField.ql +++ b/java/ql/src/Likely Bugs/Termination/SpinOnField.ql @@ -33,8 +33,8 @@ class Empty extends Stmt { class EmptyLoop extends Stmt { EmptyLoop() { exists(ForStmt stmt | stmt = this | - count(stmt.getAnInit()) = 0 and - count(stmt.getAnUpdate()) = 0 and + not exists(stmt.getAnInit()) and + not exists(stmt.getAnUpdate()) and stmt.getStmt() instanceof Empty ) or diff --git a/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll b/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll index dc5b4eada8d..c94a4fb58bf 100644 --- a/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll +++ b/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll @@ -105,7 +105,7 @@ private predicate valueOccurrenceCount(string value, int n, string context) { n > 20 } -private predicate occurenceCount(Literal lit, string value, int n, string context) { +private predicate occurrenceCount(Literal lit, string value, int n, string context) { valueOccurrenceCount(value, n, context) and value = lit.getValue() and nonTrivialValue(_, lit, context) @@ -119,7 +119,7 @@ private predicate check(Literal lit, string value, int n, string context, Compil // Check that the literal is nontrivial not trivial(lit) and // Check that it is repeated a number of times - occurenceCount(lit, value, n, context) and + occurrenceCount(lit, value, n, context) and n > 20 and f = lit.getCompilationUnit() } diff --git a/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql b/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql index ca002fc654a..ed492e5b6a1 100644 --- a/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql +++ b/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql @@ -48,7 +48,7 @@ private predicate overloadedMethodsMostSpecific(Method n, Method m) { private predicate whitelist(string name) { name = "visit" } /** - * Method `m` has name `name`, number of parameters `numParams` + * Method `m` has name `name`, number of parameters `numParam` * and is declared in `t` or inherited from a supertype of `t`. */ pragma[nomagic] diff --git a/java/ql/src/change-notes/2024-10-03-remove-java-query.md b/java/ql/src/change-notes/2024-10-03-remove-java-query.md deleted file mode 100644 index e9f3e4910cb..00000000000 --- a/java/ql/src/change-notes/2024-10-03-remove-java-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Removed the `java/empty-statement` query that was subsumed by the `java/empty-block` query. \ No newline at end of file diff --git a/java/ql/src/change-notes/2025-07-17-spring-actuators-config-promo.md b/java/ql/src/change-notes/2025-07-17-spring-actuators-config-promo.md deleted file mode 100644 index 733017f7131..00000000000 --- a/java/ql/src/change-notes/2025-07-17-spring-actuators-config-promo.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* The query `java/insecure-spring-actuator-config` has been promoted from experimental to the main query pack as `java/spring-boot-exposed-actuators-config`. Its results will now appear by default. This query detects exposure of Spring Boot actuators through configuration files. It was originally submitted as an experimental query [by @luchua-bc](https://github.com/github/codeql/pull/5384). diff --git a/java/ql/src/change-notes/2025-07-19-adjust-tags.md b/java/ql/src/change-notes/2025-07-19-adjust-tags.md deleted file mode 100644 index 0067adebdaf..00000000000 --- a/java/ql/src/change-notes/2025-07-19-adjust-tags.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: queryMetadata ---- -* The tag `maintainability` has been removed from `java/run-finalizers-on-exit` and the tags `quality`, `correctness`, and `performance` have been added. -* The tag `maintainability` has been removed from `java/garbage-collection` and the tags `quality` and `correctness` have been added. diff --git a/java/ql/src/change-notes/2025-08-22-nullness-fn.md b/java/ql/src/change-notes/2025-08-22-nullness-fn.md deleted file mode 100644 index d8d77a470f6..00000000000 --- a/java/ql/src/change-notes/2025-08-22-nullness-fn.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed a bug that was causing false negatives in rare cases in the query `java/dereferenced-value-may-be-null`. diff --git a/java/ql/src/change-notes/released/1.7.0.md b/java/ql/src/change-notes/released/1.7.0.md new file mode 100644 index 00000000000..f0485614fc3 --- /dev/null +++ b/java/ql/src/change-notes/released/1.7.0.md @@ -0,0 +1,15 @@ +## 1.7.0 + +### New Queries + +* The query `java/insecure-spring-actuator-config` has been promoted from experimental to the main query pack as `java/spring-boot-exposed-actuators-config`. Its results will now appear by default. This query detects exposure of Spring Boot actuators through configuration files. It was originally submitted as an experimental query [by @luchua-bc](https://github.com/github/codeql/pull/5384). + +### Query Metadata Changes + +* The tag `maintainability` has been removed from `java/run-finalizers-on-exit` and the tags `quality`, `correctness`, and `performance` have been added. +* The tag `maintainability` has been removed from `java/garbage-collection` and the tags `quality` and `correctness` have been added. + +### Minor Analysis Improvements + +* Fixed a bug that was causing false negatives in rare cases in the query `java/dereferenced-value-may-be-null`. +* Removed the `java/empty-statement` query that was subsumed by the `java/empty-block` query. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 00b51441d88..d1184cc6750 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.6.3 +lastReleaseVersion: 1.7.0 diff --git a/java/ql/src/experimental/quantum/Analysis/ArtifactReuse.qll b/java/ql/src/experimental/quantum/Analysis/ArtifactReuse.qll index 88598e61589..0e28d9ffe5e 100644 --- a/java/ql/src/experimental/quantum/Analysis/ArtifactReuse.qll +++ b/java/ql/src/experimental/quantum/Analysis/ArtifactReuse.qll @@ -10,15 +10,11 @@ import experimental.quantum.Language */ private module WrapperConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { - exists(Call c | - c = source.asExpr() - // not handling references yet, I think we want to flat say references are only ok - // if I know the source, otherwise, it has to be through an additional flow step, which - // we filter as a source, i.e., references are only allowed as sources only, - // no inferrece? Not sure if that would work - //or - // source.(DataFlow::PostUpdateNode).getPreUpdateNode().asExpr() = c.getAnArgument() - ) and + source.asExpr() instanceof Call and + // not handling references yet, I think we want to flat say references are only ok + // if I know the source, otherwise, it has to be through an additional flow step, which + // we filter as a source, i.e., references are only allowed as sources only, + // no inferrece? Not sure if that would work // Filter out sources that are known additional flow steps, as these are likely not the // kind of wrapper source we are looking for. not exists(AdditionalFlowInputStep s | s.getOutput() = source) diff --git a/java/ql/src/experimental/quantum/Examples/BrokenCrypto.ql b/java/ql/src/experimental/quantum/Examples/BrokenCrypto.ql index 7291ea554a5..1aee9515232 100644 --- a/java/ql/src/experimental/quantum/Examples/BrokenCrypto.ql +++ b/java/ql/src/experimental/quantum/Examples/BrokenCrypto.ql @@ -12,7 +12,7 @@ */ //THIS QUERY IS A REPLICA OF: https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.ql -//but uses the **NEW MODELLING** +//but uses the **NEW MODELING** import experimental.quantum.Language /** diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index ec081681c2b..8e1ae28dd6f 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.6.4-dev +version: 1.7.1-dev groups: - java - queries diff --git a/java/ql/src/utils/flowtestcasegenerator/FlowTestCase.qll b/java/ql/src/utils/flowtestcasegenerator/FlowTestCase.qll index af0f501621a..5ab1584f866 100644 --- a/java/ql/src/utils/flowtestcasegenerator/FlowTestCase.qll +++ b/java/ql/src/utils/flowtestcasegenerator/FlowTestCase.qll @@ -253,7 +253,7 @@ class TestCase extends TTestCase { /** * Returns a call to `source()` wrapped in `newWith` methods as needed according to `input`. - * For example, if the input specification is `ArrayElement of MapValue of Argument[0]`, this + * For example, if the `stack` is `Argument[0].MapValue.ArrayElement`, this * will return `newWithMapValue(newWithArrayElement(source()))`. */ string getInput(SummaryComponentStack stack) { @@ -269,7 +269,7 @@ class TestCase extends TTestCase { /** * Returns `out` wrapped in `get` methods as needed according to `output`. - * For example, if the output specification is `ArrayElement of MapValue of Argument[0]`, this + * For example, if the `componentStack` is `Argument[0].MapValue.ArrayElement`, this * will return `getArrayElement(getMapValue(out))`. */ string getOutput(SummaryComponentStack componentStack) { diff --git a/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected b/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected index b901340b964..a56980d10ac 100644 --- a/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected +++ b/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected @@ -16,30 +16,6 @@ methodWithDuplicate | AbstractCollection | removeAll | Collection | | AbstractCollection | retainAll | Collection | | AbstractCollection | toArray | T[] | -| AbstractCollection> | add | Entry | -| AbstractCollection> | addAll | Collection> | -| AbstractCollection> | contains | Object | -| AbstractCollection> | containsAll | Collection | -| AbstractCollection> | remove | Object | -| AbstractCollection> | removeAll | Collection | -| AbstractCollection> | retainAll | Collection | -| AbstractCollection> | toArray | T[] | -| AbstractCollection | add | K | -| AbstractCollection | addAll | Collection | -| AbstractCollection | contains | Object | -| AbstractCollection | containsAll | Collection | -| AbstractCollection | remove | Object | -| AbstractCollection | removeAll | Collection | -| AbstractCollection | retainAll | Collection | -| AbstractCollection | toArray | T[] | -| AbstractCollection | add | Runnable | -| AbstractCollection | addAll | Collection | -| AbstractCollection | contains | Object | -| AbstractCollection | containsAll | Collection | -| AbstractCollection | remove | Object | -| AbstractCollection | removeAll | Collection | -| AbstractCollection | retainAll | Collection | -| AbstractCollection | toArray | T[] | | AbstractCollection | add | String | | AbstractCollection | addAll | Collection | | AbstractCollection | contains | Object | @@ -56,14 +32,6 @@ methodWithDuplicate | AbstractCollection | removeAll | Collection | | AbstractCollection | retainAll | Collection | | AbstractCollection | toArray | T[] | -| AbstractCollection | add | V | -| AbstractCollection | addAll | Collection | -| AbstractCollection | contains | Object | -| AbstractCollection | containsAll | Collection | -| AbstractCollection | remove | Object | -| AbstractCollection | removeAll | Collection | -| AbstractCollection | retainAll | Collection | -| AbstractCollection | toArray | T[] | | AbstractList | add | E | | AbstractList | add | int | | AbstractList | addAll | Collection | @@ -103,14 +71,14 @@ methodWithDuplicate | AbstractMap | put | V | | AbstractMap | putAll | Map | | AbstractMap | remove | Object | -| AbstractMap> | containsKey | Object | -| AbstractMap> | containsValue | Object | -| AbstractMap> | equals | Object | -| AbstractMap> | get | Object | -| AbstractMap> | put | Entry | -| AbstractMap> | put | Identity | -| AbstractMap> | putAll | Map> | -| AbstractMap> | remove | Object | +| AbstractMap | containsKey | Object | +| AbstractMap | containsValue | Object | +| AbstractMap | equals | Object | +| AbstractMap | get | Object | +| AbstractMap | put | Identity | +| AbstractMap | put | Object | +| AbstractMap | putAll | Map | +| AbstractMap | remove | Object | | AbstractMap | containsKey | Object | | AbstractMap | containsValue | Object | | AbstractMap | equals | Object | @@ -179,17 +147,6 @@ methodWithDuplicate | Collection | retainAll | Collection | | Collection | toArray | IntFunction | | Collection | toArray | T[] | -| Collection | add | Runnable | -| Collection | addAll | Collection | -| Collection | contains | Object | -| Collection | containsAll | Collection | -| Collection | equals | Object | -| Collection | remove | Object | -| Collection | removeAll | Collection | -| Collection | removeIf | Predicate | -| Collection | retainAll | Collection | -| Collection | toArray | IntFunction | -| Collection | toArray | T[] | | Collection | add | String | | Collection | addAll | Collection | | Collection | contains | Object | @@ -332,37 +289,36 @@ methodWithDuplicate | Map | replace | K | | Map | replace | V | | Map | replaceAll | BiFunction | -| Map> | compute | BiFunction,? extends Entry> | -| Map> | compute | Identity | -| Map> | computeIfAbsent | Function> | -| Map> | computeIfAbsent | Identity | -| Map> | computeIfPresent | BiFunction,? extends Entry> | -| Map> | computeIfPresent | Identity | -| Map> | containsKey | Object | -| Map> | containsValue | Object | -| Map> | copyOf | Map | -| Map> | entry | K | -| Map> | entry | V | -| Map> | equals | Object | -| Map> | forEach | BiConsumer> | -| Map> | get | Object | -| Map> | getOrDefault | Entry | -| Map> | getOrDefault | Object | -| Map> | merge | BiFunction,? super Entry,? extends Entry> | -| Map> | merge | Entry | -| Map> | merge | Identity | -| Map> | of | K | -| Map> | of | V | -| Map> | ofEntries | Entry[] | -| Map> | put | Entry | -| Map> | put | Identity | -| Map> | putAll | Map> | -| Map> | putIfAbsent | Entry | -| Map> | putIfAbsent | Identity | -| Map> | remove | Object | -| Map> | replace | Entry | -| Map> | replace | Identity | -| Map> | replaceAll | BiFunction,? extends Entry> | +| Map | compute | BiFunction | +| Map | compute | Identity | +| Map | computeIfAbsent | Function | +| Map | computeIfAbsent | Identity | +| Map | computeIfPresent | BiFunction | +| Map | computeIfPresent | Identity | +| Map | containsKey | Object | +| Map | containsValue | Object | +| Map | copyOf | Map | +| Map | entry | K | +| Map | entry | V | +| Map | equals | Object | +| Map | forEach | BiConsumer | +| Map | get | Object | +| Map | getOrDefault | Object | +| Map | merge | BiFunction | +| Map | merge | Identity | +| Map | merge | Object | +| Map | of | K | +| Map | of | V | +| Map | ofEntries | Entry[] | +| Map | put | Identity | +| Map | put | Object | +| Map | putAll | Map | +| Map | putIfAbsent | Identity | +| Map | putIfAbsent | Object | +| Map | remove | Object | +| Map | replace | Identity | +| Map | replace | Object | +| Map | replaceAll | BiFunction | | Map | compute | BiFunction | | Map | compute | K | | Map | computeIfAbsent | Function | diff --git a/java/ql/test-kotlin1/library-tests/reflection/reflection.expected b/java/ql/test-kotlin1/library-tests/reflection/reflection.expected index 7ce456cdcbb..3bc2f9ce67d 100644 --- a/java/ql/test-kotlin1/library-tests/reflection/reflection.expected +++ b/java/ql/test-kotlin1/library-tests/reflection/reflection.expected @@ -289,6 +289,7 @@ compGenerated | file:///LongProgression.class:0:0:0:0 | spliterator | Forwarder for a Kotlin class inheriting an interface default method | | file:///LongRange.class:0:0:0:0 | forEach | Forwarder for a Kotlin class inheriting an interface default method | | file:///LongRange.class:0:0:0:0 | spliterator | Forwarder for a Kotlin class inheriting an interface default method | +| file:///String.class:0:0:0:0 | getChars | Forwarder for a Kotlin class inheriting an interface default method | | file:///String.class:0:0:0:0 | isEmpty | Forwarder for a Kotlin class inheriting an interface default method | | reflection.kt:7:49:7:54 | new Function2(...) { ... } | The class around a local function, a lambda, or a function reference | | reflection.kt:10:38:10:42 | new KProperty1(...) { ... } | The class around a local function, a lambda, or a function reference | diff --git a/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected b/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected index 03e86e2d2a1..2495c1fc157 100644 --- a/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected +++ b/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected @@ -16,30 +16,6 @@ methodWithDuplicate | AbstractCollection | removeAll | Collection | | AbstractCollection | retainAll | Collection | | AbstractCollection | toArray | T[] | -| AbstractCollection> | add | Entry | -| AbstractCollection> | addAll | Collection> | -| AbstractCollection> | contains | Object | -| AbstractCollection> | containsAll | Collection | -| AbstractCollection> | remove | Object | -| AbstractCollection> | removeAll | Collection | -| AbstractCollection> | retainAll | Collection | -| AbstractCollection> | toArray | T[] | -| AbstractCollection | add | K | -| AbstractCollection | addAll | Collection | -| AbstractCollection | contains | Object | -| AbstractCollection | containsAll | Collection | -| AbstractCollection | remove | Object | -| AbstractCollection | removeAll | Collection | -| AbstractCollection | retainAll | Collection | -| AbstractCollection | toArray | T[] | -| AbstractCollection | add | Runnable | -| AbstractCollection | addAll | Collection | -| AbstractCollection | contains | Object | -| AbstractCollection | containsAll | Collection | -| AbstractCollection | remove | Object | -| AbstractCollection | removeAll | Collection | -| AbstractCollection | retainAll | Collection | -| AbstractCollection | toArray | T[] | | AbstractCollection | add | String | | AbstractCollection | addAll | Collection | | AbstractCollection | contains | Object | @@ -56,14 +32,6 @@ methodWithDuplicate | AbstractCollection | removeAll | Collection | | AbstractCollection | retainAll | Collection | | AbstractCollection | toArray | T[] | -| AbstractCollection | add | V | -| AbstractCollection | addAll | Collection | -| AbstractCollection | contains | Object | -| AbstractCollection | containsAll | Collection | -| AbstractCollection | remove | Object | -| AbstractCollection | removeAll | Collection | -| AbstractCollection | retainAll | Collection | -| AbstractCollection | toArray | T[] | | AbstractList | add | E | | AbstractList | add | int | | AbstractList | addAll | Collection | @@ -103,14 +71,14 @@ methodWithDuplicate | AbstractMap | put | V | | AbstractMap | putAll | Map | | AbstractMap | remove | Object | -| AbstractMap> | containsKey | Object | -| AbstractMap> | containsValue | Object | -| AbstractMap> | equals | Object | -| AbstractMap> | get | Object | -| AbstractMap> | put | Entry | -| AbstractMap> | put | Identity | -| AbstractMap> | putAll | Map> | -| AbstractMap> | remove | Object | +| AbstractMap | containsKey | Object | +| AbstractMap | containsValue | Object | +| AbstractMap | equals | Object | +| AbstractMap | get | Object | +| AbstractMap | put | Identity | +| AbstractMap | put | Object | +| AbstractMap | putAll | Map | +| AbstractMap | remove | Object | | AbstractMap | containsKey | Object | | AbstractMap | containsValue | Object | | AbstractMap | equals | Object | @@ -176,16 +144,6 @@ methodWithDuplicate | Collection | retainAll | Collection | | Collection | toArray | IntFunction | | Collection | toArray | T[] | -| Collection | add | Runnable | -| Collection | addAll | Collection | -| Collection | contains | Object | -| Collection | containsAll | Collection | -| Collection | remove | Object | -| Collection | removeAll | Collection | -| Collection | removeIf | Predicate | -| Collection | retainAll | Collection | -| Collection | toArray | IntFunction | -| Collection | toArray | T[] | | Collection | add | String | | Collection | addAll | Collection | | Collection | contains | Object | @@ -325,36 +283,35 @@ methodWithDuplicate | Map | replace | K | | Map | replace | V | | Map | replaceAll | BiFunction | -| Map> | compute | BiFunction,? extends Entry> | -| Map> | compute | Identity | -| Map> | computeIfAbsent | Function> | -| Map> | computeIfAbsent | Identity | -| Map> | computeIfPresent | BiFunction,? extends Entry> | -| Map> | computeIfPresent | Identity | -| Map> | containsKey | Object | -| Map> | containsValue | Object | -| Map> | copyOf | Map | -| Map> | entry | K | -| Map> | entry | V | -| Map> | forEach | BiConsumer> | -| Map> | get | Object | -| Map> | getOrDefault | Entry | -| Map> | getOrDefault | Object | -| Map> | merge | BiFunction,? super Entry,? extends Entry> | -| Map> | merge | Entry | -| Map> | merge | Identity | -| Map> | of | K | -| Map> | of | V | -| Map> | ofEntries | Entry[] | -| Map> | put | Entry | -| Map> | put | Identity | -| Map> | putAll | Map> | -| Map> | putIfAbsent | Entry | -| Map> | putIfAbsent | Identity | -| Map> | remove | Object | -| Map> | replace | Entry | -| Map> | replace | Identity | -| Map> | replaceAll | BiFunction,? extends Entry> | +| Map | compute | BiFunction | +| Map | compute | Identity | +| Map | computeIfAbsent | Function | +| Map | computeIfAbsent | Identity | +| Map | computeIfPresent | BiFunction | +| Map | computeIfPresent | Identity | +| Map | containsKey | Object | +| Map | containsValue | Object | +| Map | copyOf | Map | +| Map | entry | K | +| Map | entry | V | +| Map | forEach | BiConsumer | +| Map | get | Object | +| Map | getOrDefault | Object | +| Map | merge | BiFunction | +| Map | merge | Identity | +| Map | merge | Object | +| Map | of | K | +| Map | of | V | +| Map | ofEntries | Entry[] | +| Map | put | Identity | +| Map | put | Object | +| Map | putAll | Map | +| Map | putIfAbsent | Identity | +| Map | putIfAbsent | Object | +| Map | remove | Object | +| Map | replace | Identity | +| Map | replace | Object | +| Map | replaceAll | BiFunction | | Map | compute | BiFunction | | Map | compute | K | | Map | computeIfAbsent | Function | diff --git a/java/ql/test-kotlin2/library-tests/reflection/reflection.expected b/java/ql/test-kotlin2/library-tests/reflection/reflection.expected index 4074866da65..b5de2b1adea 100644 --- a/java/ql/test-kotlin2/library-tests/reflection/reflection.expected +++ b/java/ql/test-kotlin2/library-tests/reflection/reflection.expected @@ -329,6 +329,7 @@ compGenerated | file:///SignStyle.class:0:0:0:0 | getEntries | Default property accessor | | file:///StackWalker$ExtendedOption.class:0:0:0:0 | getEntries | Default property accessor | | file:///StackWalker$Option.class:0:0:0:0 | getEntries | Default property accessor | +| file:///String.class:0:0:0:0 | getChars | Forwarder for a Kotlin class inheriting an interface default method | | file:///String.class:0:0:0:0 | isEmpty | Forwarder for a Kotlin class inheriting an interface default method | | file:///TextStyle.class:0:0:0:0 | getEntries | Default property accessor | | file:///Thread$State.class:0:0:0:0 | getEntries | Default property accessor | diff --git a/java/ql/test/library-tests/compact-source-files/CompactSourceAnalysis.expected b/java/ql/test/library-tests/compact-source-files/CompactSourceAnalysis.expected new file mode 100644 index 00000000000..05db00aa26d --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/CompactSourceAnalysis.expected @@ -0,0 +1 @@ +| Test.java:0:0:0:0 | Test | Test.java:1:1:1:1 | Test | Compact source file 'Test' contains implicit class 'Test' | diff --git a/java/ql/test/library-tests/compact-source-files/CompactSourceAnalysis.ql b/java/ql/test/library-tests/compact-source-files/CompactSourceAnalysis.ql new file mode 100644 index 00000000000..ae6700f64cd --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/CompactSourceAnalysis.ql @@ -0,0 +1,9 @@ +import java + +from CompilationUnit cu, Class c +where + cu.isCompactSourceFile() and + c.getCompilationUnit() = cu and + c.isImplicit() +select cu, c, + "Compact source file '" + cu.getName() + "' contains implicit class '" + c.getName() + "'" diff --git a/java/ql/test/library-tests/compact-source-files/CompactSourceDetection.expected b/java/ql/test/library-tests/compact-source-files/CompactSourceDetection.expected new file mode 100644 index 00000000000..0aebdddfb87 --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/CompactSourceDetection.expected @@ -0,0 +1 @@ +| Test.java:0:0:0:0 | Test | diff --git a/java/ql/test/library-tests/compact-source-files/CompactSourceDetection.ql b/java/ql/test/library-tests/compact-source-files/CompactSourceDetection.ql new file mode 100644 index 00000000000..3cf2633c897 --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/CompactSourceDetection.ql @@ -0,0 +1,5 @@ +import java + +from CompilationUnit cu +where cu.isCompactSourceFile() +select cu diff --git a/java/ql/test/library-tests/compact-source-files/ImplicitClassDetection.expected b/java/ql/test/library-tests/compact-source-files/ImplicitClassDetection.expected new file mode 100644 index 00000000000..61dcdd8a17f --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/ImplicitClassDetection.expected @@ -0,0 +1,2 @@ +| Test.java:1:1:1:1 | Test | implicit | +| Test.java:25:7:25:16 | NotCompact | not implicit | diff --git a/java/ql/test/library-tests/compact-source-files/ImplicitClassDetection.ql b/java/ql/test/library-tests/compact-source-files/ImplicitClassDetection.ql new file mode 100644 index 00000000000..f1c6b4a27c7 --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/ImplicitClassDetection.ql @@ -0,0 +1,7 @@ +import java + +from Class c, string res +where + exists(c.getCompilationUnit().getRelativePath()) and + if c.isImplicit() then res = "implicit" else res = "not implicit" +select c, res diff --git a/java/ql/test/library-tests/compact-source-files/MethodInCompactSource.expected b/java/ql/test/library-tests/compact-source-files/MethodInCompactSource.expected new file mode 100644 index 00000000000..3c7b45f500e --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/MethodInCompactSource.expected @@ -0,0 +1,7 @@ +| Test.java:1:1:1:1 | | in compact source | +| Test.java:1:1:1:1 | | in compact source | +| Test.java:5:6:5:9 | main | in compact source | +| Test.java:11:6:11:16 | processData | in compact source | +| Test.java:16:14:16:31 | updatePrivateField | in compact source | +| Test.java:21:13:21:28 | testStaticAccess | in compact source | +| Test.java:27:10:27:25 | methodNotCompact | NOT in compact source | diff --git a/java/ql/test/library-tests/compact-source-files/MethodInCompactSource.ql b/java/ql/test/library-tests/compact-source-files/MethodInCompactSource.ql new file mode 100644 index 00000000000..c5e5bbc80e0 --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/MethodInCompactSource.ql @@ -0,0 +1,8 @@ +import java + +from Method m, Class c, string res +where + c = m.getDeclaringType() and + exists(c.getCompilationUnit().getRelativePath()) and + if c.isImplicit() then res = "in compact source" else res = "NOT in compact source" +select m, res diff --git a/java/ql/test/library-tests/compact-source-files/PrintAst.expected b/java/ql/test/library-tests/compact-source-files/PrintAst.expected new file mode 100644 index 00000000000..7f39470ff0c --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/PrintAst.expected @@ -0,0 +1,45 @@ +Test.java: +# 0| [CompilationUnit] Test +# 1| 1: [Class] Test +# 1| 4: [FieldDeclaration] int instanceField; +# 1| -1: [TypeAccess] int +# 1| 0: [IntegerLiteral] 10 +# 2| 5: [FieldDeclaration] int STATIC_CONSTANT; +# 2| -1: [TypeAccess] int +# 2| 0: [IntegerLiteral] 42 +# 3| 6: [FieldDeclaration] String privateField; +# 3| -1: [TypeAccess] String +# 3| 0: [StringLiteral] "data" +# 5| 7: [Method] main +# 5| 3: [TypeAccess] void +# 5| 5: [BlockStmt] { ... } +# 6| 0: [ExprStmt] ; +# 6| 0: [MethodCall] processData(...) +# 7| 1: [ExprStmt] ; +# 7| 0: [MethodCall] testStaticAccess(...) +# 11| 8: [Method] processData +# 11| 3: [TypeAccess] void +# 11| 5: [BlockStmt] { ... } +# 12| 0: [ExprStmt] ; +# 12| 0: [PostIncExpr] ...++ +# 12| 0: [VarAccess] instanceField +# 13| 1: [ExprStmt] ; +# 13| 0: [MethodCall] updatePrivateField(...) +# 16| 9: [Method] updatePrivateField +# 16| 3: [TypeAccess] void +# 16| 5: [BlockStmt] { ... } +# 17| 0: [ExprStmt] ; +# 17| 0: [AssignExpr] ...=... +# 17| 0: [VarAccess] privateField +# 17| 1: [StringLiteral] "updated" +# 21| 10: [Method] testStaticAccess +# 21| 3: [TypeAccess] void +# 21| 5: [BlockStmt] { ... } +# 22| 0: [ExprStmt] ; +# 22| 0: [MethodCall] println(...) +# 22| -1: [TypeAccess] IO +# 22| 0: [StringLiteral] "Static access test" +# 25| 11: [Class] NotCompact +# 27| 2: [Method] methodNotCompact +# 27| 3: [TypeAccess] void +# 27| 5: [BlockStmt] { ... } diff --git a/java/ql/test/library-tests/compact-source-files/PrintAst.qlref b/java/ql/test/library-tests/compact-source-files/PrintAst.qlref new file mode 100644 index 00000000000..f391eb5e463 --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/PrintAst.qlref @@ -0,0 +1 @@ +semmle/code/java/PrintAst.ql diff --git a/java/ql/test/library-tests/compact-source-files/Test.java b/java/ql/test/library-tests/compact-source-files/Test.java new file mode 100644 index 00000000000..6159073c216 --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/Test.java @@ -0,0 +1,29 @@ +int instanceField = 10; +static final int STATIC_CONSTANT = 42; +private String privateField = "data"; + +void main() { + processData(); + testStaticAccess(); +} + +// Test instance methods +void processData() { + instanceField++; + updatePrivateField(); +} + +private void updatePrivateField() { + privateField = "updated"; +} + +// Test static method access +static void testStaticAccess() { + IO.println("Static access test"); +} + +class NotCompact { +//Test explict class + void methodNotCompact() { + } +} \ No newline at end of file diff --git a/java/ql/test/library-tests/compact-source-files/options b/java/ql/test/library-tests/compact-source-files/options new file mode 100644 index 00000000000..db1dc01e53b --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args --release 25 --enable-preview diff --git a/java/ql/test/library-tests/flexible-constructors/FlexibleConstructors.java b/java/ql/test/library-tests/flexible-constructors/FlexibleConstructors.java new file mode 100644 index 00000000000..bcd9a26f7b1 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/FlexibleConstructors.java @@ -0,0 +1,95 @@ +class A { + A(String msg) { + System.out.println("A: " + msg); + } +} + +class B extends A { + B(String input) { + var msg = input.trim().toUpperCase(); + super(msg); + } +} + +class C { + private final int x; + + C(int x) { + if (x < 0) throw new IllegalArgumentException(); + super(); + this.x = x; + } +} + +record R(String name, int score) { + public R(String name) { + var score = name.length(); + this(name, score); + } +} + +class Outer { + private final String prefix = "outer"; + + class Inner { + private String full; + + Inner(String suffix) { + var combined = prefix + "_" + suffix; + super(); + this.full = combined; + } + } +} + +class D { + private final String value; + private final int length; + + D(String input) { + var processed = input.toLowerCase(); + value = processed; + this.length = processed.length(); + super(); + } +} + +class E extends A { + private boolean isValid; + private String processed; + + E(String data) { + var temp = data != null ? data.trim() : ""; + this.processed = temp; + isValid = !temp.isEmpty(); + super(temp); + } +} + +class F { + private int x; + private final int y; + private int sum; + + F(int a, int b) { + x = a; + this.y = b; + this.sum = a + b; + super(); + } +} + +class G { + private String instance_val; + + { + instance_val = "instance"; + } + + G(String input) { + var tmp = input != null ? input : "default"; + var string = tmp + "_initialized"; + super(); + this.instance_val = string; + } +} diff --git a/java/ql/test/library-tests/flexible-constructors/InstanceInitializerCalls.expected b/java/ql/test/library-tests/flexible-constructors/InstanceInitializerCalls.expected new file mode 100644 index 00000000000..75a112fe208 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/InstanceInitializerCalls.expected @@ -0,0 +1,2 @@ +| FlexibleConstructors.java:31:7:31:11 | ; | 1 | | Instance initializer call at index 1 | +| FlexibleConstructors.java:89:5:89:5 | ; | 3 | | Instance initializer call at index 3 | diff --git a/java/ql/test/library-tests/flexible-constructors/InstanceInitializerCalls.ql b/java/ql/test/library-tests/flexible-constructors/InstanceInitializerCalls.ql new file mode 100644 index 00000000000..286137fc452 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/InstanceInitializerCalls.ql @@ -0,0 +1,8 @@ +import java + +from MethodCall call, Method m +where + call.getMethod() = m and + m.getName() = "" +select call.getEnclosingStmt(), call.getEnclosingStmt().getIndex(), call.getMethod().getName(), + "Instance initializer call at index " + call.getEnclosingStmt().getIndex() diff --git a/java/ql/test/library-tests/flexible-constructors/PrettyPrint.expected b/java/ql/test/library-tests/flexible-constructors/PrettyPrint.expected new file mode 100644 index 00000000000..d90e8b8f831 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/PrettyPrint.expected @@ -0,0 +1,125 @@ +| FlexibleConstructors.java:1:7:1:7 | A | 0 | class A { | +| FlexibleConstructors.java:1:7:1:7 | A | 1 | A(String msg) { | +| FlexibleConstructors.java:1:7:1:7 | A | 2 | super(); | +| FlexibleConstructors.java:1:7:1:7 | A | 3 | System.out.println("A: " + msg); | +| FlexibleConstructors.java:1:7:1:7 | A | 4 | } | +| FlexibleConstructors.java:1:7:1:7 | A | 5 | } | +| FlexibleConstructors.java:7:7:7:7 | B | 0 | class B { | +| FlexibleConstructors.java:7:7:7:7 | B | 1 | B(String input) { | +| FlexibleConstructors.java:7:7:7:7 | B | 2 | var msg = input.trim().toUpperCase(); | +| FlexibleConstructors.java:7:7:7:7 | B | 3 | super(msg); | +| FlexibleConstructors.java:7:7:7:7 | B | 4 | } | +| FlexibleConstructors.java:7:7:7:7 | B | 5 | } | +| FlexibleConstructors.java:14:7:14:7 | C | 0 | class C { | +| FlexibleConstructors.java:14:7:14:7 | C | 1 | private final int x; | +| FlexibleConstructors.java:14:7:14:7 | C | 2 | | +| FlexibleConstructors.java:14:7:14:7 | C | 3 | C(int x) { | +| FlexibleConstructors.java:14:7:14:7 | C | 4 | if (x < 0) | +| FlexibleConstructors.java:14:7:14:7 | C | 5 | throw new IllegalArgumentException(); | +| FlexibleConstructors.java:14:7:14:7 | C | 6 | super(); | +| FlexibleConstructors.java:14:7:14:7 | C | 7 | this.x = x; | +| FlexibleConstructors.java:14:7:14:7 | C | 8 | } | +| FlexibleConstructors.java:14:7:14:7 | C | 9 | } | +| FlexibleConstructors.java:24:8:24:8 | R | 0 | final class R { | +| FlexibleConstructors.java:24:8:24:8 | R | 1 | public final boolean equals(Object p0) { } | +| FlexibleConstructors.java:24:8:24:8 | R | 2 | | +| FlexibleConstructors.java:24:8:24:8 | R | 3 | public final int hashCode() { } | +| FlexibleConstructors.java:24:8:24:8 | R | 4 | | +| FlexibleConstructors.java:24:8:24:8 | R | 5 | public String name() { } | +| FlexibleConstructors.java:24:8:24:8 | R | 6 | | +| FlexibleConstructors.java:24:8:24:8 | R | 7 | public int score() { } | +| FlexibleConstructors.java:24:8:24:8 | R | 8 | | +| FlexibleConstructors.java:24:8:24:8 | R | 9 | public final String toString() { } | +| FlexibleConstructors.java:24:8:24:8 | R | 10 | | +| FlexibleConstructors.java:24:8:24:8 | R | 11 | R(String name, int score) { | +| FlexibleConstructors.java:24:8:24:8 | R | 12 | super(); | +| FlexibleConstructors.java:24:8:24:8 | R | 13 | this.name = name; | +| FlexibleConstructors.java:24:8:24:8 | R | 14 | this.score = score; | +| FlexibleConstructors.java:24:8:24:8 | R | 15 | } | +| FlexibleConstructors.java:24:8:24:8 | R | 16 | | +| FlexibleConstructors.java:24:8:24:8 | R | 17 | private final String name; | +| FlexibleConstructors.java:24:8:24:8 | R | 18 | | +| FlexibleConstructors.java:24:8:24:8 | R | 19 | private final int score; | +| FlexibleConstructors.java:24:8:24:8 | R | 20 | | +| FlexibleConstructors.java:24:8:24:8 | R | 21 | public R(String name) { | +| FlexibleConstructors.java:24:8:24:8 | R | 22 | var score = name.length(); | +| FlexibleConstructors.java:24:8:24:8 | R | 23 | this(name, score); | +| FlexibleConstructors.java:24:8:24:8 | R | 24 | } | +| FlexibleConstructors.java:24:8:24:8 | R | 25 | } | +| FlexibleConstructors.java:31:7:31:11 | Outer | 0 | class Outer { | +| FlexibleConstructors.java:31:7:31:11 | Outer | 1 | private void () { | +| FlexibleConstructors.java:31:7:31:11 | Outer | 2 | prefix = "outer"; | +| FlexibleConstructors.java:31:7:31:11 | Outer | 3 | } | +| FlexibleConstructors.java:31:7:31:11 | Outer | 4 | | +| FlexibleConstructors.java:31:7:31:11 | Outer | 5 | Outer() { | +| FlexibleConstructors.java:31:7:31:11 | Outer | 6 | super(); | +| FlexibleConstructors.java:31:7:31:11 | Outer | 7 | (); | +| FlexibleConstructors.java:31:7:31:11 | Outer | 8 | } | +| FlexibleConstructors.java:31:7:31:11 | Outer | 9 | | +| FlexibleConstructors.java:31:7:31:11 | Outer | 10 | private final String prefix; | +| FlexibleConstructors.java:31:7:31:11 | Outer | 11 | | +| FlexibleConstructors.java:31:7:31:11 | Outer | 12 | class Inner { | +| FlexibleConstructors.java:31:7:31:11 | Outer | 13 | private String full; | +| FlexibleConstructors.java:31:7:31:11 | Outer | 14 | | +| FlexibleConstructors.java:31:7:31:11 | Outer | 15 | Inner(String suffix) { | +| FlexibleConstructors.java:31:7:31:11 | Outer | 16 | var combined = prefix + "_" + suffix; | +| FlexibleConstructors.java:31:7:31:11 | Outer | 17 | super(); | +| FlexibleConstructors.java:31:7:31:11 | Outer | 18 | this.full = combined; | +| FlexibleConstructors.java:31:7:31:11 | Outer | 19 | } | +| FlexibleConstructors.java:31:7:31:11 | Outer | 20 | } | +| FlexibleConstructors.java:31:7:31:11 | Outer | 21 | } | +| FlexibleConstructors.java:45:7:45:7 | D | 0 | class D { | +| FlexibleConstructors.java:45:7:45:7 | D | 1 | private final String value; | +| FlexibleConstructors.java:45:7:45:7 | D | 2 | | +| FlexibleConstructors.java:45:7:45:7 | D | 3 | private final int length; | +| FlexibleConstructors.java:45:7:45:7 | D | 4 | | +| FlexibleConstructors.java:45:7:45:7 | D | 5 | D(String input) { | +| FlexibleConstructors.java:45:7:45:7 | D | 6 | var processed = input.toLowerCase(); | +| FlexibleConstructors.java:45:7:45:7 | D | 7 | value = processed; | +| FlexibleConstructors.java:45:7:45:7 | D | 8 | this.length = processed.length(); | +| FlexibleConstructors.java:45:7:45:7 | D | 9 | super(); | +| FlexibleConstructors.java:45:7:45:7 | D | 10 | } | +| FlexibleConstructors.java:45:7:45:7 | D | 11 | } | +| FlexibleConstructors.java:57:7:57:7 | E | 0 | class E { | +| FlexibleConstructors.java:57:7:57:7 | E | 1 | private boolean isValid; | +| FlexibleConstructors.java:57:7:57:7 | E | 2 | | +| FlexibleConstructors.java:57:7:57:7 | E | 3 | private String processed; | +| FlexibleConstructors.java:57:7:57:7 | E | 4 | | +| FlexibleConstructors.java:57:7:57:7 | E | 5 | E(String data) { | +| FlexibleConstructors.java:57:7:57:7 | E | 6 | var temp = data != null ? data.trim() : ""; | +| FlexibleConstructors.java:57:7:57:7 | E | 7 | this.processed = temp; | +| FlexibleConstructors.java:57:7:57:7 | E | 8 | isValid = !temp.isEmpty(); | +| FlexibleConstructors.java:57:7:57:7 | E | 9 | super(temp); | +| FlexibleConstructors.java:57:7:57:7 | E | 10 | } | +| FlexibleConstructors.java:57:7:57:7 | E | 11 | } | +| FlexibleConstructors.java:69:7:69:7 | F | 0 | class F { | +| FlexibleConstructors.java:69:7:69:7 | F | 1 | private int x; | +| FlexibleConstructors.java:69:7:69:7 | F | 2 | | +| FlexibleConstructors.java:69:7:69:7 | F | 3 | private final int y; | +| FlexibleConstructors.java:69:7:69:7 | F | 4 | | +| FlexibleConstructors.java:69:7:69:7 | F | 5 | private int sum; | +| FlexibleConstructors.java:69:7:69:7 | F | 6 | | +| FlexibleConstructors.java:69:7:69:7 | F | 7 | F(int a, int b) { | +| FlexibleConstructors.java:69:7:69:7 | F | 8 | x = a; | +| FlexibleConstructors.java:69:7:69:7 | F | 9 | this.y = b; | +| FlexibleConstructors.java:69:7:69:7 | F | 10 | this.sum = a + b; | +| FlexibleConstructors.java:69:7:69:7 | F | 11 | super(); | +| FlexibleConstructors.java:69:7:69:7 | F | 12 | } | +| FlexibleConstructors.java:69:7:69:7 | F | 13 | } | +| FlexibleConstructors.java:82:7:82:7 | G | 0 | class G { | +| FlexibleConstructors.java:82:7:82:7 | G | 1 | private void () { | +| FlexibleConstructors.java:82:7:82:7 | G | 2 | { | +| FlexibleConstructors.java:82:7:82:7 | G | 3 | instance_val = "instance"; | +| FlexibleConstructors.java:82:7:82:7 | G | 4 | } | +| FlexibleConstructors.java:82:7:82:7 | G | 5 | } | +| FlexibleConstructors.java:82:7:82:7 | G | 6 | | +| FlexibleConstructors.java:82:7:82:7 | G | 7 | private String instance_val; | +| FlexibleConstructors.java:82:7:82:7 | G | 8 | | +| FlexibleConstructors.java:82:7:82:7 | G | 9 | G(String input) { | +| FlexibleConstructors.java:82:7:82:7 | G | 10 | var tmp = input != null ? input : "default"; | +| FlexibleConstructors.java:82:7:82:7 | G | 11 | var string = tmp + "_initialized"; | +| FlexibleConstructors.java:82:7:82:7 | G | 12 | super(); | +| FlexibleConstructors.java:82:7:82:7 | G | 13 | (); | +| FlexibleConstructors.java:82:7:82:7 | G | 14 | this.instance_val = string; | +| FlexibleConstructors.java:82:7:82:7 | G | 15 | } | +| FlexibleConstructors.java:82:7:82:7 | G | 16 | } | diff --git a/java/ql/test/library-tests/flexible-constructors/PrettyPrint.ql b/java/ql/test/library-tests/flexible-constructors/PrettyPrint.ql new file mode 100644 index 00000000000..59ae62effd1 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/PrettyPrint.ql @@ -0,0 +1,5 @@ +import semmle.code.java.PrettyPrintAst + +from ClassOrInterface cori, string s, int line +where pp(cori, s, line) and cori.fromSource() +select cori, line, s diff --git a/java/ql/test/library-tests/flexible-constructors/PrintAst.expected b/java/ql/test/library-tests/flexible-constructors/PrintAst.expected new file mode 100644 index 00000000000..e8071db72f7 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/PrintAst.expected @@ -0,0 +1,213 @@ +FlexibleConstructors.java: +# 0| [CompilationUnit] FlexibleConstructors +# 1| 1: [Class] A +# 2| 1: [Constructor] A +#-----| 4: (Parameters) +# 2| 0: [Parameter] msg +# 2| 0: [TypeAccess] String +# 2| 5: [BlockStmt] { ... } +# 3| 1: [ExprStmt] ; +# 3| 0: [MethodCall] println(...) +# 3| -1: [VarAccess] System.out +# 3| -1: [TypeAccess] System +# 3| 0: [AddExpr] ... + ... +# 3| 0: [StringLiteral] "A: " +# 3| 1: [VarAccess] msg +# 7| 2: [Class] B +#-----| -1: (Base Types) +# 7| -1: [TypeAccess] A +# 8| 1: [Constructor] B +#-----| 4: (Parameters) +# 8| 0: [Parameter] input +# 8| 0: [TypeAccess] String +# 8| 5: [BlockStmt] { ... } +# 9| 0: [LocalVariableDeclStmt] var ...; +# 9| 1: [LocalVariableDeclExpr] msg +# 9| 0: [MethodCall] toUpperCase(...) +# 9| -1: [MethodCall] trim(...) +# 9| -1: [VarAccess] input +# 10| 1: [SuperConstructorInvocationStmt] super(...) +# 10| 0: [VarAccess] msg +# 14| 3: [Class] C +# 15| 1: [FieldDeclaration] int x; +# 15| -1: [TypeAccess] int +# 17| 2: [Constructor] C +#-----| 4: (Parameters) +# 17| 0: [Parameter] x +# 17| 0: [TypeAccess] int +# 17| 5: [BlockStmt] { ... } +# 18| 0: [IfStmt] if (...) +# 18| 0: [LTExpr] ... < ... +# 18| 0: [VarAccess] x +# 18| 1: [IntegerLiteral] 0 +# 18| 1: [ThrowStmt] throw ... +# 18| 0: [ClassInstanceExpr] new IllegalArgumentException(...) +# 18| -3: [TypeAccess] IllegalArgumentException +# 19| 1: [SuperConstructorInvocationStmt] super(...) +# 20| 2: [ExprStmt] ; +# 20| 0: [AssignExpr] ...=... +# 20| 0: [VarAccess] this.x +# 20| -1: [ThisAccess] this +# 20| 1: [VarAccess] x +# 24| 4: [Class] R +# 24| 2: [FieldDeclaration] String name; +# 24| 3: [FieldDeclaration] int score; +# 25| 4: [Constructor] R +#-----| 4: (Parameters) +# 25| 0: [Parameter] name +# 25| 0: [TypeAccess] String +# 25| 5: [BlockStmt] { ... } +# 26| 0: [LocalVariableDeclStmt] var ...; +# 26| 1: [LocalVariableDeclExpr] score +# 26| 0: [MethodCall] length(...) +# 26| -1: [VarAccess] name +# 27| 1: [ThisConstructorInvocationStmt] this(...) +# 27| 0: [VarAccess] name +# 27| 1: [VarAccess] score +# 31| 5: [Class] Outer +# 32| 3: [FieldDeclaration] String prefix; +# 32| -1: [TypeAccess] String +# 32| 0: [StringLiteral] "outer" +# 34| 4: [Class] Inner +# 35| 1: [FieldDeclaration] String full; +# 35| -1: [TypeAccess] String +# 37| 2: [Constructor] Inner +#-----| 4: (Parameters) +# 37| 0: [Parameter] suffix +# 37| 0: [TypeAccess] String +# 37| 5: [BlockStmt] { ... } +# 38| 0: [LocalVariableDeclStmt] var ...; +# 38| 1: [LocalVariableDeclExpr] combined +# 38| 0: [AddExpr] ... + ... +# 38| 0: [AddExpr] ... + ... +# 38| 0: [VarAccess] prefix +# 38| 1: [StringLiteral] "_" +# 38| 1: [VarAccess] suffix +# 39| 1: [SuperConstructorInvocationStmt] super(...) +# 40| 2: [ExprStmt] ; +# 40| 0: [AssignExpr] ...=... +# 40| 0: [VarAccess] this.full +# 40| -1: [ThisAccess] this +# 40| 1: [VarAccess] combined +# 45| 6: [Class] D +# 46| 1: [FieldDeclaration] String value; +# 46| -1: [TypeAccess] String +# 47| 2: [FieldDeclaration] int length; +# 47| -1: [TypeAccess] int +# 49| 3: [Constructor] D +#-----| 4: (Parameters) +# 49| 0: [Parameter] input +# 49| 0: [TypeAccess] String +# 49| 5: [BlockStmt] { ... } +# 50| 0: [LocalVariableDeclStmt] var ...; +# 50| 1: [LocalVariableDeclExpr] processed +# 50| 0: [MethodCall] toLowerCase(...) +# 50| -1: [VarAccess] input +# 51| 1: [ExprStmt] ; +# 51| 0: [AssignExpr] ...=... +# 51| 0: [VarAccess] value +# 51| 1: [VarAccess] processed +# 52| 2: [ExprStmt] ; +# 52| 0: [AssignExpr] ...=... +# 52| 0: [VarAccess] this.length +# 52| -1: [ThisAccess] this +# 52| 1: [MethodCall] length(...) +# 52| -1: [VarAccess] processed +# 53| 3: [SuperConstructorInvocationStmt] super(...) +# 57| 7: [Class] E +#-----| -1: (Base Types) +# 57| -1: [TypeAccess] A +# 58| 1: [FieldDeclaration] boolean isValid; +# 58| -1: [TypeAccess] boolean +# 59| 2: [FieldDeclaration] String processed; +# 59| -1: [TypeAccess] String +# 61| 3: [Constructor] E +#-----| 4: (Parameters) +# 61| 0: [Parameter] data +# 61| 0: [TypeAccess] String +# 61| 5: [BlockStmt] { ... } +# 62| 0: [LocalVariableDeclStmt] var ...; +# 62| 1: [LocalVariableDeclExpr] temp +# 62| 0: [ConditionalExpr] ...?...:... +# 62| 0: [NEExpr] ... != ... +# 62| 0: [VarAccess] data +# 62| 1: [NullLiteral] null +# 62| 1: [MethodCall] trim(...) +# 62| -1: [VarAccess] data +# 62| 2: [StringLiteral] "" +# 63| 1: [ExprStmt] ; +# 63| 0: [AssignExpr] ...=... +# 63| 0: [VarAccess] this.processed +# 63| -1: [ThisAccess] this +# 63| 1: [VarAccess] temp +# 64| 2: [ExprStmt] ; +# 64| 0: [AssignExpr] ...=... +# 64| 0: [VarAccess] isValid +# 64| 1: [LogNotExpr] !... +# 64| 0: [MethodCall] isEmpty(...) +# 64| -1: [VarAccess] temp +# 65| 3: [SuperConstructorInvocationStmt] super(...) +# 65| 0: [VarAccess] temp +# 69| 8: [Class] F +# 70| 1: [FieldDeclaration] int x; +# 70| -1: [TypeAccess] int +# 71| 2: [FieldDeclaration] int y; +# 71| -1: [TypeAccess] int +# 72| 3: [FieldDeclaration] int sum; +# 72| -1: [TypeAccess] int +# 74| 4: [Constructor] F +#-----| 4: (Parameters) +# 74| 0: [Parameter] a +# 74| 0: [TypeAccess] int +# 74| 1: [Parameter] b +# 74| 0: [TypeAccess] int +# 74| 5: [BlockStmt] { ... } +# 75| 0: [ExprStmt] ; +# 75| 0: [AssignExpr] ...=... +# 75| 0: [VarAccess] x +# 75| 1: [VarAccess] a +# 76| 1: [ExprStmt] ; +# 76| 0: [AssignExpr] ...=... +# 76| 0: [VarAccess] this.y +# 76| -1: [ThisAccess] this +# 76| 1: [VarAccess] b +# 77| 2: [ExprStmt] ; +# 77| 0: [AssignExpr] ...=... +# 77| 0: [VarAccess] this.sum +# 77| -1: [ThisAccess] this +# 77| 1: [AddExpr] ... + ... +# 77| 0: [VarAccess] a +# 77| 1: [VarAccess] b +# 78| 3: [SuperConstructorInvocationStmt] super(...) +# 82| 9: [Class] G +# 83| 2: [FieldDeclaration] String instance_val; +# 83| -1: [TypeAccess] String +# 85| 3: [BlockStmt] { ... } +# 86| 0: [ExprStmt] ; +# 86| 0: [AssignExpr] ...=... +# 86| 0: [VarAccess] instance_val +# 86| 1: [StringLiteral] "instance" +# 89| 4: [Constructor] G +#-----| 4: (Parameters) +# 89| 0: [Parameter] input +# 89| 0: [TypeAccess] String +# 89| 5: [BlockStmt] { ... } +# 90| 0: [LocalVariableDeclStmt] var ...; +# 90| 1: [LocalVariableDeclExpr] tmp +# 90| 0: [ConditionalExpr] ...?...:... +# 90| 0: [NEExpr] ... != ... +# 90| 0: [VarAccess] input +# 90| 1: [NullLiteral] null +# 90| 1: [VarAccess] input +# 90| 2: [StringLiteral] "default" +# 91| 1: [LocalVariableDeclStmt] var ...; +# 91| 1: [LocalVariableDeclExpr] string +# 91| 0: [AddExpr] ... + ... +# 91| 0: [VarAccess] tmp +# 91| 1: [StringLiteral] "_initialized" +# 92| 2: [SuperConstructorInvocationStmt] super(...) +# 93| 4: [ExprStmt] ; +# 93| 0: [AssignExpr] ...=... +# 93| 0: [VarAccess] this.instance_val +# 93| -1: [ThisAccess] this +# 93| 1: [VarAccess] string diff --git a/java/ql/test/library-tests/flexible-constructors/PrintAst.qlref b/java/ql/test/library-tests/flexible-constructors/PrintAst.qlref new file mode 100644 index 00000000000..c7fd5faf239 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/PrintAst.qlref @@ -0,0 +1 @@ +semmle/code/java/PrintAst.ql \ No newline at end of file diff --git a/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.expected b/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.expected new file mode 100644 index 00000000000..dba8b4acf98 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.expected @@ -0,0 +1,7 @@ +| FlexibleConstructors.java:10:15:10:17 | msg | FlexibleConstructors.java:10:9:10:19 | super(...) | predecessor of explicit super() | +| FlexibleConstructors.java:18:13:18:17 | ... < ... | FlexibleConstructors.java:19:9:19:16 | super(...) | predecessor of explicit super() | +| FlexibleConstructors.java:38:17:38:48 | combined | FlexibleConstructors.java:39:13:39:20 | super(...) | predecessor of explicit super() | +| FlexibleConstructors.java:52:9:52:40 | ...=... | FlexibleConstructors.java:53:9:53:16 | super(...) | predecessor of explicit super() | +| FlexibleConstructors.java:65:15:65:18 | temp | FlexibleConstructors.java:65:9:65:20 | super(...) | predecessor of explicit super() | +| FlexibleConstructors.java:77:9:77:24 | ...=... | FlexibleConstructors.java:78:9:78:16 | super(...) | predecessor of explicit super() | +| FlexibleConstructors.java:91:13:91:41 | string | FlexibleConstructors.java:92:9:92:16 | super(...) | predecessor of explicit super() | diff --git a/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.ql b/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.ql new file mode 100644 index 00000000000..2a291c5e82a --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.ql @@ -0,0 +1,11 @@ +import java + +from ControlFlowNode pred, ControlFlowNode supNode, SuperConstructorInvocationStmt sc +where + supNode.asStmt() = sc and + pred.getASuccessor() = supNode and + pred != supNode and + not pred.asStmt() instanceof BlockStmt and + exists(sc.getEnclosingCallable().getFile().getRelativePath()) and + sc.getLocation().getEndColumn() > sc.getLocation().getStartColumn() +select pred, sc, "predecessor of explicit super()" diff --git a/java/ql/test/library-tests/flexible-constructors/options b/java/ql/test/library-tests/flexible-constructors/options new file mode 100644 index 00000000000..db1dc01e53b --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args --release 25 --enable-preview diff --git a/javascript/documentation/library-customization.rst b/javascript/documentation/library-customization.rst index b06e5b5cab1..0960da8a112 100644 --- a/javascript/documentation/library-customization.rst +++ b/javascript/documentation/library-customization.rst @@ -178,7 +178,7 @@ added by extending ``Dataflow::SourceNode::Range``. Some of its subclasses can s extended. For example, ``DataFlow::ModuleImportNode`` models module imports, and ``DataFlow::ClassNode`` models class definitions. The former provides default implementations covering CommonJS, AMD, and ECMAScript 2015 modules, while the latter handles ECMAScript 2015 classes, as well as traditional function-based -classes. You can extend their corresponding ``::Range`` classes to add support for other module or +classes. You can extend their corresponding ``::Range`` classes to add support for other module or class systems. Type inference diff --git a/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/old.dbscheme b/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/old.dbscheme new file mode 100644 index 00000000000..76a926a00d5 --- /dev/null +++ b/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/old.dbscheme @@ -0,0 +1,1204 @@ +/*** Standard fragments ***/ + +/*- 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 +); + +/*- 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); + +/*- JavaScript-specific part -*/ + +@location = @location_default + +@sourceline = @locatable; + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +| 40 = @using_decl_stmt +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt | @using_decl_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +| 121 = @satisfies_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@type_keyword_operand = @import_declaration | @export_declaration | @import_specifier; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +| 10 = @static_initializer +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @type_keyword_operand ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference | @external_module_declaration; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal | @add_expr; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape +| 28 = @regexp_quoted_string +| 29 = @regexp_intersection +| 30 = @regexp_subtraction; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_identifier_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +| 15 = @jsdoc_qualified_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** +* Non-timing related data for the extraction of a single file. +* This table contains non-deterministic content. +*/ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) + +/*- 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; + +/*- 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; + +/*- Configuration files with key value pairs -*/ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); diff --git a/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/semmlecode.javascript.dbscheme b/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/semmlecode.javascript.dbscheme new file mode 100644 index 00000000000..ccefb5e2d49 --- /dev/null +++ b/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/semmlecode.javascript.dbscheme @@ -0,0 +1,1194 @@ +/*** Standard fragments ***/ + +/*- 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 +); + +/*- 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); + +/*- JavaScript-specific part -*/ + +@location = @location_default + +@sourceline = @locatable; + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +| 40 = @using_decl_stmt +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt | @using_decl_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +| 121 = @satisfies_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@type_keyword_operand = @import_declaration | @export_declaration | @import_specifier; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +| 10 = @static_initializer +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @type_keyword_operand ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference | @external_module_declaration; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal | @add_expr; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape +| 28 = @regexp_quoted_string +| 29 = @regexp_intersection +| 30 = @regexp_subtraction; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_identifier_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +| 15 = @jsdoc_qualified_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** +* Non-timing related data for the extraction of a single file. +* This table contains non-deterministic content. +*/ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) + +/*- 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; + +/*- 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; + +/*- Configuration files with key value pairs -*/ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; diff --git a/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/upgrade.properties b/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/upgrade.properties new file mode 100644 index 00000000000..bae98029d4b --- /dev/null +++ b/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/upgrade.properties @@ -0,0 +1,5 @@ +description: downgrade overlay relations +compatibility: full + +databaseMetadata.rel: delete +overlayChangedFiles.rel: delete diff --git a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java index 08dac06c4d9..f5e998398f5 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java +++ b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java @@ -465,10 +465,11 @@ public class AutoBuild { try { CompletableFuture sourceFuture = extractSource(); sourceFuture.join(); // wait for source extraction to complete - if (hasSeenCode()) { // don't bother with the externs if no code was seen + if (hasSeenCode() && !isOverlayChangeMode()) { // don't bother with the externs if no code was seen or in overlay change mode extractExterns(); } extractXml(); + writeOverlayMetadata(); } catch (OutOfMemoryError oom) { System.err.println("Out of memory while extracting the project."); return 137; // the CodeQL CLI will interpret this as an out-of-memory error @@ -509,6 +510,21 @@ public class AutoBuild { return 0; } + private void writeOverlayMetadata() { + String file = getEnvVar("CODEQL_EXTRACTOR_JAVASCRIPT_OVERLAY_BASE_METADATA_OUT"); + if (file == null) { + // no overlay metadata file specified, so nothing to do + return; + } + // Write an empty string to the file as we currently have no metadata to emit. + // The file must be created for the database to recognized as an overlay base. + try { + Files.writeString(Paths.get(file), "", StandardCharsets.UTF_8); + } catch (IOException e) { + throw new ResourceError("Could not write overlay metadata to " + file, e); + } + } + /** * A kind of error that can happen during extraction of JavaScript or TypeScript * code. @@ -734,6 +750,17 @@ public class AutoBuild { List tsconfigFiles = new ArrayList<>(); findFilesToExtract(defaultExtractor, filesToExtract, tsconfigFiles); + OverlayChanges overlay = getOverlayChanges(); + if (overlay != null) { + Set changedFiles = overlay.changes.stream() + .map(file -> Paths.get(file).toAbsolutePath()) + .collect(Collectors.toSet()); + int before = filesToExtract.size(); + filesToExtract.retainAll(changedFiles); + int after = filesToExtract.size(); + System.out.println("Overlay filter removed " + (before - after) + " out of " + before + " files from extraction."); + } + tsconfigFiles = tsconfigFiles.stream() .sorted(PATH_ORDERING) .collect(Collectors.toList()); @@ -1338,6 +1365,18 @@ protected DependencyInstallationResult preparePackagesAndDependencies(Set } } + private boolean isOverlayChangeMode() { + return getEnvVar("CODEQL_EXTRACTOR_JAVASCRIPT_OVERLAY_CHANGES") != null; + } + + private OverlayChanges getOverlayChanges() throws IOException { + String jsonFile = getEnvVar("CODEQL_EXTRACTOR_JAVASCRIPT_OVERLAY_CHANGES"); + if (jsonFile == null) { + return null; + } + return new Gson().fromJson(Files.newBufferedReader(Paths.get(jsonFile)), OverlayChanges.class); + } + public static void main(String[] args) { try { System.exit(new AutoBuild().run()); diff --git a/javascript/extractor/src/com/semmle/js/extractor/OverlayChanges.java b/javascript/extractor/src/com/semmle/js/extractor/OverlayChanges.java new file mode 100644 index 00000000000..25cae238920 --- /dev/null +++ b/javascript/extractor/src/com/semmle/js/extractor/OverlayChanges.java @@ -0,0 +1,7 @@ +package com.semmle.js.extractor; + +import java.util.List; + +public class OverlayChanges { + public List changes; +} diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 3604e77c13b..d45d55f6a36 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.6.10 + +### Minor Analysis Improvements + +* Removed `libxmljs` as an XML bomb sink. The underlying libxml2 library now includes [entity reference loop detection](https://github.com/GNOME/libxml2/blob/0c948334a8f5c66d50e9f8992e62998017dc4fc6/NEWS#L905-L908) that prevents XML bomb attacks. + ## 2.6.9 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/2025-07-15-xml-bomb-sinks.md b/javascript/ql/lib/change-notes/released/2.6.10.md similarity index 84% rename from javascript/ql/lib/change-notes/2025-07-15-xml-bomb-sinks.md rename to javascript/ql/lib/change-notes/released/2.6.10.md index b10509c0e06..7b9859668cb 100644 --- a/javascript/ql/lib/change-notes/2025-07-15-xml-bomb-sinks.md +++ b/javascript/ql/lib/change-notes/released/2.6.10.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 2.6.10 + +### Minor Analysis Improvements + * Removed `libxmljs` as an XML bomb sink. The underlying libxml2 library now includes [entity reference loop detection](https://github.com/GNOME/libxml2/blob/0c948334a8f5c66d50e9f8992e62998017dc4fc6/NEWS#L905-L908) that prevents XML bomb attacks. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 8bec0b26cea..aa42bd9f12a 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.6.9 +lastReleaseVersion: 2.6.10 diff --git a/javascript/ql/lib/javascript.qll b/javascript/ql/lib/javascript.qll index 88e46c77453..ad9cfe009b5 100644 --- a/javascript/ql/lib/javascript.qll +++ b/javascript/ql/lib/javascript.qll @@ -146,3 +146,4 @@ import semmle.javascript.linters.JSLint import semmle.javascript.linters.Linting import semmle.javascript.security.dataflow.RemoteFlowSources import semmle.javascript.frameworks.UnderscoreDotString +private import semmle.javascript.internal.Overlay diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 3864c3031b3..e233d83e328 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.10-dev +version: 2.6.11-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/lib/semmle/javascript/AST.qll b/javascript/ql/lib/semmle/javascript/AST.qll index bcde7bbaf4a..db0a2e153d5 100644 --- a/javascript/ql/lib/semmle/javascript/AST.qll +++ b/javascript/ql/lib/semmle/javascript/AST.qll @@ -31,7 +31,7 @@ class AstNode extends @ast_node, NodeInStmtContainer { /** Gets the first token belonging to this element. */ Token getFirstToken() { - exists(DbLocation l1, DbLocation l2, string filepath, int startline, int startcolumn | + exists(Location l1, Location l2, string filepath, int startline, int startcolumn | l1 = this.getLocation() and l2 = result.getLocation() and l1.hasLocationInfo(filepath, startline, startcolumn, _, _) and @@ -41,7 +41,7 @@ class AstNode extends @ast_node, NodeInStmtContainer { /** Gets the last token belonging to this element. */ Token getLastToken() { - exists(DbLocation l1, DbLocation l2, string filepath, int endline, int endcolumn | + exists(Location l1, Location l2, string filepath, int endline, int endcolumn | l1 = this.getLocation() and l2 = result.getLocation() and l1.hasLocationInfo(filepath, _, _, endline, endcolumn) and diff --git a/javascript/ql/lib/semmle/javascript/Files.qll b/javascript/ql/lib/semmle/javascript/Files.qll index e717eb6def4..b9274d92eba 100644 --- a/javascript/ql/lib/semmle/javascript/Files.qll +++ b/javascript/ql/lib/semmle/javascript/Files.qll @@ -3,7 +3,6 @@ import javascript private import NodeModuleResolutionImpl private import codeql.util.FileSystem -private import internal.Locations private module FsInput implements InputSig { abstract class ContainerBase extends @container { @@ -99,7 +98,7 @@ class File extends Container, Impl::File { * * Note that files have special locations starting and ending at line zero, column zero. */ - DbLocation getLocation() { result = getLocatableLocation(this) } + Location getLocation() { hasLocation(this, result) } /** Gets the number of lines in this file. */ int getNumberOfLines() { result = sum(int loc | numlines(this, loc, _, _) | loc) } diff --git a/javascript/ql/lib/semmle/javascript/JSON.qll b/javascript/ql/lib/semmle/javascript/JSON.qll index 714228e52b6..19fc3ec84d7 100644 --- a/javascript/ql/lib/semmle/javascript/JSON.qll +++ b/javascript/ql/lib/semmle/javascript/JSON.qll @@ -3,7 +3,6 @@ */ import javascript -private import semmle.javascript.internal.Locations /** * A JSON-encoded value, which may be a primitive value, an array or an object. @@ -33,7 +32,7 @@ class JsonValue extends @json_value, Locatable { override string toString() { json(this, _, _, _, result) } /** Gets the JSON file containing this value. */ - File getJsonFile() { result = getLocatableLocation(this).getFile() } + File getJsonFile() { exists(Location loc | json_locations(this, loc) and result = loc.getFile()) } /** If this is an object, gets the value of property `name`. */ JsonValue getPropValue(string name) { json_properties(this, name, result) } diff --git a/javascript/ql/lib/semmle/javascript/Locations.qll b/javascript/ql/lib/semmle/javascript/Locations.qll index ce323dfc14d..a3ad79ef93e 100644 --- a/javascript/ql/lib/semmle/javascript/Locations.qll +++ b/javascript/ql/lib/semmle/javascript/Locations.qll @@ -1,7 +1,6 @@ /** Provides classes for working with locations and program elements that have locations. */ import javascript -private import internal.Locations /** * A location as given by a file, a start line, a start column, @@ -11,31 +10,31 @@ private import internal.Locations * * For more information about locations see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ -class DbLocation extends TDbLocation { +final class Location extends @location_default { /** Gets the file for this location. */ - File getFile() { dbLocationInfo(this, result, _, _, _, _) } + File getFile() { locations_default(this, result, _, _, _, _) } /** Gets the 1-based line number (inclusive) where this location starts. */ - int getStartLine() { dbLocationInfo(this, _, result, _, _, _) } + int getStartLine() { locations_default(this, _, result, _, _, _) } /** Gets the 1-based column number (inclusive) where this location starts. */ - int getStartColumn() { dbLocationInfo(this, _, _, result, _, _) } + int getStartColumn() { locations_default(this, _, _, result, _, _) } /** Gets the 1-based line number (inclusive) where this location ends. */ - int getEndLine() { dbLocationInfo(this, _, _, _, result, _) } + int getEndLine() { locations_default(this, _, _, _, result, _) } /** Gets the 1-based column number (inclusive) where this location ends. */ - int getEndColumn() { dbLocationInfo(this, _, _, _, _, result) } + int getEndColumn() { locations_default(this, _, _, _, _, result) } /** Gets the number of lines covered by this location. */ int getNumLines() { result = this.getEndLine() - this.getStartLine() + 1 } /** Holds if this location starts before location `that`. */ pragma[inline] - predicate startsBefore(DbLocation that) { - exists(File f, int sl1, int sc1, int sl2, int sc2 | - dbLocationInfo(this, f, sl1, sc1, _, _) and - dbLocationInfo(that, f, sl2, sc2, _, _) + predicate startsBefore(Location that) { + exists(string f, int sl1, int sc1, int sl2, int sc2 | + this.hasLocationInfo(f, sl1, sc1, _, _) and + that.hasLocationInfo(f, sl2, sc2, _, _) | sl1 < sl2 or @@ -45,10 +44,10 @@ class DbLocation extends TDbLocation { /** Holds if this location ends after location `that`. */ pragma[inline] - predicate endsAfter(DbLocation that) { - exists(File f, int el1, int ec1, int el2, int ec2 | - dbLocationInfo(this, f, _, _, el1, ec1) and - dbLocationInfo(that, f, _, _, el2, ec2) + predicate endsAfter(Location that) { + exists(string f, int el1, int ec1, int el2, int ec2 | + this.hasLocationInfo(f, _, _, el1, ec1) and + that.hasLocationInfo(f, _, _, el2, ec2) | el1 > el2 or @@ -60,10 +59,10 @@ class DbLocation extends TDbLocation { * Holds if this location contains location `that`, meaning that it starts * before and ends after it. */ - predicate contains(DbLocation that) { this.startsBefore(that) and this.endsAfter(that) } + predicate contains(Location that) { this.startsBefore(that) and this.endsAfter(that) } /** Holds if this location is empty. */ - predicate isEmpty() { exists(int l, int c | dbLocationInfo(this, _, l, c, l, c - 1)) } + predicate isEmpty() { exists(int l, int c | this.hasLocationInfo(_, l, c, l, c - 1)) } /** Gets a textual representation of this element. */ string toString() { result = this.getFile().getBaseName() + ":" + this.getStartLine().toString() } @@ -79,13 +78,19 @@ class DbLocation extends TDbLocation { string filepath, int startline, int startcolumn, int endline, int endcolumn ) { exists(File f | - dbLocationInfo(this, f, startline, startcolumn, endline, endcolumn) and + locations_default(this, f, startline, startcolumn, endline, endcolumn) and filepath = f.getAbsolutePath() ) } } -final class Location = LocationImpl; +cached +private Location getLocatableLocation(@locatable l) { + hasLocation(l, result) or + xmllocations(l, result) or + json_locations(l, result) or + yaml_locations(l, result) +} /** A program element with a location. */ class Locatable extends @locatable { @@ -93,7 +98,7 @@ class Locatable extends @locatable { File getFile() { result = this.getLocation().getFile() } /** Gets this element's location. */ - final DbLocation getLocation() { result = getLocatableLocation(this) } + final Location getLocation() { result = getLocatableLocation(this) } /** * Gets the line on which this element starts. @@ -144,3 +149,8 @@ class Locatable extends @locatable { */ string getAPrimaryQlClass() { result = "???" } } + +/** + * DEPRECATED. Use `Location` instead. + */ +deprecated class DbLocation = Location; diff --git a/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll b/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll index 05bcd8b3ddd..47ee41a4235 100644 --- a/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll +++ b/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll @@ -26,7 +26,7 @@ class FirstLineOf extends Locatable { then endcolumn = xc else endcolumn = - max(int c | any(DbLocation l).hasLocationInfo(filepath, startline, _, startline, c)) + max(int c | any(Location l).hasLocationInfo(filepath, startline, _, startline, c)) ) } } diff --git a/javascript/ql/lib/semmle/javascript/SSA.qll b/javascript/ql/lib/semmle/javascript/SSA.qll index 2de42193743..a2c5bf1d34e 100644 --- a/javascript/ql/lib/semmle/javascript/SSA.qll +++ b/javascript/ql/lib/semmle/javascript/SSA.qll @@ -108,8 +108,8 @@ private module Internal { */ cached newtype TSsaDefinition = - TExplicitDef(ReachableBasicBlock bb, int i, VarDef d, SsaSourceVariable v) { - bb.defAt(i, v, d) and + TExplicitDef(ReachableBasicBlock bb, int i, VarDef d, SsaSourceVariable v, VarRef lhs) { + bb.defAt(i, v, d, lhs) and ( liveAfterDef(bb, i, v) or v.isCaptured() @@ -412,17 +412,22 @@ class SsaVariable extends TSsaDefinition { /** Gets a textual representation of this element. */ string toString() { result = this.getDefinition().prettyPrintRef() } + /** Gets the location of this SSA variable. */ + Location getLocation() { result = this.getDefinition().getLocation() } + /** + * DEPRECATED. Use `getLocation().hasLocationInfo()` instead. + * * Holds if this element is at the specified location. * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - this.getDefinition().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } @@ -478,23 +483,22 @@ class SsaDefinition extends TSsaDefinition { string toString() { result = this.prettyPrintDef() } /** + * DEPRECATED. Use `getLocation().hasLocationInfo()` instead. + * * Holds if this element is at the specified location. * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - abstract predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn - ); + ) { + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } /** Gets the location of this element. */ - final Location getLocation() { - exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | - this.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and - result.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - ) - } + Location getLocation() { result = this.getBasicBlock().getLocation() } /** Gets the function or toplevel to which this definition belongs. */ StmtContainer getContainer() { result = this.getBasicBlock().getContainer() } @@ -505,36 +509,34 @@ class SsaDefinition extends TSsaDefinition { */ class SsaExplicitDefinition extends SsaDefinition, TExplicitDef { override predicate definesAt(ReachableBasicBlock bb, int i, SsaSourceVariable v) { - this = TExplicitDef(bb, i, _, v) + this = TExplicitDef(bb, i, _, v, _) } /** This SSA definition corresponds to the definition of `v` at `def`. */ - predicate defines(VarDef def, SsaSourceVariable v) { this = TExplicitDef(_, _, def, v) } + predicate defines(VarDef def, SsaSourceVariable v) { this = TExplicitDef(_, _, def, v, _) } /** Gets the variable definition wrapped by this SSA definition. */ - VarDef getDef() { this = TExplicitDef(_, _, result, _) } + VarDef getDef() { this = TExplicitDef(_, _, result, _, _) } + + /** Gets the variable reference appearing on the left-hand side of this assignment. */ + VarRef getLhs() { this = TExplicitDef(_, _, _, _, result) } /** Gets the basic block to which this definition belongs. */ override ReachableBasicBlock getBasicBlock() { this.definesAt(result, _, _) } - override SsaSourceVariable getSourceVariable() { this = TExplicitDef(_, _, _, result) } + override SsaSourceVariable getSourceVariable() { this = TExplicitDef(_, _, _, result, _) } override VarDef getAContributingVarDef() { result = this.getDef() } override string prettyPrintRef() { - exists(int l, int c | this.hasLocationInfo(_, l, c, _, _) | result = "def@" + l + ":" + c) + exists(int l, int c | this.getLocation().hasLocationInfo(_, l, c, _, _) | + result = "def@" + l + ":" + c + ) } override string prettyPrintDef() { result = this.getDef().toString() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - exists(Location loc | - pragma[only_bind_into](loc) = pragma[only_bind_into](this.getDef()).getLocation() and - loc.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - ) - } + override Location getLocation() { result = this.getLhs().getLocation() } /** * Gets the data flow node representing the incoming value assigned at this definition, @@ -557,21 +559,10 @@ abstract class SsaImplicitDefinition extends SsaDefinition { abstract string getKind(); override string prettyPrintRef() { - exists(int l, int c | this.hasLocationInfo(_, l, c, _, _) | + exists(int l, int c | this.getLocation().hasLocationInfo(_, l, c, _, _) | result = this.getKind() + "@" + l + ":" + c ) } - - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - endline = startline and - endcolumn = startcolumn and - exists(Location loc | - pragma[only_bind_into](loc) = pragma[only_bind_into](this.getBasicBlock()).getLocation() and - loc.hasLocationInfo(filepath, startline, startcolumn, _, _) - ) - } } /** @@ -617,16 +608,6 @@ class SsaVariableCapture extends SsaImplicitDefinition, TCapture { override string getKind() { result = "capture" } override string prettyPrintDef() { result = "capture variable " + this.getSourceVariable() } - - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - exists(ReachableBasicBlock bb, int i | this.definesAt(bb, i, _) | - bb.getNode(i) - .getLocation() - .hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - ) - } } /** @@ -747,13 +728,7 @@ class SsaRefinementNode extends SsaPseudoDefinition, TRefinement { this.getSourceVariable() + " = refine[" + this.getGuard() + "](" + this.ppInputs() + ")" } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - this.getGuard() - .getLocation() - .hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = this.getGuard().getLocation() } } module Ssa { diff --git a/javascript/ql/lib/semmle/javascript/Variables.qll b/javascript/ql/lib/semmle/javascript/Variables.qll index 2f9905f86e1..adc0ad5b9c8 100644 --- a/javascript/ql/lib/semmle/javascript/Variables.qll +++ b/javascript/ql/lib/semmle/javascript/Variables.qll @@ -353,9 +353,9 @@ class LocalVariable extends Variable { * If the variable has one or more declarations, the location of the first declaration is used. * If the variable has no declaration, the entry point of its declaring container is used. */ - DbLocation getLocation() { + Location getLocation() { result = - min(DbLocation loc | + min(Location loc | loc = this.getADeclaration().getLocation() | loc order by loc.getStartLine(), loc.getStartColumn() diff --git a/javascript/ql/lib/semmle/javascript/XML.qll b/javascript/ql/lib/semmle/javascript/XML.qll index 2a351016fd1..54157809260 100644 --- a/javascript/ql/lib/semmle/javascript/XML.qll +++ b/javascript/ql/lib/semmle/javascript/XML.qll @@ -3,13 +3,12 @@ */ import semmle.files.FileSystem -private import semmle.javascript.internal.Locations private import codeql.xml.Xml -private module Input implements InputSig { +private module Input implements InputSig { class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; - predicate xmllocations_(XmlLocatableBase e, DbLocation loc) { loc = getLocatableLocation(e) } + predicate xmllocations_(XmlLocatableBase e, Location loc) { xmllocations(e, loc) } class XmlParentBase = @xmlparent; @@ -67,4 +66,4 @@ private module Input implements InputSig { } } -import Make +import Make diff --git a/javascript/ql/lib/semmle/javascript/YAML.qll b/javascript/ql/lib/semmle/javascript/YAML.qll index 24486b729c0..a312d78b6fb 100644 --- a/javascript/ql/lib/semmle/javascript/YAML.qll +++ b/javascript/ql/lib/semmle/javascript/YAML.qll @@ -9,8 +9,6 @@ import javascript private import codeql.yaml.Yaml as LibYaml private module YamlSig implements LibYaml::InputSig { - class Location = DbLocation; - class LocatableBase extends @yaml_locatable, Locatable { } import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll b/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll index c4a6e12b210..eb7160683a7 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll @@ -17,10 +17,10 @@ private import semmle.javascript.dataflow.internal.DataFlowPrivate * * - The relevant call sites cannot be matched by the access path syntax, and require the full power of CodeQL. * For example, complex overloading patterns might require more local reasoning at the call site. - * - The input/output behaviour cannot be described statically in the access path syntax, but the relevant access paths + * - The input/output behavior cannot be described statically in the access path syntax, but the relevant access paths * can be generated dynamically in CodeQL, based on the usages found in the codebase. * - * Subclasses should bind `this` to a unique identifier for the function being modelled. There is no special + * Subclasses should bind `this` to a unique identifier for the function being modeled. There is no special * interpreation of the `this` value, it should just not clash with the `this`-value used by other classes. * * For example, this models flow through calls such as `require("my-library").myFunction()`: diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/BarrierGuards.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/BarrierGuards.qll index 0af57ec0186..6dd0ebf0bb1 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/BarrierGuards.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/BarrierGuards.qll @@ -386,34 +386,35 @@ module MakeStateBarrierGuard< */ private class BarrierGuardFunction extends FinalFunction { DataFlow::ParameterNode sanitizedParameter; - BarrierGuard guard; boolean guardOutcome; FlowState state; int paramIndex; BarrierGuardFunction() { - barrierGuardIsRelevant(guard) and - exists(Expr e | - exists(Expr returnExpr | - returnExpr = guard.asExpr() - or - // ad hoc support for conjunctions: - getALogicalAndParent(guard) = returnExpr and guardOutcome = true - or - // ad hoc support for disjunctions: - getALogicalOrParent(guard) = returnExpr and guardOutcome = false - | - exists(SsaExplicitDefinition ssa | - ssa.getDef().getSource() = returnExpr and - ssa.getVariable().getAUse() = this.getAReturnedExpr() - ) - or - returnExpr = this.getAReturnedExpr() + exists(BarrierGuard guard | + barrierGuardIsRelevant(guard) and + exists(Expr e | + exists(Expr returnExpr | + returnExpr = guard.asExpr() + or + // ad hoc support for conjunctions: + getALogicalAndParent(guard) = returnExpr and guardOutcome = true + or + // ad hoc support for disjunctions: + getALogicalOrParent(guard) = returnExpr and guardOutcome = false + | + exists(SsaExplicitDefinition ssa | + ssa.getDef().getSource() = returnExpr and + ssa.getVariable().getAUse() = this.getAReturnedExpr() + ) + or + returnExpr = this.getAReturnedExpr() + ) and + sanitizedParameter.flowsToExpr(e) and + barrierGuardBlocksExpr(guard, guardOutcome, e, state) ) and - sanitizedParameter.flowsToExpr(e) and - barrierGuardBlocksExpr(guard, guardOutcome, e, state) - ) and - sanitizedParameter.getParameter() = this.getParameter(paramIndex) + sanitizedParameter.getParameter() = this.getParameter(paramIndex) + ) } /** diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll index 2fcc2acbd16..1a4051ccdf6 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll @@ -408,12 +408,6 @@ class DataFlowCallable extends TDataFlowCallable { /** Gets the corresponding `LibraryCallable` if this is a library callable. */ LibraryCallable asLibraryCallable() { this = MkLibraryCallable(result) } - - int totalorder() { - result = TotalOrdering::astNodeId(this.asSourceCallable()).bitShiftLeft(1) - or - result = TotalOrdering::libraryCallableId(this.asLibraryCallable()).bitShiftLeft(1) + 1 - } } /** A callable defined in library code, identified by a unique string. */ @@ -680,7 +674,7 @@ predicate neverSkipInPathGraph(Node node) { // Include the return-value expression node.asExpr() = any(Function f).getAReturnedExpr() or - // Include calls (which may have been modelled as steps) + // Include calls (which may have been modeled as steps) node.asExpr() instanceof InvokeExpr or // Include references to a variable @@ -797,47 +791,6 @@ private newtype TDataFlowCall = FlowSummaryImpl::Private::summaryCallbackRange(c, receiver) } -private module TotalOrdering { - private predicate astNodeRefl(AstNode x, AstNode y) { x = y } - - int astNodeId(AstNode n) = equivalenceRelation(astNodeRefl/2)(n, result) - - predicate dataFlowNodeId(DataFlow::Node node, int cls, int content) { - exists(AstNode n | - node = TValueNode(n) and cls = 1 and content = astNodeId(n) - or - node = TReflectiveCallNode(n, _) and cls = 2 and content = astNodeId(n) - ) - } - - predicate callId(DataFlowCall call, int cls, int child, int extra) { - exists(DataFlow::Node node | - call = MkOrdinaryCall(node) and dataFlowNodeId(node, cls - 1000, child) and extra = 0 - or - call = MkPartialCall(node, _) and dataFlowNodeId(node, cls - 2000, child) and extra = 0 - or - call = MkBoundCall(node, extra) and dataFlowNodeId(node, cls - 3000, child) - or - call = MkAccessorCall(node) and dataFlowNodeId(node, cls - 4000, child) and extra = 0 - ) - or - exists(Function f | - call = MkImpliedLambdaCall(f) and cls = 5000 and child = astNodeId(f) and extra = 0 - ) - or - exists( - FlowSummaryImpl::Public::SummarizedCallable c, FlowSummaryImpl::Private::SummaryNode receiver - | - call = MkSummaryCall(c, receiver) and - cls = 6000 and - c = rank[child](FlowSummaryImpl::Public::SummarizedCallable cs) and - extra = 0 - ) - } - - int libraryCallableId(LibraryCallable callable) { callable = rank[result](LibraryCallable c) } -} - class DataFlowCall extends TDataFlowCall { DataFlowCallable getEnclosingCallable() { none() } // Overridden in subclass @@ -861,15 +814,6 @@ class DataFlowCall extends TDataFlowCall { } Location getLocation() { none() } // Overridden in subclass - - int totalorder() { - this = - rank[result](DataFlowCall call, int x, int y, int z | - TotalOrdering::callId(call, x, y, z) - | - call order by x, y, z - ) - } } private class OrdinaryCall extends DataFlowCall, MkOrdinaryCall { @@ -1159,7 +1103,7 @@ private predicate legacyBarrier(DataFlow::Node node) { pragma[nomagic] private predicate isBlockedLegacyNode(Node node) { // Ignore captured variable nodes for those variables that are handled by the captured-variable library. - // Note that some variables, such as top-level variables, are still modelled with these nodes (which will result in jump steps). + // Note that some variables, such as top-level variables, are still modeled with these nodes (which will result in jump steps). exists(LocalVariable variable | node = TCapturedVariableNode(variable) and variable = any(VariableCaptureConfig::CapturedVariable v).asLocalVariable() @@ -1653,8 +1597,6 @@ abstract class NodeRegion extends Unit { /** Holds if this region contains `n`. */ predicate contains(Node n) { none() } - - int totalOrder() { none() } } /** diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll index 75f21bab38a..8edacdc2f0f 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll @@ -4,7 +4,7 @@ private import semmle.javascript.dataflow.internal.VariableOrThis private import codeql.dataflow.VariableCapture private import semmle.javascript.dataflow.internal.sharedlib.DataFlowImplCommon as DataFlowImplCommon -module VariableCaptureConfig implements InputSig { +module VariableCaptureConfig implements InputSig { private js::Function getLambdaFromVariable(js::LocalVariable variable) { result.getVariable() = variable or @@ -106,10 +106,8 @@ module VariableCaptureConfig implements InputSig { ) } - class ControlFlowNode = js::ControlFlowNode; - - class BasicBlock extends js::BasicBlock { - Callable getEnclosingCallable() { result = this.getContainer().getFunctionBoundary() } + Callable basicBlockGetEnclosingCallable(js::Cfg::BasicBlock bb) { + result = bb.getContainer().getFunctionBoundary() } class Callable extends js::StmtContainer { @@ -125,7 +123,7 @@ module VariableCaptureConfig implements InputSig { class Expr extends js::AST::ValueNode { /** Holds if the `i`th node of basic block `bb` evaluates this expression. */ - predicate hasCfgNode(BasicBlock bb, int i) { + predicate hasCfgNode(js::Cfg::BasicBlock bb, int i) { // Note: this is overridden for FunctionDeclStmt bb.getNode(i) = this } @@ -168,11 +166,11 @@ module VariableCaptureConfig implements InputSig { string toString() { none() } // Overridden in subclass - js::DbLocation getLocation() { none() } // Overridden in subclass + js::Location getLocation() { none() } // Overridden in subclass - predicate hasCfgNode(BasicBlock bb, int i) { none() } // Overridden in subclass + predicate hasCfgNode(js::Cfg::BasicBlock bb, int i) { none() } // Overridden in subclass - // note: langauge-specific + // note: language-specific js::DataFlow::Node getSource() { none() } // Overridden in subclass } @@ -186,7 +184,7 @@ module VariableCaptureConfig implements InputSig { override string toString() { result = pattern.toString() } /** Gets the location of this write. */ - override js::DbLocation getLocation() { result = pattern.getLocation() } + override js::Location getLocation() { result = pattern.getLocation() } override js::DataFlow::Node getSource() { // Note: there is not always an expression corresponding to the RHS of the assignment. @@ -207,7 +205,7 @@ module VariableCaptureConfig implements InputSig { } /** Holds if the `i`th node of basic block `bb` evaluates this expression. */ - override predicate hasCfgNode(BasicBlock bb, int i) { + override predicate hasCfgNode(js::Cfg::BasicBlock bb, int i) { bb.getNode(i) = this.getCfgNodeOverride() or not exists(this.getCfgNodeOverride()) and @@ -222,11 +220,11 @@ module VariableCaptureConfig implements InputSig { override string toString() { result = "[implicit init] " + variable } - override js::DbLocation getLocation() { result = variable.getLocation() } + override js::Location getLocation() { result = variable.getLocation() } override CapturedVariable getVariable() { result = variable } - override predicate hasCfgNode(BasicBlock bb, int i) { + override predicate hasCfgNode(js::Cfg::BasicBlock bb, int i) { // 'i' would normally be bound to 0, but we lower it to -1 so FunctionDeclStmts can be evaluated // at index 0. any(js::SsaImplicitInit def).definesAt(bb, _, variable.asLocalVariable()) and i = -1 @@ -234,15 +232,9 @@ module VariableCaptureConfig implements InputSig { bb.(js::EntryBasicBlock).getContainer() = variable.asThisContainer() and i = -1 } } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result = bb.getImmediateDominator() } - - predicate entryBlock(BasicBlock bb) { bb instanceof js::EntryBasicBlock } } -module VariableCaptureOutput = Flow; +module VariableCaptureOutput = Flow; js::DataFlow::Node getNodeFromClosureNode(VariableCaptureOutput::ClosureNode node) { result = TValueNode(node.(VariableCaptureOutput::ExprNode).getExpr()) @@ -288,9 +280,9 @@ private module Debug { relevantContainer(node1.getContainer()) } - predicate readBB(VariableRead read, BasicBlock bb, int i) { read.hasCfgNode(bb, i) } + predicate readBB(VariableRead read, js::Cfg::BasicBlock bb, int i) { read.hasCfgNode(bb, i) } - predicate writeBB(VariableWrite write, BasicBlock bb, int i) { write.hasCfgNode(bb, i) } + predicate writeBB(VariableWrite write, js::Cfg::BasicBlock bb, int i) { write.hasCfgNode(bb, i) } int captureDegree(js::Function fun) { result = strictcount(CapturedVariable v | captures(fun, v)) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll index 8309c0d639c..a517e0d91fd 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll @@ -25,7 +25,7 @@ class LocalVariableOrThis extends TLocalVariableOrThis { } /** Gets the location of a declaration of this variable, or the declaring container if this is `this`. */ - DbLocation getLocation() { + Location getLocation() { result = this.asLocalVariable().getLocation() or result = this.asThisContainer().getLocation() @@ -95,7 +95,7 @@ abstract class ThisUse instanceof ControlFlowNode { string toString() { result = super.toString() } /** Gets the location of this use of `this`. */ - DbLocation getLocation() { result = super.getLocation() } + Location getLocation() { result = super.getLocation() } } private predicate implicitThisUse(ControlFlowNode node, StmtContainer thisBinder) { diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll index eef4dc08318..7e610c3c23c 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll @@ -9,11 +9,7 @@ private import codeql.ssa.Ssa private import semmle.javascript.internal.BasicBlockInternal as BasicBlockInternal private import semmle.javascript.dataflow.internal.VariableOrThis -module SsaConfig implements InputSig { - class ControlFlowNode = js::ControlFlowNode; - - class BasicBlock = js::BasicBlock; - +module SsaConfig implements InputSig { class SourceVariable extends LocalVariableOrThis { SourceVariable() { not this.isCaptured() } } @@ -23,7 +19,7 @@ module SsaConfig implements InputSig { result.getContainer() = container } - predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableWrite(js::Cfg::BasicBlock bb, int i, SourceVariable v, boolean certain) { certain = true and ( bb.defAt(i, v.asLocalVariable(), _) @@ -34,20 +30,15 @@ module SsaConfig implements InputSig { ) } - predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableRead(js::Cfg::BasicBlock bb, int i, SourceVariable v, boolean certain) { bb.useAt(i, v.asLocalVariable(), _) and certain = true or certain = true and bb.getNode(i).(ThisUse).getBindingContainer() = v.asThisContainer() } - - predicate getImmediateBasicBlockDominator = BasicBlockInternal::immediateDominator/1; - - pragma[inline] - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } } -import Make +import Make module SsaDataflowInput implements DataFlowIntegrationInputSig { private import codeql.util.Boolean @@ -55,7 +46,7 @@ module SsaDataflowInput implements DataFlowIntegrationInputSig { class Expr extends js::ControlFlowNode { Expr() { this = any(SsaConfig::SourceVariable v).getAUse() } - predicate hasCfgNode(js::BasicBlock bb, int i) { this = bb.getNode(i) } + predicate hasCfgNode(js::Cfg::BasicBlock bb, int i) { this = bb.getNode(i) } } predicate ssaDefHasSource(WriteDefinition def) { @@ -82,7 +73,7 @@ module SsaDataflowInput implements DataFlowIntegrationInputSig { * Holds if the evaluation of this guard to `branch` corresponds to the edge * from `bb1` to `bb2`. */ - predicate hasValueBranchEdge(js::BasicBlock bb1, js::BasicBlock bb2, GuardValue branch) { + predicate hasValueBranchEdge(js::Cfg::BasicBlock bb1, js::Cfg::BasicBlock bb2, GuardValue branch) { exists(js::ConditionGuardNode g | g.getTest() = this and bb1 = this.getBasicBlock() and @@ -96,13 +87,15 @@ module SsaDataflowInput implements DataFlowIntegrationInputSig { * branch edge from `bb1` to `bb2`. That is, following the edge from * `bb1` to `bb2` implies that this guard evaluated to `branch`. */ - predicate valueControlsBranchEdge(js::BasicBlock bb1, js::BasicBlock bb2, GuardValue branch) { + predicate valueControlsBranchEdge( + js::Cfg::BasicBlock bb1, js::Cfg::BasicBlock bb2, GuardValue branch + ) { this.hasValueBranchEdge(bb1, bb2, branch) } } pragma[inline] - predicate guardDirectlyControlsBlock(Guard guard, js::BasicBlock bb, GuardValue branch) { + predicate guardDirectlyControlsBlock(Guard guard, js::Cfg::BasicBlock bb, GuardValue branch) { exists(js::ConditionGuardNode g | g.getTest() = guard and g.dominates(bb) and diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Babel.qll b/javascript/ql/lib/semmle/javascript/frameworks/Babel.qll index 4b3f70b7772..9ca47fb4727 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Babel.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Babel.qll @@ -141,16 +141,17 @@ module Babel { */ deprecated private class BabelRootTransformedPathExpr extends PathExpr, Expr { RootImportConfig plugin; - string prefix; string mappedPrefix; string suffix; BabelRootTransformedPathExpr() { this instanceof PathExpr and plugin.appliesTo(this.getTopLevel()) and - prefix = this.getStringValue().regexpCapture("(.)/(.*)", 1) and suffix = this.getStringValue().regexpCapture("(.)/(.*)", 2) and - mappedPrefix = plugin.getRoot(prefix) + exists(string prefix | + prefix = this.getStringValue().regexpCapture("(.)/(.*)", 1) and + mappedPrefix = plugin.getRoot(prefix) + ) } /** Gets the configuration that applies to this path. */ diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExtensions.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExtensions.qll index b86d7de457e..4969da43be3 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExtensions.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExtensions.qll @@ -4,7 +4,7 @@ /** * Holds if the value at `(type, path)` should be seen as a flow - * source of the given `kind`. + * source of the given `kind` and `madId` is the data extension row number. * * The kind `remote` represents a general remote flow source. */ @@ -14,13 +14,14 @@ extensible predicate sourceModel( /** * Holds if the value at `(type, path)` should be seen as a sink - * of the given `kind`. + * of the given `kind` and `madId` is the data extension row number. */ extensible predicate sinkModel(string type, string path, string kind, QlBuiltins::ExtensionId madId); /** * Holds if in calls to `(type, path)`, the value referred to by `input` - * can flow to the value referred to by `output`. + * can flow to the value referred to by `output` and `madId` is the data + * extension row number. * * `kind` should be either `value` or `taint`, for value-preserving or taint-preserving steps, * respectively. diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll index c61ecc138ef..f0d751ad31b 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -35,7 +35,7 @@ class Location = JS::Location; * Type names have form `package.type` or just `package` if referring to the package export * object. If `package` contains a `.` character it must be enclosed in single quotes, such as `'package'.type`. * - * A type name of form `(package)` may also be used when refering to the package export object. + * A type name of form `(package)` may also be used when referring to the package export object. * We allow this syntax as an alternative to the above, so models generated based on `EndpointNaming` look more consistent. * However, access paths are deliberately not parsed here, as we can not handle aliasing at this stage. * The model generator must explicitly generate the step between `(package)` and `(package).foo`, for example. diff --git a/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll b/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll index c7ad2a1ada8..d8e4a18dfc1 100644 --- a/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll +++ b/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll @@ -6,6 +6,7 @@ import javascript private import semmle.javascript.internal.StmtContainers private import semmle.javascript.internal.CachedStages +private import codeql.controlflow.BasicBlock as BB /** * Holds if `nd` starts a new basic block. @@ -67,11 +68,12 @@ private module Cached { } cached - predicate defAt(BasicBlock bb, int i, Variable v, VarDef d) { - exists(VarRef lhs | + predicate defAt(BasicBlock bb, int i, Variable v, VarDef d, VarRef lhs) { + ( lhs = d.getTarget().(BindingPattern).getABindingVarRef() and v = lhs.getVariable() - | + ) and + ( lhs = d.getTarget() and bbIndex(bb, d, i) or @@ -148,7 +150,10 @@ module Public { predicate useAt(int i, Variable v, VarUse u) { useAt(this, i, v, u) } /** Holds if this basic block defines variable `v` in its `i`th node `d`. */ - predicate defAt(int i, Variable v, VarDef d) { defAt(this, i, v, d) } + predicate defAt(int i, Variable v, VarDef d) { defAt(this, i, v, d, _) } + + /** Holds if this basic block defines variable `v` in its `i`th node `d`, and `lhs` is the corresponding variable reference. */ + predicate defAt(int i, Variable v, VarDef d, VarRef lhs) { defAt(this, i, v, d, lhs) } /** * Holds if `v` is live at entry to this basic block and `u` is a use of `v` @@ -362,4 +367,62 @@ module Public { ) } } + + final private class FinalBasicBlock = BasicBlock; + + module Cfg implements BB::CfgSig { + private import javascript as Js + private import codeql.controlflow.SuccessorType + + class ControlFlowNode = Js::ControlFlowNode; + + private predicate conditionSucc(BasicBlock bb1, BasicBlock bb2, boolean branch) { + exists(ConditionGuardNode g | + bb1 = g.getTest().getBasicBlock() and + bb2 = g.getBasicBlock() and + branch = g.getOutcome() + ) + } + + class BasicBlock extends FinalBasicBlock { + BasicBlock getASuccessor() { result = super.getASuccessor() } + + BasicBlock getASuccessor(SuccessorType t) { + conditionSucc(this, result, t.(BooleanSuccessor).getValue()) + or + result = super.getASuccessor() and + t instanceof DirectSuccessor and + not conditionSucc(this, result, _) + } + + predicate strictlyDominates(BasicBlock bb) { + this.(ReachableBasicBlock).strictlyDominates(bb) + } + + predicate dominates(BasicBlock bb) { this.(ReachableBasicBlock).dominates(bb) } + + predicate inDominanceFrontier(BasicBlock df) { + df.(ReachableJoinBlock).inDominanceFrontierOf(this) + } + + BasicBlock getImmediateDominator() { result = super.getImmediateDominator() } + + predicate strictlyPostDominates(BasicBlock bb) { + this.(ReachableBasicBlock).strictlyPostDominates(bb) + } + + predicate postDominates(BasicBlock bb) { this.(ReachableBasicBlock).postDominates(bb) } + } + + class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { entryBB(this) } + } + + pragma[nomagic] + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + bb1.getASuccessor() = bb2 and + bb1 = bb2.getImmediateDominator() and + forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred)) + } + } } diff --git a/javascript/ql/lib/semmle/javascript/internal/Locations.qll b/javascript/ql/lib/semmle/javascript/internal/Locations.qll deleted file mode 100644 index d1dc8d403f7..00000000000 --- a/javascript/ql/lib/semmle/javascript/internal/Locations.qll +++ /dev/null @@ -1,171 +0,0 @@ -/** Provides classes for working with locations and program elements that have locations. */ - -import javascript - -// Should _not_ be cached, as that would require the data flow stage to be evaluated -// in order to evaluate the AST stage. Ideally, we would cache each injector separately, -// but that's not possible. Instead, we cache all predicates that need the injectors -// to be tuple numbered. -newtype TLocation = - TDbLocation(@location loc) or - TSynthLocation(string filepath, int startline, int startcolumn, int endline, int endcolumn) { - any(SsaDefinition def).hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and - // avoid overlap with existing DB locations - not exists(File f | - locations_default(_, f, startline, startcolumn, endline, endcolumn) and - f.getAbsolutePath() = filepath - ) - } - -/** - * A location as given by a file, a start line, a start column, - * an end line, and an end column. - * - * For more information about locations see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ -abstract class LocationImpl extends TLocation { - /** Gets the file for this location. */ - abstract File getFile(); - - /** Gets the 1-based line number (inclusive) where this location starts. */ - abstract int getStartLine(); - - /** Gets the 1-based column number (inclusive) where this location starts. */ - abstract int getStartColumn(); - - /** Gets the 1-based line number (inclusive) where this location ends. */ - abstract int getEndLine(); - - /** Gets the 1-based column number (inclusive) where this location ends. */ - abstract int getEndColumn(); - - /** Gets the number of lines covered by this location. */ - int getNumLines() { result = this.getEndLine() - this.getStartLine() + 1 } - - /** Holds if this location starts before location `that`. */ - pragma[inline] - predicate startsBefore(Location that) { - exists(string f, int sl1, int sc1, int sl2, int sc2 | - this.hasLocationInfo(f, sl1, sc1, _, _) and - that.hasLocationInfo(f, sl2, sc2, _, _) - | - sl1 < sl2 - or - sl1 = sl2 and sc1 < sc2 - ) - } - - /** Holds if this location ends after location `that`. */ - pragma[inline] - predicate endsAfter(Location that) { - exists(string f, int el1, int ec1, int el2, int ec2 | - this.hasLocationInfo(f, _, _, el1, ec1) and - that.hasLocationInfo(f, _, _, el2, ec2) - | - el1 > el2 - or - el1 = el2 and ec1 > ec2 - ) - } - - /** - * Holds if this location contains location `that`, meaning that it starts - * before and ends after it. - */ - predicate contains(Location that) { this.startsBefore(that) and this.endsAfter(that) } - - /** Holds if this location is empty. */ - predicate isEmpty() { exists(int l, int c | this.hasLocationInfo(_, l, c, l, c - 1)) } - - /** Gets a textual representation of this element. */ - string toString() { result = this.getFile().getBaseName() + ":" + this.getStartLine().toString() } - - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - abstract predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ); -} - -class DbLocationImpl extends LocationImpl instanceof DbLocation { - override File getFile() { result = DbLocation.super.getFile() } - - override int getStartLine() { result = DbLocation.super.getStartLine() } - - override int getStartColumn() { result = DbLocation.super.getStartColumn() } - - override int getEndLine() { result = DbLocation.super.getEndLine() } - - override int getEndColumn() { result = DbLocation.super.getEndColumn() } - - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - DbLocation.super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } -} - -class SynthLocationImpl extends LocationImpl, TSynthLocation { - override File getFile() { synthLocationInfo(this, result.getAbsolutePath(), _, _, _, _) } - - override int getStartLine() { synthLocationInfo(this, _, result, _, _, _) } - - override int getStartColumn() { synthLocationInfo(this, _, _, result, _, _) } - - override int getEndLine() { synthLocationInfo(this, _, _, _, result, _) } - - override int getEndColumn() { synthLocationInfo(this, _, _, _, _, result) } - - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - synthLocationInfo(this, filepath, startline, startcolumn, endline, endcolumn) - } -} - -cached -private module Cached { - cached - DbLocation getLocatableLocation(@locatable l) { - exists(@location loc | - hasLocation(l, loc) or - xmllocations(l, loc) or - json_locations(l, loc) or - yaml_locations(l, loc) - | - result = TDbLocation(loc) - ) - } - - cached - predicate dbLocationInfo( - DbLocation l, File f, int startline, int startcolumn, int endline, int endcolumn - ) { - exists(@location loc | - l = TDbLocation(loc) and - locations_default(loc, f, startline, startcolumn, endline, endcolumn) - ) - } -} - -import Cached - -cached -private module CachedInDataFlowStage { - private import semmle.javascript.internal.CachedStages - - cached - predicate synthLocationInfo( - SynthLocationImpl l, string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - Stages::DataFlowStage::ref() and - l = TSynthLocation(filepath, startline, startcolumn, endline, endcolumn) - } -} - -private import CachedInDataFlowStage diff --git a/javascript/ql/lib/semmle/javascript/internal/Overlay.qll b/javascript/ql/lib/semmle/javascript/internal/Overlay.qll new file mode 100644 index 00000000000..a20ac1868e6 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/internal/Overlay.qll @@ -0,0 +1,30 @@ +private import javascript + +/** Holds if the database is an overlay. */ +overlay[local] +private predicate isOverlay() { databaseMetadata("isOverlay", "true") } + +overlay[local] +private string getFileFromEntity(@locatable node) { + exists(@location loc, @file file | + hasLocation(node, loc) and + locations_default(loc, file, _, _, _, _) and + files(file, result) + ) +} + +/** Holds if `file` was changed or deleted in the overlay. */ +overlay[local] +private predicate discardFile(string file) { isOverlay() and overlayChangedFiles(file) } + +/** Holds if `node` is in the `file` and is part of the overlay base database. */ +overlay[local] +private predicate discardableEntity(string file, @locatable node) { + not isOverlay() and file = getFileFromEntity(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 discardEntity(@locatable node) { + exists(string file | discardableEntity(file, node) and discardFile(file)) +} diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Arrays.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Arrays.qll index 00fed9c4f09..b5696837781 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Arrays.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Arrays.qll @@ -1,7 +1,7 @@ /** * Contains a summary for relevant methods on arrays. * - * Note that some of Array methods are modelled in `AmbiguousCoreMethods.qll`, and `toString` is special-cased elsewhere. + * Note that some of Array methods are modeled in `AmbiguousCoreMethods.qll`, and `toString` is special-cased elsewhere. */ private import javascript @@ -60,7 +60,7 @@ private predicate isForLoopVariable(Variable v) { private predicate isLikelyArrayIndex(Expr e) { // Require that 'e' is of type number and refers to a for-loop variable. - // TODO: This is here to mirror the old behaviour. Experiment with turning the 'and' into an 'or'. + // TODO: This is here to mirror the old behavior. Experiment with turning the 'and' into an 'or'. TTNumber() = unique(InferredType type | type = e.flow().analyze().getAType()) and isForLoopVariable(e.(VarAccess).getVariable()) or @@ -114,7 +114,7 @@ class ArrayConstructorSummary extends SummarizedCallable { /** * A call to `join` with a separator argument. * - * Calls without separators are modelled in `StringConcatenation.qll`. + * Calls without separators are modeled in `StringConcatenation.qll`. */ class Join extends SummarizedCallable { Join() { this = "Array#join" } diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AsyncAwait.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AsyncAwait.qll index a39b0e6f43d..246ac0f19d0 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AsyncAwait.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AsyncAwait.qll @@ -8,7 +8,7 @@ private import semmle.javascript.dataflow.internal.AdditionalFlowInternal private import semmle.javascript.dataflow.internal.DataFlowPrivate /** - * Steps modelling flow in an `async` function. + * Steps modeling flow in an `async` function. * * Note about promise-coercion and flattening: * - `await` preserves non-promise values, e.g. `await "foo"` is just `"foo"`. diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Generators.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Generators.qll index e187b5751cf..75815d00341 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Generators.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Generators.qll @@ -7,7 +7,7 @@ private import semmle.javascript.dataflow.internal.DataFlowNode private import semmle.javascript.dataflow.internal.AdditionalFlowInternal /** - * Steps modelling flow out of a generator function: + * Steps modeling flow out of a generator function: * ```js * function* foo() { * yield x; // store 'x' in the return value's IteratorElement diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Iterators.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Iterators.qll index e9937363c01..6b1a182a49b 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Iterators.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Iterators.qll @@ -1,5 +1,5 @@ /** - * Contains flow summaries and steps modelling flow through iterators. + * Contains flow summaries and steps modeling flow through iterators. */ private import javascript diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Maps.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Maps.qll index 61cc1d148c6..d9649d407c6 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Maps.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Maps.qll @@ -1,5 +1,5 @@ /** - * Contains flow summaries and steps modelling flow through `Map` objects. + * Contains flow summaries and steps modeling flow through `Map` objects. */ private import javascript diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Promises.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Promises.qll index 1122c38320a..7587ab11dc4 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Promises.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Promises.qll @@ -1,5 +1,5 @@ /** - * Contains flow summaries and steps modelling flow through `Promise` objects. + * Contains flow summaries and steps modeling flow through `Promise` objects. */ private import javascript diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Sets.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Sets.qll index 34f7d222df8..6b4f089b38e 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Sets.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Sets.qll @@ -1,5 +1,5 @@ /** - * Contains flow summaries and steps modelling flow through `Set` objects. + * Contains flow summaries and steps modeling flow through `Set` objects. */ private import javascript diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Strings.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Strings.qll index d18e2181965..bf9442219a7 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Strings.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Strings.qll @@ -1,5 +1,5 @@ /** - * Contains flow summaries and steps modelling flow through string methods. + * Contains flow summaries and steps modeling flow through string methods. */ private import javascript @@ -73,7 +73,7 @@ class StringSplit extends SummarizedCallable { * These are of special significance when tracking a tainted URL suffix, such as `window.location.href`, * because the first element of the resulting array should not be considered tainted. * - * This summary defaults to the same behaviour as the general `.split()` case, but it contains optional steps + * This summary defaults to the same behavior as the general `.split()` case, but it contains optional steps * and barriers named `tainted-url-suffix` that should be activated when tracking a tainted URL suffix. */ class StringSplitHashOrQuestionMark extends SummarizedCallable { diff --git a/javascript/ql/lib/semmle/javascript/security/TaintedUrlSuffixCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/TaintedUrlSuffixCustomizations.qll index d4bce73be19..841f830f2bf 100644 --- a/javascript/ql/lib/semmle/javascript/security/TaintedUrlSuffixCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/TaintedUrlSuffixCustomizations.qll @@ -76,7 +76,7 @@ module TaintedUrlSuffix { // // x [tainted-url-suffix] --> x.split('#') [array element 1] [taint] // - // Technically we should also preverse tainted-url-suffix when entering the first array element of such + // Technically we should also preserve tainted-url-suffix when entering the first array element of such // a split, but this mostly leads to FPs since we currently don't track if the taint has been through URI-decoding. // (The query/fragment parts are often URI-decoded in practice, but not the other URL parts are not) state1.isTaintedUrlSuffix() and diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/RemotePropertyInjectionQuery.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/RemotePropertyInjectionQuery.qll index 8f1f174d8ec..f338651b63d 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/RemotePropertyInjectionQuery.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/RemotePropertyInjectionQuery.qll @@ -10,6 +10,7 @@ import javascript import RemotePropertyInjectionCustomizations::RemotePropertyInjection +private import semmle.javascript.DynamicPropertyAccess /** * A taint-tracking configuration for reasoning about remote property injection. @@ -24,6 +25,10 @@ module RemotePropertyInjectionConfig implements DataFlow::ConfigSig { node = StringConcatenation::getRoot(any(ConstantString str).flow()) } + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1 = node2.(EnumeratedPropName).getSourceObject() + } + predicate observeDiffInformedIncrementalMode() { any() } } diff --git a/javascript/ql/lib/semmlecode.javascript.dbscheme b/javascript/ql/lib/semmlecode.javascript.dbscheme index ccefb5e2d49..76a926a00d5 100644 --- a/javascript/ql/lib/semmlecode.javascript.dbscheme +++ b/javascript/ql/lib/semmlecode.javascript.dbscheme @@ -1192,3 +1192,13 @@ configLocations( ); @configLocatable = @config | @configName | @configValue; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); diff --git a/javascript/ql/lib/semmlecode.javascript.dbscheme.stats b/javascript/ql/lib/semmlecode.javascript.dbscheme.stats index 51889bd9286..eee67ae3e4f 100644 --- a/javascript/ql/lib/semmlecode.javascript.dbscheme.stats +++ b/javascript/ql/lib/semmlecode.javascript.dbscheme.stats @@ -28260,5 +28260,52 @@ + +databaseMetadata +1 + + +metadataKey +1 + + +value +1 + + + + +metadataKey +value + + +12 + + + + + +value +metadataKey + + +12 + + + + + + + +overlayChangedFiles +50 + + +path +50 + + + + diff --git a/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/old.dbscheme b/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/old.dbscheme new file mode 100644 index 00000000000..ccefb5e2d49 --- /dev/null +++ b/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/old.dbscheme @@ -0,0 +1,1194 @@ +/*** Standard fragments ***/ + +/*- 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 +); + +/*- 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); + +/*- JavaScript-specific part -*/ + +@location = @location_default + +@sourceline = @locatable; + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +| 40 = @using_decl_stmt +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt | @using_decl_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +| 121 = @satisfies_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@type_keyword_operand = @import_declaration | @export_declaration | @import_specifier; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +| 10 = @static_initializer +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @type_keyword_operand ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference | @external_module_declaration; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal | @add_expr; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape +| 28 = @regexp_quoted_string +| 29 = @regexp_intersection +| 30 = @regexp_subtraction; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_identifier_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +| 15 = @jsdoc_qualified_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** +* Non-timing related data for the extraction of a single file. +* This table contains non-deterministic content. +*/ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) + +/*- 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; + +/*- 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; + +/*- Configuration files with key value pairs -*/ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; diff --git a/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/semmlecode.javascript.dbscheme b/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/semmlecode.javascript.dbscheme new file mode 100644 index 00000000000..76a926a00d5 --- /dev/null +++ b/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/semmlecode.javascript.dbscheme @@ -0,0 +1,1204 @@ +/*** Standard fragments ***/ + +/*- 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 +); + +/*- 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); + +/*- JavaScript-specific part -*/ + +@location = @location_default + +@sourceline = @locatable; + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +| 40 = @using_decl_stmt +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt | @using_decl_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +| 121 = @satisfies_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@type_keyword_operand = @import_declaration | @export_declaration | @import_specifier; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +| 10 = @static_initializer +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @type_keyword_operand ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference | @external_module_declaration; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal | @add_expr; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape +| 28 = @regexp_quoted_string +| 29 = @regexp_intersection +| 30 = @regexp_subtraction; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_identifier_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +| 15 = @jsdoc_qualified_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** +* Non-timing related data for the extraction of a single file. +* This table contains non-deterministic content. +*/ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) + +/*- 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; + +/*- 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; + +/*- Configuration files with key value pairs -*/ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); diff --git a/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/upgrade.properties b/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/upgrade.properties new file mode 100644 index 00000000000..4ff972031d7 --- /dev/null +++ b/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/upgrade.properties @@ -0,0 +1,2 @@ +description: add overlay relations +compatibility: full diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index ce2c8bacbb3..ab471438cb1 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.3 + +No user-facing changes. + ## 2.0.2 ### Minor Analysis Improvements diff --git a/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql b/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql index 912d58ab54c..0088af1a2c0 100644 --- a/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql +++ b/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql @@ -46,9 +46,7 @@ string getKind(MemberDeclaration m) { * A call-signature that originates from a MethodSignature in the AST. */ private class MethodCallSig extends Function { - private MethodSignature signature; - - MethodCallSig() { this = signature.getBody() } + MethodCallSig() { this = any(MethodSignature signature).getBody() } int getNumOptionalParameter() { result = count(Parameter p | p = this.getParameter(_) and p.isDeclaredOptional()) diff --git a/javascript/ql/src/change-notes/2025-08-27-remote-property-injection-update.md b/javascript/ql/src/change-notes/2025-08-27-remote-property-injection-update.md new file mode 100644 index 00000000000..17fe6123cce --- /dev/null +++ b/javascript/ql/src/change-notes/2025-08-27-remote-property-injection-update.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The query `js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as `Object.keys()`. \ No newline at end of file diff --git a/javascript/ql/src/change-notes/released/2.0.3.md b/javascript/ql/src/change-notes/released/2.0.3.md new file mode 100644 index 00000000000..7bd669821d5 --- /dev/null +++ b/javascript/ql/src/change-notes/released/2.0.3.md @@ -0,0 +1,3 @@ +## 2.0.3 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 81c7f1dbc13..fabf1e86596 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.2 +lastReleaseVersion: 2.0.3 diff --git a/javascript/ql/src/experimental/Security/CWE-918/SSRF.js b/javascript/ql/src/experimental/Security/CWE-918/SSRF.js index e39e9760441..7e47b6dfd17 100644 --- a/javascript/ql/src/experimental/Security/CWE-918/SSRF.js +++ b/javascript/ql/src/experimental/Security/CWE-918/SSRF.js @@ -1,7 +1,7 @@ const axios = require('axios'); export const handler = async (req, res, next) => { - const { target } = req.body; + const { target } = req.body; try { // BAD: `target` is controlled by the attacker diff --git a/javascript/ql/src/experimental/Security/CWE-918/SSRFGood.js b/javascript/ql/src/experimental/Security/CWE-918/SSRFGood.js index 10ab26e607b..e91c1131338 100644 --- a/javascript/ql/src/experimental/Security/CWE-918/SSRFGood.js +++ b/javascript/ql/src/experimental/Security/CWE-918/SSRFGood.js @@ -2,7 +2,7 @@ const axios = require('axios'); const validator = require('validator'); export const handler = async (req, res, next) => { - const { target } = req.body; + const { target } = req.body; if (!validator.isAlphanumeric(target)) { return next(new Error('Bad request')); diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 14a9ceb6a30..b754f04005d 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 2.0.3-dev +version: 2.0.4-dev groups: - javascript - queries diff --git a/javascript/ql/test/experimental/FormParsers/RemoteFlowSource.expected b/javascript/ql/test/experimental/FormParsers/RemoteFlowSource.expected index 4cd0cf23378..1d53bbb1b25 100644 --- a/javascript/ql/test/experimental/FormParsers/RemoteFlowSource.expected +++ b/javascript/ql/test/experimental/FormParsers/RemoteFlowSource.expected @@ -1,17 +1,17 @@ edges | busybus.js:9:30:9:33 | file | busybus.js:13:23:13:23 | z | provenance | | | busybus.js:9:36:9:39 | info | busybus.js:10:54:10:57 | info | provenance | | -| busybus.js:10:19:10:50 | { filen ... eType } | busybus.js:10:19:10:57 | encoding | provenance | | -| busybus.js:10:19:10:50 | { filen ... eType } | busybus.js:10:19:10:57 | filename | provenance | | -| busybus.js:10:19:10:50 | { filen ... eType } | busybus.js:10:19:10:57 | mimeType | provenance | | -| busybus.js:10:19:10:57 | encoding | busybus.js:12:28:12:35 | encoding | provenance | | -| busybus.js:10:19:10:57 | filename | busybus.js:12:18:12:25 | filename | provenance | | -| busybus.js:10:19:10:57 | mimeType | busybus.js:12:38:12:45 | mimeType | provenance | | +| busybus.js:10:19:10:50 | { filen ... eType } | busybus.js:10:21:10:28 | filename | provenance | | +| busybus.js:10:19:10:50 | { filen ... eType } | busybus.js:10:31:10:38 | encoding | provenance | | +| busybus.js:10:19:10:50 | { filen ... eType } | busybus.js:10:41:10:48 | mimeType | provenance | | +| busybus.js:10:21:10:28 | filename | busybus.js:12:18:12:25 | filename | provenance | | +| busybus.js:10:31:10:38 | encoding | busybus.js:12:28:12:35 | encoding | provenance | | +| busybus.js:10:41:10:48 | mimeType | busybus.js:12:38:12:45 | mimeType | provenance | | | busybus.js:10:54:10:57 | info | busybus.js:10:19:10:50 | { filen ... eType } | provenance | | | busybus.js:13:23:13:23 | z | busybus.js:13:31:13:36 | sink() | provenance | | | busybus.js:15:30:15:33 | data | busybus.js:16:22:16:25 | data | provenance | | -| busybus.js:22:25:22:42 | data | busybus.js:23:26:23:29 | data | provenance | | -| busybus.js:22:32:22:42 | this.read() | busybus.js:22:25:22:42 | data | provenance | | +| busybus.js:22:25:22:28 | data | busybus.js:23:26:23:29 | data | provenance | | +| busybus.js:22:32:22:42 | this.read() | busybus.js:22:25:22:28 | data | provenance | | | busybus.js:27:25:27:28 | name | busybus.js:28:18:28:21 | name | provenance | | | busybus.js:27:31:27:33 | val | busybus.js:28:24:28:26 | val | provenance | | | busybus.js:27:36:27:39 | info | busybus.js:28:29:28:32 | info | provenance | | @@ -19,10 +19,10 @@ edges | dicer.js:14:28:14:33 | header | dicer.js:16:22:16:27 | header | provenance | | | dicer.js:16:22:16:27 | header | dicer.js:16:22:16:30 | header[h] | provenance | | | dicer.js:19:26:19:29 | data | dicer.js:20:18:20:21 | data | provenance | | -| formidable.js:7:11:7:25 | [fields, files] | formidable.js:7:11:7:49 | fields | provenance | | -| formidable.js:7:11:7:25 | [fields, files] | formidable.js:7:11:7:49 | files | provenance | | -| formidable.js:7:11:7:49 | fields | formidable.js:8:10:8:15 | fields | provenance | | -| formidable.js:7:11:7:49 | files | formidable.js:8:18:8:22 | files | provenance | | +| formidable.js:7:11:7:25 | [fields, files] | formidable.js:7:12:7:17 | fields | provenance | | +| formidable.js:7:11:7:25 | [fields, files] | formidable.js:7:20:7:24 | files | provenance | | +| formidable.js:7:12:7:17 | fields | formidable.js:8:10:8:15 | fields | provenance | | +| formidable.js:7:20:7:24 | files | formidable.js:8:18:8:22 | files | provenance | | | formidable.js:7:29:7:49 | await f ... se(req) | formidable.js:7:11:7:25 | [fields, files] | provenance | | | formidable.js:7:35:7:49 | form.parse(req) | formidable.js:7:29:7:49 | await f ... se(req) | provenance | | | formidable.js:9:27:9:34 | formname | formidable.js:10:14:10:21 | formname | provenance | | @@ -39,9 +39,9 @@ nodes | busybus.js:9:30:9:33 | file | semmle.label | file | | busybus.js:9:36:9:39 | info | semmle.label | info | | busybus.js:10:19:10:50 | { filen ... eType } | semmle.label | { filen ... eType } | -| busybus.js:10:19:10:57 | encoding | semmle.label | encoding | -| busybus.js:10:19:10:57 | filename | semmle.label | filename | -| busybus.js:10:19:10:57 | mimeType | semmle.label | mimeType | +| busybus.js:10:21:10:28 | filename | semmle.label | filename | +| busybus.js:10:31:10:38 | encoding | semmle.label | encoding | +| busybus.js:10:41:10:48 | mimeType | semmle.label | mimeType | | busybus.js:10:54:10:57 | info | semmle.label | info | | busybus.js:12:18:12:25 | filename | semmle.label | filename | | busybus.js:12:28:12:35 | encoding | semmle.label | encoding | @@ -50,7 +50,7 @@ nodes | busybus.js:13:31:13:36 | sink() | semmle.label | sink() | | busybus.js:15:30:15:33 | data | semmle.label | data | | busybus.js:16:22:16:25 | data | semmle.label | data | -| busybus.js:22:25:22:42 | data | semmle.label | data | +| busybus.js:22:25:22:28 | data | semmle.label | data | | busybus.js:22:32:22:42 | this.read() | semmle.label | this.read() | | busybus.js:23:26:23:29 | data | semmle.label | data | | busybus.js:27:25:27:28 | name | semmle.label | name | @@ -67,8 +67,8 @@ nodes | dicer.js:19:26:19:29 | data | semmle.label | data | | dicer.js:20:18:20:21 | data | semmle.label | data | | formidable.js:7:11:7:25 | [fields, files] | semmle.label | [fields, files] | -| formidable.js:7:11:7:49 | fields | semmle.label | fields | -| formidable.js:7:11:7:49 | files | semmle.label | files | +| formidable.js:7:12:7:17 | fields | semmle.label | fields | +| formidable.js:7:20:7:24 | files | semmle.label | files | | formidable.js:7:29:7:49 | await f ... se(req) | semmle.label | await f ... se(req) | | formidable.js:7:35:7:49 | form.parse(req) | semmle.label | form.parse(req) | | formidable.js:8:10:8:15 | fields | semmle.label | fields | diff --git a/javascript/ql/test/experimental/Security/CWE-094-dataURL/CodeInjection.expected b/javascript/ql/test/experimental/Security/CWE-094-dataURL/CodeInjection.expected index ab162e0b311..0385389e73c 100644 --- a/javascript/ql/test/experimental/Security/CWE-094-dataURL/CodeInjection.expected +++ b/javascript/ql/test/experimental/Security/CWE-094-dataURL/CodeInjection.expected @@ -1,33 +1,33 @@ edges -| test.js:5:11:5:44 | payload | test.js:6:30:6:36 | payload | provenance | | -| test.js:5:11:5:44 | payload | test.js:9:26:9:32 | payload | provenance | | -| test.js:5:21:5:44 | req.que ... rameter | test.js:5:11:5:44 | payload | provenance | | -| test.js:6:9:6:43 | payloadURL | test.js:7:16:7:25 | payloadURL | provenance | | -| test.js:6:22:6:43 | new URL ... + sth) | test.js:6:9:6:43 | payloadURL | provenance | | +| test.js:5:11:5:17 | payload | test.js:6:30:6:36 | payload | provenance | | +| test.js:5:11:5:17 | payload | test.js:9:26:9:32 | payload | provenance | | +| test.js:5:21:5:44 | req.que ... rameter | test.js:5:11:5:17 | payload | provenance | | +| test.js:6:9:6:18 | payloadURL | test.js:7:16:7:25 | payloadURL | provenance | | +| test.js:6:22:6:43 | new URL ... + sth) | test.js:6:9:6:18 | payloadURL | provenance | | | test.js:6:30:6:36 | payload | test.js:6:30:6:42 | payload + sth | provenance | | | test.js:6:30:6:42 | payload + sth | test.js:6:22:6:43 | new URL ... + sth) | provenance | Config | -| test.js:9:5:9:39 | payloadURL | test.js:10:16:10:25 | payloadURL | provenance | | -| test.js:9:18:9:39 | new URL ... + sth) | test.js:9:5:9:39 | payloadURL | provenance | | +| test.js:9:5:9:14 | payloadURL | test.js:10:16:10:25 | payloadURL | provenance | | +| test.js:9:18:9:39 | new URL ... + sth) | test.js:9:5:9:14 | payloadURL | provenance | | | test.js:9:26:9:32 | payload | test.js:9:26:9:38 | payload + sth | provenance | | | test.js:9:26:9:38 | payload + sth | test.js:9:18:9:39 | new URL ... + sth) | provenance | Config | -| test.js:17:11:17:44 | payload | test.js:18:18:18:24 | payload | provenance | | -| test.js:17:11:17:44 | payload | test.js:19:18:19:24 | payload | provenance | | -| test.js:17:21:17:44 | req.que ... rameter | test.js:17:11:17:44 | payload | provenance | | +| test.js:17:11:17:17 | payload | test.js:18:18:18:24 | payload | provenance | | +| test.js:17:11:17:17 | payload | test.js:19:18:19:24 | payload | provenance | | +| test.js:17:21:17:44 | req.que ... rameter | test.js:17:11:17:17 | payload | provenance | | | test.js:19:18:19:24 | payload | test.js:19:18:19:30 | payload + sth | provenance | | nodes -| test.js:5:11:5:44 | payload | semmle.label | payload | +| test.js:5:11:5:17 | payload | semmle.label | payload | | test.js:5:21:5:44 | req.que ... rameter | semmle.label | req.que ... rameter | -| test.js:6:9:6:43 | payloadURL | semmle.label | payloadURL | +| test.js:6:9:6:18 | payloadURL | semmle.label | payloadURL | | test.js:6:22:6:43 | new URL ... + sth) | semmle.label | new URL ... + sth) | | test.js:6:30:6:36 | payload | semmle.label | payload | | test.js:6:30:6:42 | payload + sth | semmle.label | payload + sth | | test.js:7:16:7:25 | payloadURL | semmle.label | payloadURL | -| test.js:9:5:9:39 | payloadURL | semmle.label | payloadURL | +| test.js:9:5:9:14 | payloadURL | semmle.label | payloadURL | | test.js:9:18:9:39 | new URL ... + sth) | semmle.label | new URL ... + sth) | | test.js:9:26:9:32 | payload | semmle.label | payload | | test.js:9:26:9:38 | payload + sth | semmle.label | payload + sth | | test.js:10:16:10:25 | payloadURL | semmle.label | payloadURL | -| test.js:17:11:17:44 | payload | semmle.label | payload | +| test.js:17:11:17:17 | payload | semmle.label | payload | | test.js:17:21:17:44 | req.que ... rameter | semmle.label | req.que ... rameter | | test.js:18:18:18:24 | payload | semmle.label | payload | | test.js:19:18:19:24 | payload | semmle.label | payload | diff --git a/javascript/ql/test/experimental/Security/CWE-099/EnvValueAndKeyInjection/EnvValueAndKeyInjection.expected b/javascript/ql/test/experimental/Security/CWE-099/EnvValueAndKeyInjection/EnvValueAndKeyInjection.expected index 40313cf964c..d54685c97be 100644 --- a/javascript/ql/test/experimental/Security/CWE-099/EnvValueAndKeyInjection/EnvValueAndKeyInjection.expected +++ b/javascript/ql/test/experimental/Security/CWE-099/EnvValueAndKeyInjection/EnvValueAndKeyInjection.expected @@ -1,28 +1,28 @@ edges -| test.js:5:9:5:28 | { EnvValue, EnvKey } | test.js:5:9:5:39 | EnvKey | provenance | | -| test.js:5:9:5:28 | { EnvValue, EnvKey } | test.js:5:9:5:39 | EnvValue | provenance | | -| test.js:5:9:5:39 | EnvKey | test.js:6:15:6:20 | EnvKey | provenance | | -| test.js:5:9:5:39 | EnvKey | test.js:7:15:7:20 | EnvKey | provenance | | -| test.js:5:9:5:39 | EnvValue | test.js:6:25:6:32 | EnvValue | provenance | | -| test.js:5:9:5:39 | EnvValue | test.js:7:25:7:32 | EnvValue | provenance | | +| test.js:5:9:5:28 | { EnvValue, EnvKey } | test.js:5:11:5:18 | EnvValue | provenance | | +| test.js:5:9:5:28 | { EnvValue, EnvKey } | test.js:5:21:5:26 | EnvKey | provenance | | +| test.js:5:11:5:18 | EnvValue | test.js:6:25:6:32 | EnvValue | provenance | | +| test.js:5:11:5:18 | EnvValue | test.js:7:25:7:32 | EnvValue | provenance | | +| test.js:5:21:5:26 | EnvKey | test.js:6:15:6:20 | EnvKey | provenance | | +| test.js:5:21:5:26 | EnvKey | test.js:7:15:7:20 | EnvKey | provenance | | | test.js:5:32:5:39 | req.body | test.js:5:9:5:28 | { EnvValue, EnvKey } | provenance | | -| test.js:13:9:13:28 | { EnvValue, EnvKey } | test.js:13:9:13:39 | EnvKey | provenance | | -| test.js:13:9:13:28 | { EnvValue, EnvKey } | test.js:13:9:13:39 | EnvValue | provenance | | -| test.js:13:9:13:39 | EnvKey | test.js:15:15:15:20 | EnvKey | provenance | | -| test.js:13:9:13:39 | EnvValue | test.js:16:26:16:33 | EnvValue | provenance | | +| test.js:13:9:13:28 | { EnvValue, EnvKey } | test.js:13:11:13:18 | EnvValue | provenance | | +| test.js:13:9:13:28 | { EnvValue, EnvKey } | test.js:13:21:13:26 | EnvKey | provenance | | +| test.js:13:11:13:18 | EnvValue | test.js:16:26:16:33 | EnvValue | provenance | | +| test.js:13:21:13:26 | EnvKey | test.js:15:15:15:20 | EnvKey | provenance | | | test.js:13:32:13:39 | req.body | test.js:13:9:13:28 | { EnvValue, EnvKey } | provenance | | nodes | test.js:5:9:5:28 | { EnvValue, EnvKey } | semmle.label | { EnvValue, EnvKey } | -| test.js:5:9:5:39 | EnvKey | semmle.label | EnvKey | -| test.js:5:9:5:39 | EnvValue | semmle.label | EnvValue | +| test.js:5:11:5:18 | EnvValue | semmle.label | EnvValue | +| test.js:5:21:5:26 | EnvKey | semmle.label | EnvKey | | test.js:5:32:5:39 | req.body | semmle.label | req.body | | test.js:6:15:6:20 | EnvKey | semmle.label | EnvKey | | test.js:6:25:6:32 | EnvValue | semmle.label | EnvValue | | test.js:7:15:7:20 | EnvKey | semmle.label | EnvKey | | test.js:7:25:7:32 | EnvValue | semmle.label | EnvValue | | test.js:13:9:13:28 | { EnvValue, EnvKey } | semmle.label | { EnvValue, EnvKey } | -| test.js:13:9:13:39 | EnvKey | semmle.label | EnvKey | -| test.js:13:9:13:39 | EnvValue | semmle.label | EnvValue | +| test.js:13:11:13:18 | EnvValue | semmle.label | EnvValue | +| test.js:13:21:13:26 | EnvKey | semmle.label | EnvKey | | test.js:13:32:13:39 | req.body | semmle.label | req.body | | test.js:15:15:15:20 | EnvKey | semmle.label | EnvKey | | test.js:16:26:16:33 | EnvValue | semmle.label | EnvValue | diff --git a/javascript/ql/test/experimental/Security/CWE-099/EnvValueInjection/EnvValueInjection.expected b/javascript/ql/test/experimental/Security/CWE-099/EnvValueInjection/EnvValueInjection.expected index 87f6e5d4b86..5ba1884017f 100644 --- a/javascript/ql/test/experimental/Security/CWE-099/EnvValueInjection/EnvValueInjection.expected +++ b/javascript/ql/test/experimental/Security/CWE-099/EnvValueInjection/EnvValueInjection.expected @@ -1,12 +1,12 @@ edges -| test.js:4:9:4:20 | { EnvValue } | test.js:4:9:4:31 | EnvValue | provenance | | -| test.js:4:9:4:31 | EnvValue | test.js:5:35:5:42 | EnvValue | provenance | | -| test.js:4:9:4:31 | EnvValue | test.js:6:23:6:30 | EnvValue | provenance | | -| test.js:4:9:4:31 | EnvValue | test.js:7:22:7:29 | EnvValue | provenance | | +| test.js:4:9:4:20 | { EnvValue } | test.js:4:11:4:18 | EnvValue | provenance | | +| test.js:4:11:4:18 | EnvValue | test.js:5:35:5:42 | EnvValue | provenance | | +| test.js:4:11:4:18 | EnvValue | test.js:6:23:6:30 | EnvValue | provenance | | +| test.js:4:11:4:18 | EnvValue | test.js:7:22:7:29 | EnvValue | provenance | | | test.js:4:24:4:31 | req.body | test.js:4:9:4:20 | { EnvValue } | provenance | | nodes | test.js:4:9:4:20 | { EnvValue } | semmle.label | { EnvValue } | -| test.js:4:9:4:31 | EnvValue | semmle.label | EnvValue | +| test.js:4:11:4:18 | EnvValue | semmle.label | EnvValue | | test.js:4:24:4:31 | req.body | semmle.label | req.body | | test.js:5:35:5:42 | EnvValue | semmle.label | EnvValue | | test.js:6:23:6:30 | EnvValue | semmle.label | EnvValue | diff --git a/javascript/ql/test/experimental/Security/CWE-347/localsource/decodeJwtWithoutVerificationLocalSource.expected b/javascript/ql/test/experimental/Security/CWE-347/localsource/decodeJwtWithoutVerificationLocalSource.expected index 0f67cfc8513..09db119d078 100644 --- a/javascript/ql/test/experimental/Security/CWE-347/localsource/decodeJwtWithoutVerificationLocalSource.expected +++ b/javascript/ql/test/experimental/Security/CWE-347/localsource/decodeJwtWithoutVerificationLocalSource.expected @@ -1,74 +1,74 @@ edges -| JsonWebToken.js:13:11:13:28 | UserToken | JsonWebToken.js:16:28:16:36 | UserToken | provenance | | -| JsonWebToken.js:13:23:13:28 | aJwt() | JsonWebToken.js:13:11:13:28 | UserToken | provenance | | -| JsonWebToken.js:20:11:20:28 | UserToken | JsonWebToken.js:23:28:23:36 | UserToken | provenance | | -| JsonWebToken.js:20:11:20:28 | UserToken | JsonWebToken.js:24:28:24:36 | UserToken | provenance | | -| JsonWebToken.js:20:23:20:28 | aJwt() | JsonWebToken.js:20:11:20:28 | UserToken | provenance | | -| JsonWebToken.js:28:11:28:28 | UserToken | JsonWebToken.js:31:28:31:36 | UserToken | provenance | | -| JsonWebToken.js:28:23:28:28 | aJwt() | JsonWebToken.js:28:11:28:28 | UserToken | provenance | | -| JsonWebToken.js:35:11:35:28 | UserToken | JsonWebToken.js:38:28:38:36 | UserToken | provenance | | -| JsonWebToken.js:35:11:35:28 | UserToken | JsonWebToken.js:39:28:39:36 | UserToken | provenance | | -| JsonWebToken.js:35:23:35:28 | aJwt() | JsonWebToken.js:35:11:35:28 | UserToken | provenance | | -| JsonWebToken.js:43:11:43:28 | UserToken | JsonWebToken.js:46:28:46:36 | UserToken | provenance | | -| JsonWebToken.js:43:11:43:28 | UserToken | JsonWebToken.js:47:28:47:36 | UserToken | provenance | | -| JsonWebToken.js:43:23:43:28 | aJwt() | JsonWebToken.js:43:11:43:28 | UserToken | provenance | | -| jose.js:12:11:12:28 | UserToken | jose.js:15:20:15:28 | UserToken | provenance | | -| jose.js:12:23:12:28 | aJwt() | jose.js:12:11:12:28 | UserToken | provenance | | -| jose.js:19:11:19:28 | UserToken | jose.js:22:20:22:28 | UserToken | provenance | | -| jose.js:19:11:19:28 | UserToken | jose.js:23:26:23:34 | UserToken | provenance | | -| jose.js:19:23:19:28 | aJwt() | jose.js:19:11:19:28 | UserToken | provenance | | -| jose.js:27:11:27:28 | UserToken | jose.js:30:26:30:34 | UserToken | provenance | | -| jose.js:27:23:27:28 | aJwt() | jose.js:27:11:27:28 | UserToken | provenance | | -| jwtDecode.js:13:11:13:28 | UserToken | jwtDecode.js:17:16:17:24 | UserToken | provenance | | -| jwtDecode.js:13:23:13:28 | aJwt() | jwtDecode.js:13:11:13:28 | UserToken | provenance | | -| jwtSimple.js:13:11:13:28 | UserToken | jwtSimple.js:16:23:16:31 | UserToken | provenance | | -| jwtSimple.js:13:23:13:28 | aJwt() | jwtSimple.js:13:11:13:28 | UserToken | provenance | | -| jwtSimple.js:20:11:20:28 | UserToken | jwtSimple.js:23:23:23:31 | UserToken | provenance | | -| jwtSimple.js:20:11:20:28 | UserToken | jwtSimple.js:24:23:24:31 | UserToken | provenance | | -| jwtSimple.js:20:23:20:28 | aJwt() | jwtSimple.js:20:11:20:28 | UserToken | provenance | | -| jwtSimple.js:28:11:28:28 | UserToken | jwtSimple.js:31:23:31:31 | UserToken | provenance | | -| jwtSimple.js:28:11:28:28 | UserToken | jwtSimple.js:32:23:32:31 | UserToken | provenance | | -| jwtSimple.js:28:23:28:28 | aJwt() | jwtSimple.js:28:11:28:28 | UserToken | provenance | | +| JsonWebToken.js:13:11:13:19 | UserToken | JsonWebToken.js:16:28:16:36 | UserToken | provenance | | +| JsonWebToken.js:13:23:13:28 | aJwt() | JsonWebToken.js:13:11:13:19 | UserToken | provenance | | +| JsonWebToken.js:20:11:20:19 | UserToken | JsonWebToken.js:23:28:23:36 | UserToken | provenance | | +| JsonWebToken.js:20:11:20:19 | UserToken | JsonWebToken.js:24:28:24:36 | UserToken | provenance | | +| JsonWebToken.js:20:23:20:28 | aJwt() | JsonWebToken.js:20:11:20:19 | UserToken | provenance | | +| JsonWebToken.js:28:11:28:19 | UserToken | JsonWebToken.js:31:28:31:36 | UserToken | provenance | | +| JsonWebToken.js:28:23:28:28 | aJwt() | JsonWebToken.js:28:11:28:19 | UserToken | provenance | | +| JsonWebToken.js:35:11:35:19 | UserToken | JsonWebToken.js:38:28:38:36 | UserToken | provenance | | +| JsonWebToken.js:35:11:35:19 | UserToken | JsonWebToken.js:39:28:39:36 | UserToken | provenance | | +| JsonWebToken.js:35:23:35:28 | aJwt() | JsonWebToken.js:35:11:35:19 | UserToken | provenance | | +| JsonWebToken.js:43:11:43:19 | UserToken | JsonWebToken.js:46:28:46:36 | UserToken | provenance | | +| JsonWebToken.js:43:11:43:19 | UserToken | JsonWebToken.js:47:28:47:36 | UserToken | provenance | | +| JsonWebToken.js:43:23:43:28 | aJwt() | JsonWebToken.js:43:11:43:19 | UserToken | provenance | | +| jose.js:12:11:12:19 | UserToken | jose.js:15:20:15:28 | UserToken | provenance | | +| jose.js:12:23:12:28 | aJwt() | jose.js:12:11:12:19 | UserToken | provenance | | +| jose.js:19:11:19:19 | UserToken | jose.js:22:20:22:28 | UserToken | provenance | | +| jose.js:19:11:19:19 | UserToken | jose.js:23:26:23:34 | UserToken | provenance | | +| jose.js:19:23:19:28 | aJwt() | jose.js:19:11:19:19 | UserToken | provenance | | +| jose.js:27:11:27:19 | UserToken | jose.js:30:26:30:34 | UserToken | provenance | | +| jose.js:27:23:27:28 | aJwt() | jose.js:27:11:27:19 | UserToken | provenance | | +| jwtDecode.js:13:11:13:19 | UserToken | jwtDecode.js:17:16:17:24 | UserToken | provenance | | +| jwtDecode.js:13:23:13:28 | aJwt() | jwtDecode.js:13:11:13:19 | UserToken | provenance | | +| jwtSimple.js:13:11:13:19 | UserToken | jwtSimple.js:16:23:16:31 | UserToken | provenance | | +| jwtSimple.js:13:23:13:28 | aJwt() | jwtSimple.js:13:11:13:19 | UserToken | provenance | | +| jwtSimple.js:20:11:20:19 | UserToken | jwtSimple.js:23:23:23:31 | UserToken | provenance | | +| jwtSimple.js:20:11:20:19 | UserToken | jwtSimple.js:24:23:24:31 | UserToken | provenance | | +| jwtSimple.js:20:23:20:28 | aJwt() | jwtSimple.js:20:11:20:19 | UserToken | provenance | | +| jwtSimple.js:28:11:28:19 | UserToken | jwtSimple.js:31:23:31:31 | UserToken | provenance | | +| jwtSimple.js:28:11:28:19 | UserToken | jwtSimple.js:32:23:32:31 | UserToken | provenance | | +| jwtSimple.js:28:23:28:28 | aJwt() | jwtSimple.js:28:11:28:19 | UserToken | provenance | | nodes -| JsonWebToken.js:13:11:13:28 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:13:11:13:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:13:23:13:28 | aJwt() | semmle.label | aJwt() | | JsonWebToken.js:16:28:16:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:20:11:20:28 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:20:11:20:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:20:23:20:28 | aJwt() | semmle.label | aJwt() | | JsonWebToken.js:23:28:23:36 | UserToken | semmle.label | UserToken | | JsonWebToken.js:24:28:24:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:28:11:28:28 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:28:11:28:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:28:23:28:28 | aJwt() | semmle.label | aJwt() | | JsonWebToken.js:31:28:31:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:35:11:35:28 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:35:11:35:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:35:23:35:28 | aJwt() | semmle.label | aJwt() | | JsonWebToken.js:38:28:38:36 | UserToken | semmle.label | UserToken | | JsonWebToken.js:39:28:39:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:43:11:43:28 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:43:11:43:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:43:23:43:28 | aJwt() | semmle.label | aJwt() | | JsonWebToken.js:46:28:46:36 | UserToken | semmle.label | UserToken | | JsonWebToken.js:47:28:47:36 | UserToken | semmle.label | UserToken | -| jose.js:12:11:12:28 | UserToken | semmle.label | UserToken | +| jose.js:12:11:12:19 | UserToken | semmle.label | UserToken | | jose.js:12:23:12:28 | aJwt() | semmle.label | aJwt() | | jose.js:15:20:15:28 | UserToken | semmle.label | UserToken | -| jose.js:19:11:19:28 | UserToken | semmle.label | UserToken | +| jose.js:19:11:19:19 | UserToken | semmle.label | UserToken | | jose.js:19:23:19:28 | aJwt() | semmle.label | aJwt() | | jose.js:22:20:22:28 | UserToken | semmle.label | UserToken | | jose.js:23:26:23:34 | UserToken | semmle.label | UserToken | -| jose.js:27:11:27:28 | UserToken | semmle.label | UserToken | +| jose.js:27:11:27:19 | UserToken | semmle.label | UserToken | | jose.js:27:23:27:28 | aJwt() | semmle.label | aJwt() | | jose.js:30:26:30:34 | UserToken | semmle.label | UserToken | -| jwtDecode.js:13:11:13:28 | UserToken | semmle.label | UserToken | +| jwtDecode.js:13:11:13:19 | UserToken | semmle.label | UserToken | | jwtDecode.js:13:23:13:28 | aJwt() | semmle.label | aJwt() | | jwtDecode.js:17:16:17:24 | UserToken | semmle.label | UserToken | -| jwtSimple.js:13:11:13:28 | UserToken | semmle.label | UserToken | +| jwtSimple.js:13:11:13:19 | UserToken | semmle.label | UserToken | | jwtSimple.js:13:23:13:28 | aJwt() | semmle.label | aJwt() | | jwtSimple.js:16:23:16:31 | UserToken | semmle.label | UserToken | -| jwtSimple.js:20:11:20:28 | UserToken | semmle.label | UserToken | +| jwtSimple.js:20:11:20:19 | UserToken | semmle.label | UserToken | | jwtSimple.js:20:23:20:28 | aJwt() | semmle.label | aJwt() | | jwtSimple.js:23:23:23:31 | UserToken | semmle.label | UserToken | | jwtSimple.js:24:23:24:31 | UserToken | semmle.label | UserToken | -| jwtSimple.js:28:11:28:28 | UserToken | semmle.label | UserToken | +| jwtSimple.js:28:11:28:19 | UserToken | semmle.label | UserToken | | jwtSimple.js:28:23:28:28 | aJwt() | semmle.label | aJwt() | | jwtSimple.js:31:23:31:31 | UserToken | semmle.label | UserToken | | jwtSimple.js:32:23:32:31 | UserToken | semmle.label | UserToken | diff --git a/javascript/ql/test/experimental/Security/CWE-347/remotesource/decodeJwtWithoutVerification.expected b/javascript/ql/test/experimental/Security/CWE-347/remotesource/decodeJwtWithoutVerification.expected index bb6ca940759..364fbd76b00 100644 --- a/javascript/ql/test/experimental/Security/CWE-347/remotesource/decodeJwtWithoutVerification.expected +++ b/javascript/ql/test/experimental/Security/CWE-347/remotesource/decodeJwtWithoutVerification.expected @@ -1,50 +1,50 @@ edges -| JsonWebToken.js:10:11:10:47 | UserToken | JsonWebToken.js:13:28:13:36 | UserToken | provenance | | -| JsonWebToken.js:10:23:10:47 | req.hea ... ization | JsonWebToken.js:10:11:10:47 | UserToken | provenance | | -| JsonWebToken.js:17:11:17:47 | UserToken | JsonWebToken.js:20:28:20:36 | UserToken | provenance | | -| JsonWebToken.js:17:11:17:47 | UserToken | JsonWebToken.js:21:28:21:36 | UserToken | provenance | | -| JsonWebToken.js:17:23:17:47 | req.hea ... ization | JsonWebToken.js:17:11:17:47 | UserToken | provenance | | -| JsonWebToken.js:32:11:32:47 | UserToken | JsonWebToken.js:35:28:35:36 | UserToken | provenance | | -| JsonWebToken.js:32:23:32:47 | req.hea ... ization | JsonWebToken.js:32:11:32:47 | UserToken | provenance | | -| JsonWebToken.js:40:11:40:47 | UserToken | JsonWebToken.js:43:28:43:36 | UserToken | provenance | | -| JsonWebToken.js:40:23:40:47 | req.hea ... ization | JsonWebToken.js:40:11:40:47 | UserToken | provenance | | -| jose.js:11:11:11:47 | UserToken | jose.js:13:20:13:28 | UserToken | provenance | | -| jose.js:11:23:11:47 | req.hea ... ization | jose.js:11:11:11:47 | UserToken | provenance | | -| jose.js:24:11:24:47 | UserToken | jose.js:26:20:26:28 | UserToken | provenance | | -| jose.js:24:23:24:47 | req.hea ... ization | jose.js:24:11:24:47 | UserToken | provenance | | -| jwtDecode.js:11:11:11:47 | UserToken | jwtDecode.js:15:16:15:24 | UserToken | provenance | | -| jwtDecode.js:11:23:11:47 | req.hea ... ization | jwtDecode.js:11:11:11:47 | UserToken | provenance | | -| jwtSimple.js:10:11:10:47 | UserToken | jwtSimple.js:13:23:13:31 | UserToken | provenance | | -| jwtSimple.js:10:23:10:47 | req.hea ... ization | jwtSimple.js:10:11:10:47 | UserToken | provenance | | -| jwtSimple.js:25:11:25:47 | UserToken | jwtSimple.js:28:23:28:31 | UserToken | provenance | | -| jwtSimple.js:25:23:25:47 | req.hea ... ization | jwtSimple.js:25:11:25:47 | UserToken | provenance | | +| JsonWebToken.js:10:11:10:19 | UserToken | JsonWebToken.js:13:28:13:36 | UserToken | provenance | | +| JsonWebToken.js:10:23:10:47 | req.hea ... ization | JsonWebToken.js:10:11:10:19 | UserToken | provenance | | +| JsonWebToken.js:17:11:17:19 | UserToken | JsonWebToken.js:20:28:20:36 | UserToken | provenance | | +| JsonWebToken.js:17:11:17:19 | UserToken | JsonWebToken.js:21:28:21:36 | UserToken | provenance | | +| JsonWebToken.js:17:23:17:47 | req.hea ... ization | JsonWebToken.js:17:11:17:19 | UserToken | provenance | | +| JsonWebToken.js:32:11:32:19 | UserToken | JsonWebToken.js:35:28:35:36 | UserToken | provenance | | +| JsonWebToken.js:32:23:32:47 | req.hea ... ization | JsonWebToken.js:32:11:32:19 | UserToken | provenance | | +| JsonWebToken.js:40:11:40:19 | UserToken | JsonWebToken.js:43:28:43:36 | UserToken | provenance | | +| JsonWebToken.js:40:23:40:47 | req.hea ... ization | JsonWebToken.js:40:11:40:19 | UserToken | provenance | | +| jose.js:11:11:11:19 | UserToken | jose.js:13:20:13:28 | UserToken | provenance | | +| jose.js:11:23:11:47 | req.hea ... ization | jose.js:11:11:11:19 | UserToken | provenance | | +| jose.js:24:11:24:19 | UserToken | jose.js:26:20:26:28 | UserToken | provenance | | +| jose.js:24:23:24:47 | req.hea ... ization | jose.js:24:11:24:19 | UserToken | provenance | | +| jwtDecode.js:11:11:11:19 | UserToken | jwtDecode.js:15:16:15:24 | UserToken | provenance | | +| jwtDecode.js:11:23:11:47 | req.hea ... ization | jwtDecode.js:11:11:11:19 | UserToken | provenance | | +| jwtSimple.js:10:11:10:19 | UserToken | jwtSimple.js:13:23:13:31 | UserToken | provenance | | +| jwtSimple.js:10:23:10:47 | req.hea ... ization | jwtSimple.js:10:11:10:19 | UserToken | provenance | | +| jwtSimple.js:25:11:25:19 | UserToken | jwtSimple.js:28:23:28:31 | UserToken | provenance | | +| jwtSimple.js:25:23:25:47 | req.hea ... ization | jwtSimple.js:25:11:25:19 | UserToken | provenance | | nodes -| JsonWebToken.js:10:11:10:47 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:10:11:10:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:10:23:10:47 | req.hea ... ization | semmle.label | req.hea ... ization | | JsonWebToken.js:13:28:13:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:17:11:17:47 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:17:11:17:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:17:23:17:47 | req.hea ... ization | semmle.label | req.hea ... ization | | JsonWebToken.js:20:28:20:36 | UserToken | semmle.label | UserToken | | JsonWebToken.js:21:28:21:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:32:11:32:47 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:32:11:32:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:32:23:32:47 | req.hea ... ization | semmle.label | req.hea ... ization | | JsonWebToken.js:35:28:35:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:40:11:40:47 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:40:11:40:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:40:23:40:47 | req.hea ... ization | semmle.label | req.hea ... ization | | JsonWebToken.js:43:28:43:36 | UserToken | semmle.label | UserToken | -| jose.js:11:11:11:47 | UserToken | semmle.label | UserToken | +| jose.js:11:11:11:19 | UserToken | semmle.label | UserToken | | jose.js:11:23:11:47 | req.hea ... ization | semmle.label | req.hea ... ization | | jose.js:13:20:13:28 | UserToken | semmle.label | UserToken | -| jose.js:24:11:24:47 | UserToken | semmle.label | UserToken | +| jose.js:24:11:24:19 | UserToken | semmle.label | UserToken | | jose.js:24:23:24:47 | req.hea ... ization | semmle.label | req.hea ... ization | | jose.js:26:20:26:28 | UserToken | semmle.label | UserToken | -| jwtDecode.js:11:11:11:47 | UserToken | semmle.label | UserToken | +| jwtDecode.js:11:11:11:19 | UserToken | semmle.label | UserToken | | jwtDecode.js:11:23:11:47 | req.hea ... ization | semmle.label | req.hea ... ization | | jwtDecode.js:15:16:15:24 | UserToken | semmle.label | UserToken | -| jwtSimple.js:10:11:10:47 | UserToken | semmle.label | UserToken | +| jwtSimple.js:10:11:10:19 | UserToken | semmle.label | UserToken | | jwtSimple.js:10:23:10:47 | req.hea ... ization | semmle.label | req.hea ... ization | | jwtSimple.js:13:23:13:31 | UserToken | semmle.label | UserToken | -| jwtSimple.js:25:11:25:47 | UserToken | semmle.label | UserToken | +| jwtSimple.js:25:11:25:19 | UserToken | semmle.label | UserToken | | jwtSimple.js:25:23:25:47 | req.hea ... ization | semmle.label | req.hea ... ization | | jwtSimple.js:28:23:28:31 | UserToken | semmle.label | UserToken | subpaths diff --git a/javascript/ql/test/experimental/Security/CWE-918/SSRF.expected b/javascript/ql/test/experimental/Security/CWE-918/SSRF.expected index da02dc24848..8a0dabd4c59 100644 --- a/javascript/ql/test/experimental/Security/CWE-918/SSRF.expected +++ b/javascript/ql/test/experimental/Security/CWE-918/SSRF.expected @@ -1,6 +1,6 @@ edges -| check-domain.js:16:9:16:27 | url | check-domain.js:17:13:17:15 | url | provenance | | -| check-domain.js:16:15:16:27 | req.query.url | check-domain.js:16:9:16:27 | url | provenance | | +| check-domain.js:16:9:16:11 | url | check-domain.js:17:13:17:15 | url | provenance | | +| check-domain.js:16:15:16:27 | req.query.url | check-domain.js:16:9:16:11 | url | provenance | | | check-middleware.js:9:27:9:43 | req.query.tainted | check-middleware.js:9:13:9:43 | "test.c ... tainted | provenance | | | check-path.js:19:27:19:43 | req.query.tainted | check-path.js:19:13:19:43 | 'test.c ... tainted | provenance | | | check-path.js:23:27:23:43 | req.query.tainted | check-path.js:23:13:23:45 | `/addre ... inted}` | provenance | | @@ -16,13 +16,13 @@ edges | check-validator.js:15:29:15:45 | req.query.tainted | check-validator.js:15:15:15:45 | "test.c ... tainted | provenance | | | check-validator.js:27:29:27:45 | req.query.tainted | check-validator.js:27:15:27:45 | "test.c ... tainted | provenance | | | check-validator.js:50:29:50:45 | req.query.tainted | check-validator.js:50:15:50:45 | "test.c ... tainted | provenance | | -| check-validator.js:54:9:54:37 | numberURL | check-validator.js:62:29:62:37 | numberURL | provenance | | -| check-validator.js:54:21:54:37 | req.query.tainted | check-validator.js:54:9:54:37 | numberURL | provenance | | +| check-validator.js:54:9:54:17 | numberURL | check-validator.js:62:29:62:37 | numberURL | provenance | | +| check-validator.js:54:21:54:37 | req.query.tainted | check-validator.js:54:9:54:17 | numberURL | provenance | | | check-validator.js:59:29:59:45 | req.query.tainted | check-validator.js:59:15:59:45 | "test.c ... tainted | provenance | | | check-validator.js:62:29:62:37 | numberURL | check-validator.js:62:15:62:37 | "test.c ... mberURL | provenance | | | check-validator.js:68:29:68:45 | req.query.tainted | check-validator.js:68:15:68:45 | "test.c ... tainted | provenance | | nodes -| check-domain.js:16:9:16:27 | url | semmle.label | url | +| check-domain.js:16:9:16:11 | url | semmle.label | url | | check-domain.js:16:15:16:27 | req.query.url | semmle.label | req.query.url | | check-domain.js:17:13:17:15 | url | semmle.label | url | | check-domain.js:26:15:26:27 | req.query.url | semmle.label | req.query.url | @@ -56,7 +56,7 @@ nodes | check-validator.js:27:29:27:45 | req.query.tainted | semmle.label | req.query.tainted | | check-validator.js:50:15:50:45 | "test.c ... tainted | semmle.label | "test.c ... tainted | | check-validator.js:50:29:50:45 | req.query.tainted | semmle.label | req.query.tainted | -| check-validator.js:54:9:54:37 | numberURL | semmle.label | numberURL | +| check-validator.js:54:9:54:17 | numberURL | semmle.label | numberURL | | check-validator.js:54:21:54:37 | req.query.tainted | semmle.label | req.query.tainted | | check-validator.js:59:15:59:45 | "test.c ... tainted | semmle.label | "test.c ... tainted | | check-validator.js:59:29:59:45 | req.query.tainted | semmle.label | req.query.tainted | diff --git a/javascript/ql/test/experimental/Security/CWE-942/CorsPermissiveConfiguration.expected b/javascript/ql/test/experimental/Security/CWE-942/CorsPermissiveConfiguration.expected index 6c28b7105a1..ddebfa1d1c8 100644 --- a/javascript/ql/test/experimental/Security/CWE-942/CorsPermissiveConfiguration.expected +++ b/javascript/ql/test/experimental/Security/CWE-942/CorsPermissiveConfiguration.expected @@ -1,16 +1,16 @@ edges -| apollo-test.js:8:9:8:59 | user_origin | apollo-test.js:26:25:26:35 | user_origin | provenance | | -| apollo-test.js:8:9:8:59 | user_origin | apollo-test.js:26:25:26:35 | user_origin | provenance | | -| apollo-test.js:8:23:8:46 | url.par ... , true) | apollo-test.js:8:9:8:59 | user_origin | provenance | | -| apollo-test.js:8:23:8:46 | url.par ... , true) | apollo-test.js:8:9:8:59 | user_origin | provenance | | +| apollo-test.js:8:9:8:19 | user_origin | apollo-test.js:26:25:26:35 | user_origin | provenance | | +| apollo-test.js:8:9:8:19 | user_origin | apollo-test.js:26:25:26:35 | user_origin | provenance | | +| apollo-test.js:8:23:8:46 | url.par ... , true) | apollo-test.js:8:9:8:19 | user_origin | provenance | | +| apollo-test.js:8:23:8:46 | url.par ... , true) | apollo-test.js:8:9:8:19 | user_origin | provenance | | | apollo-test.js:8:33:8:39 | req.url | apollo-test.js:8:23:8:46 | url.par ... , true) | provenance | | | apollo-test.js:8:42:8:45 | true | apollo-test.js:8:23:8:46 | url.par ... , true) | provenance | | -| express-test.js:10:9:10:59 | user_origin | express-test.js:33:17:33:27 | user_origin | provenance | | -| express-test.js:10:23:10:46 | url.par ... , true) | express-test.js:10:9:10:59 | user_origin | provenance | | +| express-test.js:10:9:10:19 | user_origin | express-test.js:33:17:33:27 | user_origin | provenance | | +| express-test.js:10:23:10:46 | url.par ... , true) | express-test.js:10:9:10:19 | user_origin | provenance | | | express-test.js:10:33:10:39 | req.url | express-test.js:10:23:10:46 | url.par ... , true) | provenance | | nodes -| apollo-test.js:8:9:8:59 | user_origin | semmle.label | user_origin | -| apollo-test.js:8:9:8:59 | user_origin | semmle.label | user_origin | +| apollo-test.js:8:9:8:19 | user_origin | semmle.label | user_origin | +| apollo-test.js:8:9:8:19 | user_origin | semmle.label | user_origin | | apollo-test.js:8:23:8:46 | url.par ... , true) | semmle.label | url.par ... , true) | | apollo-test.js:8:23:8:46 | url.par ... , true) | semmle.label | url.par ... , true) | | apollo-test.js:8:33:8:39 | req.url | semmle.label | req.url | @@ -19,7 +19,7 @@ nodes | apollo-test.js:21:25:21:28 | null | semmle.label | null | | apollo-test.js:26:25:26:35 | user_origin | semmle.label | user_origin | | apollo-test.js:26:25:26:35 | user_origin | semmle.label | user_origin | -| express-test.js:10:9:10:59 | user_origin | semmle.label | user_origin | +| express-test.js:10:9:10:19 | user_origin | semmle.label | user_origin | | express-test.js:10:23:10:46 | url.par ... , true) | semmle.label | url.par ... , true) | | express-test.js:10:33:10:39 | req.url | semmle.label | req.url | | express-test.js:26:17:26:19 | '*' | semmle.label | '*' | diff --git a/javascript/ql/test/library-tests/CallGraphs/FullTest/tests.expected b/javascript/ql/test/library-tests/CallGraphs/FullTest/tests.expected index 8185f693b22..1192c8ec8fb 100644 --- a/javascript/ql/test/library-tests/CallGraphs/FullTest/tests.expected +++ b/javascript/ql/test/library-tests/CallGraphs/FullTest/tests.expected @@ -50,15 +50,15 @@ test_getAFunctionValue | c.js:2:8:2:24 | function bar() {} | c.js:2:8:2:24 | function bar() {} | | classes.js:1:1:19:2 | (functi ... o();\\n}) | classes.js:1:2:19:1 | functio ... lo();\\n} | | classes.js:1:2:19:1 | functio ... lo();\\n} | classes.js:1:2:19:1 | functio ... lo();\\n} | -| classes.js:2:3:10:3 | A | classes.js:2:11:2:10 | () {} | | classes.js:2:3:10:3 | class A ... }\\n } | classes.js:2:11:2:10 | () {} | +| classes.js:2:9:2:9 | A | classes.js:2:11:2:10 | () {} | | classes.js:2:11:2:10 | () {} | classes.js:2:11:2:10 | () {} | | classes.js:3:10:5:5 | () {\\n ... ;\\n } | classes.js:3:10:5:5 | () {\\n ... ;\\n } | | classes.js:7:6:9:5 | () {\\n ... ;\\n } | classes.js:7:6:9:5 | () {\\n ... ;\\n } | | classes.js:8:7:8:16 | this.hello | classes.js:3:10:5:5 | () {\\n ... ;\\n } | | classes.js:8:7:8:16 | this.hello | classes.js:13:10:15:5 | () {\\n ... ;\\n } | -| classes.js:12:3:16:3 | B | classes.js:12:21:12:20 | (...arg ... rgs); } | | classes.js:12:3:16:3 | class B ... }\\n } | classes.js:12:21:12:20 | (...arg ... rgs); } | +| classes.js:12:9:12:9 | B | classes.js:12:21:12:20 | (...arg ... rgs); } | | classes.js:12:19:12:19 | A | classes.js:2:11:2:10 | () {} | | classes.js:12:21:12:20 | (...arg ... rgs); } | classes.js:12:21:12:20 | (...arg ... rgs); } | | classes.js:13:10:15:5 | () {\\n ... ;\\n } | classes.js:13:10:15:5 | () {\\n ... ;\\n } | @@ -146,9 +146,9 @@ test_getAFunctionValue | tst.js:11:1:20:1 | functio ... \\tf();\\n} | tst.js:11:1:20:1 | functio ... \\tf();\\n} | | tst.js:11:12:11:12 | m | tst.js:2:9:2:21 | function() {} | | tst.js:11:12:11:12 | m | tst.js:2:9:2:21 | function() {} | -| tst.js:12:6:12:6 | m | tst.js:2:9:2:21 | function() {} | -| tst.js:12:6:12:27 | n | tst.js:2:9:2:21 | function() {} | -| tst.js:12:6:12:27 | n | tst.js:12:15:12:27 | function() {} | +| tst.js:12:6:12:6 | n | tst.js:2:9:2:21 | function() {} | +| tst.js:12:6:12:6 | n | tst.js:12:15:12:27 | function() {} | +| tst.js:12:6:12:27 | m | tst.js:2:9:2:21 | function() {} | | tst.js:12:10:12:10 | m | tst.js:2:9:2:21 | function() {} | | tst.js:12:10:12:10 | m | tst.js:2:9:2:21 | function() {} | | tst.js:12:10:12:10 | m | tst.js:2:9:2:21 | function() {} | diff --git a/javascript/ql/test/library-tests/DataFlow/tests.expected b/javascript/ql/test/library-tests/DataFlow/tests.expected index 26ba8c46a99..7655c8b9f84 100644 --- a/javascript/ql/test/library-tests/DataFlow/tests.expected +++ b/javascript/ql/test/library-tests/DataFlow/tests.expected @@ -19,8 +19,8 @@ basicBlock | arguments.js:1:2:12:1 | exceptional return of anonymous function | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | | arguments.js:1:2:12:1 | functio ... , 3);\\n} | arguments.js:1:1:1:0 | entry node of | | arguments.js:1:2:12:1 | return of anonymous function | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | +| arguments.js:2:5:2:4 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:2:4 | this | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | -| arguments.js:2:5:2:5 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:10:5 | 'arguments' object of function f | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:10:5 | [function self-reference] functio ... ;\\n } | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:10:5 | exceptional return of function f | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | @@ -44,7 +44,7 @@ basicBlock | arguments.js:5:25:5:36 | arguments[1] | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:5:35:5:35 | 1 | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:6:13:6:16 | args | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | -| arguments.js:6:13:6:28 | args | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | +| arguments.js:6:13:6:16 | args | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:6:13:6:28 | args = arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:6:20:6:28 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:7:13:7:20 | thirdArg | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | @@ -53,7 +53,7 @@ basicBlock | arguments.js:7:24:7:30 | args[2] | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:7:29:7:29 | 2 | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:8:9:8:17 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | -| arguments.js:8:9:8:22 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | +| arguments.js:8:9:8:17 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:8:9:8:22 | arguments = {} | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:8:21:8:22 | {} | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:9:13:9:23 | notFirstArg | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | @@ -75,7 +75,7 @@ basicBlock | eval.js:1:1:5:1 | return of function k | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | | eval.js:1:10:1:10 | k | eval.js:1:1:1:0 | entry node of | | eval.js:2:7:2:7 | x | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | -| eval.js:2:7:2:12 | x | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | +| eval.js:2:7:2:7 | x | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | | eval.js:2:7:2:12 | x = 42 | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | | eval.js:2:11:2:12 | 42 | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | | eval.js:3:3:3:6 | eval | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | @@ -122,23 +122,23 @@ basicBlock | sources.js:10:12:10:14 | key | sources.js:10:8:10:14 | let key | | sources.js:10:19:10:23 | array | sources.js:9:1:9:0 | entry node of functio ... ey; }\\n} | | sources.js:10:28:10:30 | key | sources.js:10:8:10:14 | let key | -| sources.js:11:12:11:18 | key | sources.js:11:8:11:18 | let { key } | | sources.js:11:12:11:18 | { key } | sources.js:11:8:11:18 | let { key } | | sources.js:11:12:11:18 | { key } | sources.js:11:8:11:18 | let { key } | | sources.js:11:14:11:16 | key | sources.js:11:8:11:18 | let { key } | | sources.js:11:14:11:16 | key | sources.js:11:8:11:18 | let { key } | | sources.js:11:14:11:16 | key | sources.js:11:8:11:18 | let { key } | | sources.js:11:14:11:16 | key | sources.js:11:8:11:18 | let { key } | +| sources.js:11:14:11:16 | key | sources.js:11:8:11:18 | let { key } | | sources.js:11:23:11:27 | array | sources.js:11:23:11:27 | array | | sources.js:11:32:11:34 | key | sources.js:11:8:11:18 | let { key } | +| tst2.ts:1:1:1:0 | A | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:1:1:1:0 | this | tst2.ts:1:1:1:0 | entry node of | -| tst2.ts:1:1:1:1 | A | tst2.ts:1:1:1:0 | entry node of | -| tst2.ts:1:8:5:1 | A | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:1:8:5:1 | namespa ... lysed\\n} | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:1:18:1:18 | A | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:1:18:1:18 | A | tst2.ts:1:1:1:0 | entry node of | +| tst2.ts:1:18:1:18 | A | tst2.ts:1:1:1:0 | entry node of | +| tst2.ts:2:14:2:14 | x | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:2:14:2:14 | x | tst2.ts:1:1:1:0 | entry node of | -| tst2.ts:2:14:2:19 | x | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:2:14:2:19 | x = 42 | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:2:18:2:19 | 42 | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:3:3:3:6 | setX | tst2.ts:1:1:1:0 | entry node of | @@ -190,17 +190,17 @@ basicBlock | tst2.ts:15:11:15:30 | A.x satisfies number | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:15:13:15:13 | x | tst2.ts:1:1:1:0 | entry node of | | tst.js:1:1:1:0 | this | tst.js:1:1:1:0 | entry node of | -| tst.js:1:1:1:1 | x | tst.js:1:1:1:0 | entry node of | +| tst.js:1:1:1:0 | x | tst.js:1:1:1:0 | entry node of | | tst.js:1:1:1:24 | import ... m 'fs'; | tst.js:1:1:1:0 | entry node of | | tst.js:1:10:1:11 | fs | tst.js:1:1:1:0 | entry node of | | tst.js:1:10:1:11 | fs | tst.js:1:1:1:0 | entry node of | | tst.js:3:5:3:5 | x | tst.js:1:1:1:0 | entry node of | | tst.js:3:5:3:5 | x | tst.js:1:1:1:0 | entry node of | -| tst.js:3:5:3:10 | x | tst.js:1:1:1:0 | entry node of | +| tst.js:3:5:3:5 | x | tst.js:1:1:1:0 | entry node of | | tst.js:3:5:3:10 | x = 42 | tst.js:1:1:1:0 | entry node of | | tst.js:3:9:3:10 | 42 | tst.js:1:1:1:0 | entry node of | | tst.js:4:5:4:5 | y | tst.js:1:1:1:0 | entry node of | -| tst.js:4:5:4:12 | y | tst.js:1:1:1:0 | entry node of | +| tst.js:4:5:4:5 | y | tst.js:1:1:1:0 | entry node of | | tst.js:4:5:4:12 | y = "hi" | tst.js:1:1:1:0 | entry node of | | tst.js:4:9:4:12 | "hi" | tst.js:1:1:1:0 | entry node of | | tst.js:5:5:5:5 | z | tst.js:1:1:1:0 | entry node of | @@ -220,13 +220,13 @@ basicBlock | tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | guard: x is false | | tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | guard: x is true | | tst.js:12:1:12:1 | x | tst.js:12:1:12:7 | x \|\| y; | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:7 | x \|\| y; | | tst.js:12:1:12:6 | x \|\| y | tst.js:12:1:12:7 | x \|\| y; | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:7 | x \|\| y; | | tst.js:12:6:12:6 | y | tst.js:12:1:12:1 | guard: x is false | -| tst.js:13:1:13:1 | x | tst.js:13:1:13:6 | z = y; | | tst.js:13:1:13:1 | z | tst.js:13:1:13:6 | z = y; | -| tst.js:13:1:13:5 | z | tst.js:13:1:13:6 | z = y; | +| tst.js:13:1:13:1 | z | tst.js:13:1:13:6 | z = y; | | tst.js:13:1:13:5 | z = y | tst.js:13:1:13:6 | z = y; | +| tst.js:13:1:13:6 | x | tst.js:13:1:13:6 | z = y; | | tst.js:13:5:13:5 | y | tst.js:13:1:13:6 | z = y; | | tst.js:14:1:14:1 | z | tst.js:13:1:13:6 | z = y; | | tst.js:14:1:14:9 | z ? x : y | tst.js:13:1:13:6 | z = y; | @@ -254,16 +254,16 @@ basicBlock | tst.js:19:10:19:11 | "" | tst.js:17:7:17:25 | guard: Math.random() > 0.5 is false | | tst.js:20:4:20:8 | "arg" | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:5:22:20 | { readFileSync } | tst.js:16:1:20:10 | (functi ... "arg"); | -| tst.js:22:5:22:25 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:5:22:25 | { readF ... } = fs | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:7:22:18 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:7:22:18 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:7:22:18 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:7:22:18 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | +| tst.js:22:7:22:18 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:24:22:25 | fs | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:23:1:23:12 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:25:1:25:3 | ++x | tst.js:16:1:20:10 | (functi ... "arg"); | -| tst.js:25:1:25:3 | x | tst.js:16:1:20:10 | (functi ... "arg"); | +| tst.js:25:3:25:3 | x | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:25:3:25:3 | x | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:26:1:26:1 | x | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:28:1:30:1 | (() =>\\n ... ables\\n) | tst.js:16:1:20:10 | (functi ... "arg"); | @@ -290,7 +290,7 @@ basicBlock | tst.js:35:1:35:7 | g(true) | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:35:3:35:6 | true | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:37:5:37:5 | o | tst.js:16:1:20:10 | (functi ... "arg"); | -| tst.js:37:5:42:1 | o | tst.js:16:1:20:10 | (functi ... "arg"); | +| tst.js:37:5:37:5 | o | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:37:5:42:1 | o = {\\n ... ;\\n }\\n} | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:37:9:42:1 | {\\n x: ... ;\\n }\\n} | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:38:3:38:3 | x | tst.js:16:1:20:10 | (functi ... "arg"); | @@ -318,9 +318,9 @@ basicBlock | tst.js:46:1:46:11 | global = "" | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:46:10:46:11 | "" | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:47:1:47:6 | global | tst.js:16:1:20:10 | (functi ... "arg"); | -| tst.js:49:1:54:1 | A | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:49:1:54:1 | class A ... `\\n }\\n} | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:49:7:49:7 | A | tst.js:16:1:20:10 | (functi ... "arg"); | +| tst.js:49:7:49:7 | A | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:49:17:49:17 | B | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:50:3:50:13 | constructor | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:50:3:53:3 | constru ... et`\\n } | tst.js:16:1:20:10 | (functi ... "arg"); | @@ -365,7 +365,7 @@ basicBlock | tst.js:66:7:66:25 | tmp = function.sent | tst.js:64:1:64:0 | entry node of functio ... lysed\\n} | | tst.js:66:13:66:25 | function.sent | tst.js:64:1:64:0 | entry node of functio ... lysed\\n} | | tst.js:68:5:68:8 | iter | tst.js:16:1:20:10 | (functi ... "arg"); | -| tst.js:68:5:68:14 | iter | tst.js:16:1:20:10 | (functi ... "arg"); | +| tst.js:68:5:68:8 | iter | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:68:5:68:14 | iter = h() | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:68:12:68:12 | h | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:68:12:68:14 | exceptional return of h() | tst.js:16:1:20:10 | (functi ... "arg"); | @@ -424,33 +424,33 @@ basicBlock | tst.js:87:2:92:1 | exceptional return of anonymous function | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:2:92:1 | functio ... + z;\\n} | tst.js:85:5:85:28 | vs2 = ( ... o) v ) | | tst.js:87:2:92:1 | return of anonymous function | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | -| tst.js:87:11:87:24 | o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | -| tst.js:87:11:87:24 | x | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:11:87:24 | { p: x, ...o } | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:13:87:13 | p | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:13:87:16 | p: x | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:13:87:16 | p: x | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:16:87:16 | x | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | +| tst.js:87:16:87:16 | x | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:22:87:22 | ...o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:22:87:22 | o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | +| tst.js:87:22:87:22 | o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:7:88:14 | { q: y } | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | -| tst.js:88:7:88:18 | y | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:7:88:18 | { q: y } = o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:9:88:9 | q | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:9:88:12 | q: y | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:9:88:12 | q: y | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:12:88:12 | y | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | +| tst.js:88:12:88:12 | y | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:18:88:18 | o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:89:7:89:7 | z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:89:7:89:7 | z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:3:90:16 | ({ r: z } = o) | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:4:90:11 | { r: z } | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | -| tst.js:90:4:90:15 | z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:4:90:15 | { r: z } = o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:6:90:6 | r | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:6:90:9 | r: z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:6:90:9 | r: z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:9:90:9 | z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | +| tst.js:90:9:90:9 | z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:15:90:15 | o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:91:10:91:10 | x | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:91:10:91:14 | x + y | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | @@ -479,15 +479,15 @@ basicBlock | tst.js:98:2:103:1 | functio ... + z;\\n} | tst.js:85:5:85:28 | vs2 = ( ... o) v ) | | tst.js:98:2:103:1 | return of anonymous function | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:98:11:98:24 | [ x, ...rest ] | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | -| tst.js:98:11:98:24 | rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | -| tst.js:98:11:98:24 | x | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | +| tst.js:98:13:98:13 | x | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:98:13:98:13 | x | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:98:13:98:13 | x | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:98:19:98:22 | ...rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:98:19:98:22 | rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | +| tst.js:98:19:98:22 | rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:99:7:99:11 | [ y ] | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:99:7:99:18 | [ y ] = rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | -| tst.js:99:7:99:18 | y | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | +| tst.js:99:9:99:9 | y | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:99:9:99:9 | y | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:99:9:99:9 | y | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:99:15:99:18 | rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | @@ -495,7 +495,7 @@ basicBlock | tst.js:100:7:100:7 | z | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:101:3:101:9 | [ , z ] | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:101:3:101:16 | [ , z ] = rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | -| tst.js:101:3:101:16 | z | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | +| tst.js:101:7:101:7 | z | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:101:7:101:7 | z | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:101:7:101:7 | z | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:101:13:101:16 | rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | @@ -521,14 +521,13 @@ basicBlock | tst.js:107:2:113:1 | functio ... v2c;\\n} | tst.js:107:1:113:3 | (functi ... 2c;\\n}); | | tst.js:107:2:113:1 | return of anonymous function | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:6:108:32 | {v1a, v ... = o1c} | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | -| tst.js:108:6:108:38 | v1a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | -| tst.js:108:6:108:38 | v1b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | -| tst.js:108:6:108:38 | v1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:6:108:38 | {v1a, v ... } = o1d | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:7:108:9 | v1a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:7:108:9 | v1a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:7:108:9 | v1a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:7:108:9 | v1a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | +| tst.js:108:7:108:9 | v1a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | +| tst.js:108:12:108:14 | v1b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:12:108:14 | v1b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:12:108:14 | v1b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:12:108:20 | v1b = o1b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | @@ -536,6 +535,7 @@ basicBlock | tst.js:108:18:108:20 | o1b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:23:108:25 | v1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:23:108:25 | v1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | +| tst.js:108:23:108:25 | v1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:23:108:31 | v1c = o1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:23:108:31 | v1c = o1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:29:108:31 | o1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | @@ -547,16 +547,16 @@ basicBlock | tst.js:109:14:109:16 | v1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:6:111:32 | [v2a, v ... = o2c] | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:6:111:38 | [v2a, v ... ] = o2d | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | -| tst.js:111:6:111:38 | v2a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | -| tst.js:111:6:111:38 | v2b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | -| tst.js:111:6:111:38 | v2c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:7:111:9 | v2a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:7:111:9 | v2a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | +| tst.js:111:7:111:9 | v2a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | +| tst.js:111:12:111:14 | v2b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:12:111:14 | v2b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:12:111:14 | v2b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:18:111:20 | o2b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:23:111:25 | v2c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:23:111:25 | v2c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | +| tst.js:111:23:111:25 | v2c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:29:111:31 | o2c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:36:111:38 | o2d | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:112:2:112:4 | v2a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | @@ -946,9 +946,9 @@ enclosingExpr | tst.js:117:22:117:23 | x1 | tst.js:117:22:117:23 | x1 | flowStep | arguments.js:1:2:12:1 | functio ... , 3);\\n} | arguments.js:1:1:12:2 | (functi ... 3);\\n}) | -| arguments.js:2:5:2:5 | arguments | arguments.js:4:28:4:36 | arguments | -| arguments.js:2:5:2:5 | arguments | arguments.js:5:25:5:33 | arguments | -| arguments.js:2:5:2:5 | arguments | arguments.js:6:20:6:28 | arguments | +| arguments.js:2:5:2:4 | arguments | arguments.js:4:28:4:36 | arguments | +| arguments.js:2:5:2:4 | arguments | arguments.js:5:25:5:33 | arguments | +| arguments.js:2:5:2:4 | arguments | arguments.js:6:20:6:28 | arguments | | arguments.js:2:5:10:5 | 'arguments' object of function f | arguments.js:4:28:4:36 | arguments | | arguments.js:2:5:10:5 | 'arguments' object of function f | arguments.js:5:25:5:33 | arguments | | arguments.js:2:5:10:5 | 'arguments' object of function f | arguments.js:6:20:6:28 | arguments | @@ -958,13 +958,13 @@ flowStep | arguments.js:2:14:2:14 | f | arguments.js:11:5:11:5 | f | | arguments.js:2:16:2:16 | x | arguments.js:2:16:2:16 | x | | arguments.js:2:16:2:16 | x | arguments.js:3:24:3:24 | x | -| arguments.js:6:13:6:28 | args | arguments.js:7:24:7:27 | args | -| arguments.js:6:20:6:28 | arguments | arguments.js:6:13:6:28 | args | -| arguments.js:8:9:8:22 | arguments | arguments.js:9:27:9:35 | arguments | -| arguments.js:8:21:8:22 | {} | arguments.js:8:9:8:22 | arguments | +| arguments.js:6:13:6:16 | args | arguments.js:7:24:7:27 | args | +| arguments.js:6:20:6:28 | arguments | arguments.js:6:13:6:16 | args | +| arguments.js:8:9:8:17 | arguments | arguments.js:9:27:9:35 | arguments | +| arguments.js:8:21:8:22 | {} | arguments.js:8:9:8:17 | arguments | | arguments.js:8:21:8:22 | {} | arguments.js:8:9:8:22 | arguments = {} | -| eval.js:2:7:2:12 | x | eval.js:4:3:4:3 | x | -| eval.js:2:11:2:12 | 42 | eval.js:2:7:2:12 | x | +| eval.js:2:7:2:7 | x | eval.js:4:3:4:3 | x | +| eval.js:2:11:2:12 | 42 | eval.js:2:7:2:7 | x | | sources.js:1:6:1:6 | x | sources.js:1:6:1:6 | x | | sources.js:1:6:1:6 | x | sources.js:1:11:1:11 | x | | sources.js:1:6:1:11 | x => x | sources.js:1:5:1:12 | (x => x) | @@ -980,17 +980,17 @@ flowStep | sources.js:9:14:9:18 | array | sources.js:10:19:10:23 | array | | sources.js:9:14:9:18 | array | sources.js:11:23:11:27 | array | | sources.js:10:12:10:14 | key | sources.js:10:28:10:30 | key | -| sources.js:11:12:11:18 | key | sources.js:11:32:11:34 | key | -| sources.js:11:14:11:16 | key | sources.js:11:12:11:18 | key | -| tst2.ts:1:1:1:1 | A | tst2.ts:1:18:1:18 | A | -| tst2.ts:1:1:1:1 | A | tst2.ts:1:18:1:18 | A | -| tst2.ts:1:8:5:1 | A | tst2.ts:1:18:1:18 | A | -| tst2.ts:1:8:5:1 | A | tst2.ts:11:11:11:11 | A | -| tst2.ts:1:8:5:1 | A | tst2.ts:15:11:15:11 | A | -| tst2.ts:1:8:5:1 | namespa ... lysed\\n} | tst2.ts:1:8:5:1 | A | +| sources.js:11:14:11:16 | key | sources.js:11:14:11:16 | key | +| sources.js:11:14:11:16 | key | sources.js:11:32:11:34 | key | +| tst2.ts:1:1:1:0 | A | tst2.ts:1:18:1:18 | A | +| tst2.ts:1:1:1:0 | A | tst2.ts:1:18:1:18 | A | +| tst2.ts:1:8:5:1 | namespa ... lysed\\n} | tst2.ts:1:18:1:18 | A | +| tst2.ts:1:18:1:18 | A | tst2.ts:1:18:1:18 | A | | tst2.ts:1:18:1:18 | A | tst2.ts:7:1:7:0 | A | -| tst2.ts:2:14:2:19 | x | tst2.ts:4:3:4:3 | x | -| tst2.ts:2:18:2:19 | 42 | tst2.ts:2:14:2:19 | x | +| tst2.ts:1:18:1:18 | A | tst2.ts:11:11:11:11 | A | +| tst2.ts:1:18:1:18 | A | tst2.ts:15:11:15:11 | A | +| tst2.ts:2:14:2:14 | x | tst2.ts:4:3:4:3 | x | +| tst2.ts:2:18:2:19 | 42 | tst2.ts:2:14:2:14 | x | | tst2.ts:7:1:7:0 | A | tst2.ts:8:3:8:3 | A | | tst2.ts:7:1:9:1 | functio ... = 23;\\n} | tst2.ts:7:10:7:13 | setX | | tst2.ts:7:10:7:13 | setX | tst2.ts:3:3:3:6 | setX | @@ -1001,43 +1001,43 @@ flowStep | tst2.ts:13:39:13:38 | args | tst2.ts:13:39:13:38 | args | | tst2.ts:13:39:13:38 | this | tst2.ts:13:39:13:38 | implicit 'this' | | tst2.ts:15:11:15:13 | A.x | tst2.ts:15:11:15:30 | A.x satisfies number | -| tst.js:1:1:1:1 | x | tst.js:3:5:3:5 | x | +| tst.js:1:1:1:0 | x | tst.js:3:5:3:5 | x | | tst.js:1:10:1:11 | fs | tst.js:1:10:1:11 | fs | | tst.js:1:10:1:11 | fs | tst.js:7:1:7:2 | fs | | tst.js:1:10:1:11 | fs | tst.js:22:24:22:25 | fs | +| tst.js:3:5:3:5 | x | tst.js:3:5:3:5 | x | +| tst.js:3:5:3:5 | x | tst.js:8:1:8:1 | x | +| tst.js:3:5:3:5 | x | tst.js:9:2:9:2 | x | +| tst.js:3:5:3:5 | x | tst.js:10:1:10:1 | x | +| tst.js:3:5:3:5 | x | tst.js:11:1:11:1 | x | +| tst.js:3:5:3:5 | x | tst.js:11:1:11:1 | x | +| tst.js:3:5:3:5 | x | tst.js:11:1:11:1 | x | | tst.js:3:5:3:5 | x | tst.js:28:2:28:1 | x | | tst.js:3:5:3:5 | x | tst.js:32:1:32:0 | x | -| tst.js:3:5:3:10 | x | tst.js:3:5:3:5 | x | -| tst.js:3:5:3:10 | x | tst.js:8:1:8:1 | x | -| tst.js:3:5:3:10 | x | tst.js:9:2:9:2 | x | -| tst.js:3:5:3:10 | x | tst.js:10:1:10:1 | x | -| tst.js:3:5:3:10 | x | tst.js:11:1:11:1 | x | -| tst.js:3:5:3:10 | x | tst.js:11:1:11:1 | x | -| tst.js:3:5:3:10 | x | tst.js:11:1:11:1 | x | -| tst.js:3:9:3:10 | 42 | tst.js:3:5:3:10 | x | -| tst.js:4:5:4:12 | y | tst.js:10:4:10:4 | y | -| tst.js:4:5:4:12 | y | tst.js:11:6:11:6 | y | -| tst.js:4:5:4:12 | y | tst.js:12:6:12:6 | y | -| tst.js:4:5:4:12 | y | tst.js:13:5:13:5 | y | -| tst.js:4:5:4:12 | y | tst.js:14:9:14:9 | y | -| tst.js:4:5:4:12 | y | tst.js:105:6:105:6 | y | -| tst.js:4:9:4:12 | "hi" | tst.js:4:5:4:12 | y | +| tst.js:3:9:3:10 | 42 | tst.js:3:5:3:5 | x | +| tst.js:4:5:4:5 | y | tst.js:10:4:10:4 | y | +| tst.js:4:5:4:5 | y | tst.js:11:6:11:6 | y | +| tst.js:4:5:4:5 | y | tst.js:12:6:12:6 | y | +| tst.js:4:5:4:5 | y | tst.js:13:5:13:5 | y | +| tst.js:4:5:4:5 | y | tst.js:14:9:14:9 | y | +| tst.js:4:5:4:5 | y | tst.js:105:6:105:6 | y | +| tst.js:4:9:4:12 | "hi" | tst.js:4:5:4:5 | y | | tst.js:9:2:9:2 | x | tst.js:9:1:9:3 | (x) | | tst.js:10:4:10:4 | y | tst.js:10:1:10:4 | x, y | -| tst.js:11:1:11:1 | x | tst.js:12:1:12:1 | x | -| tst.js:11:1:11:1 | x | tst.js:12:1:12:1 | x | +| tst.js:11:1:11:1 | x | tst.js:12:1:12:7 | x | +| tst.js:11:1:11:1 | x | tst.js:12:1:12:7 | x | | tst.js:11:6:11:6 | y | tst.js:11:1:11:6 | x && y | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | x | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | x | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | x | | tst.js:12:1:12:1 | x | tst.js:12:1:12:6 | x \|\| y | -| tst.js:12:1:12:1 | x | tst.js:13:1:13:1 | x | -| tst.js:12:1:12:1 | x | tst.js:13:1:13:1 | x | +| tst.js:12:1:12:1 | x | tst.js:13:1:13:6 | x | +| tst.js:12:1:12:1 | x | tst.js:13:1:13:6 | x | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:1 | x | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:1 | x | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:1 | x | | tst.js:12:6:12:6 | y | tst.js:12:1:12:6 | x \|\| y | -| tst.js:13:1:13:1 | x | tst.js:14:5:14:5 | x | -| tst.js:13:1:13:1 | x | tst.js:25:3:25:3 | x | -| tst.js:13:1:13:5 | z | tst.js:14:1:14:1 | z | -| tst.js:13:5:13:5 | y | tst.js:13:1:13:5 | z | +| tst.js:13:1:13:1 | z | tst.js:14:1:14:1 | z | +| tst.js:13:1:13:6 | x | tst.js:14:5:14:5 | x | +| tst.js:13:1:13:6 | x | tst.js:25:3:25:3 | x | +| tst.js:13:5:13:5 | y | tst.js:13:1:13:1 | z | | tst.js:13:5:13:5 | y | tst.js:13:1:13:5 | z = y | | tst.js:14:5:14:5 | x | tst.js:14:1:14:9 | z ? x : y | | tst.js:14:9:14:9 | y | tst.js:14:1:14:9 | z ? x : y | @@ -1049,14 +1049,14 @@ flowStep | tst.js:19:10:19:11 | "" | tst.js:16:1:20:9 | (functi ... ("arg") | | tst.js:19:10:19:11 | "" | tst.js:16:2:20:1 | return of function f | | tst.js:20:4:20:8 | "arg" | tst.js:16:13:16:13 | a | -| tst.js:22:5:22:25 | readFileSync | tst.js:23:1:23:12 | readFileSync | -| tst.js:22:7:22:18 | readFileSync | tst.js:22:5:22:25 | readFileSync | +| tst.js:22:7:22:18 | readFileSync | tst.js:22:7:22:18 | readFileSync | +| tst.js:22:7:22:18 | readFileSync | tst.js:23:1:23:12 | readFileSync | | tst.js:22:24:22:25 | fs | tst.js:22:5:22:20 | { readFileSync } | -| tst.js:25:1:25:3 | x | tst.js:3:5:3:5 | x | -| tst.js:25:1:25:3 | x | tst.js:26:1:26:1 | x | -| tst.js:25:1:25:3 | x | tst.js:57:7:57:7 | x | -| tst.js:25:1:25:3 | x | tst.js:58:11:58:11 | x | -| tst.js:25:1:25:3 | x | tst.js:105:1:105:1 | x | +| tst.js:25:3:25:3 | x | tst.js:3:5:3:5 | x | +| tst.js:25:3:25:3 | x | tst.js:26:1:26:1 | x | +| tst.js:25:3:25:3 | x | tst.js:57:7:57:7 | x | +| tst.js:25:3:25:3 | x | tst.js:58:11:58:11 | x | +| tst.js:25:3:25:3 | x | tst.js:105:1:105:1 | x | | tst.js:28:2:28:1 | x | tst.js:29:3:29:3 | x | | tst.js:28:2:29:3 | () =>\\n x | tst.js:28:1:30:1 | (() =>\\n ... ables\\n) | | tst.js:29:3:29:3 | x | tst.js:28:1:30:3 | (() =>\\n ... les\\n)() | @@ -1067,56 +1067,56 @@ flowStep | tst.js:32:10:32:10 | g | tst.js:60:1:60:1 | g | | tst.js:32:10:32:10 | g | tst.js:62:4:62:4 | g | | tst.js:33:10:33:10 | x | tst.js:32:1:34:1 | return of function g | -| tst.js:37:5:42:1 | o | tst.js:43:1:43:1 | o | -| tst.js:37:5:42:1 | o | tst.js:44:1:44:1 | o | -| tst.js:37:5:42:1 | o | tst.js:61:3:61:3 | o | -| tst.js:37:5:42:1 | o | tst.js:62:1:62:1 | o | -| tst.js:37:5:42:1 | o | tst.js:77:15:77:15 | o | -| tst.js:37:5:42:1 | o | tst.js:80:15:80:15 | o | -| tst.js:37:5:42:1 | o | tst.js:83:23:83:23 | o | -| tst.js:37:5:42:1 | o | tst.js:85:23:85:23 | o | -| tst.js:37:9:42:1 | {\\n x: ... ;\\n }\\n} | tst.js:37:5:42:1 | o | +| tst.js:37:5:37:5 | o | tst.js:43:1:43:1 | o | +| tst.js:37:5:37:5 | o | tst.js:44:1:44:1 | o | +| tst.js:37:5:37:5 | o | tst.js:61:3:61:3 | o | +| tst.js:37:5:37:5 | o | tst.js:62:1:62:1 | o | +| tst.js:37:5:37:5 | o | tst.js:77:15:77:15 | o | +| tst.js:37:5:37:5 | o | tst.js:80:15:80:15 | o | +| tst.js:37:5:37:5 | o | tst.js:83:23:83:23 | o | +| tst.js:37:5:37:5 | o | tst.js:85:23:85:23 | o | +| tst.js:37:9:42:1 | {\\n x: ... ;\\n }\\n} | tst.js:37:5:37:5 | o | | tst.js:39:4:39:3 | this | tst.js:40:5:40:8 | this | | tst.js:46:10:46:11 | "" | tst.js:46:1:46:11 | global = "" | -| tst.js:49:1:54:1 | A | tst.js:55:1:55:1 | A | -| tst.js:49:1:54:1 | class A ... `\\n }\\n} | tst.js:49:1:54:1 | A | +| tst.js:49:1:54:1 | class A ... `\\n }\\n} | tst.js:49:7:49:7 | A | +| tst.js:49:7:49:7 | A | tst.js:55:1:55:1 | A | | tst.js:50:14:50:13 | this | tst.js:51:5:51:9 | implicit 'this' | | tst.js:64:1:67:1 | functio ... lysed\\n} | tst.js:64:11:64:11 | h | | tst.js:64:11:64:11 | h | tst.js:68:12:68:12 | h | -| tst.js:68:5:68:14 | iter | tst.js:69:1:69:4 | iter | -| tst.js:68:12:68:14 | h() | tst.js:68:5:68:14 | iter | +| tst.js:68:5:68:8 | iter | tst.js:69:1:69:4 | iter | +| tst.js:68:12:68:14 | h() | tst.js:68:5:68:8 | iter | | tst.js:77:10:77:10 | i | tst.js:78:3:78:3 | i | | tst.js:80:10:80:10 | v | tst.js:81:3:81:3 | v | | tst.js:83:18:83:18 | v | tst.js:83:26:83:26 | v | | tst.js:85:18:85:18 | v | tst.js:85:26:85:26 | v | | tst.js:87:2:92:1 | functio ... + z;\\n} | tst.js:87:1:92:2 | (functi ... + z;\\n}) | -| tst.js:87:11:87:24 | o | tst.js:88:18:88:18 | o | -| tst.js:87:11:87:24 | o | tst.js:90:15:90:15 | o | -| tst.js:87:11:87:24 | x | tst.js:91:10:91:10 | x | -| tst.js:87:13:87:16 | p: x | tst.js:87:11:87:24 | x | -| tst.js:87:22:87:22 | ...o | tst.js:87:11:87:24 | o | -| tst.js:88:7:88:18 | y | tst.js:91:14:91:14 | y | -| tst.js:88:9:88:12 | q: y | tst.js:88:7:88:18 | y | +| tst.js:87:13:87:16 | p: x | tst.js:87:16:87:16 | x | +| tst.js:87:16:87:16 | x | tst.js:91:10:91:10 | x | +| tst.js:87:22:87:22 | ...o | tst.js:87:22:87:22 | o | +| tst.js:87:22:87:22 | o | tst.js:88:18:88:18 | o | +| tst.js:87:22:87:22 | o | tst.js:90:15:90:15 | o | +| tst.js:88:9:88:12 | q: y | tst.js:88:12:88:12 | y | +| tst.js:88:12:88:12 | y | tst.js:91:14:91:14 | y | | tst.js:88:18:88:18 | o | tst.js:88:7:88:14 | { q: y } | -| tst.js:90:4:90:15 | z | tst.js:91:18:91:18 | z | | tst.js:90:4:90:15 | { r: z } = o | tst.js:90:3:90:16 | ({ r: z } = o) | -| tst.js:90:6:90:9 | r: z | tst.js:90:4:90:15 | z | +| tst.js:90:6:90:9 | r: z | tst.js:90:9:90:9 | z | +| tst.js:90:9:90:9 | z | tst.js:91:18:91:18 | z | | tst.js:90:15:90:15 | o | tst.js:90:4:90:11 | { r: z } | | tst.js:90:15:90:15 | o | tst.js:90:4:90:15 | { r: z } = o | | tst.js:91:10:91:18 | x + y + z | tst.js:87:1:96:2 | (functi ... r: 0\\n}) | | tst.js:91:10:91:18 | x + y + z | tst.js:87:2:92:1 | return of anonymous function | | tst.js:92:4:96:1 | {\\n p: ... r: 0\\n} | tst.js:87:11:87:24 | { p: x, ...o } | | tst.js:98:2:103:1 | functio ... + z;\\n} | tst.js:98:1:103:2 | (functi ... + z;\\n}) | -| tst.js:98:11:98:24 | rest | tst.js:99:15:99:18 | rest | -| tst.js:98:11:98:24 | rest | tst.js:101:13:101:16 | rest | -| tst.js:98:11:98:24 | x | tst.js:102:10:102:10 | x | -| tst.js:98:13:98:13 | x | tst.js:98:11:98:24 | x | -| tst.js:98:19:98:22 | ...rest | tst.js:98:11:98:24 | rest | -| tst.js:99:7:99:18 | y | tst.js:102:14:102:14 | y | -| tst.js:99:9:99:9 | y | tst.js:99:7:99:18 | y | +| tst.js:98:13:98:13 | x | tst.js:98:13:98:13 | x | +| tst.js:98:13:98:13 | x | tst.js:102:10:102:10 | x | +| tst.js:98:19:98:22 | ...rest | tst.js:98:19:98:22 | rest | +| tst.js:98:19:98:22 | rest | tst.js:99:15:99:18 | rest | +| tst.js:98:19:98:22 | rest | tst.js:101:13:101:16 | rest | +| tst.js:99:9:99:9 | y | tst.js:99:9:99:9 | y | +| tst.js:99:9:99:9 | y | tst.js:102:14:102:14 | y | | tst.js:99:15:99:18 | rest | tst.js:99:7:99:11 | [ y ] | -| tst.js:101:3:101:16 | z | tst.js:102:18:102:18 | z | -| tst.js:101:7:101:7 | z | tst.js:101:3:101:16 | z | +| tst.js:101:7:101:7 | z | tst.js:101:7:101:7 | z | +| tst.js:101:7:101:7 | z | tst.js:102:18:102:18 | z | | tst.js:101:13:101:16 | rest | tst.js:101:3:101:9 | [ , z ] | | tst.js:101:13:101:16 | rest | tst.js:101:3:101:16 | [ , z ] = rest | | tst.js:102:10:102:18 | x + y + z | tst.js:98:1:103:17 | (functi ... 3, 0 ]) | @@ -1125,41 +1125,41 @@ flowStep | tst.js:105:1:105:1 | x | tst.js:105:1:105:6 | x ?? y | | tst.js:105:6:105:6 | y | tst.js:105:1:105:6 | x ?? y | | tst.js:107:2:113:1 | functio ... v2c;\\n} | tst.js:107:1:113:2 | (functi ... v2c;\\n}) | -| tst.js:108:6:108:38 | v1a | tst.js:109:2:109:4 | v1a | -| tst.js:108:6:108:38 | v1b | tst.js:109:8:109:10 | v1b | -| tst.js:108:6:108:38 | v1c | tst.js:109:14:109:16 | v1c | -| tst.js:108:7:108:9 | v1a | tst.js:108:6:108:38 | v1a | -| tst.js:108:12:108:20 | v1b = o1b | tst.js:108:6:108:38 | v1b | -| tst.js:108:18:108:20 | o1b | tst.js:108:6:108:38 | v1b | -| tst.js:108:23:108:31 | v1c = o1c | tst.js:108:6:108:38 | v1c | -| tst.js:108:29:108:31 | o1c | tst.js:108:6:108:38 | v1c | +| tst.js:108:7:108:9 | v1a | tst.js:108:7:108:9 | v1a | +| tst.js:108:7:108:9 | v1a | tst.js:109:2:109:4 | v1a | +| tst.js:108:12:108:14 | v1b | tst.js:109:8:109:10 | v1b | +| tst.js:108:12:108:20 | v1b = o1b | tst.js:108:12:108:14 | v1b | +| tst.js:108:18:108:20 | o1b | tst.js:108:12:108:14 | v1b | +| tst.js:108:23:108:25 | v1c | tst.js:109:14:109:16 | v1c | +| tst.js:108:23:108:31 | v1c = o1c | tst.js:108:23:108:25 | v1c | +| tst.js:108:29:108:31 | o1c | tst.js:108:23:108:25 | v1c | | tst.js:108:36:108:38 | o1d | tst.js:108:6:108:32 | {v1a, v ... = o1c} | -| tst.js:111:6:111:38 | v2a | tst.js:112:2:112:4 | v2a | -| tst.js:111:6:111:38 | v2b | tst.js:112:8:112:10 | v2b | -| tst.js:111:6:111:38 | v2c | tst.js:112:14:112:16 | v2c | -| tst.js:111:7:111:9 | v2a | tst.js:111:6:111:38 | v2a | -| tst.js:111:12:111:14 | v2b | tst.js:111:6:111:38 | v2b | -| tst.js:111:18:111:20 | o2b | tst.js:111:6:111:38 | v2b | -| tst.js:111:23:111:25 | v2c | tst.js:111:6:111:38 | v2c | -| tst.js:111:29:111:31 | o2c | tst.js:111:6:111:38 | v2c | +| tst.js:111:7:111:9 | v2a | tst.js:111:7:111:9 | v2a | +| tst.js:111:7:111:9 | v2a | tst.js:112:2:112:4 | v2a | +| tst.js:111:12:111:14 | v2b | tst.js:111:12:111:14 | v2b | +| tst.js:111:12:111:14 | v2b | tst.js:112:8:112:10 | v2b | +| tst.js:111:18:111:20 | o2b | tst.js:111:12:111:14 | v2b | +| tst.js:111:23:111:25 | v2c | tst.js:111:23:111:25 | v2c | +| tst.js:111:23:111:25 | v2c | tst.js:112:14:112:16 | v2c | +| tst.js:111:29:111:31 | o2c | tst.js:111:23:111:25 | v2c | | tst.js:111:36:111:38 | o2d | tst.js:111:6:111:32 | [v2a, v ... = o2c] | | tst.js:115:1:115:12 | reflective call | tst.js:115:1:115:12 | Array.call() | getImmediatePredecessor | arguments.js:1:2:12:1 | functio ... , 3);\\n} | arguments.js:1:1:12:2 | (functi ... 3);\\n}) | -| arguments.js:2:5:2:5 | arguments | arguments.js:4:28:4:36 | arguments | -| arguments.js:2:5:2:5 | arguments | arguments.js:5:25:5:33 | arguments | -| arguments.js:2:5:2:5 | arguments | arguments.js:6:20:6:28 | arguments | +| arguments.js:2:5:2:4 | arguments | arguments.js:4:28:4:36 | arguments | +| arguments.js:2:5:2:4 | arguments | arguments.js:5:25:5:33 | arguments | +| arguments.js:2:5:2:4 | arguments | arguments.js:6:20:6:28 | arguments | | arguments.js:2:5:10:5 | functio ... ;\\n } | arguments.js:2:14:2:14 | f | | arguments.js:2:14:2:14 | f | arguments.js:11:5:11:5 | f | | arguments.js:2:16:2:16 | x | arguments.js:2:16:2:16 | x | | arguments.js:2:16:2:16 | x | arguments.js:3:24:3:24 | x | -| arguments.js:6:13:6:28 | args | arguments.js:7:24:7:27 | args | -| arguments.js:6:20:6:28 | arguments | arguments.js:6:13:6:28 | args | -| arguments.js:8:9:8:22 | arguments | arguments.js:9:27:9:35 | arguments | -| arguments.js:8:21:8:22 | {} | arguments.js:8:9:8:22 | arguments | +| arguments.js:6:13:6:16 | args | arguments.js:7:24:7:27 | args | +| arguments.js:6:20:6:28 | arguments | arguments.js:6:13:6:16 | args | +| arguments.js:8:9:8:17 | arguments | arguments.js:9:27:9:35 | arguments | +| arguments.js:8:21:8:22 | {} | arguments.js:8:9:8:17 | arguments | | arguments.js:8:21:8:22 | {} | arguments.js:8:9:8:22 | arguments = {} | -| eval.js:2:7:2:12 | x | eval.js:4:3:4:3 | x | -| eval.js:2:11:2:12 | 42 | eval.js:2:7:2:12 | x | +| eval.js:2:7:2:7 | x | eval.js:4:3:4:3 | x | +| eval.js:2:11:2:12 | 42 | eval.js:2:7:2:7 | x | | sources.js:1:6:1:6 | x | sources.js:1:6:1:6 | x | | sources.js:1:6:1:6 | x | sources.js:1:11:1:11 | x | | sources.js:1:6:1:11 | x => x | sources.js:1:5:1:12 | (x => x) | @@ -1173,14 +1173,14 @@ getImmediatePredecessor | sources.js:9:14:9:18 | array | sources.js:10:19:10:23 | array | | sources.js:9:14:9:18 | array | sources.js:11:23:11:27 | array | | sources.js:10:12:10:14 | key | sources.js:10:28:10:30 | key | -| sources.js:11:12:11:18 | key | sources.js:11:32:11:34 | key | -| sources.js:11:14:11:16 | key | sources.js:11:12:11:18 | key | -| tst2.ts:1:1:1:1 | A | tst2.ts:1:18:1:18 | A | -| tst2.ts:1:8:5:1 | A | tst2.ts:11:11:11:11 | A | -| tst2.ts:1:8:5:1 | A | tst2.ts:15:11:15:11 | A | -| tst2.ts:1:8:5:1 | namespa ... lysed\\n} | tst2.ts:1:8:5:1 | A | -| tst2.ts:2:14:2:19 | x | tst2.ts:4:3:4:3 | x | -| tst2.ts:2:18:2:19 | 42 | tst2.ts:2:14:2:19 | x | +| sources.js:11:14:11:16 | key | sources.js:11:14:11:16 | key | +| sources.js:11:14:11:16 | key | sources.js:11:32:11:34 | key | +| tst2.ts:1:1:1:0 | A | tst2.ts:1:18:1:18 | A | +| tst2.ts:1:8:5:1 | namespa ... lysed\\n} | tst2.ts:1:18:1:18 | A | +| tst2.ts:1:18:1:18 | A | tst2.ts:11:11:11:11 | A | +| tst2.ts:1:18:1:18 | A | tst2.ts:15:11:15:11 | A | +| tst2.ts:2:14:2:14 | x | tst2.ts:4:3:4:3 | x | +| tst2.ts:2:18:2:19 | 42 | tst2.ts:2:14:2:14 | x | | tst2.ts:7:1:7:0 | A | tst2.ts:8:3:8:3 | A | | tst2.ts:7:1:9:1 | functio ... = 23;\\n} | tst2.ts:7:10:7:13 | setX | | tst2.ts:7:10:7:13 | setX | tst2.ts:3:3:3:6 | setX | @@ -1194,43 +1194,43 @@ getImmediatePredecessor | tst.js:1:10:1:11 | fs | tst.js:1:10:1:11 | fs | | tst.js:1:10:1:11 | fs | tst.js:7:1:7:2 | fs | | tst.js:1:10:1:11 | fs | tst.js:22:24:22:25 | fs | -| tst.js:3:5:3:10 | x | tst.js:8:1:8:1 | x | -| tst.js:3:5:3:10 | x | tst.js:9:2:9:2 | x | -| tst.js:3:5:3:10 | x | tst.js:10:1:10:1 | x | -| tst.js:3:5:3:10 | x | tst.js:11:1:11:1 | x | -| tst.js:3:5:3:10 | x | tst.js:11:1:11:1 | x | -| tst.js:3:5:3:10 | x | tst.js:11:1:11:1 | x | -| tst.js:3:5:3:10 | x | tst.js:12:1:12:1 | x | -| tst.js:3:5:3:10 | x | tst.js:13:1:13:1 | x | -| tst.js:3:9:3:10 | 42 | tst.js:3:5:3:10 | x | -| tst.js:4:5:4:12 | y | tst.js:10:4:10:4 | y | -| tst.js:4:5:4:12 | y | tst.js:11:6:11:6 | y | -| tst.js:4:5:4:12 | y | tst.js:12:6:12:6 | y | -| tst.js:4:5:4:12 | y | tst.js:13:5:13:5 | y | -| tst.js:4:5:4:12 | y | tst.js:14:9:14:9 | y | -| tst.js:4:5:4:12 | y | tst.js:105:6:105:6 | y | -| tst.js:4:9:4:12 | "hi" | tst.js:4:5:4:12 | y | +| tst.js:3:5:3:5 | x | tst.js:8:1:8:1 | x | +| tst.js:3:5:3:5 | x | tst.js:9:2:9:2 | x | +| tst.js:3:5:3:5 | x | tst.js:10:1:10:1 | x | +| tst.js:3:5:3:5 | x | tst.js:11:1:11:1 | x | +| tst.js:3:5:3:5 | x | tst.js:11:1:11:1 | x | +| tst.js:3:5:3:5 | x | tst.js:11:1:11:1 | x | +| tst.js:3:5:3:5 | x | tst.js:12:1:12:7 | x | +| tst.js:3:5:3:5 | x | tst.js:13:1:13:6 | x | +| tst.js:3:9:3:10 | 42 | tst.js:3:5:3:5 | x | +| tst.js:4:5:4:5 | y | tst.js:10:4:10:4 | y | +| tst.js:4:5:4:5 | y | tst.js:11:6:11:6 | y | +| tst.js:4:5:4:5 | y | tst.js:12:6:12:6 | y | +| tst.js:4:5:4:5 | y | tst.js:13:5:13:5 | y | +| tst.js:4:5:4:5 | y | tst.js:14:9:14:9 | y | +| tst.js:4:5:4:5 | y | tst.js:105:6:105:6 | y | +| tst.js:4:9:4:12 | "hi" | tst.js:4:5:4:5 | y | | tst.js:9:2:9:2 | x | tst.js:9:1:9:3 | (x) | | tst.js:10:4:10:4 | y | tst.js:10:1:10:4 | x, y | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | x | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | x | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | x | -| tst.js:13:1:13:1 | x | tst.js:14:5:14:5 | x | -| tst.js:13:1:13:1 | x | tst.js:25:3:25:3 | x | -| tst.js:13:1:13:5 | z | tst.js:14:1:14:1 | z | -| tst.js:13:5:13:5 | y | tst.js:13:1:13:5 | z | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:1 | x | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:1 | x | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:1 | x | +| tst.js:13:1:13:1 | z | tst.js:14:1:14:1 | z | +| tst.js:13:1:13:6 | x | tst.js:14:5:14:5 | x | +| tst.js:13:1:13:6 | x | tst.js:25:3:25:3 | x | +| tst.js:13:5:13:5 | y | tst.js:13:1:13:1 | z | | tst.js:13:5:13:5 | y | tst.js:13:1:13:5 | z = y | | tst.js:16:2:20:1 | functio ... n "";\\n} | tst.js:16:1:20:2 | (functi ... "";\\n}) | | tst.js:16:13:16:13 | a | tst.js:16:13:16:13 | a | | tst.js:16:13:16:13 | a | tst.js:18:12:18:12 | a | | tst.js:20:4:20:8 | "arg" | tst.js:16:13:16:13 | a | -| tst.js:22:5:22:25 | readFileSync | tst.js:23:1:23:12 | readFileSync | -| tst.js:22:7:22:18 | readFileSync | tst.js:22:5:22:25 | readFileSync | +| tst.js:22:7:22:18 | readFileSync | tst.js:22:7:22:18 | readFileSync | +| tst.js:22:7:22:18 | readFileSync | tst.js:23:1:23:12 | readFileSync | | tst.js:22:24:22:25 | fs | tst.js:22:5:22:20 | { readFileSync } | -| tst.js:25:1:25:3 | x | tst.js:26:1:26:1 | x | -| tst.js:25:1:25:3 | x | tst.js:57:7:57:7 | x | -| tst.js:25:1:25:3 | x | tst.js:58:11:58:11 | x | -| tst.js:25:1:25:3 | x | tst.js:105:1:105:1 | x | +| tst.js:25:3:25:3 | x | tst.js:26:1:26:1 | x | +| tst.js:25:3:25:3 | x | tst.js:57:7:57:7 | x | +| tst.js:25:3:25:3 | x | tst.js:58:11:58:11 | x | +| tst.js:25:3:25:3 | x | tst.js:105:1:105:1 | x | | tst.js:28:2:28:1 | x | tst.js:29:3:29:3 | x | | tst.js:28:2:29:3 | () =>\\n x | tst.js:28:1:30:1 | (() =>\\n ... ables\\n) | | tst.js:29:3:29:3 | x | tst.js:28:1:30:3 | (() =>\\n ... les\\n)() | @@ -1239,69 +1239,69 @@ getImmediatePredecessor | tst.js:32:10:32:10 | g | tst.js:35:1:35:1 | g | | tst.js:32:10:32:10 | g | tst.js:60:1:60:1 | g | | tst.js:32:10:32:10 | g | tst.js:62:4:62:4 | g | -| tst.js:37:5:42:1 | o | tst.js:43:1:43:1 | o | -| tst.js:37:5:42:1 | o | tst.js:44:1:44:1 | o | -| tst.js:37:5:42:1 | o | tst.js:61:3:61:3 | o | -| tst.js:37:5:42:1 | o | tst.js:62:1:62:1 | o | -| tst.js:37:5:42:1 | o | tst.js:77:15:77:15 | o | -| tst.js:37:5:42:1 | o | tst.js:80:15:80:15 | o | -| tst.js:37:5:42:1 | o | tst.js:83:23:83:23 | o | -| tst.js:37:5:42:1 | o | tst.js:85:23:85:23 | o | -| tst.js:37:9:42:1 | {\\n x: ... ;\\n }\\n} | tst.js:37:5:42:1 | o | +| tst.js:37:5:37:5 | o | tst.js:43:1:43:1 | o | +| tst.js:37:5:37:5 | o | tst.js:44:1:44:1 | o | +| tst.js:37:5:37:5 | o | tst.js:61:3:61:3 | o | +| tst.js:37:5:37:5 | o | tst.js:62:1:62:1 | o | +| tst.js:37:5:37:5 | o | tst.js:77:15:77:15 | o | +| tst.js:37:5:37:5 | o | tst.js:80:15:80:15 | o | +| tst.js:37:5:37:5 | o | tst.js:83:23:83:23 | o | +| tst.js:37:5:37:5 | o | tst.js:85:23:85:23 | o | +| tst.js:37:9:42:1 | {\\n x: ... ;\\n }\\n} | tst.js:37:5:37:5 | o | | tst.js:39:4:39:3 | this | tst.js:40:5:40:8 | this | | tst.js:46:10:46:11 | "" | tst.js:46:1:46:11 | global = "" | -| tst.js:49:1:54:1 | A | tst.js:55:1:55:1 | A | -| tst.js:49:1:54:1 | class A ... `\\n }\\n} | tst.js:49:1:54:1 | A | +| tst.js:49:1:54:1 | class A ... `\\n }\\n} | tst.js:49:7:49:7 | A | +| tst.js:49:7:49:7 | A | tst.js:55:1:55:1 | A | | tst.js:50:14:50:13 | this | tst.js:51:5:51:9 | implicit 'this' | | tst.js:64:1:67:1 | functio ... lysed\\n} | tst.js:64:11:64:11 | h | | tst.js:64:11:64:11 | h | tst.js:68:12:68:12 | h | -| tst.js:68:5:68:14 | iter | tst.js:69:1:69:4 | iter | -| tst.js:68:12:68:14 | h() | tst.js:68:5:68:14 | iter | +| tst.js:68:5:68:8 | iter | tst.js:69:1:69:4 | iter | +| tst.js:68:12:68:14 | h() | tst.js:68:5:68:8 | iter | | tst.js:77:10:77:10 | i | tst.js:78:3:78:3 | i | | tst.js:80:10:80:10 | v | tst.js:81:3:81:3 | v | | tst.js:83:18:83:18 | v | tst.js:83:26:83:26 | v | | tst.js:85:18:85:18 | v | tst.js:85:26:85:26 | v | | tst.js:87:2:92:1 | functio ... + z;\\n} | tst.js:87:1:92:2 | (functi ... + z;\\n}) | -| tst.js:87:11:87:24 | o | tst.js:88:18:88:18 | o | -| tst.js:87:11:87:24 | o | tst.js:90:15:90:15 | o | -| tst.js:87:11:87:24 | x | tst.js:91:10:91:10 | x | -| tst.js:87:13:87:16 | p: x | tst.js:87:11:87:24 | x | -| tst.js:87:22:87:22 | ...o | tst.js:87:11:87:24 | o | -| tst.js:88:7:88:18 | y | tst.js:91:14:91:14 | y | -| tst.js:88:9:88:12 | q: y | tst.js:88:7:88:18 | y | +| tst.js:87:13:87:16 | p: x | tst.js:87:16:87:16 | x | +| tst.js:87:16:87:16 | x | tst.js:91:10:91:10 | x | +| tst.js:87:22:87:22 | ...o | tst.js:87:22:87:22 | o | +| tst.js:87:22:87:22 | o | tst.js:88:18:88:18 | o | +| tst.js:87:22:87:22 | o | tst.js:90:15:90:15 | o | +| tst.js:88:9:88:12 | q: y | tst.js:88:12:88:12 | y | +| tst.js:88:12:88:12 | y | tst.js:91:14:91:14 | y | | tst.js:88:18:88:18 | o | tst.js:88:7:88:14 | { q: y } | -| tst.js:90:4:90:15 | z | tst.js:91:18:91:18 | z | | tst.js:90:4:90:15 | { r: z } = o | tst.js:90:3:90:16 | ({ r: z } = o) | -| tst.js:90:6:90:9 | r: z | tst.js:90:4:90:15 | z | +| tst.js:90:6:90:9 | r: z | tst.js:90:9:90:9 | z | +| tst.js:90:9:90:9 | z | tst.js:91:18:91:18 | z | | tst.js:90:15:90:15 | o | tst.js:90:4:90:11 | { r: z } | | tst.js:90:15:90:15 | o | tst.js:90:4:90:15 | { r: z } = o | | tst.js:91:10:91:18 | x + y + z | tst.js:87:1:96:2 | (functi ... r: 0\\n}) | | tst.js:92:4:96:1 | {\\n p: ... r: 0\\n} | tst.js:87:11:87:24 | { p: x, ...o } | | tst.js:98:2:103:1 | functio ... + z;\\n} | tst.js:98:1:103:2 | (functi ... + z;\\n}) | -| tst.js:98:11:98:24 | rest | tst.js:99:15:99:18 | rest | -| tst.js:98:11:98:24 | rest | tst.js:101:13:101:16 | rest | -| tst.js:98:11:98:24 | x | tst.js:102:10:102:10 | x | -| tst.js:98:13:98:13 | x | tst.js:98:11:98:24 | x | -| tst.js:98:19:98:22 | ...rest | tst.js:98:11:98:24 | rest | -| tst.js:99:7:99:18 | y | tst.js:102:14:102:14 | y | -| tst.js:99:9:99:9 | y | tst.js:99:7:99:18 | y | +| tst.js:98:13:98:13 | x | tst.js:98:13:98:13 | x | +| tst.js:98:13:98:13 | x | tst.js:102:10:102:10 | x | +| tst.js:98:19:98:22 | ...rest | tst.js:98:19:98:22 | rest | +| tst.js:98:19:98:22 | rest | tst.js:99:15:99:18 | rest | +| tst.js:98:19:98:22 | rest | tst.js:101:13:101:16 | rest | +| tst.js:99:9:99:9 | y | tst.js:99:9:99:9 | y | +| tst.js:99:9:99:9 | y | tst.js:102:14:102:14 | y | | tst.js:99:15:99:18 | rest | tst.js:99:7:99:11 | [ y ] | -| tst.js:101:3:101:16 | z | tst.js:102:18:102:18 | z | -| tst.js:101:7:101:7 | z | tst.js:101:3:101:16 | z | +| tst.js:101:7:101:7 | z | tst.js:101:7:101:7 | z | +| tst.js:101:7:101:7 | z | tst.js:102:18:102:18 | z | | tst.js:101:13:101:16 | rest | tst.js:101:3:101:9 | [ , z ] | | tst.js:101:13:101:16 | rest | tst.js:101:3:101:16 | [ , z ] = rest | | tst.js:102:10:102:18 | x + y + z | tst.js:98:1:103:17 | (functi ... 3, 0 ]) | | tst.js:103:4:103:16 | [ 19, 23, 0 ] | tst.js:98:11:98:24 | [ x, ...rest ] | | tst.js:107:2:113:1 | functio ... v2c;\\n} | tst.js:107:1:113:2 | (functi ... v2c;\\n}) | -| tst.js:108:6:108:38 | v1a | tst.js:109:2:109:4 | v1a | -| tst.js:108:6:108:38 | v1b | tst.js:109:8:109:10 | v1b | -| tst.js:108:6:108:38 | v1c | tst.js:109:14:109:16 | v1c | -| tst.js:108:7:108:9 | v1a | tst.js:108:6:108:38 | v1a | +| tst.js:108:7:108:9 | v1a | tst.js:108:7:108:9 | v1a | +| tst.js:108:7:108:9 | v1a | tst.js:109:2:109:4 | v1a | +| tst.js:108:12:108:14 | v1b | tst.js:109:8:109:10 | v1b | +| tst.js:108:23:108:25 | v1c | tst.js:109:14:109:16 | v1c | | tst.js:108:36:108:38 | o1d | tst.js:108:6:108:32 | {v1a, v ... = o1c} | -| tst.js:111:6:111:38 | v2a | tst.js:112:2:112:4 | v2a | -| tst.js:111:6:111:38 | v2b | tst.js:112:8:112:10 | v2b | -| tst.js:111:6:111:38 | v2c | tst.js:112:14:112:16 | v2c | -| tst.js:111:7:111:9 | v2a | tst.js:111:6:111:38 | v2a | +| tst.js:111:7:111:9 | v2a | tst.js:111:7:111:9 | v2a | +| tst.js:111:7:111:9 | v2a | tst.js:112:2:112:4 | v2a | +| tst.js:111:12:111:14 | v2b | tst.js:112:8:112:10 | v2b | +| tst.js:111:23:111:25 | v2c | tst.js:112:14:112:16 | v2c | | tst.js:111:36:111:38 | o2d | tst.js:111:6:111:32 | [v2a, v ... = o2c] | | tst.js:115:1:115:12 | reflective call | tst.js:115:1:115:12 | Array.call() | | tst.js:117:22:117:23 | x1 | tst.js:117:10:117:24 | Object.seal(x1) | @@ -1340,7 +1340,7 @@ incomplete | arguments.js:11:5:11:14 | exceptional return of f(1, 2, 3) | call | | arguments.js:11:5:11:14 | f(1, 2, 3) | call | | eval.js:1:1:5:1 | exceptional return of function k | call | -| eval.js:2:7:2:12 | x | eval | +| eval.js:2:7:2:7 | x | eval | | eval.js:3:3:3:6 | eval | global | | eval.js:3:3:3:16 | eval("x = 23") | call | | eval.js:3:3:3:16 | exceptional return of eval("x = 23") | call | @@ -1351,9 +1351,9 @@ incomplete | sources.js:9:1:12:1 | exceptional return of function foo | call | | sources.js:9:14:9:18 | array | call | | sources.js:10:12:10:14 | key | heap | -| sources.js:11:12:11:18 | key | heap | | sources.js:11:14:11:16 | key | heap | -| tst2.ts:2:14:2:19 | x | namespace | +| sources.js:11:14:11:16 | key | heap | +| tst2.ts:2:14:2:14 | x | namespace | | tst2.ts:3:3:3:8 | exceptional return of setX() | call | | tst2.ts:3:3:3:8 | setX() | call | | tst2.ts:7:1:9:1 | exceptional return of function setX | call | diff --git a/javascript/ql/test/library-tests/DefUse/DefUsePair.expected b/javascript/ql/test/library-tests/DefUse/DefUsePair.expected index f029dd71b6c..fe8ec09345b 100644 --- a/javascript/ql/test/library-tests/DefUse/DefUsePair.expected +++ b/javascript/ql/test/library-tests/DefUse/DefUsePair.expected @@ -1,9 +1,9 @@ -| classes.js:7:5:8:5 | def@7:5 | classes.js:10:5:10:12 | LocalFoo | +| classes.js:7:11:7:18 | def@7:11 | classes.js:10:5:10:12 | LocalFoo | | es2015.js:1:10:1:11 | def@1:10 | es2015.js:2:3:2:4 | fn | | es2015.js:5:16:5:16 | def@5:16 | es2015.js:5:32:5:32 | i | | es2015.js:5:16:5:16 | def@5:16 | es2015.js:5:34:5:34 | i | | es2015modules.js:1:10:1:12 | def@1:10 | es2015modules.js:4:3:4:5 | foo | -| es2015modules.js:1:15:1:24 | def@1:15 | es2015modules.js:6:3:6:5 | baz | +| es2015modules.js:1:22:1:24 | def@1:22 | es2015modules.js:6:3:6:5 | baz | | es2015modules.js:10:10:10:13 | def@10:10 | es2015modules.js:7:3:7:6 | quux | | es2015modules.js:15:17:15:17 | def@15:17 | es2015modules.js:12:1:12:1 | f | | es2015modules.js:16:25:16:25 | def@16:25 | es2015modules.js:13:1:13:1 | g | @@ -14,17 +14,17 @@ | fundecls.js:30:12:30:12 | def@30:12 | fundecls.js:28:3:28:3 | f | | fundecls.js:36:12:36:12 | def@36:12 | fundecls.js:35:3:35:3 | f | | fundecls.js:39:11:39:11 | def@39:11 | fundecls.js:40:7:40:7 | x | -| fundecls.js:45:3:45:3 | phi@45:3 | fundecls.js:45:3:45:3 | f | +| fundecls.js:45:3:45:6 | phi@45:3 | fundecls.js:45:3:45:3 | f | | fundecls.js:48:11:48:11 | def@48:11 | fundecls.js:50:7:50:7 | x | | tst.js:1:12:1:12 | def@1:12 | tst.js:3:12:3:12 | o | | tst.js:1:12:1:12 | def@1:12 | tst.js:5:16:5:16 | o | -| tst.js:2:9:2:14 | def@2:9 | tst.js:8:17:8:17 | y | -| tst.js:3:2:3:2 | phi@3:2 | tst.js:4:5:4:5 | i | -| tst.js:5:2:5:2 | phi@5:2 | tst.js:7:6:7:6 | i | -| tst.js:5:2:5:2 | phi@5:2 | tst.js:8:14:8:14 | z | +| tst.js:2:9:2:9 | def@2:9 | tst.js:8:17:8:17 | y | +| tst.js:3:2:4:6 | phi@3:2 | tst.js:4:5:4:5 | i | +| tst.js:5:2:7:7 | phi@5:2 | tst.js:7:6:7:6 | i | +| tst.js:5:2:7:7 | phi@5:2 | tst.js:8:14:8:14 | z | | tst.js:5:11:5:11 | def@5:11 | tst.js:6:7:6:7 | z | -| tst.js:12:2:12:7 | def@12:2 | tst.js:14:9:14:9 | x | +| tst.js:12:2:12:2 | def@12:2 | tst.js:14:9:14:9 | x | | tst.js:19:11:19:11 | def@19:11 | tst.js:18:9:18:9 | x | -| tst.js:23:6:23:23 | def@23:6 | tst.js:24:2:24:2 | a | -| tst.js:23:6:23:23 | def@23:6 | tst.js:24:6:24:6 | c | +| tst.js:23:7:23:7 | def@23:7 | tst.js:24:2:24:2 | a | +| tst.js:23:14:23:14 | def@23:14 | tst.js:24:6:24:6 | c | | tst.js:26:11:26:11 | def@26:11 | tst.js:27:2:27:2 | a | diff --git a/javascript/ql/test/library-tests/FlowSummary/test.ql b/javascript/ql/test/library-tests/FlowSummary/test.ql index e8ca23a423c..0e40dcdadb0 100644 --- a/javascript/ql/test/library-tests/FlowSummary/test.ql +++ b/javascript/ql/test/library-tests/FlowSummary/test.ql @@ -8,7 +8,7 @@ DataFlow::CallNode getACall(string name) { result.getCalleeNode().getALocalSource() = DataFlow::globalVarRef(name) } -module ConfigArg implements DataFlow::ConfigSig { +module FlowConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node node) { node = getACall("source") } predicate isSink(DataFlow::Node node) { node = getACall("sink").getAnArgument() } @@ -19,7 +19,7 @@ module ConfigArg implements DataFlow::ConfigSig { } } -module Configuration = DataFlow::Global; +module Flow = DataFlow::Global; class BasicBarrierGuard extends DataFlow::CallNode { BasicBarrierGuard() { this = getACall("isSafe") } @@ -32,5 +32,5 @@ class BasicBarrierGuard extends DataFlow::CallNode { deprecated class ConsistencyConfig extends ConsistencyConfiguration { ConsistencyConfig() { this = "ConsistencyConfig" } - override DataFlow::Node getAnAlert() { Configuration::flow(_, result) } + override DataFlow::Node getAnAlert() { Flow::flow(_, result) } } diff --git a/javascript/ql/test/library-tests/GlobalAccessPaths/GlobalAccessPaths.expected b/javascript/ql/test/library-tests/GlobalAccessPaths/GlobalAccessPaths.expected index b216e18c71d..c6ca30cd329 100644 --- a/javascript/ql/test/library-tests/GlobalAccessPaths/GlobalAccessPaths.expected +++ b/javascript/ql/test/library-tests/GlobalAccessPaths/GlobalAccessPaths.expected @@ -9,22 +9,22 @@ test_getAReferenceTo | other_ns.js:4:9:4:10 | NS | NS | | other_ns.js:4:9:4:16 | NS \|\| {} | NS | | other_ns.js:6:1:6:8 | Conflict | Conflict | -| test.js:2:7:2:17 | v | foo.bar | +| test.js:2:7:2:7 | v | foo.bar | | test.js:2:11:2:13 | foo | foo | | test.js:2:11:2:17 | foo.bar | foo.bar | | test.js:3:3:3:3 | v | foo.bar | | test.js:3:3:3:7 | v.baz | foo.bar.baz | | test.js:4:7:4:24 | { baz, a, b: {c} } | foo.bar | -| test.js:4:7:4:28 | c | foo.bar.b.c | | test.js:4:9:4:11 | baz | foo.bar.baz | | test.js:4:14:4:14 | a | foo.bar.a | | test.js:4:17:4:22 | b: {c} | foo.bar.b | | test.js:4:20:4:22 | {c} | foo.bar.b | | test.js:4:21:4:21 | c | foo.bar.b.c | +| test.js:4:21:4:21 | c | foo.bar.b.c | | test.js:4:28:4:28 | v | foo.bar | | test.js:5:11:5:11 | c | foo.bar.b.c | | test.js:5:11:5:13 | c.d | foo.bar.b.c.d | -| test.js:7:7:7:16 | w | window | +| test.js:7:7:7:7 | w | window | | test.js:7:11:7:16 | window | window | | test.js:8:13:8:18 | window | window | | test.js:8:13:8:20 | window.x | x | @@ -35,11 +35,11 @@ test_getAReferenceTo | test.js:10:13:10:13 | w | window | | test.js:10:13:10:15 | w.x | x | | test.js:10:13:10:17 | w.x.y | x.y | -| test.js:12:7:12:25 | notUnique | foo.bar | +| test.js:12:7:12:15 | notUnique | foo.bar | | test.js:12:19:12:21 | foo | foo | | test.js:12:19:12:25 | foo.bar | foo.bar | | test.js:13:7:13:15 | something | something | -| test.js:14:5:14:23 | notUnique | bar.baz | +| test.js:14:5:14:13 | notUnique | bar.baz | | test.js:14:5:14:23 | notUnique = bar.baz | bar.baz | | test.js:14:17:14:19 | bar | bar | | test.js:14:17:14:23 | bar.baz | bar.baz | @@ -56,7 +56,7 @@ test_getAReferenceTo | test.js:33:7:33:18 | { bar = {} } | foo | | test.js:33:9:33:16 | bar = {} | foo.bar | | test.js:33:22:33:24 | foo | foo | -| test.js:39:3:39:20 | lazyInit | foo.bar | +| test.js:39:3:39:10 | lazyInit | foo.bar | | test.js:39:3:39:20 | lazyInit = foo.bar | foo.bar | | test.js:39:14:39:16 | foo | foo | | test.js:39:14:39:20 | foo.bar | foo.bar | @@ -77,7 +77,7 @@ test_getAReferenceTo | test.js:68:11:68:34 | Object. ... ar).baz | foo.bar.baz | | test.js:68:23:68:25 | foo | foo | | test.js:68:23:68:29 | foo.bar | foo.bar | -| test.js:69:6:69:15 | O | Object | +| test.js:69:6:69:6 | O | Object | | test.js:69:10:69:15 | Object | Object | | test.js:70:11:70:11 | O | Object | | test.js:70:11:70:16 | O.seal | Object.seal | diff --git a/javascript/ql/test/library-tests/SSA/GetRhsNode/GetRhsNode.expected b/javascript/ql/test/library-tests/SSA/GetRhsNode/GetRhsNode.expected index e971020cdd6..fba49cf683b 100644 --- a/javascript/ql/test/library-tests/SSA/GetRhsNode/GetRhsNode.expected +++ b/javascript/ql/test/library-tests/SSA/GetRhsNode/GetRhsNode.expected @@ -1,14 +1,14 @@ -| tst.js:2:7:2:13 | a = g() | tst.js:2:7:2:7 | a | tst.js:2:11:2:13 | g() | -| tst.js:4:7:4:24 | { propB: b } = g() | tst.js:4:16:4:16 | b | tst.js:4:9:4:16 | propB: b | -| tst.js:6:7:6:34 | { propC ... } = g() | tst.js:6:16:6:16 | c | tst.js:6:9:6:16 | propC: c | -| tst.js:6:7:6:34 | { propC ... } = g() | tst.js:6:26:6:26 | d | tst.js:6:19:6:26 | propD: d | -| tst.js:8:7:8:41 | { array ... } = g() | tst.js:8:22:8:25 | elm1 | tst.js:8:22:8:25 | elm1 | -| tst.js:8:7:8:41 | { array ... } = g() | tst.js:8:28:8:31 | elm2 | tst.js:8:28:8:31 | elm2 | -| tst.js:17:3:17:22 | ({ propB: b }) = g() | tst.js:4:16:4:16 | b | tst.js:17:6:17:13 | propB: b | -| tst.js:19:3:19:32 | ({ prop ... ) = g() | tst.js:6:16:6:16 | c | tst.js:19:6:19:13 | propC: c | -| tst.js:19:3:19:32 | ({ prop ... ) = g() | tst.js:6:26:6:26 | d | tst.js:19:16:19:23 | propD: d | -| tst.js:21:3:21:22 | [ elm1, elm2 ] = g() | tst.js:8:22:8:25 | elm1 | tst.js:21:5:21:8 | elm1 | -| tst.js:21:3:21:22 | [ elm1, elm2 ] = g() | tst.js:8:28:8:31 | elm2 | tst.js:21:11:21:14 | elm2 | -| tst.js:31:12:31:23 | [elm1, elm2] | tst.js:31:13:31:16 | elm1 | tst.js:31:13:31:16 | elm1 | -| tst.js:31:12:31:23 | [elm1, elm2] | tst.js:31:19:31:22 | elm2 | tst.js:31:19:31:22 | elm2 | -| tst.js:31:26:31:40 | { prop: value } | tst.js:31:34:31:38 | value | tst.js:31:28:31:38 | prop: value | +| tst.js:2:7:2:7 | a = g() | tst.js:2:7:2:7 | a | tst.js:2:11:2:13 | g() | +| tst.js:4:16:4:16 | { propB: b } = g() | tst.js:4:16:4:16 | b | tst.js:4:9:4:16 | propB: b | +| tst.js:6:16:6:16 | { propC ... } = g() | tst.js:6:16:6:16 | c | tst.js:6:9:6:16 | propC: c | +| tst.js:6:26:6:26 | { propC ... } = g() | tst.js:6:26:6:26 | d | tst.js:6:19:6:26 | propD: d | +| tst.js:8:22:8:25 | { array ... } = g() | tst.js:8:22:8:25 | elm1 | tst.js:8:22:8:25 | elm1 | +| tst.js:8:28:8:31 | { array ... } = g() | tst.js:8:28:8:31 | elm2 | tst.js:8:28:8:31 | elm2 | +| tst.js:17:13:17:13 | ({ propB: b }) = g() | tst.js:4:16:4:16 | b | tst.js:17:6:17:13 | propB: b | +| tst.js:19:13:19:13 | ({ prop ... ) = g() | tst.js:6:16:6:16 | c | tst.js:19:6:19:13 | propC: c | +| tst.js:19:23:19:23 | ({ prop ... ) = g() | tst.js:6:26:6:26 | d | tst.js:19:16:19:23 | propD: d | +| tst.js:21:5:21:8 | [ elm1, elm2 ] = g() | tst.js:8:22:8:25 | elm1 | tst.js:21:5:21:8 | elm1 | +| tst.js:21:11:21:14 | [ elm1, elm2 ] = g() | tst.js:8:28:8:31 | elm2 | tst.js:21:11:21:14 | elm2 | +| tst.js:31:13:31:16 | [elm1, elm2] | tst.js:31:13:31:16 | elm1 | tst.js:31:13:31:16 | elm1 | +| tst.js:31:19:31:22 | [elm1, elm2] | tst.js:31:19:31:22 | elm2 | tst.js:31:19:31:22 | elm2 | +| tst.js:31:34:31:38 | { prop: value } | tst.js:31:34:31:38 | value | tst.js:31:28:31:38 | prop: value | diff --git a/javascript/ql/test/library-tests/SSA/SSADefinition/SSADefinition.expected b/javascript/ql/test/library-tests/SSA/SSADefinition/SSADefinition.expected index 77536822831..9bc6c472374 100644 --- a/javascript/ql/test/library-tests/SSA/SSADefinition/SSADefinition.expected +++ b/javascript/ql/test/library-tests/SSA/SSADefinition/SSADefinition.expected @@ -1,39 +1,39 @@ -| tst.js:1:1:1:1 | implicit initialization of y | +| tst.js:1:1:1:0 | implicit initialization of y | | tst.js:1:12:1:12 | x | | tst.js:3:7:3:7 | x = refine[guard: x is false](def@1:12) | | tst.js:3:7:3:7 | x = refine[guard: x is true](def@1:12) | -| tst.js:4:5:4:9 | y = x | -| tst.js:5:3:5:3 | x = phi(refine[guard: x is false]@3:7, refine[guard: x is true]@3:7) | -| tst.js:5:3:5:3 | y = phi(def@4:5, implicitInit@1:1) | -| tst.js:5:3:5:7 | z = y | +| tst.js:4:5:4:5 | y = x | +| tst.js:5:3:5:3 | z = y | +| tst.js:5:3:5:8 | x = phi(refine[guard: x is false]@3:7, refine[guard: x is true]@3:7) | +| tst.js:5:3:5:8 | y = phi(def@4:5, implicitInit@1:1) | | tst.js:6:10:6:10 | x = phi(phi@5:3, refine[guard: x is true]@6:10) | | tst.js:6:10:6:10 | x = refine[guard: x is true](phi@6:10) | | tst.js:6:10:6:10 | z = phi(def@5:3, def@7:5) | -| tst.js:7:5:7:7 | z++ | -| tst.js:11:1:11:1 | implicit initialization of x | +| tst.js:7:5:7:5 | z++ | +| tst.js:11:1:11:0 | implicit initialization of x | | tst.js:11:12:11:12 | x | | tst.js:12:3:12:2 | capture variable x | -| tst.js:15:3:15:8 | x = 42 | -| tst.js:18:1:18:1 | implicit initialization of x | -| tst.js:19:7:19:11 | x = 0 | +| tst.js:15:3:15:3 | x = 42 | +| tst.js:18:1:18:0 | implicit initialization of x | +| tst.js:19:7:19:7 | x = 0 | +| tst.js:20:3:20:2 | capture variable x | | tst.js:20:3:20:2 | capture variable x | | tst.js:20:13:20:16 | iter | -| tst.js:22:5:22:9 | capture variable x | -| tst.js:25:7:25:18 | gen = iter() | -| tst.js:27:3:27:5 | ++x | -| tst.js:31:1:31:1 | implicit initialization of x | -| tst.js:31:1:31:1 | implicit initialization of y | +| tst.js:25:7:25:9 | gen = iter() | +| tst.js:27:5:27:5 | ++x | +| tst.js:31:1:31:0 | capture variable x | +| tst.js:31:1:31:0 | implicit initialization of x | +| tst.js:31:1:31:0 | implicit initialization of y | | tst.js:32:3:32:2 | capture variable x | | tst.js:32:3:32:2 | capture variable y | | tst.js:32:12:32:16 | inner | -| tst.js:34:5:34:10 | x += y | -| tst.js:36:7:36:11 | x = 0 | -| tst.js:36:14:36:18 | y = 1 | -| tst.js:37:3:37:9 | capture variable x | -| tst.js:41:1:41:1 | implicit initialization of x | -| tst.js:42:7:42:11 | x = 0 | -| tst.js:42:14:42:18 | y = 1 | -| tst.js:43:7:43:37 | inc = ( ... */ ++x | +| tst.js:34:5:34:5 | x += y | +| tst.js:36:7:36:7 | x = 0 | +| tst.js:36:14:36:14 | y = 1 | +| tst.js:41:1:41:0 | capture variable x | +| tst.js:41:1:41:0 | implicit initialization of x | +| tst.js:42:7:42:7 | x = 0 | +| tst.js:42:14:42:14 | y = 1 | +| tst.js:43:7:43:9 | inc = ( ... */ ++x | | tst.js:43:13:43:12 | capture variable x | -| tst.js:43:35:43:37 | ++x | -| tst.js:44:3:44:11 | capture variable x | +| tst.js:43:37:43:37 | ++x | diff --git a/javascript/ql/test/library-tests/StringConcatenation/StringOps.expected b/javascript/ql/test/library-tests/StringConcatenation/StringOps.expected index fa1632d2757..c21fbad3292 100644 --- a/javascript/ql/test/library-tests/StringConcatenation/StringOps.expected +++ b/javascript/ql/test/library-tests/StringConcatenation/StringOps.expected @@ -6,26 +6,26 @@ concatenation | html-concat.js:3:14:3:26 | `${x}` | | html-concat.js:5:21:5:47 | `Hey ` | | html-concat.js:7:18:10:24 | `\\n H ... m!` | -| html-concat.js:13:3:13:18 | buffer | +| html-concat.js:13:3:13:8 | buffer | | html-concat.js:13:3:13:18 | buffer += '
  • ' | -| html-concat.js:14:3:14:13 | buffer | +| html-concat.js:14:3:14:8 | buffer | | html-concat.js:14:3:14:13 | buffer += x | -| html-concat.js:15:3:15:15 | buffer | +| html-concat.js:15:3:15:8 | buffer | | html-concat.js:15:3:15:15 | buffer += '!' | -| tst.js:3:3:3:12 | x | +| tst.js:3:3:3:3 | x | | tst.js:3:3:3:12 | x += "two" | -| tst.js:4:3:4:14 | x | +| tst.js:4:3:4:3 | x | | tst.js:4:3:4:14 | x += "three" | -| tst.js:5:3:5:13 | x | +| tst.js:5:3:5:3 | x | | tst.js:5:3:5:13 | x += "four" | -| tst.js:12:5:12:26 | x | +| tst.js:12:5:12:5 | x | | tst.js:12:5:12:26 | x += "o ... + "two" | | tst.js:12:10:12:18 | "one" + y | | tst.js:12:10:12:26 | "one" + y + "two" | -| tst.js:14:3:14:13 | x | +| tst.js:14:3:14:3 | x | | tst.js:14:3:14:13 | x += "last" | | tst.js:19:11:19:23 | "one" + "two" | -| tst.js:20:3:20:25 | x | +| tst.js:20:3:20:3 | x | | tst.js:20:3:20:25 | x += (" ... "four") | | tst.js:20:9:20:24 | "three" + "four" | | tst.js:21:10:21:19 | x + "five" | @@ -43,9 +43,9 @@ concatenation | tst.js:61:10:61:34 | `first ... } last` | | tst.js:77:15:77:37 | ["one", ... three"] | | tst.js:79:12:79:23 | array.join() | -| tst.js:87:5:87:14 | x | +| tst.js:87:5:87:5 | x | | tst.js:87:5:87:14 | x += 'two' | -| tst.js:89:3:89:14 | x | +| tst.js:89:3:89:3 | x | | tst.js:89:3:89:14 | x += 'three' | | tst.js:95:7:95:30 | x.conca ... three') | | tst.js:104:11:104:23 | "foo" + "bar" | @@ -262,31 +262,31 @@ concatenationNode | html-concat.js:8:13:8:13 | x | | html-concat.js:8:15:10:23 | .\\n \\n ... um! | | html-concat.js:13:3:13:8 | buffer | -| html-concat.js:13:3:13:18 | buffer | +| html-concat.js:13:3:13:8 | buffer | | html-concat.js:13:3:13:18 | buffer += '
  • ' | | html-concat.js:13:13:13:18 | '
  • ' | | html-concat.js:14:3:14:8 | buffer | -| html-concat.js:14:3:14:13 | buffer | +| html-concat.js:14:3:14:8 | buffer | | html-concat.js:14:3:14:13 | buffer += x | | html-concat.js:14:13:14:13 | x | | html-concat.js:15:3:15:8 | buffer | -| html-concat.js:15:3:15:15 | buffer | +| html-concat.js:15:3:15:8 | buffer | | html-concat.js:15:3:15:15 | buffer += '!' | | html-concat.js:15:13:15:15 | '!' | | tst.js:3:3:3:3 | x | -| tst.js:3:3:3:12 | x | +| tst.js:3:3:3:3 | x | | tst.js:3:3:3:12 | x += "two" | | tst.js:3:8:3:12 | "two" | | tst.js:4:3:4:3 | x | -| tst.js:4:3:4:14 | x | +| tst.js:4:3:4:3 | x | | tst.js:4:3:4:14 | x += "three" | | tst.js:4:8:4:14 | "three" | | tst.js:5:3:5:3 | x | -| tst.js:5:3:5:13 | x | +| tst.js:5:3:5:3 | x | | tst.js:5:3:5:13 | x += "four" | | tst.js:5:8:5:13 | "four" | | tst.js:12:5:12:5 | x | -| tst.js:12:5:12:26 | x | +| tst.js:12:5:12:5 | x | | tst.js:12:5:12:26 | x += "o ... + "two" | | tst.js:12:10:12:14 | "one" | | tst.js:12:10:12:18 | "one" + y | @@ -294,14 +294,14 @@ concatenationNode | tst.js:12:18:12:18 | y | | tst.js:12:22:12:26 | "two" | | tst.js:14:3:14:3 | x | -| tst.js:14:3:14:13 | x | +| tst.js:14:3:14:3 | x | | tst.js:14:3:14:13 | x += "last" | | tst.js:14:8:14:13 | "last" | | tst.js:19:11:19:15 | "one" | | tst.js:19:11:19:23 | "one" + "two" | | tst.js:19:19:19:23 | "two" | | tst.js:20:3:20:3 | x | -| tst.js:20:3:20:25 | x | +| tst.js:20:3:20:3 | x | | tst.js:20:3:20:25 | x += (" ... "four") | | tst.js:20:8:20:25 | ("three" + "four") | | tst.js:20:9:20:15 | "three" | @@ -349,11 +349,11 @@ concatenationNode | tst.js:77:30:77:36 | "three" | | tst.js:79:12:79:23 | array.join() | | tst.js:87:5:87:5 | x | -| tst.js:87:5:87:14 | x | +| tst.js:87:5:87:5 | x | | tst.js:87:5:87:14 | x += 'two' | | tst.js:87:10:87:14 | 'two' | | tst.js:89:3:89:3 | x | -| tst.js:89:3:89:14 | x | +| tst.js:89:3:89:3 | x | | tst.js:89:3:89:14 | x += 'three' | | tst.js:89:8:89:14 | 'three' | | tst.js:95:7:95:7 | x | @@ -396,46 +396,46 @@ operand | html-concat.js:7:18:10:24 | `\\n H ... m!` | 0 | html-concat.js:7:19:8:10 | \\n Hello | | html-concat.js:7:18:10:24 | `\\n H ... m!` | 1 | html-concat.js:8:13:8:13 | x | | html-concat.js:7:18:10:24 | `\\n H ... m!` | 2 | html-concat.js:8:15:10:23 | .\\n \\n ... um! | -| html-concat.js:13:3:13:18 | buffer | 0 | html-concat.js:13:3:13:8 | buffer | -| html-concat.js:13:3:13:18 | buffer | 1 | html-concat.js:13:13:13:18 | '
  • ' | +| html-concat.js:13:3:13:8 | buffer | 0 | html-concat.js:13:3:13:8 | buffer | +| html-concat.js:13:3:13:8 | buffer | 1 | html-concat.js:13:13:13:18 | '
  • ' | | html-concat.js:13:3:13:18 | buffer += '
  • ' | 0 | html-concat.js:13:3:13:8 | buffer | | html-concat.js:13:3:13:18 | buffer += '
  • ' | 1 | html-concat.js:13:13:13:18 | '
  • ' | -| html-concat.js:14:3:14:13 | buffer | 0 | html-concat.js:14:3:14:8 | buffer | -| html-concat.js:14:3:14:13 | buffer | 1 | html-concat.js:14:13:14:13 | x | +| html-concat.js:14:3:14:8 | buffer | 0 | html-concat.js:14:3:14:8 | buffer | +| html-concat.js:14:3:14:8 | buffer | 1 | html-concat.js:14:13:14:13 | x | | html-concat.js:14:3:14:13 | buffer += x | 0 | html-concat.js:14:3:14:8 | buffer | | html-concat.js:14:3:14:13 | buffer += x | 1 | html-concat.js:14:13:14:13 | x | -| html-concat.js:15:3:15:15 | buffer | 0 | html-concat.js:15:3:15:8 | buffer | -| html-concat.js:15:3:15:15 | buffer | 1 | html-concat.js:15:13:15:15 | '!' | +| html-concat.js:15:3:15:8 | buffer | 0 | html-concat.js:15:3:15:8 | buffer | +| html-concat.js:15:3:15:8 | buffer | 1 | html-concat.js:15:13:15:15 | '!' | | html-concat.js:15:3:15:15 | buffer += '!' | 0 | html-concat.js:15:3:15:8 | buffer | | html-concat.js:15:3:15:15 | buffer += '!' | 1 | html-concat.js:15:13:15:15 | '!' | -| tst.js:3:3:3:12 | x | 0 | tst.js:3:3:3:3 | x | -| tst.js:3:3:3:12 | x | 1 | tst.js:3:8:3:12 | "two" | +| tst.js:3:3:3:3 | x | 0 | tst.js:3:3:3:3 | x | +| tst.js:3:3:3:3 | x | 1 | tst.js:3:8:3:12 | "two" | | tst.js:3:3:3:12 | x += "two" | 0 | tst.js:3:3:3:3 | x | | tst.js:3:3:3:12 | x += "two" | 1 | tst.js:3:8:3:12 | "two" | -| tst.js:4:3:4:14 | x | 0 | tst.js:4:3:4:3 | x | -| tst.js:4:3:4:14 | x | 1 | tst.js:4:8:4:14 | "three" | +| tst.js:4:3:4:3 | x | 0 | tst.js:4:3:4:3 | x | +| tst.js:4:3:4:3 | x | 1 | tst.js:4:8:4:14 | "three" | | tst.js:4:3:4:14 | x += "three" | 0 | tst.js:4:3:4:3 | x | | tst.js:4:3:4:14 | x += "three" | 1 | tst.js:4:8:4:14 | "three" | -| tst.js:5:3:5:13 | x | 0 | tst.js:5:3:5:3 | x | -| tst.js:5:3:5:13 | x | 1 | tst.js:5:8:5:13 | "four" | +| tst.js:5:3:5:3 | x | 0 | tst.js:5:3:5:3 | x | +| tst.js:5:3:5:3 | x | 1 | tst.js:5:8:5:13 | "four" | | tst.js:5:3:5:13 | x += "four" | 0 | tst.js:5:3:5:3 | x | | tst.js:5:3:5:13 | x += "four" | 1 | tst.js:5:8:5:13 | "four" | -| tst.js:12:5:12:26 | x | 0 | tst.js:12:5:12:5 | x | -| tst.js:12:5:12:26 | x | 1 | tst.js:12:10:12:26 | "one" + y + "two" | +| tst.js:12:5:12:5 | x | 0 | tst.js:12:5:12:5 | x | +| tst.js:12:5:12:5 | x | 1 | tst.js:12:10:12:26 | "one" + y + "two" | | tst.js:12:5:12:26 | x += "o ... + "two" | 0 | tst.js:12:5:12:5 | x | | tst.js:12:5:12:26 | x += "o ... + "two" | 1 | tst.js:12:10:12:26 | "one" + y + "two" | | tst.js:12:10:12:18 | "one" + y | 0 | tst.js:12:10:12:14 | "one" | | tst.js:12:10:12:18 | "one" + y | 1 | tst.js:12:18:12:18 | y | | tst.js:12:10:12:26 | "one" + y + "two" | 0 | tst.js:12:10:12:18 | "one" + y | | tst.js:12:10:12:26 | "one" + y + "two" | 1 | tst.js:12:22:12:26 | "two" | -| tst.js:14:3:14:13 | x | 0 | tst.js:14:3:14:3 | x | -| tst.js:14:3:14:13 | x | 1 | tst.js:14:8:14:13 | "last" | +| tst.js:14:3:14:3 | x | 0 | tst.js:14:3:14:3 | x | +| tst.js:14:3:14:3 | x | 1 | tst.js:14:8:14:13 | "last" | | tst.js:14:3:14:13 | x += "last" | 0 | tst.js:14:3:14:3 | x | | tst.js:14:3:14:13 | x += "last" | 1 | tst.js:14:8:14:13 | "last" | | tst.js:19:11:19:23 | "one" + "two" | 0 | tst.js:19:11:19:15 | "one" | | tst.js:19:11:19:23 | "one" + "two" | 1 | tst.js:19:19:19:23 | "two" | -| tst.js:20:3:20:25 | x | 0 | tst.js:20:3:20:3 | x | -| tst.js:20:3:20:25 | x | 1 | tst.js:20:8:20:25 | ("three" + "four") | +| tst.js:20:3:20:3 | x | 0 | tst.js:20:3:20:3 | x | +| tst.js:20:3:20:3 | x | 1 | tst.js:20:8:20:25 | ("three" + "four") | | tst.js:20:3:20:25 | x += (" ... "four") | 0 | tst.js:20:3:20:3 | x | | tst.js:20:3:20:25 | x += (" ... "four") | 1 | tst.js:20:8:20:25 | ("three" + "four") | | tst.js:20:9:20:24 | "three" + "four" | 0 | tst.js:20:9:20:15 | "three" | @@ -472,12 +472,12 @@ operand | tst.js:77:15:77:37 | ["one", ... three"] | 1 | tst.js:77:23:77:27 | "two" | | tst.js:77:15:77:37 | ["one", ... three"] | 2 | tst.js:77:30:77:36 | "three" | | tst.js:79:12:79:23 | array.join() | 0 | tst.js:77:15:77:37 | ["one", ... three"] | -| tst.js:87:5:87:14 | x | 0 | tst.js:87:5:87:5 | x | -| tst.js:87:5:87:14 | x | 1 | tst.js:87:10:87:14 | 'two' | +| tst.js:87:5:87:5 | x | 0 | tst.js:87:5:87:5 | x | +| tst.js:87:5:87:5 | x | 1 | tst.js:87:10:87:14 | 'two' | | tst.js:87:5:87:14 | x += 'two' | 0 | tst.js:87:5:87:5 | x | | tst.js:87:5:87:14 | x += 'two' | 1 | tst.js:87:10:87:14 | 'two' | -| tst.js:89:3:89:14 | x | 0 | tst.js:89:3:89:3 | x | -| tst.js:89:3:89:14 | x | 1 | tst.js:89:8:89:14 | 'three' | +| tst.js:89:3:89:3 | x | 0 | tst.js:89:3:89:3 | x | +| tst.js:89:3:89:3 | x | 1 | tst.js:89:8:89:14 | 'three' | | tst.js:89:3:89:14 | x += 'three' | 0 | tst.js:89:3:89:3 | x | | tst.js:89:3:89:14 | x += 'three' | 1 | tst.js:89:8:89:14 | 'three' | | tst.js:95:7:95:30 | x.conca ... three') | 0 | tst.js:95:7:95:7 | x | @@ -553,7 +553,7 @@ htmlRoot | html-concat.js:3:14:3:26 | `${x}` | | html-concat.js:5:21:5:47 | `Hey ` | | html-concat.js:7:18:10:24 | `\\n H ... m!` | -| html-concat.js:13:3:13:18 | buffer | +| html-concat.js:13:3:13:8 | buffer | | html-concat.js:13:3:13:18 | buffer += '
  • ' | htmlLeaf | html-concat.js:2:15:2:17 | | diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.ts b/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.ts index 3082f40600f..8e25b67918a 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.ts +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.ts @@ -1,9 +1,9 @@ type Mapped = { -     [mk in MK]: string + [mk in MK]: string }; export function fn(ev: Mapped) { -    const props: Mapped = { -        ...ev -    }; + const props: Mapped = { + ...ev + }; } diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.ts b/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.ts index 1726e5abafb..a3ed2046836 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.ts +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.ts @@ -1,9 +1,9 @@ type Mapped = { -     [mk in MK]: string + [mk in MK]: string }; export function fn(ev: Mapped) { -    const props: Mapped = { -        ...ev -    }; + const props: Mapped = { + ...ev + }; } diff --git a/javascript/ql/test/library-tests/frameworks/Electron/tests.expected b/javascript/ql/test/library-tests/frameworks/Electron/tests.expected index 72fb0a737b8..a51c8e632b1 100644 --- a/javascript/ql/test/library-tests/frameworks/Electron/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/Electron/tests.expected @@ -1,7 +1,7 @@ browserObject -| electron.js:3:5:3:48 | bw | +| electron.js:3:5:3:6 | bw | | electron.js:3:10:3:48 | new Bro ... s: {}}) | -| electron.js:4:5:4:46 | bv | +| electron.js:4:5:4:6 | bv | | electron.js:4:10:4:46 | new Bro ... s: {}}) | | electron.js:35:1:37:1 | return of function foo | | electron.js:35:14:35:14 | x | @@ -11,7 +11,7 @@ browserObject | electron.js:39:5:39:6 | bw | | electron.js:40:1:40:7 | foo(bv) | | electron.js:40:5:40:6 | bv | -| electron.js:62:7:62:59 | win | +| electron.js:62:7:62:9 | win | | electron.js:62:13:62:59 | new Bro ... 1500 }) | | electron.js:63:3:63:5 | win | | electron.js:65:18:65:20 | win | diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected b/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected index 9b453989bb8..16d31cd07e1 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected @@ -225,7 +225,7 @@ reactComponentRef | statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:7:9:7:12 | this | | statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:10:23:10:22 | this | | statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:2:16:2:15 | this | -| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:3:13:3:22 | cmp | +| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:3:13:3:15 | cmp | | statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:3:19:3:22 | this | | statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:4:9:4:11 | cmp | | statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:6:9:6:11 | cmp | @@ -241,7 +241,7 @@ reactComponentRef | statePropertyWrites.js:36:19:45:1 | {\\n ren ... ;\\n }\\n} | statePropertyWrites.js:40:20:40:19 | this | | thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:2:17:2:16 | this | | thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:3:9:3:12 | this | -| thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:5:13:5:22 | dis | +| thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:5:13:5:15 | dis | | thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:5:19:5:22 | this | | thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:6:9:6:11 | dis | | thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:8:10:8:9 | this | diff --git a/javascript/ql/test/library-tests/frameworks/koa/tests.expected b/javascript/ql/test/library-tests/frameworks/koa/tests.expected index 365986dfa0b..1c3a323d110 100644 --- a/javascript/ql/test/library-tests/frameworks/koa/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/koa/tests.expected @@ -67,7 +67,7 @@ test_HeaderAccess test_ResponseExpr | src/koa.js:12:3:12:15 | this.response | src/koa.js:10:10:28:1 | functio ... az');\\n} | | src/koa.js:14:3:14:14 | ctx.response | src/koa.js:10:10:28:1 | functio ... az');\\n} | -| src/koa.js:15:7:15:24 | rsp | src/koa.js:10:10:28:1 | functio ... az');\\n} | +| src/koa.js:15:7:15:9 | rsp | src/koa.js:10:10:28:1 | functio ... az');\\n} | | src/koa.js:15:13:15:24 | ctx.response | src/koa.js:10:10:28:1 | functio ... az');\\n} | | src/koa.js:16:3:16:5 | rsp | src/koa.js:10:10:28:1 | functio ... az');\\n} | | src/koa.js:18:3:18:14 | ctx.response | src/koa.js:10:10:28:1 | functio ... az');\\n} | @@ -190,7 +190,7 @@ test_RouteHandler_getARequestExpr test_RouteHandler_getAResponseExpr | src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:12:3:12:15 | this.response | | src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:14:3:14:14 | ctx.response | -| src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:15:7:15:24 | rsp | +| src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:15:7:15:9 | rsp | | src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:15:13:15:24 | ctx.response | | src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:16:3:16:5 | rsp | | src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:18:3:18:14 | ctx.response | diff --git a/javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/UntrustedDataToExternalAPI.expected b/javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/UntrustedDataToExternalAPI.expected index de528b8bde2..4e58b4f8548 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/UntrustedDataToExternalAPI.expected +++ b/javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/UntrustedDataToExternalAPI.expected @@ -12,20 +12,20 @@ | tst-UntrustedDataToExternalAPI.js:41:7:41:8 | {} | tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | tst-UntrustedDataToExternalAPI.js:41:7:41:8 | {} | Call to lodash.merge() [param 0] with untrusted data from $@. | tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | window.name | | tst-UntrustedDataToExternalAPI.js:41:11:45:1 | { // $ ... usted\\n} | tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | tst-UntrustedDataToExternalAPI.js:41:11:45:1 | { // $ ... usted\\n} | Call to lodash.merge() [param 1] with untrusted data from $@. | tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | window.name | edges -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:5:13:5:21 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:6:17:6:25 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:7:16:7:24 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:8:31:8:39 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:9:18:9:26 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:10:19:10:27 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:11:20:11:28 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:15:16:15:24 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:33:14:33:22 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:34:34:34:42 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:42:8:42:16 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:43:8:43:16 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:44:8:44:16 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:5:13:5:21 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:6:17:6:25 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:7:16:7:24 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:8:31:8:39 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:9:18:9:26 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:10:19:10:27 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:11:20:11:28 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:15:16:15:24 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:33:14:33:22 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:34:34:34:42 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:42:8:42:16 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:43:8:43:16 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:44:8:44:16 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | provenance | | | tst-UntrustedDataToExternalAPI.js:10:19:10:27 | untrusted | tst-UntrustedDataToExternalAPI.js:10:13:10:33 | ['x', u ... d, 'y'] | provenance | | | tst-UntrustedDataToExternalAPI.js:14:12:16:9 | {\\n ... } [z] | tst-UntrustedDataToExternalAPI.js:13:8:17:5 | {\\n ... }\\n } | provenance | | | tst-UntrustedDataToExternalAPI.js:15:16:15:24 | untrusted | tst-UntrustedDataToExternalAPI.js:14:12:16:9 | {\\n ... } [z] | provenance | | @@ -39,7 +39,7 @@ edges | tst-UntrustedDataToExternalAPI.js:44:8:44:16 | untrusted | tst-UntrustedDataToExternalAPI.js:41:11:45:1 | { // $ ... usted\\n} | provenance | | | tst-UntrustedDataToExternalAPI.js:44:8:44:16 | untrusted | tst-UntrustedDataToExternalAPI.js:41:11:45:1 | { // $ ... usted\\n} [z] | provenance | | nodes -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | semmle.label | untrusted | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | semmle.label | untrusted | | tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | semmle.label | window.name | | tst-UntrustedDataToExternalAPI.js:5:13:5:21 | untrusted | semmle.label | untrusted | | tst-UntrustedDataToExternalAPI.js:6:17:6:25 | untrusted | semmle.label | untrusted | 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 2a3e4c18884..833128c1292 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 @@ -251,35 +251,35 @@ | typescript.ts:31:29:31:33 | path6 | typescript.ts:9:24:9:30 | req.url | typescript.ts:31:29:31:33 | path6 | This path depends on a $@. | typescript.ts:9:24:9:30 | req.url | user-provided value | | views.js:1:43:1:55 | req.params[0] | views.js:1:43:1:55 | req.params[0] | views.js:1:43:1:55 | req.params[0] | This path depends on a $@. | views.js:1:43:1:55 | req.params[0] | user-provided value | edges -| TaintedPath-es6.js:7:7:7:44 | path | TaintedPath-es6.js:9:41:9:44 | path | provenance | | +| TaintedPath-es6.js:7:7:7:10 | path | TaintedPath-es6.js:9:41:9:44 | path | provenance | | | TaintedPath-es6.js:7:14:7:33 | parse(req.url, true) | TaintedPath-es6.js:7:14:7:39 | parse(r ... ).query | provenance | Config | | TaintedPath-es6.js:7:14:7:39 | parse(r ... ).query | TaintedPath-es6.js:7:14:7:44 | parse(r ... ry.path | provenance | Config | -| TaintedPath-es6.js:7:14:7:44 | parse(r ... ry.path | TaintedPath-es6.js:7:7:7:44 | path | provenance | | +| TaintedPath-es6.js:7:14:7:44 | parse(r ... ry.path | TaintedPath-es6.js:7:7:7:10 | path | provenance | | | TaintedPath-es6.js:7:20:7:26 | req.url | TaintedPath-es6.js:7:14:7:33 | parse(req.url, true) | provenance | Config | | TaintedPath-es6.js:9:41:9:44 | path | TaintedPath-es6.js:9:26:9:45 | join("public", path) | provenance | Config | -| TaintedPath.js:9:7:9:48 | path | TaintedPath.js:11:29:11:32 | path | provenance | | -| TaintedPath.js:9:7:9:48 | path | TaintedPath.js:13:45:13:48 | path | provenance | | -| TaintedPath.js:9:7:9:48 | path | TaintedPath.js:16:33:16:36 | path | provenance | | -| TaintedPath.js:9:7:9:48 | path | TaintedPath.js:19:33:19:36 | path | provenance | | -| TaintedPath.js:9:7:9:48 | path | TaintedPath.js:22:33:22:36 | path | provenance | | -| TaintedPath.js:9:7:9:48 | path | TaintedPath.js:31:31:31:34 | path | provenance | | +| TaintedPath.js:9:7:9:10 | path | TaintedPath.js:11:29:11:32 | path | provenance | | +| TaintedPath.js:9:7:9:10 | path | TaintedPath.js:13:45:13:48 | path | provenance | | +| TaintedPath.js:9:7:9:10 | path | TaintedPath.js:16:33:16:36 | path | provenance | | +| TaintedPath.js:9:7:9:10 | path | TaintedPath.js:19:33:19:36 | path | provenance | | +| TaintedPath.js:9:7:9:10 | path | TaintedPath.js:22:33:22:36 | path | provenance | | +| TaintedPath.js:9:7:9:10 | path | TaintedPath.js:31:31:31:34 | path | provenance | | | TaintedPath.js:9:14:9:37 | url.par ... , true) | TaintedPath.js:9:14:9:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:9:14:9:43 | url.par ... ).query | TaintedPath.js:9:14:9:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:9:14:9:48 | url.par ... ry.path | TaintedPath.js:9:7:9:48 | path | provenance | | +| TaintedPath.js:9:14:9:48 | url.par ... ry.path | TaintedPath.js:9:7:9:10 | path | provenance | | | TaintedPath.js:9:24:9:30 | req.url | TaintedPath.js:9:14:9:37 | url.par ... , true) | provenance | Config | | TaintedPath.js:13:45:13:48 | path | TaintedPath.js:13:29:13:48 | "/home/user/" + path | provenance | Config | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:39:48:39:51 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:42:45:42:48 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:43:51:43:54 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:44:50:44:53 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:45:52:45:55 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:46:49:46:52 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:47:48:47:51 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:48:54:48:57 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:49:57:49:60 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:39:48:39:51 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:42:45:42:48 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:43:51:43:54 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:44:50:44:53 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:45:52:45:55 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:46:49:46:52 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:47:48:47:51 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:48:54:48:57 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:49:57:49:60 | path | provenance | | | TaintedPath.js:36:10:36:33 | url.par ... , true) | TaintedPath.js:36:10:36:39 | url.par ... ).query | provenance | Config | | TaintedPath.js:36:10:36:39 | url.par ... ).query | TaintedPath.js:36:10:36:44 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:36:10:36:44 | url.par ... ry.path | TaintedPath.js:36:3:36:44 | path | provenance | | +| TaintedPath.js:36:10:36:44 | url.par ... ry.path | TaintedPath.js:36:3:36:6 | path | provenance | | | TaintedPath.js:36:20:36:26 | req.url | TaintedPath.js:36:10:36:33 | url.par ... , true) | provenance | Config | | TaintedPath.js:39:48:39:51 | path | TaintedPath.js:39:29:39:52 | pathMod ... e(path) | provenance | Config | | TaintedPath.js:42:45:42:48 | path | TaintedPath.js:42:29:42:49 | pathMod ... n(path) | provenance | Config | @@ -296,57 +296,57 @@ edges | TaintedPath.js:55:61:55:67 | req.url | TaintedPath.js:55:31:55:68 | require ... eq.url) | provenance | Config | | TaintedPath.js:56:31:56:67 | require ... eq.url) | TaintedPath.js:56:31:56:73 | require ... ).query | provenance | Config | | TaintedPath.js:56:60:56:66 | req.url | TaintedPath.js:56:31:56:67 | require ... eq.url) | provenance | Config | -| TaintedPath.js:73:6:73:47 | path | TaintedPath.js:75:44:75:47 | path | provenance | | -| TaintedPath.js:73:6:73:47 | path | TaintedPath.js:76:14:76:17 | path | provenance | | +| TaintedPath.js:73:6:73:9 | path | TaintedPath.js:75:44:75:47 | path | provenance | | +| TaintedPath.js:73:6:73:9 | path | TaintedPath.js:76:14:76:17 | path | provenance | | | TaintedPath.js:73:13:73:36 | url.par ... , true) | TaintedPath.js:73:13:73:42 | url.par ... ).query | provenance | Config | | TaintedPath.js:73:13:73:42 | url.par ... ).query | TaintedPath.js:73:13:73:47 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:73:13:73:47 | url.par ... ry.path | TaintedPath.js:73:6:73:47 | path | provenance | | +| TaintedPath.js:73:13:73:47 | url.par ... ry.path | TaintedPath.js:73:6:73:9 | path | provenance | | | TaintedPath.js:73:23:73:29 | req.url | TaintedPath.js:73:13:73:36 | url.par ... , true) | provenance | Config | | TaintedPath.js:75:44:75:47 | path | TaintedPath.js:75:28:75:48 | fs.real ... c(path) | provenance | Config | | TaintedPath.js:76:14:76:17 | path | TaintedPath.js:77:32:77:39 | realpath | provenance | Config | | TaintedPath.js:77:32:77:39 | realpath | TaintedPath.js:78:45:78:52 | realpath | provenance | | -| TaintedPath.js:109:6:109:47 | path | TaintedPath.js:111:23:111:26 | path | provenance | | +| TaintedPath.js:109:6:109:9 | path | TaintedPath.js:111:23:111:26 | path | provenance | | | TaintedPath.js:109:13:109:36 | url.par ... , true) | TaintedPath.js:109:13:109:42 | url.par ... ).query | provenance | Config | | TaintedPath.js:109:13:109:42 | url.par ... ).query | TaintedPath.js:109:13:109:47 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:109:13:109:47 | url.par ... ry.path | TaintedPath.js:109:6:109:47 | path | provenance | | +| TaintedPath.js:109:13:109:47 | url.par ... ry.path | TaintedPath.js:109:6:109:9 | path | provenance | | | TaintedPath.js:109:23:109:29 | req.url | TaintedPath.js:109:13:109:36 | url.par ... , true) | provenance | Config | -| TaintedPath.js:115:7:115:48 | path | TaintedPath.js:117:19:117:22 | path | provenance | | -| TaintedPath.js:115:7:115:48 | path | TaintedPath.js:119:15:119:18 | path | provenance | | +| TaintedPath.js:115:7:115:10 | path | TaintedPath.js:117:19:117:22 | path | provenance | | +| TaintedPath.js:115:7:115:10 | path | TaintedPath.js:119:15:119:18 | path | provenance | | | TaintedPath.js:115:14:115:37 | url.par ... , true) | TaintedPath.js:115:14:115:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:115:14:115:43 | url.par ... ).query | TaintedPath.js:115:14:115:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:115:14:115:48 | url.par ... ry.path | TaintedPath.js:115:7:115:48 | path | provenance | | +| TaintedPath.js:115:14:115:48 | url.par ... ry.path | TaintedPath.js:115:7:115:10 | path | provenance | | | TaintedPath.js:115:24:115:30 | req.url | TaintedPath.js:115:14:115:37 | url.par ... , true) | provenance | Config | -| TaintedPath.js:119:7:119:29 | split | TaintedPath.js:121:19:121:23 | split | provenance | | -| TaintedPath.js:119:7:119:29 | split | TaintedPath.js:125:19:125:23 | split | provenance | | -| TaintedPath.js:119:7:119:29 | split | TaintedPath.js:126:28:126:32 | split | provenance | | -| TaintedPath.js:119:7:119:29 | split | TaintedPath.js:128:33:128:37 | split | provenance | | -| TaintedPath.js:119:7:119:29 | split | TaintedPath.js:131:20:131:24 | split | provenance | | -| TaintedPath.js:119:7:119:29 | split | TaintedPath.js:134:19:134:23 | split | provenance | | +| TaintedPath.js:119:7:119:11 | split | TaintedPath.js:121:19:121:23 | split | provenance | | +| TaintedPath.js:119:7:119:11 | split | TaintedPath.js:125:19:125:23 | split | provenance | | +| TaintedPath.js:119:7:119:11 | split | TaintedPath.js:126:28:126:32 | split | provenance | | +| TaintedPath.js:119:7:119:11 | split | TaintedPath.js:128:33:128:37 | split | provenance | | +| TaintedPath.js:119:7:119:11 | split | TaintedPath.js:131:20:131:24 | split | provenance | | +| TaintedPath.js:119:7:119:11 | split | TaintedPath.js:134:19:134:23 | split | provenance | | | TaintedPath.js:119:15:119:18 | path | TaintedPath.js:119:15:119:29 | path.split("/") | provenance | Config | -| TaintedPath.js:119:15:119:29 | path.split("/") | TaintedPath.js:119:7:119:29 | split | provenance | | +| TaintedPath.js:119:15:119:29 | path.split("/") | TaintedPath.js:119:7:119:11 | split | provenance | | | TaintedPath.js:121:19:121:23 | split | TaintedPath.js:121:19:121:33 | split.join("/") | provenance | Config | | TaintedPath.js:125:19:125:23 | split | TaintedPath.js:125:19:125:26 | split[x] | provenance | Config | | TaintedPath.js:126:28:126:32 | split | TaintedPath.js:126:28:126:35 | split[x] | provenance | Config | | TaintedPath.js:126:28:126:35 | split[x] | TaintedPath.js:126:19:126:35 | prefix + split[x] | provenance | Config | -| TaintedPath.js:128:7:128:38 | concatted | TaintedPath.js:129:19:129:27 | concatted | provenance | | -| TaintedPath.js:128:19:128:38 | prefix.concat(split) | TaintedPath.js:128:7:128:38 | concatted | provenance | | +| TaintedPath.js:128:7:128:15 | concatted | TaintedPath.js:129:19:129:27 | concatted | provenance | | +| TaintedPath.js:128:19:128:38 | prefix.concat(split) | TaintedPath.js:128:7:128:15 | concatted | provenance | | | TaintedPath.js:128:33:128:37 | split | TaintedPath.js:128:19:128:38 | prefix.concat(split) | provenance | Config | | TaintedPath.js:129:19:129:27 | concatted | TaintedPath.js:129:19:129:37 | concatted.join("/") | provenance | Config | -| TaintedPath.js:131:7:131:39 | concatted2 | TaintedPath.js:132:19:132:28 | concatted2 | provenance | | +| TaintedPath.js:131:7:131:16 | concatted2 | TaintedPath.js:132:19:132:28 | concatted2 | provenance | | | TaintedPath.js:131:20:131:24 | split | TaintedPath.js:131:20:131:39 | split.concat(prefix) | provenance | Config | -| TaintedPath.js:131:20:131:39 | split.concat(prefix) | TaintedPath.js:131:7:131:39 | concatted2 | provenance | | +| TaintedPath.js:131:20:131:39 | split.concat(prefix) | TaintedPath.js:131:7:131:16 | concatted2 | provenance | | | TaintedPath.js:132:19:132:28 | concatted2 | TaintedPath.js:132:19:132:38 | concatted2.join("/") | provenance | Config | | TaintedPath.js:134:19:134:23 | split | TaintedPath.js:134:19:134:29 | split.pop() | provenance | Config | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:143:29:143:32 | path | provenance | | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:149:29:149:32 | path | provenance | | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:150:29:150:32 | path | provenance | | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:151:29:151:32 | path | provenance | | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:152:29:152:32 | path | provenance | | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:167:40:167:43 | path | provenance | | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:168:50:168:53 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:143:29:143:32 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:149:29:149:32 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:150:29:150:32 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:151:29:151:32 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:152:29:152:32 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:167:40:167:43 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:168:50:168:53 | path | provenance | | | TaintedPath.js:139:14:139:37 | url.par ... , true) | TaintedPath.js:139:14:139:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:139:14:139:43 | url.par ... ).query | TaintedPath.js:139:14:139:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:139:14:139:48 | url.par ... ry.path | TaintedPath.js:139:7:139:48 | path | provenance | | +| TaintedPath.js:139:14:139:48 | url.par ... ry.path | TaintedPath.js:139:7:139:10 | path | provenance | | | TaintedPath.js:139:24:139:30 | req.url | TaintedPath.js:139:14:139:37 | url.par ... , true) | provenance | Config | | TaintedPath.js:143:29:143:32 | path | TaintedPath.js:143:29:143:55 | path.re ... /g, '') | provenance | Config | | TaintedPath.js:149:29:149:32 | path | TaintedPath.js:149:29:149:52 | path.re ... /g, '') | provenance | Config | @@ -364,360 +364,360 @@ edges | TaintedPath.js:177:51:177:57 | req.url | TaintedPath.js:177:38:177:58 | normali ... eq.url) | provenance | Config | | TaintedPath.js:179:29:179:51 | parseqs ... eq.url) | TaintedPath.js:179:29:179:55 | parseqs ... rl).foo | provenance | Config | | TaintedPath.js:179:44:179:50 | req.url | TaintedPath.js:179:29:179:51 | parseqs ... eq.url) | provenance | Config | -| TaintedPath.js:184:7:184:48 | path | TaintedPath.js:185:31:185:34 | path | provenance | | -| TaintedPath.js:184:7:184:48 | path | TaintedPath.js:186:45:186:48 | path | provenance | | -| TaintedPath.js:184:7:184:48 | path | TaintedPath.js:187:35:187:38 | path | provenance | | +| TaintedPath.js:184:7:184:10 | path | TaintedPath.js:185:31:185:34 | path | provenance | | +| TaintedPath.js:184:7:184:10 | path | TaintedPath.js:186:45:186:48 | path | provenance | | +| TaintedPath.js:184:7:184:10 | path | TaintedPath.js:187:35:187:38 | path | provenance | | | TaintedPath.js:184:14:184:37 | url.par ... , true) | TaintedPath.js:184:14:184:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:184:14:184:43 | url.par ... ).query | TaintedPath.js:184:14:184:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:184:14:184:48 | url.par ... ry.path | TaintedPath.js:184:7:184:48 | path | provenance | | +| TaintedPath.js:184:14:184:48 | url.par ... ry.path | TaintedPath.js:184:7:184:10 | path | provenance | | | TaintedPath.js:184:24:184:30 | req.url | TaintedPath.js:184:14:184:37 | url.par ... , true) | provenance | Config | -| TaintedPath.js:191:7:191:48 | path | TaintedPath.js:195:29:195:32 | path | provenance | | +| TaintedPath.js:191:7:191:10 | path | TaintedPath.js:195:29:195:32 | path | provenance | | | TaintedPath.js:191:14:191:37 | url.par ... , true) | TaintedPath.js:191:14:191:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:191:14:191:43 | url.par ... ).query | TaintedPath.js:191:14:191:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:191:14:191:48 | url.par ... ry.path | TaintedPath.js:191:7:191:48 | path | provenance | | +| TaintedPath.js:191:14:191:48 | url.par ... ry.path | TaintedPath.js:191:7:191:10 | path | provenance | | | TaintedPath.js:191:24:191:30 | req.url | TaintedPath.js:191:14:191:37 | url.par ... , true) | provenance | Config | | TaintedPath.js:195:29:195:32 | path | TaintedPath.js:195:29:195:85 | path.re ... '), '') | provenance | Config | -| TaintedPath.js:200:7:200:48 | path | TaintedPath.js:202:29:202:32 | path | provenance | | -| TaintedPath.js:200:7:200:48 | path | TaintedPath.js:205:31:205:34 | path | provenance | | +| TaintedPath.js:200:7:200:10 | path | TaintedPath.js:202:29:202:32 | path | provenance | | +| TaintedPath.js:200:7:200:10 | path | TaintedPath.js:205:31:205:34 | path | provenance | | | TaintedPath.js:200:14:200:37 | url.par ... , true) | TaintedPath.js:200:14:200:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:200:14:200:43 | url.par ... ).query | TaintedPath.js:200:14:200:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:200:14:200:48 | url.par ... ry.path | TaintedPath.js:200:7:200:48 | path | provenance | | +| TaintedPath.js:200:14:200:48 | url.par ... ry.path | TaintedPath.js:200:7:200:10 | path | provenance | | | TaintedPath.js:200:24:200:30 | req.url | TaintedPath.js:200:14:200:37 | url.par ... , true) | provenance | Config | | TaintedPath.js:202:29:202:32 | path | TaintedPath.js:202:29:202:68 | path.re ... '), '') | provenance | Config | | TaintedPath.js:205:31:205:34 | path | TaintedPath.js:205:31:205:69 | path.re ... '), '') | provenance | Config | -| TaintedPath.js:212:7:212:48 | path | TaintedPath.js:213:33:213:36 | path | provenance | | -| TaintedPath.js:212:7:212:48 | path | TaintedPath.js:215:36:215:39 | path | provenance | | +| TaintedPath.js:212:7:212:10 | path | TaintedPath.js:213:33:213:36 | path | provenance | | +| TaintedPath.js:212:7:212:10 | path | TaintedPath.js:215:36:215:39 | path | provenance | | | TaintedPath.js:212:14:212:37 | url.par ... , true) | TaintedPath.js:212:14:212:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:212:14:212:43 | url.par ... ).query | TaintedPath.js:212:14:212:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:212:14:212:48 | url.par ... ry.path | TaintedPath.js:212:7:212:48 | path | provenance | | +| TaintedPath.js:212:14:212:48 | url.par ... ry.path | TaintedPath.js:212:7:212:10 | path | provenance | | | TaintedPath.js:212:24:212:30 | req.url | TaintedPath.js:212:14:212:37 | url.par ... , true) | provenance | Config | -| TaintedPath.js:213:9:213:37 | improperEscape | TaintedPath.js:214:29:214:42 | improperEscape | provenance | | -| TaintedPath.js:213:26:213:37 | escape(path) | TaintedPath.js:213:9:213:37 | improperEscape | provenance | | +| TaintedPath.js:213:9:213:22 | improperEscape | TaintedPath.js:214:29:214:42 | improperEscape | provenance | | +| TaintedPath.js:213:26:213:37 | escape(path) | TaintedPath.js:213:9:213:22 | improperEscape | provenance | | | TaintedPath.js:213:33:213:36 | path | TaintedPath.js:213:26:213:37 | escape(path) | provenance | Config | -| TaintedPath.js:215:9:215:40 | improperEscape2 | TaintedPath.js:216:29:216:43 | improperEscape2 | provenance | | -| TaintedPath.js:215:27:215:40 | unescape(path) | TaintedPath.js:215:9:215:40 | improperEscape2 | provenance | | +| TaintedPath.js:215:9:215:23 | improperEscape2 | TaintedPath.js:216:29:216:43 | improperEscape2 | provenance | | +| TaintedPath.js:215:27:215:40 | unescape(path) | TaintedPath.js:215:9:215:23 | improperEscape2 | provenance | | | TaintedPath.js:215:36:215:39 | path | TaintedPath.js:215:27:215:40 | unescape(path) | provenance | Config | -| examples/TaintedPath.js:8:7:8:52 | filePath | examples/TaintedPath.js:10:36:10:43 | filePath | provenance | | +| examples/TaintedPath.js:8:7:8:14 | filePath | examples/TaintedPath.js:10:36:10:43 | filePath | provenance | | | examples/TaintedPath.js:8:18:8:41 | url.par ... , true) | examples/TaintedPath.js:8:18:8:47 | url.par ... ).query | provenance | Config | | examples/TaintedPath.js:8:18:8:47 | url.par ... ).query | examples/TaintedPath.js:8:18:8:52 | url.par ... ry.path | provenance | Config | -| examples/TaintedPath.js:8:18:8:52 | url.par ... ry.path | examples/TaintedPath.js:8:7:8:52 | filePath | provenance | | +| examples/TaintedPath.js:8:18:8:52 | url.par ... ry.path | examples/TaintedPath.js:8:7:8:14 | 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:9:6:16 | filePath | execa.js:9:26:9:33 | filePath | provenance | | +| execa.js:6:9:6:16 | filePath | execa.js:12:37:12:44 | filePath | provenance | | +| execa.js:6:9:6:16 | filePath | execa.js:15:50:15:57 | filePath | provenance | | +| execa.js:6:9:6:16 | 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:20:6:64 | url.par ... th"][0] | execa.js:6:9:6:16 | 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 | | | handlebars.js:43:15:43:29 | req.params.path | handlebars.js:13:73:13:80 | filePath | provenance | | -| hapi.js:14:19:14:51 | filepath | hapi.js:15:44:15:51 | filepath | provenance | | -| hapi.js:14:30:14:51 | request ... ilepath | hapi.js:14:19:14:51 | filepath | provenance | | -| make-dir.js:7:11:7:31 | file | make-dir.js:9:25:9:28 | file | provenance | | -| make-dir.js:7:11:7:31 | file | make-dir.js:10:23:10:26 | file | provenance | | -| make-dir.js:7:18:7:31 | req.query.file | make-dir.js:7:11:7:31 | file | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:11:12:11:18 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:12:17:12:23 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:13:23:13:29 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:14:19:14:25 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:15:19:15:25 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:16:23:16:29 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:17:25:17:31 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:18:25:18:31 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:19:29:19:35 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:20:29:20:35 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:21:23:21:29 | dirPath | provenance | | -| mkdirp.js:9:21:9:76 | path.jo ... ltDir') | mkdirp.js:9:11:9:76 | dirPath | provenance | | +| hapi.js:14:19:14:26 | filepath | hapi.js:15:44:15:51 | filepath | provenance | | +| hapi.js:14:30:14:51 | request ... ilepath | hapi.js:14:19:14:26 | filepath | provenance | | +| make-dir.js:7:11:7:14 | file | make-dir.js:9:25:9:28 | file | provenance | | +| make-dir.js:7:11:7:14 | file | make-dir.js:10:23:10:26 | file | provenance | | +| make-dir.js:7:18:7:31 | req.query.file | make-dir.js:7:11:7:14 | file | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:11:12:11:18 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:12:17:12:23 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:13:23:13:29 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:14:19:14:25 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:15:19:15:25 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:16:23:16:29 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:17:25:17:31 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:18:25:18:31 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:19:29:19:35 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:20:29:20:35 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:21:23:21:29 | dirPath | provenance | | +| mkdirp.js:9:21:9:76 | path.jo ... ltDir') | mkdirp.js:9:11:9:17 | dirPath | provenance | | | mkdirp.js:9:42:9:59 | req.query.filename | mkdirp.js:9:42:9:75 | req.que ... ultDir' | provenance | | | mkdirp.js:9:42:9:75 | req.que ... ultDir' | mkdirp.js:9:21:9:76 | path.jo ... ltDir') | provenance | Config | | more-fs-extra.js:8:11:8:22 | { filename } | more-fs-extra.js:8:13:8:20 | filename | provenance | Config | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:10:15:10:22 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:11:11:11:18 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:12:14:12:21 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:13:18:13:25 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:14:11:14:18 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:15:21:15:28 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:16:21:16:28 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:17:31:17:38 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:18:15:18:22 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:19:25:19:32 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:20:21:20:28 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:21:17:21:24 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:22:16:22:23 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:23:20:23:27 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:24:19:24:26 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:25:15:25:22 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:26:19:26:26 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:27:13:27:20 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:28:17:28:24 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:29:23:29:30 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:30:16:30:23 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:31:20:31:27 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:32:23:32:30 | filename | provenance | | -| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:8:11:8:33 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:8:13:8:20 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:10:15:10:22 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:11:11:11:18 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:12:14:12:21 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:13:18:13:25 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:14:11:14:18 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:15:21:15:28 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:16:21:16:28 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:17:31:17:38 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:18:15:18:22 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:19:25:19:32 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:20:21:20:28 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:21:17:21:24 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:22:16:22:23 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:23:20:23:27 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:24:19:24:26 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:25:15:25:22 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:26:19:26:26 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:27:13:27:20 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:28:17:28:24 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:29:23:29:30 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:30:16:30:23 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:31:20:31:27 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:32:23:32:30 | filename | provenance | | | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:8:11:8:22 | { filename } | provenance | | -| normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:13:19:13:22 | path | provenance | | -| normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:14:26:14:29 | path | provenance | | -| normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:15:19:15:22 | path | provenance | | -| normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:16:35:16:38 | path | provenance | | -| normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:17:53:17:56 | path | provenance | | -| normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:11:7:11:27 | path | provenance | | +| normalizedPaths.js:11:7:11:10 | path | normalizedPaths.js:13:19:13:22 | path | provenance | | +| normalizedPaths.js:11:7:11:10 | path | normalizedPaths.js:14:26:14:29 | path | provenance | | +| normalizedPaths.js:11:7:11:10 | path | normalizedPaths.js:15:19:15:22 | path | provenance | | +| normalizedPaths.js:11:7:11:10 | path | normalizedPaths.js:16:35:16:38 | path | provenance | | +| normalizedPaths.js:11:7:11:10 | path | normalizedPaths.js:17:53:17:56 | path | provenance | | +| normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:11:7:11:10 | path | provenance | | | normalizedPaths.js:14:26:14:29 | path | normalizedPaths.js:14:19:14:29 | './' + path | provenance | Config | | normalizedPaths.js:15:19:15:22 | path | normalizedPaths.js:15:19:15:38 | path + '/index.html' | provenance | Config | | normalizedPaths.js:16:35:16:38 | path | normalizedPaths.js:16:19:16:53 | pathMod ... .html') | provenance | Config | | normalizedPaths.js:17:53:17:56 | path | normalizedPaths.js:17:19:17:57 | pathMod ... , path) | provenance | Config | -| normalizedPaths.js:21:7:21:49 | path | normalizedPaths.js:23:19:23:22 | path | provenance | | -| normalizedPaths.js:21:7:21:49 | path | normalizedPaths.js:24:26:24:29 | path | provenance | | -| normalizedPaths.js:21:7:21:49 | path | normalizedPaths.js:25:19:25:22 | path | provenance | | -| normalizedPaths.js:21:7:21:49 | path | normalizedPaths.js:26:35:26:38 | path | provenance | | -| normalizedPaths.js:21:7:21:49 | path | normalizedPaths.js:27:53:27:56 | path | provenance | | -| normalizedPaths.js:21:14:21:49 | pathMod ... y.path) | normalizedPaths.js:21:7:21:49 | path | provenance | | +| normalizedPaths.js:21:7:21:10 | path | normalizedPaths.js:23:19:23:22 | path | provenance | | +| normalizedPaths.js:21:7:21:10 | path | normalizedPaths.js:24:26:24:29 | path | provenance | | +| normalizedPaths.js:21:7:21:10 | path | normalizedPaths.js:25:19:25:22 | path | provenance | | +| normalizedPaths.js:21:7:21:10 | path | normalizedPaths.js:26:35:26:38 | path | provenance | | +| normalizedPaths.js:21:7:21:10 | path | normalizedPaths.js:27:53:27:56 | path | provenance | | +| normalizedPaths.js:21:14:21:49 | pathMod ... y.path) | normalizedPaths.js:21:7:21:10 | path | provenance | | | normalizedPaths.js:21:35:21:48 | req.query.path | normalizedPaths.js:21:14:21:49 | pathMod ... y.path) | provenance | Config | | normalizedPaths.js:24:26:24:29 | path | normalizedPaths.js:24:19:24:29 | './' + path | provenance | Config | | normalizedPaths.js:25:19:25:22 | path | normalizedPaths.js:25:19:25:38 | path + '/index.html' | provenance | Config | | normalizedPaths.js:26:35:26:38 | path | normalizedPaths.js:26:19:26:53 | pathMod ... .html') | provenance | Config | | normalizedPaths.js:27:53:27:56 | path | normalizedPaths.js:27:19:27:57 | pathMod ... , path) | provenance | Config | -| normalizedPaths.js:31:7:31:49 | path | normalizedPaths.js:36:19:36:22 | path | provenance | | -| normalizedPaths.js:31:7:31:49 | path | normalizedPaths.js:41:21:41:24 | path | provenance | | -| normalizedPaths.js:31:14:31:49 | pathMod ... y.path) | normalizedPaths.js:31:7:31:49 | path | provenance | | +| normalizedPaths.js:31:7:31:10 | path | normalizedPaths.js:36:19:36:22 | path | provenance | | +| normalizedPaths.js:31:7:31:10 | path | normalizedPaths.js:41:21:41:24 | path | provenance | | +| normalizedPaths.js:31:14:31:49 | pathMod ... y.path) | normalizedPaths.js:31:7:31:10 | path | provenance | | | normalizedPaths.js:31:35:31:48 | req.query.path | normalizedPaths.js:31:14:31:49 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:54:7:54:49 | path | normalizedPaths.js:59:19:59:22 | path | provenance | | -| normalizedPaths.js:54:7:54:49 | path | normalizedPaths.js:63:19:63:22 | path | provenance | | -| normalizedPaths.js:54:7:54:49 | path | normalizedPaths.js:68:21:68:24 | path | provenance | | -| normalizedPaths.js:54:14:54:49 | pathMod ... y.path) | normalizedPaths.js:54:7:54:49 | path | provenance | | +| normalizedPaths.js:54:7:54:10 | path | normalizedPaths.js:59:19:59:22 | path | provenance | | +| normalizedPaths.js:54:7:54:10 | path | normalizedPaths.js:63:19:63:22 | path | provenance | | +| normalizedPaths.js:54:7:54:10 | path | normalizedPaths.js:68:21:68:24 | path | provenance | | +| normalizedPaths.js:54:14:54:49 | pathMod ... y.path) | normalizedPaths.js:54:7:54:10 | path | provenance | | | normalizedPaths.js:54:35:54:48 | req.query.path | normalizedPaths.js:54:14:54:49 | pathMod ... y.path) | provenance | Config | | normalizedPaths.js:63:19:63:22 | path | normalizedPaths.js:63:19:63:38 | path + "/index.html" | provenance | Config | -| normalizedPaths.js:73:7:73:56 | path | normalizedPaths.js:78:22:78:25 | path | provenance | | -| normalizedPaths.js:73:14:73:56 | pathMod ... y.path) | normalizedPaths.js:73:7:73:56 | path | provenance | | +| normalizedPaths.js:73:7:73:10 | path | normalizedPaths.js:78:22:78:25 | path | provenance | | +| normalizedPaths.js:73:14:73:56 | pathMod ... y.path) | normalizedPaths.js:73:7:73:10 | path | provenance | | | normalizedPaths.js:73:35:73:55 | './' + ... ry.path | normalizedPaths.js:73:14:73:56 | pathMod ... y.path) | provenance | Config | | normalizedPaths.js:73:42:73:55 | req.query.path | normalizedPaths.js:73:35:73:55 | './' + ... ry.path | provenance | Config | -| normalizedPaths.js:82:7:82:27 | path | normalizedPaths.js:87:29:87:32 | path | provenance | | -| normalizedPaths.js:82:7:82:27 | path | normalizedPaths.js:90:31:90:34 | path | provenance | | -| normalizedPaths.js:82:14:82:27 | req.query.path | normalizedPaths.js:82:7:82:27 | path | provenance | | -| normalizedPaths.js:94:7:94:49 | path | normalizedPaths.js:99:29:99:32 | path | provenance | | -| normalizedPaths.js:94:14:94:49 | pathMod ... y.path) | normalizedPaths.js:94:7:94:49 | path | provenance | | +| normalizedPaths.js:82:7:82:10 | path | normalizedPaths.js:87:29:87:32 | path | provenance | | +| normalizedPaths.js:82:7:82:10 | path | normalizedPaths.js:90:31:90:34 | path | provenance | | +| normalizedPaths.js:82:14:82:27 | req.query.path | normalizedPaths.js:82:7:82:10 | path | provenance | | +| normalizedPaths.js:94:7:94:10 | path | normalizedPaths.js:99:29:99:32 | path | provenance | | +| normalizedPaths.js:94:14:94:49 | pathMod ... y.path) | normalizedPaths.js:94:7:94:10 | path | provenance | | | normalizedPaths.js:94:35:94:48 | req.query.path | normalizedPaths.js:94:14:94:49 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:117:7:117:44 | path | normalizedPaths.js:119:19:119:22 | path | provenance | | -| normalizedPaths.js:117:7:117:44 | path | normalizedPaths.js:120:35:120:38 | path | provenance | | -| normalizedPaths.js:117:14:117:44 | fs.real ... y.path) | normalizedPaths.js:117:7:117:44 | path | provenance | | +| normalizedPaths.js:117:7:117:10 | path | normalizedPaths.js:119:19:119:22 | path | provenance | | +| normalizedPaths.js:117:7:117:10 | path | normalizedPaths.js:120:35:120:38 | path | provenance | | +| normalizedPaths.js:117:14:117:44 | fs.real ... y.path) | normalizedPaths.js:117:7:117:10 | path | provenance | | | normalizedPaths.js:117:30:117:43 | req.query.path | normalizedPaths.js:117:14:117:44 | fs.real ... y.path) | provenance | Config | | normalizedPaths.js:120:35:120:38 | path | normalizedPaths.js:120:19:120:53 | pathMod ... .html') | provenance | Config | -| normalizedPaths.js:130:7:130:49 | path | normalizedPaths.js:135:21:135:24 | path | provenance | | -| normalizedPaths.js:130:14:130:49 | pathMod ... y.path) | normalizedPaths.js:130:7:130:49 | path | provenance | | +| normalizedPaths.js:130:7:130:10 | path | normalizedPaths.js:135:21:135:24 | path | provenance | | +| normalizedPaths.js:130:14:130:49 | pathMod ... y.path) | normalizedPaths.js:130:7:130:10 | path | provenance | | | normalizedPaths.js:130:35:130:48 | req.query.path | normalizedPaths.js:130:14:130:49 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:139:7:139:62 | path | normalizedPaths.js:144:21:144:24 | path | provenance | | -| normalizedPaths.js:139:14:139:62 | pathMod ... y.path) | normalizedPaths.js:139:7:139:62 | path | provenance | | +| normalizedPaths.js:139:7:139:10 | path | normalizedPaths.js:144:21:144:24 | path | provenance | | +| normalizedPaths.js:139:14:139:62 | pathMod ... y.path) | normalizedPaths.js:139:7:139:10 | path | provenance | | | normalizedPaths.js:139:48:139:61 | req.query.path | normalizedPaths.js:139:14:139:62 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:148:7:148:58 | path | normalizedPaths.js:151:21:151:24 | path | provenance | | -| normalizedPaths.js:148:7:148:58 | path | normalizedPaths.js:153:21:153:24 | path | provenance | | -| normalizedPaths.js:148:14:148:58 | 'foo/' ... y.path) | normalizedPaths.js:148:7:148:58 | path | provenance | | +| normalizedPaths.js:148:7:148:10 | path | normalizedPaths.js:151:21:151:24 | path | provenance | | +| normalizedPaths.js:148:7:148:10 | path | normalizedPaths.js:153:21:153:24 | path | provenance | | +| normalizedPaths.js:148:14:148:58 | 'foo/' ... y.path) | normalizedPaths.js:148:7:148:10 | path | provenance | | | normalizedPaths.js:148:23:148:58 | pathMod ... y.path) | normalizedPaths.js:148:14:148:58 | 'foo/' ... y.path) | provenance | Config | | normalizedPaths.js:148:44:148:57 | req.query.path | normalizedPaths.js:148:23:148:58 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:160:7:160:49 | path | normalizedPaths.js:165:19:165:22 | path | provenance | | -| normalizedPaths.js:160:7:160:49 | path | normalizedPaths.js:170:21:170:24 | path | provenance | | -| normalizedPaths.js:160:14:160:49 | pathMod ... y.path) | normalizedPaths.js:160:7:160:49 | path | provenance | | +| normalizedPaths.js:160:7:160:10 | path | normalizedPaths.js:165:19:165:22 | path | provenance | | +| normalizedPaths.js:160:7:160:10 | path | normalizedPaths.js:170:21:170:24 | path | provenance | | +| normalizedPaths.js:160:14:160:49 | pathMod ... y.path) | normalizedPaths.js:160:7:160:10 | path | provenance | | | normalizedPaths.js:160:35:160:48 | req.query.path | normalizedPaths.js:160:14:160:49 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:184:19:184:22 | path | provenance | | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:187:21:187:24 | path | provenance | | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:189:21:189:24 | path | provenance | | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:192:21:192:24 | path | provenance | | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:194:21:194:24 | path | provenance | | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:199:21:199:24 | path | provenance | | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:201:45:201:48 | path | provenance | | -| normalizedPaths.js:174:14:174:27 | req.query.path | normalizedPaths.js:174:7:174:27 | path | provenance | | -| normalizedPaths.js:201:7:201:49 | normalizedPath | normalizedPaths.js:205:21:205:34 | normalizedPath | provenance | | -| normalizedPaths.js:201:7:201:49 | normalizedPath | normalizedPaths.js:208:21:208:34 | normalizedPath | provenance | | -| normalizedPaths.js:201:7:201:49 | normalizedPath | normalizedPaths.js:210:21:210:34 | normalizedPath | provenance | | -| normalizedPaths.js:201:24:201:49 | pathMod ... e(path) | normalizedPaths.js:201:7:201:49 | normalizedPath | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:184:19:184:22 | path | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:187:21:187:24 | path | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:189:21:189:24 | path | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:192:21:192:24 | path | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:194:21:194:24 | path | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:199:21:199:24 | path | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:201:45:201:48 | path | provenance | | +| normalizedPaths.js:174:14:174:27 | req.query.path | normalizedPaths.js:174:7:174:10 | path | provenance | | +| normalizedPaths.js:201:7:201:20 | normalizedPath | normalizedPaths.js:205:21:205:34 | normalizedPath | provenance | | +| normalizedPaths.js:201:7:201:20 | normalizedPath | normalizedPaths.js:208:21:208:34 | normalizedPath | provenance | | +| normalizedPaths.js:201:7:201:20 | normalizedPath | normalizedPaths.js:210:21:210:34 | normalizedPath | provenance | | +| normalizedPaths.js:201:24:201:49 | pathMod ... e(path) | normalizedPaths.js:201:7:201:20 | normalizedPath | provenance | | | normalizedPaths.js:201:45:201:48 | path | normalizedPaths.js:201:24:201:49 | pathMod ... e(path) | provenance | Config | -| normalizedPaths.js:214:7:214:49 | path | normalizedPaths.js:219:29:219:32 | path | provenance | | -| normalizedPaths.js:214:14:214:49 | pathMod ... y.path) | normalizedPaths.js:214:7:214:49 | path | provenance | | +| normalizedPaths.js:214:7:214:10 | path | normalizedPaths.js:219:29:219:32 | path | provenance | | +| normalizedPaths.js:214:14:214:49 | pathMod ... y.path) | normalizedPaths.js:214:7:214:10 | path | provenance | | | normalizedPaths.js:214:35:214:48 | req.query.path | normalizedPaths.js:214:14:214:49 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:219:3:219:33 | path | normalizedPaths.js:222:21:222:24 | path | provenance | | -| normalizedPaths.js:219:10:219:33 | decodeU ... t(path) | normalizedPaths.js:219:3:219:33 | path | provenance | | +| normalizedPaths.js:219:3:219:6 | path | normalizedPaths.js:222:21:222:24 | path | provenance | | +| normalizedPaths.js:219:10:219:33 | decodeU ... t(path) | normalizedPaths.js:219:3:219:6 | path | provenance | | | normalizedPaths.js:219:29:219:32 | path | normalizedPaths.js:219:10:219:33 | decodeU ... t(path) | provenance | Config | -| normalizedPaths.js:226:7:226:70 | path | normalizedPaths.js:228:21:228:24 | path | provenance | | +| normalizedPaths.js:226:7:226:10 | path | normalizedPaths.js:228:21:228:24 | path | provenance | | | normalizedPaths.js:226:14:226:49 | pathMod ... y.path) | normalizedPaths.js:226:14:226:70 | pathMod ... g, ' ') | provenance | Config | -| normalizedPaths.js:226:14:226:70 | pathMod ... g, ' ') | normalizedPaths.js:226:7:226:70 | path | provenance | | +| normalizedPaths.js:226:14:226:70 | pathMod ... g, ' ') | normalizedPaths.js:226:7:226:10 | path | provenance | | | normalizedPaths.js:226:35:226:48 | req.query.path | normalizedPaths.js:226:14:226:49 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:236:7:236:47 | path | normalizedPaths.js:238:19:238:22 | path | provenance | | -| normalizedPaths.js:236:7:236:47 | path | normalizedPaths.js:245:21:245:24 | path | provenance | | -| normalizedPaths.js:236:7:236:47 | path | normalizedPaths.js:250:21:250:24 | path | provenance | | -| normalizedPaths.js:236:14:236:47 | pathMod ... y.path) | normalizedPaths.js:236:7:236:47 | path | provenance | | +| normalizedPaths.js:236:7:236:10 | path | normalizedPaths.js:238:19:238:22 | path | provenance | | +| normalizedPaths.js:236:7:236:10 | path | normalizedPaths.js:245:21:245:24 | path | provenance | | +| normalizedPaths.js:236:7:236:10 | path | normalizedPaths.js:250:21:250:24 | path | provenance | | +| normalizedPaths.js:236:14:236:47 | pathMod ... y.path) | normalizedPaths.js:236:7:236:10 | path | provenance | | | normalizedPaths.js:236:33:236:46 | req.query.path | normalizedPaths.js:236:14:236:47 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:254:7:254:47 | path | normalizedPaths.js:256:19:256:22 | path | provenance | | -| normalizedPaths.js:254:7:254:47 | path | normalizedPaths.js:262:21:262:24 | path | provenance | | -| normalizedPaths.js:254:7:254:47 | path | normalizedPaths.js:267:38:267:41 | path | provenance | | -| normalizedPaths.js:254:7:254:47 | path | normalizedPaths.js:275:38:275:41 | path | provenance | | -| normalizedPaths.js:254:7:254:47 | path | normalizedPaths.js:283:38:283:41 | path | provenance | | -| normalizedPaths.js:254:7:254:47 | path | normalizedPaths.js:291:38:291:41 | path | provenance | | -| normalizedPaths.js:254:14:254:47 | pathMod ... y.path) | normalizedPaths.js:254:7:254:47 | path | provenance | | +| normalizedPaths.js:254:7:254:10 | path | normalizedPaths.js:256:19:256:22 | path | provenance | | +| normalizedPaths.js:254:7:254:10 | path | normalizedPaths.js:262:21:262:24 | path | provenance | | +| normalizedPaths.js:254:7:254:10 | path | normalizedPaths.js:267:38:267:41 | path | provenance | | +| normalizedPaths.js:254:7:254:10 | path | normalizedPaths.js:275:38:275:41 | path | provenance | | +| normalizedPaths.js:254:7:254:10 | path | normalizedPaths.js:283:38:283:41 | path | provenance | | +| normalizedPaths.js:254:7:254:10 | path | normalizedPaths.js:291:38:291:41 | path | provenance | | +| normalizedPaths.js:254:14:254:47 | pathMod ... y.path) | normalizedPaths.js:254:7:254:10 | path | provenance | | | normalizedPaths.js:254:33:254:46 | req.query.path | normalizedPaths.js:254:14:254:47 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:267:7:267:42 | newpath | normalizedPaths.js:270:21:270:27 | newpath | provenance | | -| normalizedPaths.js:267:17:267:42 | pathMod ... e(path) | normalizedPaths.js:267:7:267:42 | newpath | provenance | | +| normalizedPaths.js:267:7:267:13 | newpath | normalizedPaths.js:270:21:270:27 | newpath | provenance | | +| normalizedPaths.js:267:17:267:42 | pathMod ... e(path) | normalizedPaths.js:267:7:267:13 | newpath | provenance | | | normalizedPaths.js:267:38:267:41 | path | normalizedPaths.js:267:17:267:42 | pathMod ... e(path) | provenance | Config | -| normalizedPaths.js:275:7:275:42 | newpath | normalizedPaths.js:278:21:278:27 | newpath | provenance | | -| normalizedPaths.js:275:17:275:42 | pathMod ... e(path) | normalizedPaths.js:275:7:275:42 | newpath | provenance | | +| normalizedPaths.js:275:7:275:13 | newpath | normalizedPaths.js:278:21:278:27 | newpath | provenance | | +| normalizedPaths.js:275:17:275:42 | pathMod ... e(path) | normalizedPaths.js:275:7:275:13 | newpath | provenance | | | normalizedPaths.js:275:38:275:41 | path | normalizedPaths.js:275:17:275:42 | pathMod ... e(path) | provenance | Config | -| normalizedPaths.js:283:7:283:42 | newpath | normalizedPaths.js:286:21:286:27 | newpath | provenance | | -| normalizedPaths.js:283:17:283:42 | pathMod ... e(path) | normalizedPaths.js:283:7:283:42 | newpath | provenance | | +| normalizedPaths.js:283:7:283:13 | newpath | normalizedPaths.js:286:21:286:27 | newpath | provenance | | +| normalizedPaths.js:283:17:283:42 | pathMod ... e(path) | normalizedPaths.js:283:7:283:13 | newpath | provenance | | | normalizedPaths.js:283:38:283:41 | path | normalizedPaths.js:283:17:283:42 | pathMod ... e(path) | provenance | Config | -| normalizedPaths.js:291:7:291:42 | newpath | normalizedPaths.js:296:21:296:27 | newpath | provenance | | -| normalizedPaths.js:291:17:291:42 | pathMod ... e(path) | normalizedPaths.js:291:7:291:42 | newpath | provenance | | +| normalizedPaths.js:291:7:291:13 | newpath | normalizedPaths.js:296:21:296:27 | newpath | provenance | | +| normalizedPaths.js:291:17:291:42 | pathMod ... e(path) | normalizedPaths.js:291:7:291:13 | newpath | provenance | | | normalizedPaths.js:291:38:291:41 | path | normalizedPaths.js:291:17:291:42 | pathMod ... e(path) | provenance | Config | -| normalizedPaths.js:303:6:303:26 | path | normalizedPaths.js:304:18:304:21 | path | provenance | | -| normalizedPaths.js:303:6:303:26 | path | normalizedPaths.js:309:19:309:22 | path | provenance | | -| normalizedPaths.js:303:6:303:26 | path | normalizedPaths.js:313:19:313:22 | path | provenance | | -| normalizedPaths.js:303:6:303:26 | path | normalizedPaths.js:316:19:316:22 | path | provenance | | -| normalizedPaths.js:303:6:303:26 | path | normalizedPaths.js:320:45:320:48 | path | provenance | | -| normalizedPaths.js:303:13:303:26 | req.query.path | normalizedPaths.js:303:6:303:26 | path | provenance | | -| normalizedPaths.js:320:6:320:49 | normalizedPath | normalizedPaths.js:325:19:325:32 | normalizedPath | provenance | | -| normalizedPaths.js:320:6:320:49 | normalizedPath | normalizedPaths.js:332:19:332:32 | normalizedPath | provenance | | -| normalizedPaths.js:320:23:320:49 | pathMod ... , path) | normalizedPaths.js:320:6:320:49 | normalizedPath | provenance | | +| normalizedPaths.js:303:6:303:9 | path | normalizedPaths.js:304:18:304:21 | path | provenance | | +| normalizedPaths.js:303:6:303:9 | path | normalizedPaths.js:309:19:309:22 | path | provenance | | +| normalizedPaths.js:303:6:303:9 | path | normalizedPaths.js:313:19:313:22 | path | provenance | | +| normalizedPaths.js:303:6:303:9 | path | normalizedPaths.js:316:19:316:22 | path | provenance | | +| normalizedPaths.js:303:6:303:9 | path | normalizedPaths.js:320:45:320:48 | path | provenance | | +| normalizedPaths.js:303:13:303:26 | req.query.path | normalizedPaths.js:303:6:303:9 | path | provenance | | +| normalizedPaths.js:320:6:320:19 | normalizedPath | normalizedPaths.js:325:19:325:32 | normalizedPath | provenance | | +| normalizedPaths.js:320:6:320:19 | normalizedPath | normalizedPaths.js:332:19:332:32 | normalizedPath | provenance | | +| normalizedPaths.js:320:23:320:49 | pathMod ... , path) | normalizedPaths.js:320:6:320:19 | normalizedPath | provenance | | | normalizedPaths.js:320:45:320:48 | path | normalizedPaths.js:320:23:320:49 | pathMod ... , path) | provenance | Config | -| normalizedPaths.js:339:6:339:46 | path | normalizedPaths.js:341:18:341:21 | path | provenance | | -| normalizedPaths.js:339:6:339:46 | path | normalizedPaths.js:346:19:346:22 | path | provenance | | -| normalizedPaths.js:339:13:339:46 | pathMod ... y.path) | normalizedPaths.js:339:6:339:46 | path | provenance | | +| normalizedPaths.js:339:6:339:9 | path | normalizedPaths.js:341:18:341:21 | path | provenance | | +| normalizedPaths.js:339:6:339:9 | path | normalizedPaths.js:346:19:346:22 | path | provenance | | +| normalizedPaths.js:339:13:339:46 | pathMod ... y.path) | normalizedPaths.js:339:6:339:9 | path | provenance | | | normalizedPaths.js:339:32:339:45 | req.query.path | normalizedPaths.js:339:13:339:46 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:354:7:354:27 | path | normalizedPaths.js:356:19:356:22 | path | provenance | | -| normalizedPaths.js:354:7:354:27 | path | normalizedPaths.js:358:47:358:50 | path | provenance | | -| normalizedPaths.js:354:14:354:27 | req.query.path | normalizedPaths.js:354:7:354:27 | path | provenance | | -| normalizedPaths.js:358:7:358:51 | requestPath | normalizedPaths.js:363:21:363:31 | requestPath | provenance | | -| normalizedPaths.js:358:21:358:51 | pathMod ... , path) | normalizedPaths.js:358:7:358:51 | requestPath | provenance | | +| normalizedPaths.js:354:7:354:10 | path | normalizedPaths.js:356:19:356:22 | path | provenance | | +| normalizedPaths.js:354:7:354:10 | path | normalizedPaths.js:358:47:358:50 | path | provenance | | +| normalizedPaths.js:354:14:354:27 | req.query.path | normalizedPaths.js:354:7:354:10 | path | provenance | | +| normalizedPaths.js:358:7:358:17 | requestPath | normalizedPaths.js:363:21:363:31 | requestPath | provenance | | +| normalizedPaths.js:358:21:358:51 | pathMod ... , path) | normalizedPaths.js:358:7:358:17 | requestPath | provenance | | | normalizedPaths.js:358:47:358:50 | path | normalizedPaths.js:358:21:358:51 | pathMod ... , path) | provenance | Config | -| normalizedPaths.js:377:7:377:27 | path | normalizedPaths.js:379:19:379:22 | path | provenance | | -| normalizedPaths.js:377:7:377:27 | path | normalizedPaths.js:381:25:381:28 | path | provenance | | -| normalizedPaths.js:377:14:377:27 | req.query.path | normalizedPaths.js:377:7:377:27 | path | provenance | | +| normalizedPaths.js:377:7:377:10 | path | normalizedPaths.js:379:19:379:22 | path | provenance | | +| normalizedPaths.js:377:7:377:10 | path | normalizedPaths.js:381:25:381:28 | path | provenance | | +| normalizedPaths.js:377:14:377:27 | req.query.path | normalizedPaths.js:377:7:377:10 | path | provenance | | | normalizedPaths.js:381:25:381:28 | path | normalizedPaths.js:381:19:381:29 | slash(path) | provenance | Config | -| normalizedPaths.js:385:7:385:46 | path | normalizedPaths.js:388:19:388:22 | path | provenance | | -| normalizedPaths.js:385:7:385:46 | path | normalizedPaths.js:399:21:399:24 | path | provenance | | -| normalizedPaths.js:385:14:385:46 | pathMod ... uery.x) | normalizedPaths.js:385:7:385:46 | path | provenance | | +| normalizedPaths.js:385:7:385:10 | path | normalizedPaths.js:388:19:388:22 | path | provenance | | +| normalizedPaths.js:385:7:385:10 | path | normalizedPaths.js:399:21:399:24 | path | provenance | | +| normalizedPaths.js:385:14:385:46 | pathMod ... uery.x) | normalizedPaths.js:385:7:385:10 | path | provenance | | | normalizedPaths.js:385:35:385:45 | req.query.x | normalizedPaths.js:385:14:385:46 | pathMod ... uery.x) | provenance | Config | | normalizedPaths.js:407:45:407:55 | req.query.x | normalizedPaths.js:407:45:407:66 | req.que ... it('/') | provenance | Config | | normalizedPaths.js:407:45:407:66 | req.que ... it('/') | normalizedPaths.js:407:19:407:67 | pathMod ... t('/')) | provenance | Config | | normalizedPaths.js:408:38:408:48 | req.query.x | normalizedPaths.js:408:38:408:59 | req.que ... it('/') | provenance | Config | | normalizedPaths.js:408:38:408:59 | req.que ... it('/') | normalizedPaths.js:408:19:408:60 | pathMod ... t('/')) | provenance | Config | -| normalizedPaths.js:412:7:412:46 | path | normalizedPaths.js:415:19:415:22 | path | provenance | | -| normalizedPaths.js:412:7:412:46 | path | normalizedPaths.js:426:21:426:24 | path | provenance | | -| normalizedPaths.js:412:14:412:46 | pathMod ... uery.x) | normalizedPaths.js:412:7:412:46 | path | provenance | | +| normalizedPaths.js:412:7:412:10 | path | normalizedPaths.js:415:19:415:22 | path | provenance | | +| normalizedPaths.js:412:7:412:10 | path | normalizedPaths.js:426:21:426:24 | path | provenance | | +| normalizedPaths.js:412:14:412:46 | pathMod ... uery.x) | normalizedPaths.js:412:7:412:10 | path | provenance | | | normalizedPaths.js:412:35:412:45 | req.query.x | normalizedPaths.js:412:14:412:46 | pathMod ... uery.x) | provenance | Config | -| open.js:7:11:7:31 | file | open.js:9:10:9:13 | file | provenance | | -| open.js:7:11:7:31 | file | open.js:10:13:10:16 | file | provenance | | -| open.js:7:18:7:31 | req.query.file | open.js:7:11:7:31 | file | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:11:19:11:22 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:12:27:12:30 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:13:24:13:27 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:14:27:14:30 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:16:34:16:37 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:17:35:17:38 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:19:56:19:59 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:24:35:24:38 | path | provenance | | +| open.js:7:11:7:14 | file | open.js:9:10:9:13 | file | provenance | | +| open.js:7:11:7:14 | file | open.js:10:13:10:16 | file | provenance | | +| open.js:7:18:7:31 | req.query.file | open.js:7:11:7:14 | file | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:11:19:11:22 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:12:27:12:30 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:13:24:13:27 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:14:27:14:30 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:16:34:16:37 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:17:35:17:38 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:19:56:19:59 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:24:35:24:38 | path | provenance | | | other-fs-libraries.js:9:14:9:37 | url.par ... , true) | other-fs-libraries.js:9:14:9:43 | url.par ... ).query | provenance | Config | | other-fs-libraries.js:9:14:9:43 | url.par ... ).query | other-fs-libraries.js:9:14:9:48 | url.par ... ry.path | provenance | Config | -| other-fs-libraries.js:9:14:9:48 | url.par ... ry.path | other-fs-libraries.js:9:7:9:48 | path | provenance | | +| other-fs-libraries.js:9:14:9:48 | url.par ... ry.path | other-fs-libraries.js:9:7:9:10 | path | provenance | | | other-fs-libraries.js:9:24:9:30 | req.url | other-fs-libraries.js:9:14:9:37 | url.par ... , true) | provenance | Config | -| other-fs-libraries.js:38:7:38:48 | path | other-fs-libraries.js:40:35:40:38 | path | provenance | | -| other-fs-libraries.js:38:7:38:48 | path | other-fs-libraries.js:41:50:41:53 | path | provenance | | -| other-fs-libraries.js:38:7:38:48 | path | other-fs-libraries.js:42:53:42:56 | path | provenance | | +| other-fs-libraries.js:38:7:38:10 | path | other-fs-libraries.js:40:35:40:38 | path | provenance | | +| other-fs-libraries.js:38:7:38:10 | path | other-fs-libraries.js:41:50:41:53 | path | provenance | | +| other-fs-libraries.js:38:7:38:10 | path | other-fs-libraries.js:42:53:42:56 | path | provenance | | | other-fs-libraries.js:38:14:38:37 | url.par ... , true) | other-fs-libraries.js:38:14:38:43 | url.par ... ).query | provenance | Config | | other-fs-libraries.js:38:14:38:43 | url.par ... ).query | other-fs-libraries.js:38:14:38:48 | url.par ... ry.path | provenance | Config | -| other-fs-libraries.js:38:14:38:48 | url.par ... ry.path | other-fs-libraries.js:38:7:38:48 | path | provenance | | +| other-fs-libraries.js:38:14:38:48 | url.par ... ry.path | other-fs-libraries.js:38:7:38:10 | path | provenance | | | other-fs-libraries.js:38:24:38:30 | req.url | other-fs-libraries.js:38:14:38:37 | url.par ... , true) | provenance | Config | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:51:19:51:22 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:52:24:52:27 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:54:36:54:39 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:55:36:55:39 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:57:46:57:49 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:59:39:59:42 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:62:43:62:46 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:63:51:63:54 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:51:19:51:22 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:52:24:52:27 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:54:36:54:39 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:55:36:55:39 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:57:46:57:49 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:59:39:59:42 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:62:43:62:46 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:63:51:63:54 | path | provenance | | | other-fs-libraries.js:49:14:49:37 | url.par ... , true) | other-fs-libraries.js:49:14:49:43 | url.par ... ).query | provenance | Config | | other-fs-libraries.js:49:14:49:43 | url.par ... ).query | other-fs-libraries.js:49:14:49:48 | url.par ... ry.path | provenance | Config | -| other-fs-libraries.js:49:14:49:48 | url.par ... ry.path | other-fs-libraries.js:49:7:49:48 | path | provenance | | +| other-fs-libraries.js:49:14:49:48 | url.par ... ry.path | other-fs-libraries.js:49:7:49:10 | path | provenance | | | other-fs-libraries.js:49:24:49:30 | req.url | other-fs-libraries.js:49:14:49:37 | url.par ... , true) | provenance | Config | -| other-fs-libraries.js:68:7:68:48 | path | other-fs-libraries.js:70:19:70:22 | path | provenance | | -| other-fs-libraries.js:68:7:68:48 | path | other-fs-libraries.js:71:10:71:13 | path | provenance | | -| other-fs-libraries.js:68:7:68:48 | path | other-fs-libraries.js:72:15:72:18 | path | provenance | | -| other-fs-libraries.js:68:7:68:48 | path | other-fs-libraries.js:73:8:73:11 | path | provenance | | +| other-fs-libraries.js:68:7:68:10 | path | other-fs-libraries.js:70:19:70:22 | path | provenance | | +| other-fs-libraries.js:68:7:68:10 | path | other-fs-libraries.js:71:10:71:13 | path | provenance | | +| other-fs-libraries.js:68:7:68:10 | path | other-fs-libraries.js:72:15:72:18 | path | provenance | | +| other-fs-libraries.js:68:7:68:10 | path | other-fs-libraries.js:73:8:73:11 | path | provenance | | | other-fs-libraries.js:68:14:68:37 | url.par ... , true) | other-fs-libraries.js:68:14:68:43 | url.par ... ).query | provenance | Config | | other-fs-libraries.js:68:14:68:43 | url.par ... ).query | other-fs-libraries.js:68:14:68:48 | url.par ... ry.path | provenance | Config | -| other-fs-libraries.js:68:14:68:48 | url.par ... ry.path | other-fs-libraries.js:68:7:68:48 | path | provenance | | +| other-fs-libraries.js:68:14:68:48 | url.par ... ry.path | other-fs-libraries.js:68:7:68:10 | path | provenance | | | other-fs-libraries.js:68:24:68:30 | req.url | other-fs-libraries.js:68:14:68:37 | url.par ... , true) | provenance | Config | | other-fs-libraries.js:73:8:73:11 | path | other-fs-libraries.js:75:15:75:15 | x | provenance | | | other-fs-libraries.js:75:15:75:15 | x | other-fs-libraries.js:76:19:76:19 | x | provenance | | -| other-fs-libraries.js:81:7:81:48 | path | other-fs-libraries.js:83:16:83:19 | path | provenance | | +| other-fs-libraries.js:81:7:81:10 | path | other-fs-libraries.js:83:16:83:19 | path | provenance | | | other-fs-libraries.js:81:14:81:37 | url.par ... , true) | other-fs-libraries.js:81:14:81:43 | url.par ... ).query | provenance | Config | | other-fs-libraries.js:81:14:81:43 | url.par ... ).query | other-fs-libraries.js:81:14:81:48 | url.par ... ry.path | provenance | Config | -| other-fs-libraries.js:81:14:81:48 | url.par ... ry.path | other-fs-libraries.js:81:7:81:48 | path | provenance | | +| other-fs-libraries.js:81:14:81:48 | url.par ... ry.path | other-fs-libraries.js:81:7:81:10 | path | provenance | | | other-fs-libraries.js:81:24:81:30 | req.url | other-fs-libraries.js:81:14:81:37 | url.par ... , true) | provenance | Config | -| prettier.js:6:11:6:28 | p | prettier.js:7:28:7:28 | p | provenance | | -| prettier.js:6:11:6:28 | p | prettier.js:11:44:11:44 | p | provenance | | -| prettier.js:6:13:6:13 | p | prettier.js:6:11:6:28 | p | provenance | | -| pupeteer.js:5:9:5:71 | tainted | pupeteer.js:9:28:9:34 | tainted | provenance | | -| pupeteer.js:5:9:5:71 | tainted | pupeteer.js:13:37:13:43 | tainted | provenance | | -| pupeteer.js:5:19:5:71 | "dir/" ... t.data" | pupeteer.js:5:9:5:71 | tainted | provenance | | +| prettier.js:6:13:6:13 | p | prettier.js:6:13:6:13 | p | provenance | | +| prettier.js:6:13:6:13 | p | prettier.js:7:28:7:28 | p | provenance | | +| prettier.js:6:13:6:13 | p | prettier.js:11:44:11:44 | p | provenance | | +| pupeteer.js:5:9:5:15 | tainted | pupeteer.js:9:28:9:34 | tainted | provenance | | +| pupeteer.js:5:9:5:15 | tainted | pupeteer.js:13:37:13:43 | tainted | provenance | | +| pupeteer.js:5:19:5:71 | "dir/" ... t.data" | pupeteer.js:5:9:5:15 | tainted | provenance | | | pupeteer.js:5:28:5:53 | parseTo ... t).name | pupeteer.js:5:19:5:71 | "dir/" ... t.data" | provenance | Config | | rimraf.js:8:11:8:18 | { path } | rimraf.js:8:13:8:16 | path | provenance | Config | -| rimraf.js:8:11:8:29 | path | rimraf.js:10:17:10:20 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:11:23:11:26 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:12:19:12:22 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:13:25:13:28 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:14:24:14:27 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:15:23:15:26 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:16:25:16:28 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:17:19:17:22 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:18:24:18:27 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:19:23:19:26 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:20:26:20:29 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:21:20:21:23 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:22:25:22:28 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:23:24:23:27 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:24:23:24:26 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:25:28:25:31 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:26:27:26:30 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:27:22:27:25 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:28:18:28:21 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:29:23:29:26 | path | provenance | | -| rimraf.js:8:13:8:16 | path | rimraf.js:8:11:8:29 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:8:13:8:16 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:10:17:10:20 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:11:23:11:26 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:12:19:12:22 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:13:25:13:28 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:14:24:14:27 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:15:23:15:26 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:16:25:16:28 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:17:19:17:22 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:18:24:18:27 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:19:23:19:26 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:20:26:20:29 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:21:20:21:23 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:22:25:22:28 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:23:24:23:27 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:24:23:24:26 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:25:28:25:31 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:26:27:26:30 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:27:22:27:25 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:28:18:28:21 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:29:23:29:26 | path | provenance | | | rimraf.js:8:22:8:29 | req.body | rimraf.js:8:11:8:18 | { path } | provenance | | | sharedlib-repro.js:13:22:13:43 | req.par ... spaceId | sharedlib-repro.js:21:27:21:34 | filepath | provenance | | | sharedlib-repro.js:21:27:21:34 | filepath | sharedlib-repro.js:22:18:22:25 | filepath | provenance | | -| tainted-access-paths.js:6:7:6:48 | path | tainted-access-paths.js:8:19:8:22 | path | provenance | | -| tainted-access-paths.js:6:7:6:48 | path | tainted-access-paths.js:10:33:10:36 | path | provenance | | +| tainted-access-paths.js:6:7:6:10 | path | tainted-access-paths.js:8:19:8:22 | path | provenance | | +| tainted-access-paths.js:6:7:6:10 | path | tainted-access-paths.js:10:33:10:36 | path | provenance | | | tainted-access-paths.js:6:14:6:37 | url.par ... , true) | tainted-access-paths.js:6:14:6:43 | url.par ... ).query | provenance | Config | | tainted-access-paths.js:6:14:6:43 | url.par ... ).query | tainted-access-paths.js:6:14:6:48 | url.par ... ry.path | provenance | Config | -| tainted-access-paths.js:6:14:6:48 | url.par ... ry.path | tainted-access-paths.js:6:7:6:48 | path | provenance | | +| tainted-access-paths.js:6:14:6:48 | url.par ... ry.path | tainted-access-paths.js:6:7:6:10 | path | provenance | | | tainted-access-paths.js:6:24:6:30 | req.url | tainted-access-paths.js:6:14:6:37 | url.par ... , true) | provenance | Config | -| tainted-access-paths.js:10:7:10:36 | obj | tainted-access-paths.js:12:19:12:21 | obj | provenance | | -| tainted-access-paths.js:10:7:10:36 | obj | tainted-access-paths.js:26:19:26:21 | obj | provenance | | -| tainted-access-paths.js:10:7:10:36 | obj | tainted-access-paths.js:29:21:29:23 | obj | provenance | | -| tainted-access-paths.js:10:7:10:36 | obj | tainted-access-paths.js:30:23:30:25 | obj | provenance | | -| tainted-access-paths.js:10:7:10:36 | obj | tainted-access-paths.js:31:23:31:25 | obj | provenance | | -| tainted-access-paths.js:10:33:10:36 | path | tainted-access-paths.js:10:7:10:36 | obj | provenance | | +| tainted-access-paths.js:10:7:10:9 | obj | tainted-access-paths.js:12:19:12:21 | obj | provenance | | +| tainted-access-paths.js:10:7:10:9 | obj | tainted-access-paths.js:26:19:26:21 | obj | provenance | | +| tainted-access-paths.js:10:7:10:9 | obj | tainted-access-paths.js:29:21:29:23 | obj | provenance | | +| tainted-access-paths.js:10:7:10:9 | obj | tainted-access-paths.js:30:23:30:25 | obj | provenance | | +| tainted-access-paths.js:10:7:10:9 | obj | tainted-access-paths.js:31:23:31:25 | obj | provenance | | +| tainted-access-paths.js:10:33:10:36 | path | tainted-access-paths.js:10:7:10:9 | obj | provenance | | | tainted-access-paths.js:12:19:12:21 | obj | tainted-access-paths.js:12:19:12:25 | obj.sub | provenance | Config | | tainted-access-paths.js:26:19:26:21 | obj | tainted-access-paths.js:26:19:26:26 | obj.sub3 | provenance | Config | | tainted-access-paths.js:29:21:29:23 | obj | tainted-access-paths.js:29:21:29:28 | obj.sub4 | provenance | Config | | tainted-access-paths.js:30:23:30:25 | obj | tainted-access-paths.js:30:23:30:30 | obj.sub4 | provenance | Config | | tainted-access-paths.js:31:23:31:25 | obj | tainted-access-paths.js:31:23:31:30 | obj.sub4 | provenance | Config | -| tainted-access-paths.js:39:7:39:48 | path | tainted-access-paths.js:40:23:40:26 | path | provenance | | +| tainted-access-paths.js:39:7:39:10 | path | tainted-access-paths.js:40:23:40:26 | path | provenance | | | tainted-access-paths.js:39:14:39:37 | url.par ... , true) | tainted-access-paths.js:39:14:39:43 | url.par ... ).query | provenance | Config | | tainted-access-paths.js:39:14:39:43 | url.par ... ).query | tainted-access-paths.js:39:14:39:48 | url.par ... ry.path | provenance | Config | -| tainted-access-paths.js:39:14:39:48 | url.par ... ry.path | tainted-access-paths.js:39:7:39:48 | path | provenance | | +| tainted-access-paths.js:39:14:39:48 | url.par ... ry.path | tainted-access-paths.js:39:7:39:10 | path | provenance | | | tainted-access-paths.js:39:24:39:30 | req.url | tainted-access-paths.js:39:14:39:37 | url.par ... , true) | provenance | Config | -| tainted-access-paths.js:48:7:48:48 | path | tainted-access-paths.js:49:10:49:13 | path | provenance | | +| tainted-access-paths.js:48:7:48:10 | path | tainted-access-paths.js:49:10:49:13 | path | provenance | | | tainted-access-paths.js:48:14:48:37 | url.par ... , true) | tainted-access-paths.js:48:14:48:43 | url.par ... ).query | provenance | Config | | tainted-access-paths.js:48:14:48:43 | url.par ... ).query | tainted-access-paths.js:48:14:48:48 | url.par ... ry.path | provenance | Config | -| tainted-access-paths.js:48:14:48:48 | url.par ... ry.path | tainted-access-paths.js:48:7:48:48 | path | provenance | | +| tainted-access-paths.js:48:14:48:48 | url.par ... ry.path | tainted-access-paths.js:48:7:48:10 | path | provenance | | | tainted-access-paths.js:48:24:48:30 | req.url | tainted-access-paths.js:48:14:48:37 | url.par ... , true) | provenance | Config | -| tainted-promise-steps.js:6:7:6:48 | path | tainted-promise-steps.js:7:26:7:29 | path | provenance | | +| tainted-promise-steps.js:6:7:6:10 | path | tainted-promise-steps.js:7:26:7:29 | path | provenance | | | tainted-promise-steps.js:6:14:6:37 | url.par ... , true) | tainted-promise-steps.js:6:14:6:43 | url.par ... ).query | provenance | Config | | tainted-promise-steps.js:6:14:6:43 | url.par ... ).query | tainted-promise-steps.js:6:14:6:48 | url.par ... ry.path | provenance | Config | -| tainted-promise-steps.js:6:14:6:48 | url.par ... ry.path | tainted-promise-steps.js:6:7:6:48 | path | provenance | | +| tainted-promise-steps.js:6:14:6:48 | url.par ... ry.path | tainted-promise-steps.js:6:7:6:10 | path | provenance | | | tainted-promise-steps.js:6:24:6:30 | req.url | tainted-promise-steps.js:6:14:6:37 | url.par ... , true) | provenance | Config | | tainted-promise-steps.js:7:10:7:30 | Promise ... e(path) [PromiseValue] | tainted-promise-steps.js:10:23:10:33 | pathPromise [PromiseValue] | provenance | | | tainted-promise-steps.js:7:26:7:29 | path | tainted-promise-steps.js:7:10:7:30 | Promise ... e(path) [PromiseValue] | provenance | | @@ -730,23 +730,23 @@ edges | tainted-sendFile.js:22:34:22:45 | req.params.x | tainted-sendFile.js:22:16:22:46 | path.jo ... rams.x) | provenance | Config | | tainted-sendFile.js:28:37:28:48 | req.params.x | tainted-sendFile.js:28:16:28:48 | homeDir ... arams.x | provenance | Config | | tainted-sendFile.js:30:34:30:45 | req.params.x | tainted-sendFile.js:30:16:30:46 | path.jo ... rams.x) | provenance | Config | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:8:18:8:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:9:18:9:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:10:18:10:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:11:18:11:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:13:18:13:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:14:33:14:36 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:15:42:15:45 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:17:18:17:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:18:18:18:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:22:18:22:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:23:18:23:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:24:18:24:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:26:18:26:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:27:18:27:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:8:18:8:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:9:18:9:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:10:18:10:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:11:18:11:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:13:18:13:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:14:33:14:36 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:15:42:15:45 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:17:18:17:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:18:18:18:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:22:18:22:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:23:18:23:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:24:18:24:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:26:18:26:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:27:18:27:21 | path | provenance | | | tainted-string-steps.js:6:14:6:37 | url.par ... , true) | tainted-string-steps.js:6:14:6:43 | url.par ... ).query | provenance | Config | | tainted-string-steps.js:6:14:6:43 | url.par ... ).query | tainted-string-steps.js:6:14:6:48 | url.par ... ry.path | provenance | Config | -| tainted-string-steps.js:6:14:6:48 | url.par ... ry.path | tainted-string-steps.js:6:7:6:48 | path | provenance | | +| tainted-string-steps.js:6:14:6:48 | url.par ... ry.path | tainted-string-steps.js:6:7:6:10 | path | provenance | | | tainted-string-steps.js:6:24:6:30 | req.url | tainted-string-steps.js:6:14:6:37 | url.par ... , true) | provenance | Config | | tainted-string-steps.js:8:18:8:21 | path | tainted-string-steps.js:8:18:8:34 | path.substring(4) | provenance | Config | | tainted-string-steps.js:9:18:9:21 | path | tainted-string-steps.js:9:18:9:37 | path.substring(0, i) | provenance | Config | @@ -766,34 +766,34 @@ edges | tainted-string-steps.js:26:18:26:21 | path | tainted-string-steps.js:26:18:26:36 | path.split(unknown) | provenance | Config | | tainted-string-steps.js:26:18:26:36 | path.split(unknown) | tainted-string-steps.js:26:18:26:45 | path.sp ... hatever | provenance | Config | | tainted-string-steps.js:27:18:27:21 | path | tainted-string-steps.js:27:18:27:36 | path.split(unknown) | provenance | Config | -| torrents.js:5:6:5:38 | name | torrents.js:6:24:6:27 | name | provenance | | -| torrents.js:5:13:5:38 | parseTo ... t).name | torrents.js:5:6:5:38 | name | provenance | | -| torrents.js:6:6:6:45 | loc | torrents.js:7:25:7:27 | loc | provenance | | -| torrents.js:6:12:6:45 | dir + " ... t.data" | torrents.js:6:6:6:45 | loc | provenance | | +| torrents.js:5:6:5:9 | name | torrents.js:6:24:6:27 | name | provenance | | +| torrents.js:5:13:5:38 | parseTo ... t).name | torrents.js:5:6:5:9 | name | provenance | | +| torrents.js:6:6:6:8 | loc | torrents.js:7:25:7:27 | loc | provenance | | +| torrents.js:6:12:6:45 | dir + " ... t.data" | torrents.js:6:6:6:8 | loc | provenance | | | torrents.js:6:24:6:27 | name | torrents.js:6:12:6:45 | dir + " ... t.data" | provenance | Config | -| typescript.ts:9:7:9:48 | path | typescript.ts:11:29:11:32 | path | provenance | | -| typescript.ts:9:7:9:48 | path | typescript.ts:19:15:19:18 | path | provenance | | -| typescript.ts:9:7:9:48 | path | typescript.ts:22:15:22:18 | path | provenance | | -| typescript.ts:9:7:9:48 | path | typescript.ts:29:15:29:18 | path | provenance | | +| typescript.ts:9:7:9:10 | path | typescript.ts:11:29:11:32 | path | provenance | | +| typescript.ts:9:7:9:10 | path | typescript.ts:19:15:19:18 | path | provenance | | +| typescript.ts:9:7:9:10 | path | typescript.ts:22:15:22:18 | path | provenance | | +| typescript.ts:9:7:9:10 | path | typescript.ts:29:15:29:18 | path | provenance | | | typescript.ts:9:14:9:37 | url.par ... , true) | typescript.ts:9:14:9:43 | url.par ... ).query | provenance | Config | | typescript.ts:9:14:9:43 | url.par ... ).query | typescript.ts:9:14:9:48 | url.par ... ry.path | provenance | Config | -| typescript.ts:9:14:9:48 | url.par ... ry.path | typescript.ts:9:7:9:48 | path | provenance | | +| typescript.ts:9:14:9:48 | url.par ... ry.path | typescript.ts:9:7:9:10 | path | provenance | | | typescript.ts:9:24:9:30 | req.url | typescript.ts:9:14:9:37 | url.par ... , true) | provenance | Config | -| typescript.ts:19:7:19:18 | path3 | typescript.ts:20:39:20:43 | path3 | provenance | | -| typescript.ts:19:15:19:18 | path | typescript.ts:19:7:19:18 | path3 | provenance | | -| typescript.ts:22:7:22:18 | path4 | typescript.ts:23:39:23:43 | path4 | provenance | | -| typescript.ts:22:15:22:18 | path | typescript.ts:22:7:22:18 | path4 | provenance | | -| typescript.ts:29:7:29:18 | path6 | typescript.ts:31:29:31:33 | path6 | provenance | | -| typescript.ts:29:15:29:18 | path | typescript.ts:29:7:29:18 | path6 | provenance | | +| typescript.ts:19:7:19:11 | path3 | typescript.ts:20:39:20:43 | path3 | provenance | | +| typescript.ts:19:15:19:18 | path | typescript.ts:19:7:19:11 | path3 | provenance | | +| typescript.ts:22:7:22:11 | path4 | typescript.ts:23:39:23:43 | path4 | provenance | | +| typescript.ts:22:15:22:18 | path | typescript.ts:22:7:22:11 | path4 | provenance | | +| typescript.ts:29:7:29:11 | path6 | typescript.ts:31:29:31:33 | path6 | provenance | | +| typescript.ts:29:15:29:18 | path | typescript.ts:29:7:29:11 | path6 | provenance | | nodes -| TaintedPath-es6.js:7:7:7:44 | path | semmle.label | path | +| TaintedPath-es6.js:7:7:7:10 | path | semmle.label | path | | TaintedPath-es6.js:7:14:7:33 | parse(req.url, true) | semmle.label | parse(req.url, true) | | TaintedPath-es6.js:7:14:7:39 | parse(r ... ).query | semmle.label | parse(r ... ).query | | TaintedPath-es6.js:7:14:7:44 | parse(r ... ry.path | semmle.label | parse(r ... ry.path | | TaintedPath-es6.js:7:20:7:26 | req.url | semmle.label | req.url | | TaintedPath-es6.js:9:26:9:45 | join("public", path) | semmle.label | join("public", path) | | TaintedPath-es6.js:9:41:9:44 | path | semmle.label | path | -| TaintedPath.js:9:7:9:48 | path | semmle.label | path | +| TaintedPath.js:9:7:9:10 | path | semmle.label | path | | TaintedPath.js:9:14:9:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:9:14:9:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:9:14:9:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -805,7 +805,7 @@ nodes | TaintedPath.js:19:33:19:36 | path | semmle.label | path | | TaintedPath.js:22:33:22:36 | path | semmle.label | path | | TaintedPath.js:31:31:31:34 | path | semmle.label | path | -| TaintedPath.js:36:3:36:44 | path | semmle.label | path | +| TaintedPath.js:36:3:36:6 | path | semmle.label | path | | TaintedPath.js:36:10:36:33 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:36:10:36:39 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:36:10:36:44 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -838,7 +838,7 @@ nodes | TaintedPath.js:56:31:56:73 | require ... ).query | semmle.label | require ... ).query | | TaintedPath.js:56:60:56:66 | req.url | semmle.label | req.url | | TaintedPath.js:64:48:64:60 | req.params[0] | semmle.label | req.params[0] | -| TaintedPath.js:73:6:73:47 | path | semmle.label | path | +| TaintedPath.js:73:6:73:9 | path | semmle.label | path | | TaintedPath.js:73:13:73:36 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:73:13:73:42 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:73:13:73:47 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -848,19 +848,19 @@ nodes | TaintedPath.js:76:14:76:17 | path | semmle.label | path | | TaintedPath.js:77:32:77:39 | realpath | semmle.label | realpath | | TaintedPath.js:78:45:78:52 | realpath | semmle.label | realpath | -| TaintedPath.js:109:6:109:47 | path | semmle.label | path | +| TaintedPath.js:109:6:109:9 | path | semmle.label | path | | TaintedPath.js:109:13:109:36 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:109:13:109:42 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:109:13:109:47 | url.par ... ry.path | semmle.label | url.par ... ry.path | | TaintedPath.js:109:23:109:29 | req.url | semmle.label | req.url | | TaintedPath.js:111:23:111:26 | path | semmle.label | path | -| TaintedPath.js:115:7:115:48 | path | semmle.label | path | +| TaintedPath.js:115:7:115:10 | path | semmle.label | path | | TaintedPath.js:115:14:115:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:115:14:115:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:115:14:115:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | TaintedPath.js:115:24:115:30 | req.url | semmle.label | req.url | | TaintedPath.js:117:19:117:22 | path | semmle.label | path | -| TaintedPath.js:119:7:119:29 | split | semmle.label | split | +| TaintedPath.js:119:7:119:11 | split | semmle.label | split | | TaintedPath.js:119:15:119:18 | path | semmle.label | path | | TaintedPath.js:119:15:119:29 | path.split("/") | semmle.label | path.split("/") | | TaintedPath.js:121:19:121:23 | split | semmle.label | split | @@ -870,19 +870,19 @@ nodes | TaintedPath.js:126:19:126:35 | prefix + split[x] | semmle.label | prefix + split[x] | | TaintedPath.js:126:28:126:32 | split | semmle.label | split | | TaintedPath.js:126:28:126:35 | split[x] | semmle.label | split[x] | -| TaintedPath.js:128:7:128:38 | concatted | semmle.label | concatted | +| TaintedPath.js:128:7:128:15 | concatted | semmle.label | concatted | | TaintedPath.js:128:19:128:38 | prefix.concat(split) | semmle.label | prefix.concat(split) | | TaintedPath.js:128:33:128:37 | split | semmle.label | split | | TaintedPath.js:129:19:129:27 | concatted | semmle.label | concatted | | TaintedPath.js:129:19:129:37 | concatted.join("/") | semmle.label | concatted.join("/") | -| TaintedPath.js:131:7:131:39 | concatted2 | semmle.label | concatted2 | +| TaintedPath.js:131:7:131:16 | concatted2 | semmle.label | concatted2 | | TaintedPath.js:131:20:131:24 | split | semmle.label | split | | TaintedPath.js:131:20:131:39 | split.concat(prefix) | semmle.label | split.concat(prefix) | | TaintedPath.js:132:19:132:28 | concatted2 | semmle.label | concatted2 | | TaintedPath.js:132:19:132:38 | concatted2.join("/") | semmle.label | concatted2.join("/") | | TaintedPath.js:134:19:134:23 | split | semmle.label | split | | TaintedPath.js:134:19:134:29 | split.pop() | semmle.label | split.pop() | -| TaintedPath.js:139:7:139:48 | path | semmle.label | path | +| TaintedPath.js:139:7:139:10 | path | semmle.label | path | | TaintedPath.js:139:14:139:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:139:14:139:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:139:14:139:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -913,7 +913,7 @@ nodes | TaintedPath.js:179:29:179:51 | parseqs ... eq.url) | semmle.label | parseqs ... eq.url) | | TaintedPath.js:179:29:179:55 | parseqs ... rl).foo | semmle.label | parseqs ... rl).foo | | TaintedPath.js:179:44:179:50 | req.url | semmle.label | req.url | -| TaintedPath.js:184:7:184:48 | path | semmle.label | path | +| TaintedPath.js:184:7:184:10 | path | semmle.label | path | | TaintedPath.js:184:14:184:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:184:14:184:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:184:14:184:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -921,14 +921,14 @@ nodes | TaintedPath.js:185:31:185:34 | path | semmle.label | path | | TaintedPath.js:186:45:186:48 | path | semmle.label | path | | TaintedPath.js:187:35:187:38 | path | semmle.label | path | -| TaintedPath.js:191:7:191:48 | path | semmle.label | path | +| TaintedPath.js:191:7:191:10 | path | semmle.label | path | | TaintedPath.js:191:14:191:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:191:14:191:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:191:14:191:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | TaintedPath.js:191:24:191:30 | req.url | semmle.label | req.url | | TaintedPath.js:195:29:195:32 | path | semmle.label | path | | TaintedPath.js:195:29:195:85 | path.re ... '), '') | semmle.label | path.re ... '), '') | -| TaintedPath.js:200:7:200:48 | path | semmle.label | path | +| TaintedPath.js:200:7:200:10 | path | semmle.label | path | | TaintedPath.js:200:14:200:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:200:14:200:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:200:14:200:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -937,27 +937,27 @@ nodes | TaintedPath.js:202:29:202:68 | path.re ... '), '') | semmle.label | path.re ... '), '') | | TaintedPath.js:205:31:205:34 | path | semmle.label | path | | TaintedPath.js:205:31:205:69 | path.re ... '), '') | semmle.label | path.re ... '), '') | -| TaintedPath.js:212:7:212:48 | path | semmle.label | path | +| TaintedPath.js:212:7:212:10 | path | semmle.label | path | | TaintedPath.js:212:14:212:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:212:14:212:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:212:14:212:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | TaintedPath.js:212:24:212:30 | req.url | semmle.label | req.url | -| TaintedPath.js:213:9:213:37 | improperEscape | semmle.label | improperEscape | +| TaintedPath.js:213:9:213:22 | improperEscape | semmle.label | improperEscape | | TaintedPath.js:213:26:213:37 | escape(path) | semmle.label | escape(path) | | TaintedPath.js:213:33:213:36 | path | semmle.label | path | | TaintedPath.js:214:29:214:42 | improperEscape | semmle.label | improperEscape | -| TaintedPath.js:215:9:215:40 | improperEscape2 | semmle.label | improperEscape2 | +| TaintedPath.js:215:9:215:23 | improperEscape2 | semmle.label | improperEscape2 | | TaintedPath.js:215:27:215:40 | unescape(path) | semmle.label | unescape(path) | | TaintedPath.js:215:36:215:39 | path | semmle.label | path | | TaintedPath.js:216:29:216:43 | improperEscape2 | semmle.label | improperEscape2 | -| examples/TaintedPath.js:8:7:8:52 | filePath | semmle.label | filePath | +| examples/TaintedPath.js:8:7:8:14 | filePath | semmle.label | filePath | | examples/TaintedPath.js:8:18:8:41 | url.par ... , true) | semmle.label | url.par ... , true) | | examples/TaintedPath.js:8:18:8:47 | url.par ... ).query | semmle.label | url.par ... ).query | | examples/TaintedPath.js:8:18:8:52 | url.par ... ry.path | semmle.label | url.par ... ry.path | | 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:9:6:16 | 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"] | @@ -974,14 +974,14 @@ nodes | handlebars.js:15:25:15:32 | filePath | semmle.label | filePath | | handlebars.js:29:46:29:60 | req.params.path | semmle.label | req.params.path | | handlebars.js:43:15:43:29 | req.params.path | semmle.label | req.params.path | -| hapi.js:14:19:14:51 | filepath | semmle.label | filepath | +| hapi.js:14:19:14:26 | filepath | semmle.label | filepath | | hapi.js:14:30:14:51 | request ... ilepath | semmle.label | request ... ilepath | | hapi.js:15:44:15:51 | filepath | semmle.label | filepath | -| make-dir.js:7:11:7:31 | file | semmle.label | file | +| make-dir.js:7:11:7:14 | file | semmle.label | file | | make-dir.js:7:18:7:31 | req.query.file | semmle.label | req.query.file | | make-dir.js:9:25:9:28 | file | semmle.label | file | | make-dir.js:10:23:10:26 | file | semmle.label | file | -| mkdirp.js:9:11:9:76 | dirPath | semmle.label | dirPath | +| mkdirp.js:9:11:9:17 | dirPath | semmle.label | dirPath | | mkdirp.js:9:21:9:76 | path.jo ... ltDir') | semmle.label | path.jo ... ltDir') | | mkdirp.js:9:42:9:59 | req.query.filename | semmle.label | req.query.filename | | mkdirp.js:9:42:9:75 | req.que ... ultDir' | semmle.label | req.que ... ultDir' | @@ -997,7 +997,7 @@ nodes | mkdirp.js:20:29:20:35 | dirPath | semmle.label | dirPath | | mkdirp.js:21:23:21:29 | dirPath | semmle.label | dirPath | | more-fs-extra.js:8:11:8:22 | { filename } | semmle.label | { filename } | -| more-fs-extra.js:8:11:8:33 | filename | semmle.label | filename | +| more-fs-extra.js:8:13:8:20 | filename | semmle.label | filename | | more-fs-extra.js:8:13:8:20 | filename | semmle.label | filename | | more-fs-extra.js:8:26:8:33 | req.body | semmle.label | req.body | | more-fs-extra.js:10:15:10:22 | filename | semmle.label | filename | @@ -1023,7 +1023,7 @@ nodes | more-fs-extra.js:30:16:30:23 | filename | semmle.label | filename | | more-fs-extra.js:31:20:31:27 | filename | semmle.label | filename | | more-fs-extra.js:32:23:32:30 | filename | semmle.label | filename | -| normalizedPaths.js:11:7:11:27 | path | semmle.label | path | +| normalizedPaths.js:11:7:11:10 | path | semmle.label | path | | normalizedPaths.js:11:14:11:27 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:13:19:13:22 | path | semmle.label | path | | normalizedPaths.js:14:19:14:29 | './' + path | semmle.label | './' + path | @@ -1034,7 +1034,7 @@ nodes | normalizedPaths.js:16:35:16:38 | path | semmle.label | path | | normalizedPaths.js:17:19:17:57 | pathMod ... , path) | semmle.label | pathMod ... , path) | | normalizedPaths.js:17:53:17:56 | path | semmle.label | path | -| normalizedPaths.js:21:7:21:49 | path | semmle.label | path | +| normalizedPaths.js:21:7:21:10 | path | semmle.label | path | | normalizedPaths.js:21:14:21:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:21:35:21:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:23:19:23:22 | path | semmle.label | path | @@ -1046,57 +1046,57 @@ nodes | normalizedPaths.js:26:35:26:38 | path | semmle.label | path | | normalizedPaths.js:27:19:27:57 | pathMod ... , path) | semmle.label | pathMod ... , path) | | normalizedPaths.js:27:53:27:56 | path | semmle.label | path | -| normalizedPaths.js:31:7:31:49 | path | semmle.label | path | +| normalizedPaths.js:31:7:31:10 | path | semmle.label | path | | normalizedPaths.js:31:14:31:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:31:35:31:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:36:19:36:22 | path | semmle.label | path | | normalizedPaths.js:41:21:41:24 | path | semmle.label | path | -| normalizedPaths.js:54:7:54:49 | path | semmle.label | path | +| normalizedPaths.js:54:7:54:10 | path | semmle.label | path | | normalizedPaths.js:54:14:54:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:54:35:54:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:59:19:59:22 | path | semmle.label | path | | normalizedPaths.js:63:19:63:22 | path | semmle.label | path | | normalizedPaths.js:63:19:63:38 | path + "/index.html" | semmle.label | path + "/index.html" | | normalizedPaths.js:68:21:68:24 | path | semmle.label | path | -| normalizedPaths.js:73:7:73:56 | path | semmle.label | path | +| normalizedPaths.js:73:7:73:10 | path | semmle.label | path | | normalizedPaths.js:73:14:73:56 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:73:35:73:55 | './' + ... ry.path | semmle.label | './' + ... ry.path | | normalizedPaths.js:73:42:73:55 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:78:22:78:25 | path | semmle.label | path | -| normalizedPaths.js:82:7:82:27 | path | semmle.label | path | +| normalizedPaths.js:82:7:82:10 | path | semmle.label | path | | normalizedPaths.js:82:14:82:27 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:87:29:87:32 | path | semmle.label | path | | normalizedPaths.js:90:31:90:34 | path | semmle.label | path | -| normalizedPaths.js:94:7:94:49 | path | semmle.label | path | +| normalizedPaths.js:94:7:94:10 | path | semmle.label | path | | normalizedPaths.js:94:14:94:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:94:35:94:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:99:29:99:32 | path | semmle.label | path | -| normalizedPaths.js:117:7:117:44 | path | semmle.label | path | +| normalizedPaths.js:117:7:117:10 | path | semmle.label | path | | normalizedPaths.js:117:14:117:44 | fs.real ... y.path) | semmle.label | fs.real ... y.path) | | normalizedPaths.js:117:30:117:43 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:119:19:119:22 | path | semmle.label | path | | normalizedPaths.js:120:19:120:53 | pathMod ... .html') | semmle.label | pathMod ... .html') | | normalizedPaths.js:120:35:120:38 | path | semmle.label | path | -| normalizedPaths.js:130:7:130:49 | path | semmle.label | path | +| normalizedPaths.js:130:7:130:10 | path | semmle.label | path | | normalizedPaths.js:130:14:130:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:130:35:130:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:135:21:135:24 | path | semmle.label | path | -| normalizedPaths.js:139:7:139:62 | path | semmle.label | path | +| normalizedPaths.js:139:7:139:10 | path | semmle.label | path | | normalizedPaths.js:139:14:139:62 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:139:48:139:61 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:144:21:144:24 | path | semmle.label | path | -| normalizedPaths.js:148:7:148:58 | path | semmle.label | path | +| normalizedPaths.js:148:7:148:10 | path | semmle.label | path | | normalizedPaths.js:148:14:148:58 | 'foo/' ... y.path) | semmle.label | 'foo/' ... y.path) | | normalizedPaths.js:148:23:148:58 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:148:44:148:57 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:151:21:151:24 | path | semmle.label | path | | normalizedPaths.js:153:21:153:24 | path | semmle.label | path | -| normalizedPaths.js:160:7:160:49 | path | semmle.label | path | +| normalizedPaths.js:160:7:160:10 | path | semmle.label | path | | normalizedPaths.js:160:14:160:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:160:35:160:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:165:19:165:22 | path | semmle.label | path | | normalizedPaths.js:170:21:170:24 | path | semmle.label | path | -| normalizedPaths.js:174:7:174:27 | path | semmle.label | path | +| normalizedPaths.js:174:7:174:10 | path | semmle.label | path | | normalizedPaths.js:174:14:174:27 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:184:19:184:22 | path | semmle.label | path | | normalizedPaths.js:187:21:187:24 | path | semmle.label | path | @@ -1104,80 +1104,80 @@ nodes | normalizedPaths.js:192:21:192:24 | path | semmle.label | path | | normalizedPaths.js:194:21:194:24 | path | semmle.label | path | | normalizedPaths.js:199:21:199:24 | path | semmle.label | path | -| normalizedPaths.js:201:7:201:49 | normalizedPath | semmle.label | normalizedPath | +| normalizedPaths.js:201:7:201:20 | normalizedPath | semmle.label | normalizedPath | | normalizedPaths.js:201:24:201:49 | pathMod ... e(path) | semmle.label | pathMod ... e(path) | | normalizedPaths.js:201:45:201:48 | path | semmle.label | path | | normalizedPaths.js:205:21:205:34 | normalizedPath | semmle.label | normalizedPath | | normalizedPaths.js:208:21:208:34 | normalizedPath | semmle.label | normalizedPath | | normalizedPaths.js:210:21:210:34 | normalizedPath | semmle.label | normalizedPath | -| normalizedPaths.js:214:7:214:49 | path | semmle.label | path | +| normalizedPaths.js:214:7:214:10 | path | semmle.label | path | | normalizedPaths.js:214:14:214:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:214:35:214:48 | req.query.path | semmle.label | req.query.path | -| normalizedPaths.js:219:3:219:33 | path | semmle.label | path | +| normalizedPaths.js:219:3:219:6 | path | semmle.label | path | | normalizedPaths.js:219:10:219:33 | decodeU ... t(path) | semmle.label | decodeU ... t(path) | | normalizedPaths.js:219:29:219:32 | path | semmle.label | path | | normalizedPaths.js:222:21:222:24 | path | semmle.label | path | -| normalizedPaths.js:226:7:226:70 | path | semmle.label | path | +| normalizedPaths.js:226:7:226:10 | path | semmle.label | path | | normalizedPaths.js:226:14:226:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:226:14:226:70 | pathMod ... g, ' ') | semmle.label | pathMod ... g, ' ') | | normalizedPaths.js:226:35:226:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:228:21:228:24 | path | semmle.label | path | -| normalizedPaths.js:236:7:236:47 | path | semmle.label | path | +| normalizedPaths.js:236:7:236:10 | path | semmle.label | path | | normalizedPaths.js:236:14:236:47 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:236:33:236:46 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:238:19:238:22 | path | semmle.label | path | | normalizedPaths.js:245:21:245:24 | path | semmle.label | path | | normalizedPaths.js:250:21:250:24 | path | semmle.label | path | -| normalizedPaths.js:254:7:254:47 | path | semmle.label | path | +| normalizedPaths.js:254:7:254:10 | path | semmle.label | path | | normalizedPaths.js:254:14:254:47 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:254:33:254:46 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:256:19:256:22 | path | semmle.label | path | | normalizedPaths.js:262:21:262:24 | path | semmle.label | path | -| normalizedPaths.js:267:7:267:42 | newpath | semmle.label | newpath | +| normalizedPaths.js:267:7:267:13 | newpath | semmle.label | newpath | | normalizedPaths.js:267:17:267:42 | pathMod ... e(path) | semmle.label | pathMod ... e(path) | | normalizedPaths.js:267:38:267:41 | path | semmle.label | path | | normalizedPaths.js:270:21:270:27 | newpath | semmle.label | newpath | -| normalizedPaths.js:275:7:275:42 | newpath | semmle.label | newpath | +| normalizedPaths.js:275:7:275:13 | newpath | semmle.label | newpath | | normalizedPaths.js:275:17:275:42 | pathMod ... e(path) | semmle.label | pathMod ... e(path) | | normalizedPaths.js:275:38:275:41 | path | semmle.label | path | | normalizedPaths.js:278:21:278:27 | newpath | semmle.label | newpath | -| normalizedPaths.js:283:7:283:42 | newpath | semmle.label | newpath | +| normalizedPaths.js:283:7:283:13 | newpath | semmle.label | newpath | | normalizedPaths.js:283:17:283:42 | pathMod ... e(path) | semmle.label | pathMod ... e(path) | | normalizedPaths.js:283:38:283:41 | path | semmle.label | path | | normalizedPaths.js:286:21:286:27 | newpath | semmle.label | newpath | -| normalizedPaths.js:291:7:291:42 | newpath | semmle.label | newpath | +| normalizedPaths.js:291:7:291:13 | newpath | semmle.label | newpath | | normalizedPaths.js:291:17:291:42 | pathMod ... e(path) | semmle.label | pathMod ... e(path) | | normalizedPaths.js:291:38:291:41 | path | semmle.label | path | | normalizedPaths.js:296:21:296:27 | newpath | semmle.label | newpath | -| normalizedPaths.js:303:6:303:26 | path | semmle.label | path | +| normalizedPaths.js:303:6:303:9 | path | semmle.label | path | | normalizedPaths.js:303:13:303:26 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:304:18:304:21 | path | semmle.label | path | | normalizedPaths.js:309:19:309:22 | path | semmle.label | path | | normalizedPaths.js:313:19:313:22 | path | semmle.label | path | | normalizedPaths.js:316:19:316:22 | path | semmle.label | path | -| normalizedPaths.js:320:6:320:49 | normalizedPath | semmle.label | normalizedPath | +| normalizedPaths.js:320:6:320:19 | normalizedPath | semmle.label | normalizedPath | | normalizedPaths.js:320:23:320:49 | pathMod ... , path) | semmle.label | pathMod ... , path) | | normalizedPaths.js:320:45:320:48 | path | semmle.label | path | | normalizedPaths.js:325:19:325:32 | normalizedPath | semmle.label | normalizedPath | | normalizedPaths.js:332:19:332:32 | normalizedPath | semmle.label | normalizedPath | -| normalizedPaths.js:339:6:339:46 | path | semmle.label | path | +| normalizedPaths.js:339:6:339:9 | path | semmle.label | path | | normalizedPaths.js:339:13:339:46 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:339:32:339:45 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:341:18:341:21 | path | semmle.label | path | | normalizedPaths.js:346:19:346:22 | path | semmle.label | path | -| normalizedPaths.js:354:7:354:27 | path | semmle.label | path | +| normalizedPaths.js:354:7:354:10 | path | semmle.label | path | | normalizedPaths.js:354:14:354:27 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:356:19:356:22 | path | semmle.label | path | -| normalizedPaths.js:358:7:358:51 | requestPath | semmle.label | requestPath | +| normalizedPaths.js:358:7:358:17 | requestPath | semmle.label | requestPath | | normalizedPaths.js:358:21:358:51 | pathMod ... , path) | semmle.label | pathMod ... , path) | | normalizedPaths.js:358:47:358:50 | path | semmle.label | path | | normalizedPaths.js:363:21:363:31 | requestPath | semmle.label | requestPath | -| normalizedPaths.js:377:7:377:27 | path | semmle.label | path | +| normalizedPaths.js:377:7:377:10 | path | semmle.label | path | | normalizedPaths.js:377:14:377:27 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:379:19:379:22 | path | semmle.label | path | | normalizedPaths.js:381:19:381:29 | slash(path) | semmle.label | slash(path) | | normalizedPaths.js:381:25:381:28 | path | semmle.label | path | -| normalizedPaths.js:385:7:385:46 | path | semmle.label | path | +| normalizedPaths.js:385:7:385:10 | path | semmle.label | path | | normalizedPaths.js:385:14:385:46 | pathMod ... uery.x) | semmle.label | pathMod ... uery.x) | | normalizedPaths.js:385:35:385:45 | req.query.x | semmle.label | req.query.x | | normalizedPaths.js:388:19:388:22 | path | semmle.label | path | @@ -1188,16 +1188,16 @@ nodes | normalizedPaths.js:408:19:408:60 | pathMod ... t('/')) | semmle.label | pathMod ... t('/')) | | normalizedPaths.js:408:38:408:48 | req.query.x | semmle.label | req.query.x | | normalizedPaths.js:408:38:408:59 | req.que ... it('/') | semmle.label | req.que ... it('/') | -| normalizedPaths.js:412:7:412:46 | path | semmle.label | path | +| normalizedPaths.js:412:7:412:10 | path | semmle.label | path | | normalizedPaths.js:412:14:412:46 | pathMod ... uery.x) | semmle.label | pathMod ... uery.x) | | normalizedPaths.js:412:35:412:45 | req.query.x | semmle.label | req.query.x | | normalizedPaths.js:415:19:415:22 | path | semmle.label | path | | normalizedPaths.js:426:21:426:24 | path | semmle.label | path | -| open.js:7:11:7:31 | file | semmle.label | file | +| open.js:7:11:7:14 | file | semmle.label | file | | open.js:7:18:7:31 | req.query.file | semmle.label | req.query.file | | open.js:9:10:9:13 | file | semmle.label | file | | open.js:10:13:10:16 | file | semmle.label | file | -| other-fs-libraries.js:9:7:9:48 | path | semmle.label | path | +| other-fs-libraries.js:9:7:9:10 | path | semmle.label | path | | other-fs-libraries.js:9:14:9:37 | url.par ... , true) | semmle.label | url.par ... , true) | | other-fs-libraries.js:9:14:9:43 | url.par ... ).query | semmle.label | url.par ... ).query | | other-fs-libraries.js:9:14:9:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -1210,7 +1210,7 @@ nodes | other-fs-libraries.js:17:35:17:38 | path | semmle.label | path | | other-fs-libraries.js:19:56:19:59 | path | semmle.label | path | | other-fs-libraries.js:24:35:24:38 | path | semmle.label | path | -| other-fs-libraries.js:38:7:38:48 | path | semmle.label | path | +| other-fs-libraries.js:38:7:38:10 | path | semmle.label | path | | other-fs-libraries.js:38:14:38:37 | url.par ... , true) | semmle.label | url.par ... , true) | | other-fs-libraries.js:38:14:38:43 | url.par ... ).query | semmle.label | url.par ... ).query | | other-fs-libraries.js:38:14:38:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -1218,7 +1218,7 @@ nodes | other-fs-libraries.js:40:35:40:38 | path | semmle.label | path | | other-fs-libraries.js:41:50:41:53 | path | semmle.label | path | | other-fs-libraries.js:42:53:42:56 | path | semmle.label | path | -| other-fs-libraries.js:49:7:49:48 | path | semmle.label | path | +| other-fs-libraries.js:49:7:49:10 | path | semmle.label | path | | other-fs-libraries.js:49:14:49:37 | url.par ... , true) | semmle.label | url.par ... , true) | | other-fs-libraries.js:49:14:49:43 | url.par ... ).query | semmle.label | url.par ... ).query | | other-fs-libraries.js:49:14:49:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -1231,7 +1231,7 @@ nodes | other-fs-libraries.js:59:39:59:42 | path | semmle.label | path | | other-fs-libraries.js:62:43:62:46 | path | semmle.label | path | | other-fs-libraries.js:63:51:63:54 | path | semmle.label | path | -| other-fs-libraries.js:68:7:68:48 | path | semmle.label | path | +| other-fs-libraries.js:68:7:68:10 | path | semmle.label | path | | other-fs-libraries.js:68:14:68:37 | url.par ... , true) | semmle.label | url.par ... , true) | | other-fs-libraries.js:68:14:68:43 | url.par ... ).query | semmle.label | url.par ... ).query | | other-fs-libraries.js:68:14:68:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -1242,23 +1242,23 @@ nodes | other-fs-libraries.js:73:8:73:11 | path | semmle.label | path | | other-fs-libraries.js:75:15:75:15 | x | semmle.label | x | | other-fs-libraries.js:76:19:76:19 | x | semmle.label | x | -| other-fs-libraries.js:81:7:81:48 | path | semmle.label | path | +| other-fs-libraries.js:81:7:81:10 | path | semmle.label | path | | other-fs-libraries.js:81:14:81:37 | url.par ... , true) | semmle.label | url.par ... , true) | | other-fs-libraries.js:81:14:81:43 | url.par ... ).query | semmle.label | url.par ... ).query | | other-fs-libraries.js:81:14:81:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | other-fs-libraries.js:81:24:81:30 | req.url | semmle.label | req.url | | other-fs-libraries.js:83:16:83:19 | path | semmle.label | path | -| prettier.js:6:11:6:28 | p | semmle.label | p | +| prettier.js:6:13:6:13 | p | semmle.label | p | | prettier.js:6:13:6:13 | p | semmle.label | p | | prettier.js:7:28:7:28 | p | semmle.label | p | | prettier.js:11:44:11:44 | p | semmle.label | p | -| pupeteer.js:5:9:5:71 | tainted | semmle.label | tainted | +| pupeteer.js:5:9:5:15 | tainted | semmle.label | tainted | | pupeteer.js:5:19:5:71 | "dir/" ... t.data" | semmle.label | "dir/" ... t.data" | | pupeteer.js:5:28:5:53 | parseTo ... t).name | semmle.label | parseTo ... t).name | | pupeteer.js:9:28:9:34 | tainted | semmle.label | tainted | | pupeteer.js:13:37:13:43 | tainted | semmle.label | tainted | | rimraf.js:8:11:8:18 | { path } | semmle.label | { path } | -| rimraf.js:8:11:8:29 | path | semmle.label | path | +| rimraf.js:8:13:8:16 | path | semmle.label | path | | rimraf.js:8:13:8:16 | path | semmle.label | path | | rimraf.js:8:22:8:29 | req.body | semmle.label | req.body | | rimraf.js:10:17:10:20 | path | semmle.label | path | @@ -1284,13 +1284,13 @@ nodes | sharedlib-repro.js:13:22:13:43 | req.par ... spaceId | semmle.label | req.par ... spaceId | | sharedlib-repro.js:21:27:21:34 | filepath | semmle.label | filepath | | sharedlib-repro.js:22:18:22:25 | filepath | semmle.label | filepath | -| tainted-access-paths.js:6:7:6:48 | path | semmle.label | path | +| tainted-access-paths.js:6:7:6:10 | path | semmle.label | path | | tainted-access-paths.js:6:14:6:37 | url.par ... , true) | semmle.label | url.par ... , true) | | tainted-access-paths.js:6:14:6:43 | url.par ... ).query | semmle.label | url.par ... ).query | | tainted-access-paths.js:6:14:6:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | tainted-access-paths.js:6:24:6:30 | req.url | semmle.label | req.url | | tainted-access-paths.js:8:19:8:22 | path | semmle.label | path | -| tainted-access-paths.js:10:7:10:36 | obj | semmle.label | obj | +| tainted-access-paths.js:10:7:10:9 | obj | semmle.label | obj | | tainted-access-paths.js:10:33:10:36 | path | semmle.label | path | | tainted-access-paths.js:12:19:12:21 | obj | semmle.label | obj | | tainted-access-paths.js:12:19:12:25 | obj.sub | semmle.label | obj.sub | @@ -1302,19 +1302,19 @@ nodes | tainted-access-paths.js:30:23:30:30 | obj.sub4 | semmle.label | obj.sub4 | | tainted-access-paths.js:31:23:31:25 | obj | semmle.label | obj | | tainted-access-paths.js:31:23:31:30 | obj.sub4 | semmle.label | obj.sub4 | -| tainted-access-paths.js:39:7:39:48 | path | semmle.label | path | +| tainted-access-paths.js:39:7:39:10 | path | semmle.label | path | | tainted-access-paths.js:39:14:39:37 | url.par ... , true) | semmle.label | url.par ... , true) | | tainted-access-paths.js:39:14:39:43 | url.par ... ).query | semmle.label | url.par ... ).query | | tainted-access-paths.js:39:14:39:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | tainted-access-paths.js:39:24:39:30 | req.url | semmle.label | req.url | | tainted-access-paths.js:40:23:40:26 | path | semmle.label | path | -| tainted-access-paths.js:48:7:48:48 | path | semmle.label | path | +| tainted-access-paths.js:48:7:48:10 | path | semmle.label | path | | tainted-access-paths.js:48:14:48:37 | url.par ... , true) | semmle.label | url.par ... , true) | | tainted-access-paths.js:48:14:48:43 | url.par ... ).query | semmle.label | url.par ... ).query | | tainted-access-paths.js:48:14:48:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | tainted-access-paths.js:48:24:48:30 | req.url | semmle.label | req.url | | tainted-access-paths.js:49:10:49:13 | path | semmle.label | path | -| tainted-promise-steps.js:6:7:6:48 | path | semmle.label | path | +| tainted-promise-steps.js:6:7:6:10 | path | semmle.label | path | | tainted-promise-steps.js:6:14:6:37 | url.par ... , true) | semmle.label | url.par ... , true) | | tainted-promise-steps.js:6:14:6:43 | url.par ... ).query | semmle.label | url.par ... ).query | | tainted-promise-steps.js:6:14:6:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -1343,7 +1343,7 @@ nodes | tainted-sendFile.js:30:16:30:46 | path.jo ... rams.x) | semmle.label | path.jo ... rams.x) | | tainted-sendFile.js:30:34:30:45 | req.params.x | semmle.label | req.params.x | | tainted-sendFile.js:32:43:32:58 | req.param("dir") | semmle.label | req.param("dir") | -| tainted-string-steps.js:6:7:6:48 | path | semmle.label | path | +| tainted-string-steps.js:6:7:6:10 | path | semmle.label | path | | tainted-string-steps.js:6:14:6:37 | url.par ... , true) | semmle.label | url.par ... , true) | | tainted-string-steps.js:6:14:6:43 | url.par ... ).query | semmle.label | url.par ... ).query | | tainted-string-steps.js:6:14:6:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -1380,25 +1380,25 @@ nodes | tainted-string-steps.js:26:18:26:45 | path.sp ... hatever | semmle.label | path.sp ... hatever | | tainted-string-steps.js:27:18:27:21 | path | semmle.label | path | | tainted-string-steps.js:27:18:27:36 | path.split(unknown) | semmle.label | path.split(unknown) | -| torrents.js:5:6:5:38 | name | semmle.label | name | +| torrents.js:5:6:5:9 | name | semmle.label | name | | torrents.js:5:13:5:38 | parseTo ... t).name | semmle.label | parseTo ... t).name | -| torrents.js:6:6:6:45 | loc | semmle.label | loc | +| torrents.js:6:6:6:8 | loc | semmle.label | loc | | torrents.js:6:12:6:45 | dir + " ... t.data" | semmle.label | dir + " ... t.data" | | torrents.js:6:24:6:27 | name | semmle.label | name | | torrents.js:7:25:7:27 | loc | semmle.label | loc | -| typescript.ts:9:7:9:48 | path | semmle.label | path | +| typescript.ts:9:7:9:10 | path | semmle.label | path | | typescript.ts:9:14:9:37 | url.par ... , true) | semmle.label | url.par ... , true) | | typescript.ts:9:14:9:43 | url.par ... ).query | semmle.label | url.par ... ).query | | typescript.ts:9:14:9:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | typescript.ts:9:24:9:30 | req.url | semmle.label | req.url | | typescript.ts:11:29:11:32 | path | semmle.label | path | -| typescript.ts:19:7:19:18 | path3 | semmle.label | path3 | +| typescript.ts:19:7:19:11 | path3 | semmle.label | path3 | | typescript.ts:19:15:19:18 | path | semmle.label | path | | typescript.ts:20:39:20:43 | path3 | semmle.label | path3 | -| typescript.ts:22:7:22:18 | path4 | semmle.label | path4 | +| typescript.ts:22:7:22:11 | path4 | semmle.label | path4 | | typescript.ts:22:15:22:18 | path | semmle.label | path | | typescript.ts:23:39:23:43 | path4 | semmle.label | path4 | -| typescript.ts:29:7:29:18 | path6 | semmle.label | path6 | +| typescript.ts:29:7:29:11 | path6 | semmle.label | path6 | | typescript.ts:29:15:29:18 | path | semmle.label | path | | typescript.ts:31:29:31:33 | path6 | semmle.label | path6 | | views.js:1:43:1:55 | req.params[0] | semmle.label | req.params[0] | diff --git a/javascript/ql/test/query-tests/Security/CWE-022/ZipSlip/ZipSlip.expected b/javascript/ql/test/query-tests/Security/CWE-022/ZipSlip/ZipSlip.expected index f8916181de1..d5c5f012a76 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/ZipSlip/ZipSlip.expected +++ b/javascript/ql/test/query-tests/Security/CWE-022/ZipSlip/ZipSlip.expected @@ -10,41 +10,41 @@ | ZipSlipBad.js:34:16:34:19 | name | ZipSlipBad.js:34:16:34:19 | name | ZipSlipBad.js:35:26:35:29 | name | Unsanitized archive entry, which may contain '..', is used in a $@. | ZipSlipBad.js:35:26:35:29 | name | file system operation | | ZipSlipBadUnzipper.js:7:20:7:29 | entry.path | ZipSlipBadUnzipper.js:7:20:7:29 | entry.path | ZipSlipBadUnzipper.js:8:37:8:44 | fileName | Unsanitized archive entry, which may contain '..', is used in a $@. | ZipSlipBadUnzipper.js:8:37:8:44 | fileName | file system operation | edges -| ZipSlipBad2.js:5:9:5:46 | fileName | ZipSlipBad2.js:6:22:6:29 | fileName | provenance | | -| ZipSlipBad2.js:5:20:5:46 | 'output ... ry.path | ZipSlipBad2.js:5:9:5:46 | fileName | provenance | | +| ZipSlipBad2.js:5:9:5:16 | fileName | ZipSlipBad2.js:6:22:6:29 | fileName | provenance | | +| ZipSlipBad2.js:5:20:5:46 | 'output ... ry.path | ZipSlipBad2.js:5:9:5:16 | fileName | provenance | | | ZipSlipBad2.js:5:37:5:46 | entry.path | ZipSlipBad2.js:5:20:5:46 | 'output ... ry.path | provenance | Config | -| ZipSlipBad.js:7:11:7:31 | fileName | ZipSlipBad.js:8:37:8:44 | fileName | provenance | | -| ZipSlipBad.js:7:22:7:31 | entry.path | ZipSlipBad.js:7:11:7:31 | fileName | provenance | | -| ZipSlipBad.js:15:11:15:31 | fileName | ZipSlipBad.js:16:30:16:37 | fileName | provenance | | -| ZipSlipBad.js:15:22:15:31 | entry.path | ZipSlipBad.js:15:11:15:31 | fileName | provenance | | -| ZipSlipBad.js:22:11:22:31 | fileName | ZipSlipBad.js:23:28:23:35 | fileName | provenance | | -| ZipSlipBad.js:22:22:22:31 | entry.path | ZipSlipBad.js:22:11:22:31 | fileName | provenance | | +| ZipSlipBad.js:7:11:7:18 | fileName | ZipSlipBad.js:8:37:8:44 | fileName | provenance | | +| ZipSlipBad.js:7:22:7:31 | entry.path | ZipSlipBad.js:7:11:7:18 | fileName | provenance | | +| ZipSlipBad.js:15:11:15:18 | fileName | ZipSlipBad.js:16:30:16:37 | fileName | provenance | | +| ZipSlipBad.js:15:22:15:31 | entry.path | ZipSlipBad.js:15:11:15:18 | fileName | provenance | | +| ZipSlipBad.js:22:11:22:18 | fileName | ZipSlipBad.js:23:28:23:35 | fileName | provenance | | +| ZipSlipBad.js:22:22:22:31 | entry.path | ZipSlipBad.js:22:11:22:18 | fileName | provenance | | | ZipSlipBad.js:30:14:30:17 | name | ZipSlipBad.js:31:26:31:29 | name | provenance | | | ZipSlipBad.js:34:16:34:19 | name | ZipSlipBad.js:35:26:35:29 | name | provenance | | -| ZipSlipBadUnzipper.js:7:9:7:29 | fileName | ZipSlipBadUnzipper.js:8:37:8:44 | fileName | provenance | | -| ZipSlipBadUnzipper.js:7:20:7:29 | entry.path | ZipSlipBadUnzipper.js:7:9:7:29 | fileName | provenance | | +| ZipSlipBadUnzipper.js:7:9:7:16 | fileName | ZipSlipBadUnzipper.js:8:37:8:44 | fileName | provenance | | +| ZipSlipBadUnzipper.js:7:20:7:29 | entry.path | ZipSlipBadUnzipper.js:7:9:7:16 | fileName | provenance | | nodes | AdmZipBad.js:6:24:6:41 | zipEntry.entryName | semmle.label | zipEntry.entryName | | TarSlipBad.js:6:36:6:46 | header.name | semmle.label | header.name | | TarSlipBad.js:9:17:9:31 | header.linkname | semmle.label | header.linkname | -| ZipSlipBad2.js:5:9:5:46 | fileName | semmle.label | fileName | +| ZipSlipBad2.js:5:9:5:16 | fileName | semmle.label | fileName | | ZipSlipBad2.js:5:20:5:46 | 'output ... ry.path | semmle.label | 'output ... ry.path | | ZipSlipBad2.js:5:37:5:46 | entry.path | semmle.label | entry.path | | ZipSlipBad2.js:6:22:6:29 | fileName | semmle.label | fileName | -| ZipSlipBad.js:7:11:7:31 | fileName | semmle.label | fileName | +| ZipSlipBad.js:7:11:7:18 | fileName | semmle.label | fileName | | ZipSlipBad.js:7:22:7:31 | entry.path | semmle.label | entry.path | | ZipSlipBad.js:8:37:8:44 | fileName | semmle.label | fileName | -| ZipSlipBad.js:15:11:15:31 | fileName | semmle.label | fileName | +| ZipSlipBad.js:15:11:15:18 | fileName | semmle.label | fileName | | ZipSlipBad.js:15:22:15:31 | entry.path | semmle.label | entry.path | | ZipSlipBad.js:16:30:16:37 | fileName | semmle.label | fileName | -| ZipSlipBad.js:22:11:22:31 | fileName | semmle.label | fileName | +| ZipSlipBad.js:22:11:22:18 | fileName | semmle.label | fileName | | ZipSlipBad.js:22:22:22:31 | entry.path | semmle.label | entry.path | | ZipSlipBad.js:23:28:23:35 | fileName | semmle.label | fileName | | ZipSlipBad.js:30:14:30:17 | name | semmle.label | name | | ZipSlipBad.js:31:26:31:29 | name | semmle.label | name | | ZipSlipBad.js:34:16:34:19 | name | semmle.label | name | | ZipSlipBad.js:35:26:35:29 | name | semmle.label | name | -| ZipSlipBadUnzipper.js:7:9:7:29 | fileName | semmle.label | fileName | +| ZipSlipBadUnzipper.js:7:9:7:16 | fileName | semmle.label | fileName | | ZipSlipBadUnzipper.js:7:20:7:29 | entry.path | semmle.label | entry.path | | ZipSlipBadUnzipper.js:8:37:8:44 | fileName | semmle.label | fileName | subpaths diff --git a/javascript/ql/test/query-tests/Security/CWE-073/TemplateObjectInjection.expected b/javascript/ql/test/query-tests/Security/CWE-073/TemplateObjectInjection.expected index 32b2875a86c..9962113d806 100644 --- a/javascript/ql/test/query-tests/Security/CWE-073/TemplateObjectInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-073/TemplateObjectInjection.expected @@ -10,67 +10,67 @@ | tst.js:24:28:24:30 | obj | tst.js:8:26:8:49 | req.que ... rameter | tst.js:24:28:24:30 | obj | Template object depends on a $@. | tst.js:8:26:8:49 | req.que ... rameter | user-provided value | | tst.js:29:28:29:42 | JSON.parse(str) | tst.js:8:26:8:49 | req.que ... rameter | tst.js:29:28:29:42 | JSON.parse(str) | Template object depends on a $@. | tst.js:8:26:8:49 | req.que ... rameter | user-provided value | edges -| tst2.js:6:9:6:46 | bodyParameter | tst2.js:7:28:7:40 | bodyParameter | provenance | | +| tst2.js:6:9:6:21 | bodyParameter | tst2.js:7:28:7:40 | bodyParameter | provenance | | | tst2.js:6:25:6:32 | req.body | tst2.js:6:25:6:46 | req.bod ... rameter | provenance | Config | -| tst2.js:6:25:6:46 | req.bod ... rameter | tst2.js:6:9:6:46 | bodyParameter | provenance | | -| tst2.js:26:9:26:46 | bodyParameter | tst2.js:27:28:27:40 | bodyParameter | provenance | | +| tst2.js:6:25:6:46 | req.bod ... rameter | tst2.js:6:9:6:21 | bodyParameter | provenance | | +| tst2.js:26:9:26:21 | bodyParameter | tst2.js:27:28:27:40 | bodyParameter | provenance | | | tst2.js:26:25:26:32 | req.body | tst2.js:26:25:26:46 | req.bod ... rameter | provenance | Config | -| tst2.js:26:25:26:46 | req.bod ... rameter | tst2.js:26:9:26:46 | bodyParameter | provenance | | -| tst2.js:34:9:34:46 | bodyParameter | tst2.js:35:28:35:40 | bodyParameter | provenance | | +| tst2.js:26:25:26:46 | req.bod ... rameter | tst2.js:26:9:26:21 | bodyParameter | provenance | | +| tst2.js:34:9:34:21 | bodyParameter | tst2.js:35:28:35:40 | bodyParameter | provenance | | | tst2.js:34:25:34:32 | req.body | tst2.js:34:25:34:46 | req.bod ... rameter | provenance | Config | -| tst2.js:34:25:34:46 | req.bod ... rameter | tst2.js:34:9:34:46 | bodyParameter | provenance | | -| tst2.js:42:9:42:46 | bodyParameter | tst2.js:43:28:43:40 | bodyParameter | provenance | | +| tst2.js:34:25:34:46 | req.bod ... rameter | tst2.js:34:9:34:21 | bodyParameter | provenance | | +| tst2.js:42:9:42:21 | bodyParameter | tst2.js:43:28:43:40 | bodyParameter | provenance | | | tst2.js:42:25:42:32 | req.body | tst2.js:42:25:42:46 | req.bod ... rameter | provenance | Config | -| tst2.js:42:25:42:46 | req.bod ... rameter | tst2.js:42:9:42:46 | bodyParameter | provenance | | -| tst2.js:51:9:51:46 | bodyParameter | tst2.js:52:28:52:40 | bodyParameter | provenance | | +| tst2.js:42:25:42:46 | req.bod ... rameter | tst2.js:42:9:42:21 | bodyParameter | provenance | | +| tst2.js:51:9:51:21 | bodyParameter | tst2.js:52:28:52:40 | bodyParameter | provenance | | | tst2.js:51:25:51:32 | req.body | tst2.js:51:25:51:46 | req.bod ... rameter | provenance | Config | -| tst2.js:51:25:51:46 | req.bod ... rameter | tst2.js:51:9:51:46 | bodyParameter | provenance | | -| tst.js:7:9:7:46 | bodyParameter | tst.js:10:28:10:40 | bodyParameter | provenance | | +| tst2.js:51:25:51:46 | req.bod ... rameter | tst2.js:51:9:51:21 | bodyParameter | provenance | | +| tst.js:7:9:7:21 | bodyParameter | tst.js:10:28:10:40 | bodyParameter | provenance | | | tst.js:7:25:7:32 | req.body | tst.js:7:25:7:46 | req.bod ... rameter | provenance | Config | -| tst.js:7:25:7:46 | req.bod ... rameter | tst.js:7:9:7:46 | bodyParameter | provenance | | -| tst.js:8:9:8:49 | queryParameter | tst.js:11:28:11:41 | queryParameter | provenance | | -| tst.js:8:9:8:49 | queryParameter | tst.js:20:19:20:32 | queryParameter | provenance | | -| tst.js:8:26:8:49 | req.que ... rameter | tst.js:8:9:8:49 | queryParameter | provenance | | +| tst.js:7:25:7:46 | req.bod ... rameter | tst.js:7:9:7:21 | bodyParameter | provenance | | +| tst.js:8:9:8:22 | queryParameter | tst.js:11:28:11:41 | queryParameter | provenance | | +| tst.js:8:9:8:22 | queryParameter | tst.js:20:19:20:32 | queryParameter | provenance | | +| tst.js:8:26:8:49 | req.que ... rameter | tst.js:8:9:8:22 | queryParameter | provenance | | | tst.js:20:19:20:32 | queryParameter | tst.js:23:24:23:26 | obj | provenance | | | tst.js:23:24:23:26 | obj | tst.js:24:28:24:30 | obj | provenance | | | tst.js:23:24:23:26 | obj | tst.js:26:17:26:19 | obj | provenance | | -| tst.js:26:11:26:24 | str | tst.js:29:39:29:41 | str | provenance | | +| tst.js:26:11:26:13 | str | tst.js:29:39:29:41 | str | provenance | | | tst.js:26:17:26:19 | obj | tst.js:26:17:26:24 | obj + "" | provenance | Config | -| tst.js:26:17:26:24 | obj + "" | tst.js:26:11:26:24 | str | provenance | | +| tst.js:26:17:26:24 | obj + "" | tst.js:26:11:26:13 | str | provenance | | | tst.js:29:39:29:41 | str | tst.js:29:28:29:42 | JSON.parse(str) | provenance | Config | nodes | routes.js:2:23:2:30 | req.body | semmle.label | req.body | -| tst2.js:6:9:6:46 | bodyParameter | semmle.label | bodyParameter | +| tst2.js:6:9:6:21 | bodyParameter | semmle.label | bodyParameter | | tst2.js:6:25:6:32 | req.body | semmle.label | req.body | | tst2.js:6:25:6:46 | req.bod ... rameter | semmle.label | req.bod ... rameter | | tst2.js:7:28:7:40 | bodyParameter | semmle.label | bodyParameter | -| tst2.js:26:9:26:46 | bodyParameter | semmle.label | bodyParameter | +| tst2.js:26:9:26:21 | bodyParameter | semmle.label | bodyParameter | | tst2.js:26:25:26:32 | req.body | semmle.label | req.body | | tst2.js:26:25:26:46 | req.bod ... rameter | semmle.label | req.bod ... rameter | | tst2.js:27:28:27:40 | bodyParameter | semmle.label | bodyParameter | -| tst2.js:34:9:34:46 | bodyParameter | semmle.label | bodyParameter | +| tst2.js:34:9:34:21 | bodyParameter | semmle.label | bodyParameter | | tst2.js:34:25:34:32 | req.body | semmle.label | req.body | | tst2.js:34:25:34:46 | req.bod ... rameter | semmle.label | req.bod ... rameter | | tst2.js:35:28:35:40 | bodyParameter | semmle.label | bodyParameter | -| tst2.js:42:9:42:46 | bodyParameter | semmle.label | bodyParameter | +| tst2.js:42:9:42:21 | bodyParameter | semmle.label | bodyParameter | | tst2.js:42:25:42:32 | req.body | semmle.label | req.body | | tst2.js:42:25:42:46 | req.bod ... rameter | semmle.label | req.bod ... rameter | | tst2.js:43:28:43:40 | bodyParameter | semmle.label | bodyParameter | -| tst2.js:51:9:51:46 | bodyParameter | semmle.label | bodyParameter | +| tst2.js:51:9:51:21 | bodyParameter | semmle.label | bodyParameter | | tst2.js:51:25:51:32 | req.body | semmle.label | req.body | | tst2.js:51:25:51:46 | req.bod ... rameter | semmle.label | req.bod ... rameter | | tst2.js:52:28:52:40 | bodyParameter | semmle.label | bodyParameter | -| tst.js:7:9:7:46 | bodyParameter | semmle.label | bodyParameter | +| tst.js:7:9:7:21 | bodyParameter | semmle.label | bodyParameter | | tst.js:7:25:7:32 | req.body | semmle.label | req.body | | tst.js:7:25:7:46 | req.bod ... rameter | semmle.label | req.bod ... rameter | -| tst.js:8:9:8:49 | queryParameter | semmle.label | queryParameter | +| tst.js:8:9:8:22 | queryParameter | semmle.label | queryParameter | | tst.js:8:26:8:49 | req.que ... rameter | semmle.label | req.que ... rameter | | tst.js:10:28:10:40 | bodyParameter | semmle.label | bodyParameter | | tst.js:11:28:11:41 | queryParameter | semmle.label | queryParameter | | tst.js:20:19:20:32 | queryParameter | semmle.label | queryParameter | | tst.js:23:24:23:26 | obj | semmle.label | obj | | tst.js:24:28:24:30 | obj | semmle.label | obj | -| tst.js:26:11:26:24 | str | semmle.label | str | +| tst.js:26:11:26:13 | str | semmle.label | str | | tst.js:26:17:26:19 | obj | semmle.label | obj | | tst.js:26:17:26:24 | obj + "" | semmle.label | obj + "" | | tst.js:29:28:29:42 | JSON.parse(str) | semmle.label | JSON.parse(str) | 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 862255f70f2..dc9c65822ba 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 @@ -84,32 +84,32 @@ | other.js:34:44:34:46 | cmd | other.js:5:25:5:31 | req.url | other.js:34:44:34:46 | cmd | This command line depends on a $@. | other.js:5:25:5:31 | req.url | user-provided value | | third-party-command-injection.js:6:21:6:27 | command | third-party-command-injection.js:5:20:5:26 | command | third-party-command-injection.js:6:21:6:27 | command | This command line depends on a $@. | third-party-command-injection.js:5:20:5:26 | command | user-provided value | edges -| actions.js:8:9:8:57 | title | actions.js:9:16:9:20 | title | provenance | | -| actions.js:8:17:8:57 | github. ... t.title | actions.js:8:9:8:57 | title | provenance | | +| actions.js:8:9:8:13 | title | actions.js:9:16:9:20 | title | provenance | | +| actions.js:8:17:8:57 | github. ... t.title | actions.js:8:9:8:13 | title | provenance | | | actions.js:9:16:9:20 | title | actions.js:9:8:9:22 | `echo ${title}` | provenance | | -| actions.js:18:9:18:63 | head_ref | actions.js:19:22:19:29 | head_ref | provenance | | -| actions.js:18:20:18:63 | github. ... ead.ref | actions.js:18:9:18:63 | head_ref | provenance | | +| actions.js:18:9:18:16 | head_ref | actions.js:19:22:19:29 | head_ref | provenance | | +| actions.js:18:20:18:63 | github. ... ead.ref | actions.js:18:9:18:16 | head_ref | provenance | | | actions.js:19:22:19:29 | head_ref | actions.js:19:14:19:31 | `echo ${head_ref}` | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:17:13:17:15 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:18:17:18:19 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:19:17:19:19 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:20:21:20:23 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:21:14:21:16 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:22:18:22:20 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:23:13:23:15 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:25:21:25:23 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:39:26:39:28 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:43:15:43:17 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:48:15:48:17 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:48:15:48:17 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:53:15:53:17 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:56:54:56:56 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:56:54:56:56 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:57:46:57:48 | cmd | provenance | | -| child_process-test.js:6:15:6:38 | url.par ... , true) | child_process-test.js:6:9:6:49 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:17:13:17:15 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:18:17:18:19 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:19:17:19:19 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:20:21:20:23 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:21:14:21:16 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:22:18:22:20 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:23:13:23:15 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:25:21:25:23 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:39:26:39:28 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:43:15:43:17 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:48:15:48:17 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:48:15:48:17 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:53:15:53:17 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:56:54:56:56 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:56:54:56:56 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:57:46:57:48 | cmd | provenance | | +| child_process-test.js:6:15:6:38 | url.par ... , true) | child_process-test.js:6:9:6:11 | cmd | provenance | | | child_process-test.js:6:15:6:38 | url.par ... , true) | child_process-test.js:6:15:6:49 | url.par ... ry.path | provenance | | | child_process-test.js:6:15:6:38 | url.par ... , true) | child_process-test.js:6:15:6:49 | url.par ... ry.path | provenance | | -| child_process-test.js:6:15:6:49 | url.par ... ry.path | child_process-test.js:6:9:6:49 | cmd | provenance | | +| child_process-test.js:6:15:6:49 | url.par ... ry.path | child_process-test.js:6:9:6:11 | cmd | provenance | | | child_process-test.js:6:25:6:31 | req.url | child_process-test.js:6:15:6:38 | url.par ... , true) | provenance | | | child_process-test.js:25:21:25:23 | cmd | child_process-test.js:25:13:25:31 | "foo" + cmd + "bar" | provenance | | | child_process-test.js:48:5:48:8 | [post update] args [1] | child_process-test.js:49:15:49:18 | args [1] | provenance | | @@ -118,47 +118,47 @@ edges | child_process-test.js:56:46:56:57 | ["bar", cmd] [1] | child_process-test.js:56:25:56:58 | ['/C', ... , cmd]) | provenance | | | child_process-test.js:56:54:56:56 | cmd | child_process-test.js:56:46:56:57 | ["bar", cmd] [1] | provenance | | | child_process-test.js:57:46:57:48 | cmd | child_process-test.js:57:25:57:49 | ['/C', ... at(cmd) | provenance | | -| child_process-test.js:73:9:73:49 | cmd | child_process-test.js:75:29:75:31 | cmd | provenance | | -| child_process-test.js:73:15:73:38 | url.par ... , true) | child_process-test.js:73:9:73:49 | cmd | provenance | | +| child_process-test.js:73:9:73:11 | cmd | child_process-test.js:75:29:75:31 | cmd | provenance | | +| child_process-test.js:73:15:73:38 | url.par ... , true) | child_process-test.js:73:9:73:11 | cmd | provenance | | | child_process-test.js:73:25:73:31 | req.url | child_process-test.js:73:15:73:38 | url.par ... , true) | provenance | | | child_process-test.js:94:21:94:30 | ctx.params | child_process-test.js:94:11:94:35 | "ping " ... ms.host | provenance | | -| command-line-libs.js:9:9:9:34 | args | command-line-libs.js:12:17:12:20 | args | provenance | | -| command-line-libs.js:9:9:9:34 | args | command-line-libs.js:23:29:23:32 | args | provenance | | -| command-line-libs.js:9:16:9:23 | req.body | command-line-libs.js:9:9:9:34 | args | provenance | | +| command-line-libs.js:9:9:9:12 | args | command-line-libs.js:12:17:12:20 | args | provenance | | +| command-line-libs.js:9:9:9:12 | args | command-line-libs.js:23:29:23:32 | args | provenance | | +| command-line-libs.js:9:16:9:23 | req.body | command-line-libs.js:9:9:9:12 | args | provenance | | | command-line-libs.js:12:17:12:20 | args | command-line-libs.js:13:19:13:32 | program.opts() | provenance | | | command-line-libs.js:12:17:12:20 | args | command-line-libs.js:15:8:15:18 | program.cmd | provenance | | | command-line-libs.js:12:17:12:20 | args | command-line-libs.js:20:14:20:19 | script | provenance | | -| command-line-libs.js:13:9:13:32 | options | command-line-libs.js:14:8:14:14 | options | provenance | | -| command-line-libs.js:13:19:13:32 | program.opts() | command-line-libs.js:13:9:13:32 | options | provenance | | +| command-line-libs.js:13:9:13:15 | options | command-line-libs.js:14:8:14:14 | options | provenance | | +| command-line-libs.js:13:19:13:32 | program.opts() | command-line-libs.js:13:9:13:15 | options | provenance | | | command-line-libs.js:14:8:14:14 | options | command-line-libs.js:14:8:14:18 | options.cmd | provenance | | | command-line-libs.js:20:14:20:19 | script | command-line-libs.js:21:12:21:17 | script | provenance | | | command-line-libs.js:23:29:23:32 | args | command-line-libs.js:20:14:20:19 | script | provenance | | -| command-line-libs.js:27:11:27:41 | argsArray | command-line-libs.js:28:53:28:61 | argsArray | provenance | | -| command-line-libs.js:27:23:27:30 | req.body | command-line-libs.js:27:11:27:41 | argsArray | provenance | | -| command-line-libs.js:28:11:28:64 | parsed | command-line-libs.js:29:10:29:15 | parsed | provenance | | -| command-line-libs.js:28:20:28:64 | arg({ ' ... rray }) | command-line-libs.js:28:11:28:64 | parsed | provenance | | +| command-line-libs.js:27:11:27:19 | argsArray | command-line-libs.js:28:53:28:61 | argsArray | provenance | | +| command-line-libs.js:27:23:27:30 | req.body | command-line-libs.js:27:11:27:19 | argsArray | provenance | | +| command-line-libs.js:28:11:28:16 | parsed | command-line-libs.js:29:10:29:15 | parsed | provenance | | +| command-line-libs.js:28:20:28:64 | arg({ ' ... rray }) | command-line-libs.js:28:11:28:16 | parsed | provenance | | | command-line-libs.js:28:53:28:61 | argsArray | command-line-libs.js:28:20:28:64 | arg({ ' ... rray }) | provenance | | | command-line-libs.js:29:10:29:15 | parsed | command-line-libs.js:29:10:29:24 | parsed['--cmd'] | provenance | | -| command-line-libs.js:35:9:35:83 | options | command-line-libs.js:37:8:37:14 | options | provenance | | -| command-line-libs.js:35:19:35:83 | command ... \| [] }) | command-line-libs.js:35:9:35:83 | options | provenance | | +| command-line-libs.js:35:9:35:15 | options | command-line-libs.js:37:8:37:14 | options | provenance | | +| command-line-libs.js:35:19:35:83 | command ... \| [] }) | command-line-libs.js:35:9:35:15 | options | provenance | | | command-line-libs.js:35:62:35:69 | req.body | command-line-libs.js:35:19:35:83 | command ... \| [] }) | provenance | | | command-line-libs.js:37:8:37:14 | options | command-line-libs.js:37:8:37:18 | options.cmd | provenance | | -| command-line-libs.js:42:9:42:34 | args | command-line-libs.js:43:24:43:27 | args | provenance | | -| command-line-libs.js:42:16:42:23 | req.body | command-line-libs.js:42:9:42:34 | args | provenance | | -| command-line-libs.js:43:9:47:12 | parsed | command-line-libs.js:49:8:49:13 | parsed | provenance | | +| command-line-libs.js:42:9:42:12 | args | command-line-libs.js:43:24:43:27 | args | provenance | | +| command-line-libs.js:42:16:42:23 | req.body | command-line-libs.js:42:9:42:12 | args | provenance | | +| command-line-libs.js:43:9:43:14 | parsed | command-line-libs.js:49:8:49:13 | parsed | provenance | | | command-line-libs.js:43:18:43:28 | yargs(args) | command-line-libs.js:43:18:47:4 | yargs(a ... ue\\n }) | provenance | | | command-line-libs.js:43:18:47:4 | yargs(a ... ue\\n }) | command-line-libs.js:43:18:47:12 | yargs(a ... parse() | provenance | | -| command-line-libs.js:43:18:47:12 | yargs(a ... parse() | command-line-libs.js:43:9:47:12 | parsed | provenance | | +| command-line-libs.js:43:18:47:12 | yargs(a ... parse() | command-line-libs.js:43:9:43:14 | parsed | provenance | | | command-line-libs.js:43:24:43:27 | args | command-line-libs.js:43:18:43:28 | yargs(args) | provenance | | | command-line-libs.js:49:8:49:13 | parsed | command-line-libs.js:49:8:49:17 | parsed.cmd | provenance | | | exec-sh2.js:9:17:9:23 | command | exec-sh2.js:10:40:10:46 | command | provenance | | -| exec-sh2.js:14:9:14:49 | cmd | exec-sh2.js:15:12:15:14 | cmd | provenance | | -| exec-sh2.js:14:15:14:38 | url.par ... , true) | exec-sh2.js:14:9:14:49 | cmd | provenance | | +| exec-sh2.js:14:9:14:11 | cmd | exec-sh2.js:15:12:15:14 | cmd | provenance | | +| exec-sh2.js:14:15:14:38 | url.par ... , true) | exec-sh2.js:14:9:14:11 | cmd | provenance | | | exec-sh2.js:14:25:14:31 | req.url | exec-sh2.js:14:15:14:38 | url.par ... , true) | provenance | | | exec-sh2.js:15:12:15:14 | cmd | exec-sh2.js:9:17:9:23 | command | provenance | | | exec-sh.js:13:17:13:23 | command | exec-sh.js:15:44:15:50 | command | provenance | | -| exec-sh.js:19:9:19:49 | cmd | exec-sh.js:20:12:20:14 | cmd | provenance | | -| exec-sh.js:19:15:19:38 | url.par ... , true) | exec-sh.js:19:9:19:49 | cmd | provenance | | +| exec-sh.js:19:9:19:11 | cmd | exec-sh.js:20:12:20:14 | cmd | provenance | | +| exec-sh.js:19:15:19:38 | url.par ... , true) | exec-sh.js:19:9:19:11 | cmd | provenance | | | exec-sh.js:19:25:19:31 | req.url | exec-sh.js:19:15:19:38 | url.par ... , true) | provenance | | | exec-sh.js:20:12:20:14 | cmd | exec-sh.js:13:17:13:23 | command | provenance | | | execSeries.js:3:20:3:22 | arr [0] | execSeries.js:5:3:10:4 | (functi ... );\\n }) [arr, 0] | provenance | | @@ -169,45 +169,45 @@ edges | execSeries.js:13:19:13:26 | commands [0] | execSeries.js:14:13:14:20 | commands [0] | provenance | | | execSeries.js:14:13:14:20 | commands [0] | execSeries.js:3:20:3:22 | arr [0] | provenance | | | execSeries.js:14:24:14:30 | command | execSeries.js:14:41:14:47 | command | provenance | | -| execSeries.js:18:7:18:58 | cmd | execSeries.js:19:13:19:15 | cmd | provenance | | -| execSeries.js:18:13:18:47 | require ... , true) | execSeries.js:18:7:18:58 | cmd | provenance | | +| execSeries.js:18:7:18:9 | cmd | execSeries.js:19:13:19:15 | cmd | provenance | | +| execSeries.js:18:13:18:47 | require ... , true) | execSeries.js:18:7:18:9 | cmd | provenance | | | 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:9:6:11 | cmd | execa.js:11:15:11:17 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:13:32:13:34 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:14:31:14:33 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:17:14:17:16 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:19:32:19:34 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:20:33:20:35 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:23:17:23:19 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:24:17:24:19 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:25:17:25:19 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:27:15:27:17 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:28:15:28:17 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:30:24:30:26 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:31:24:31:26 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:33:22:33:24 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:34:22:34:24 | cmd | provenance | | +| execa.js:6:15:6:38 | url.par ... , true) | execa.js:6:9:6:11 | 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:9:7:12 | arg1 | execa.js:30:30:30:33 | arg1 | provenance | | +| execa.js:7:9:7:12 | arg1 | execa.js:31:30:31:33 | arg1 | provenance | | +| execa.js:7:9:7:12 | arg1 | execa.js:33:28:33:31 | arg1 | provenance | | +| execa.js:7:9:7:12 | arg1 | execa.js:34:28:34:31 | arg1 | provenance | | +| execa.js:7:16:7:39 | url.par ... , true) | execa.js:7:9:7:12 | 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:9:8:12 | arg2 | execa.js:30:37:30:40 | arg2 | provenance | | +| execa.js:8:9:8:12 | arg2 | execa.js:31:37:31:40 | arg2 | provenance | | +| execa.js:8:9:8:12 | arg2 | execa.js:33:35:33:38 | arg2 | provenance | | +| execa.js:8:9:8:12 | arg2 | execa.js:34:35:34:38 | arg2 | provenance | | +| execa.js:8:16:8:39 | url.par ... , true) | execa.js:8:9:8:12 | 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:9:9:12 | arg3 | execa.js:30:44:30:47 | arg3 | provenance | | +| execa.js:9:9:9:12 | arg3 | execa.js:31:44:31:47 | arg3 | provenance | | +| execa.js:9:9:9:12 | arg3 | execa.js:33:42:33:45 | arg3 | provenance | | +| execa.js:9:9:9:12 | arg3 | execa.js:34:42:34:45 | arg3 | provenance | | +| execa.js:9:16:9:39 | url.par ... , true) | execa.js:9:9:9:12 | 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 | | @@ -239,37 +239,37 @@ edges | form-parsers.js:53:21:53:26 | fields | form-parsers.js:53:10:53:31 | "touch ... ds.name | provenance | | | form-parsers.js:58:30:58:33 | part | form-parsers.js:59:21:59:24 | part | provenance | | | form-parsers.js:59:21:59:24 | part | form-parsers.js:59:10:59:33 | "touch ... ilename | provenance | | -| other.js:5:9:5:49 | cmd | other.js:7:33:7:35 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:8:28:8:30 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:9:32:9:34 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:10:29:10:31 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:11:29:11:31 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:12:27:12:29 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:14:28:14:30 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:15:34:15:36 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:16:21:16:23 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:17:27:17:29 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:18:22:18:24 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:19:36:19:38 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:22:21:22:23 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:23:28:23:30 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:26:34:26:36 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:28:27:28:29 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:30:33:30:35 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:34:44:34:46 | cmd | provenance | | -| other.js:5:15:5:38 | url.par ... , true) | other.js:5:9:5:49 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:7:33:7:35 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:8:28:8:30 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:9:32:9:34 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:10:29:10:31 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:11:29:11:31 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:12:27:12:29 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:14:28:14:30 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:15:34:15:36 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:16:21:16:23 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:17:27:17:29 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:18:22:18:24 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:19:36:19:38 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:22:21:22:23 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:23:28:23:30 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:26:34:26:36 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:28:27:28:29 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:30:33:30:35 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:34:44:34:46 | cmd | provenance | | +| other.js:5:15:5:38 | url.par ... , true) | other.js:5:9:5:11 | cmd | provenance | | | other.js:5:25:5:31 | req.url | other.js:5:15:5:38 | url.par ... , true) | provenance | | | third-party-command-injection.js:5:20:5:26 | command | third-party-command-injection.js:6:21:6:27 | command | provenance | | nodes -| actions.js:8:9:8:57 | title | semmle.label | title | +| actions.js:8:9:8:13 | title | semmle.label | title | | actions.js:8:17:8:57 | github. ... t.title | semmle.label | github. ... t.title | | actions.js:9:8:9:22 | `echo ${title}` | semmle.label | `echo ${title}` | | actions.js:9:16:9:20 | title | semmle.label | title | -| actions.js:18:9:18:63 | head_ref | semmle.label | head_ref | +| actions.js:18:9:18:16 | head_ref | semmle.label | head_ref | | actions.js:18:20:18:63 | github. ... ead.ref | semmle.label | github. ... ead.ref | | actions.js:19:14:19:31 | `echo ${head_ref}` | semmle.label | `echo ${head_ref}` | | actions.js:19:22:19:29 | head_ref | semmle.label | head_ref | -| child_process-test.js:6:9:6:49 | cmd | semmle.label | cmd | +| child_process-test.js:6:9:6:11 | cmd | semmle.label | cmd | | child_process-test.js:6:15:6:38 | url.par ... , true) | semmle.label | url.par ... , true) | | child_process-test.js:6:15:6:49 | url.par ... ry.path | semmle.label | url.par ... ry.path | | child_process-test.js:6:15:6:49 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -297,17 +297,17 @@ nodes | child_process-test.js:57:25:57:49 | ['/C', ... at(cmd) | semmle.label | ['/C', ... at(cmd) | | child_process-test.js:57:46:57:48 | cmd | semmle.label | cmd | | child_process-test.js:66:19:66:22 | args | semmle.label | args | -| child_process-test.js:73:9:73:49 | cmd | semmle.label | cmd | +| child_process-test.js:73:9:73:11 | cmd | semmle.label | cmd | | child_process-test.js:73:15:73:38 | url.par ... , true) | semmle.label | url.par ... , true) | | child_process-test.js:73:25:73:31 | req.url | semmle.label | req.url | | child_process-test.js:75:29:75:31 | cmd | semmle.label | cmd | | child_process-test.js:83:19:83:36 | req.query.fileName | semmle.label | req.query.fileName | | child_process-test.js:94:11:94:35 | "ping " ... ms.host | semmle.label | "ping " ... ms.host | | child_process-test.js:94:21:94:30 | ctx.params | semmle.label | ctx.params | -| command-line-libs.js:9:9:9:34 | args | semmle.label | args | +| command-line-libs.js:9:9:9:12 | args | semmle.label | args | | command-line-libs.js:9:16:9:23 | req.body | semmle.label | req.body | | command-line-libs.js:12:17:12:20 | args | semmle.label | args | -| command-line-libs.js:13:9:13:32 | options | semmle.label | options | +| command-line-libs.js:13:9:13:15 | options | semmle.label | options | | command-line-libs.js:13:19:13:32 | program.opts() | semmle.label | program.opts() | | command-line-libs.js:14:8:14:14 | options | semmle.label | options | | command-line-libs.js:14:8:14:18 | options.cmd | semmle.label | options.cmd | @@ -315,21 +315,21 @@ nodes | command-line-libs.js:20:14:20:19 | script | semmle.label | script | | command-line-libs.js:21:12:21:17 | script | semmle.label | script | | command-line-libs.js:23:29:23:32 | args | semmle.label | args | -| command-line-libs.js:27:11:27:41 | argsArray | semmle.label | argsArray | +| command-line-libs.js:27:11:27:19 | argsArray | semmle.label | argsArray | | command-line-libs.js:27:23:27:30 | req.body | semmle.label | req.body | -| command-line-libs.js:28:11:28:64 | parsed | semmle.label | parsed | +| command-line-libs.js:28:11:28:16 | parsed | semmle.label | parsed | | command-line-libs.js:28:20:28:64 | arg({ ' ... rray }) | semmle.label | arg({ ' ... rray }) | | command-line-libs.js:28:53:28:61 | argsArray | semmle.label | argsArray | | command-line-libs.js:29:10:29:15 | parsed | semmle.label | parsed | | command-line-libs.js:29:10:29:24 | parsed['--cmd'] | semmle.label | parsed['--cmd'] | -| command-line-libs.js:35:9:35:83 | options | semmle.label | options | +| command-line-libs.js:35:9:35:15 | options | semmle.label | options | | command-line-libs.js:35:19:35:83 | command ... \| [] }) | semmle.label | command ... \| [] }) | | command-line-libs.js:35:62:35:69 | req.body | semmle.label | req.body | | command-line-libs.js:37:8:37:14 | options | semmle.label | options | | command-line-libs.js:37:8:37:18 | options.cmd | semmle.label | options.cmd | -| command-line-libs.js:42:9:42:34 | args | semmle.label | args | +| command-line-libs.js:42:9:42:12 | args | semmle.label | args | | command-line-libs.js:42:16:42:23 | req.body | semmle.label | req.body | -| command-line-libs.js:43:9:47:12 | parsed | semmle.label | parsed | +| command-line-libs.js:43:9:43:14 | parsed | semmle.label | parsed | | command-line-libs.js:43:18:43:28 | yargs(args) | semmle.label | yargs(args) | | command-line-libs.js:43:18:47:4 | yargs(a ... ue\\n }) | semmle.label | yargs(a ... ue\\n }) | | command-line-libs.js:43:18:47:12 | yargs(a ... parse() | semmle.label | yargs(a ... parse() | @@ -338,13 +338,13 @@ nodes | command-line-libs.js:49:8:49:17 | parsed.cmd | semmle.label | parsed.cmd | | exec-sh2.js:9:17:9:23 | command | semmle.label | command | | exec-sh2.js:10:40:10:46 | command | semmle.label | command | -| exec-sh2.js:14:9:14:49 | cmd | semmle.label | cmd | +| exec-sh2.js:14:9:14:11 | cmd | semmle.label | cmd | | exec-sh2.js:14:15:14:38 | url.par ... , true) | semmle.label | url.par ... , true) | | exec-sh2.js:14:25:14:31 | req.url | semmle.label | req.url | | exec-sh2.js:15:12:15:14 | cmd | semmle.label | cmd | | exec-sh.js:13:17:13:23 | command | semmle.label | command | | exec-sh.js:15:44:15:50 | command | semmle.label | command | -| exec-sh.js:19:9:19:49 | cmd | semmle.label | cmd | +| exec-sh.js:19:9:19:11 | cmd | semmle.label | cmd | | exec-sh.js:19:15:19:38 | url.par ... , true) | semmle.label | url.par ... , true) | | exec-sh.js:19:25:19:31 | req.url | semmle.label | req.url | | exec-sh.js:20:12:20:14 | cmd | semmle.label | cmd | @@ -356,21 +356,21 @@ nodes | execSeries.js:14:13:14:20 | commands [0] | semmle.label | commands [0] | | execSeries.js:14:24:14:30 | command | semmle.label | command | | execSeries.js:14:41:14:47 | command | semmle.label | command | -| execSeries.js:18:7:18:58 | cmd | semmle.label | cmd | +| execSeries.js:18:7:18:9 | cmd | semmle.label | cmd | | execSeries.js:18:13:18:47 | require ... , true) | semmle.label | require ... , true) | | 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:9:6:11 | 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:9:7:12 | 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:9:8:12 | 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:9:9:12 | 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 | @@ -425,7 +425,7 @@ nodes | form-parsers.js:58:30:58:33 | part | semmle.label | part | | form-parsers.js:59:10:59:33 | "touch ... ilename | semmle.label | "touch ... ilename | | form-parsers.js:59:21:59:24 | part | semmle.label | part | -| other.js:5:9:5:49 | cmd | semmle.label | cmd | +| other.js:5:9:5:11 | cmd | semmle.label | cmd | | other.js:5:15:5:38 | url.par ... , true) | semmle.label | url.par ... , true) | | other.js:5:25:5:31 | req.url | semmle.label | req.url | | other.js:7:33:7:35 | cmd | semmle.label | cmd | diff --git a/javascript/ql/test/query-tests/Security/CWE-078/IndirectCommandInjection/IndirectCommandInjection.expected b/javascript/ql/test/query-tests/Security/CWE-078/IndirectCommandInjection/IndirectCommandInjection.expected index 9fc6f6b1bc4..ee906376953 100644 --- a/javascript/ql/test/query-tests/Security/CWE-078/IndirectCommandInjection/IndirectCommandInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-078/IndirectCommandInjection/IndirectCommandInjection.expected @@ -51,51 +51,51 @@ edges | actions.js:19:22:19:32 | shelljs.env | actions.js:19:10:19:37 | 'rm -rf ... nv.SOME | provenance | | | actions.js:20:22:20:32 | shelljs.env | actions.js:20:10:20:32 | 'rm -rf ... ljs.env | provenance | | | command-line-parameter-command-injection.js:8:22:8:33 | process.argv | command-line-parameter-command-injection.js:8:10:8:36 | "cmd.sh ... argv[2] | provenance | | -| command-line-parameter-command-injection.js:10:6:10:33 | args | command-line-parameter-command-injection.js:11:14:11:17 | args | provenance | | -| command-line-parameter-command-injection.js:10:6:10:33 | args | command-line-parameter-command-injection.js:12:26:12:29 | args | provenance | | -| command-line-parameter-command-injection.js:10:6:10:33 | args | command-line-parameter-command-injection.js:14:18:14:21 | args | provenance | | -| command-line-parameter-command-injection.js:10:6:10:33 | args [ArrayElement] | command-line-parameter-command-injection.js:11:14:11:17 | args [ArrayElement] | provenance | | -| command-line-parameter-command-injection.js:10:6:10:33 | args [ArrayElement] | command-line-parameter-command-injection.js:12:26:12:29 | args [ArrayElement] | provenance | | -| command-line-parameter-command-injection.js:10:6:10:33 | args [ArrayElement] | command-line-parameter-command-injection.js:14:18:14:21 | args [ArrayElement] | provenance | | +| command-line-parameter-command-injection.js:10:6:10:9 | args | command-line-parameter-command-injection.js:11:14:11:17 | args | provenance | | +| command-line-parameter-command-injection.js:10:6:10:9 | args | command-line-parameter-command-injection.js:12:26:12:29 | args | provenance | | +| command-line-parameter-command-injection.js:10:6:10:9 | args | command-line-parameter-command-injection.js:14:18:14:21 | args | provenance | | +| command-line-parameter-command-injection.js:10:6:10:9 | args [ArrayElement] | command-line-parameter-command-injection.js:11:14:11:17 | args [ArrayElement] | provenance | | +| command-line-parameter-command-injection.js:10:6:10:9 | args [ArrayElement] | command-line-parameter-command-injection.js:12:26:12:29 | args [ArrayElement] | provenance | | +| command-line-parameter-command-injection.js:10:6:10:9 | args [ArrayElement] | command-line-parameter-command-injection.js:14:18:14:21 | args [ArrayElement] | provenance | | | command-line-parameter-command-injection.js:10:13:10:24 | process.argv | command-line-parameter-command-injection.js:10:13:10:33 | process ... lice(2) | provenance | | | command-line-parameter-command-injection.js:10:13:10:24 | process.argv | command-line-parameter-command-injection.js:10:13:10:33 | process ... lice(2) [ArrayElement] | provenance | | -| command-line-parameter-command-injection.js:10:13:10:33 | process ... lice(2) | command-line-parameter-command-injection.js:10:6:10:33 | args | provenance | | -| command-line-parameter-command-injection.js:10:13:10:33 | process ... lice(2) [ArrayElement] | command-line-parameter-command-injection.js:10:6:10:33 | args [ArrayElement] | provenance | | +| command-line-parameter-command-injection.js:10:13:10:33 | process ... lice(2) | command-line-parameter-command-injection.js:10:6:10:9 | args | provenance | | +| command-line-parameter-command-injection.js:10:13:10:33 | process ... lice(2) [ArrayElement] | command-line-parameter-command-injection.js:10:6:10:9 | args [ArrayElement] | provenance | | | command-line-parameter-command-injection.js:11:14:11:17 | args | command-line-parameter-command-injection.js:11:14:11:20 | args[0] | provenance | | | command-line-parameter-command-injection.js:11:14:11:17 | args [ArrayElement] | command-line-parameter-command-injection.js:11:14:11:20 | args[0] | provenance | | | command-line-parameter-command-injection.js:12:26:12:29 | args | command-line-parameter-command-injection.js:12:14:12:32 | "cmd.sh " + args[0] | provenance | | | command-line-parameter-command-injection.js:12:26:12:29 | args [ArrayElement] | command-line-parameter-command-injection.js:12:26:12:32 | args[0] | provenance | | | command-line-parameter-command-injection.js:12:26:12:32 | args[0] | command-line-parameter-command-injection.js:12:14:12:32 | "cmd.sh " + args[0] | provenance | | -| command-line-parameter-command-injection.js:14:6:14:30 | fewerArgs | command-line-parameter-command-injection.js:15:14:15:22 | fewerArgs | provenance | | -| command-line-parameter-command-injection.js:14:6:14:30 | fewerArgs | command-line-parameter-command-injection.js:16:26:16:34 | fewerArgs | provenance | | -| command-line-parameter-command-injection.js:14:6:14:30 | fewerArgs | command-line-parameter-command-injection.js:18:13:18:21 | fewerArgs | provenance | | -| command-line-parameter-command-injection.js:14:6:14:30 | fewerArgs [ArrayElement] | command-line-parameter-command-injection.js:15:14:15:22 | fewerArgs [ArrayElement] | provenance | | -| command-line-parameter-command-injection.js:14:6:14:30 | fewerArgs [ArrayElement] | command-line-parameter-command-injection.js:16:26:16:34 | fewerArgs [ArrayElement] | provenance | | -| command-line-parameter-command-injection.js:14:6:14:30 | fewerArgs [ArrayElement] | command-line-parameter-command-injection.js:18:13:18:21 | fewerArgs [ArrayElement] | provenance | | +| command-line-parameter-command-injection.js:14:6:14:14 | fewerArgs | command-line-parameter-command-injection.js:15:14:15:22 | fewerArgs | provenance | | +| command-line-parameter-command-injection.js:14:6:14:14 | fewerArgs | command-line-parameter-command-injection.js:16:26:16:34 | fewerArgs | provenance | | +| command-line-parameter-command-injection.js:14:6:14:14 | fewerArgs | command-line-parameter-command-injection.js:18:13:18:21 | fewerArgs | provenance | | +| command-line-parameter-command-injection.js:14:6:14:14 | fewerArgs [ArrayElement] | command-line-parameter-command-injection.js:15:14:15:22 | fewerArgs [ArrayElement] | provenance | | +| command-line-parameter-command-injection.js:14:6:14:14 | fewerArgs [ArrayElement] | command-line-parameter-command-injection.js:16:26:16:34 | fewerArgs [ArrayElement] | provenance | | +| command-line-parameter-command-injection.js:14:6:14:14 | fewerArgs [ArrayElement] | command-line-parameter-command-injection.js:18:13:18:21 | fewerArgs [ArrayElement] | provenance | | | command-line-parameter-command-injection.js:14:18:14:21 | args | command-line-parameter-command-injection.js:14:18:14:30 | args.slice(1) | provenance | | | command-line-parameter-command-injection.js:14:18:14:21 | args | command-line-parameter-command-injection.js:14:18:14:30 | args.slice(1) [ArrayElement] | provenance | | | command-line-parameter-command-injection.js:14:18:14:21 | args [ArrayElement] | command-line-parameter-command-injection.js:14:18:14:30 | args.slice(1) [ArrayElement] | provenance | | -| command-line-parameter-command-injection.js:14:18:14:30 | args.slice(1) | command-line-parameter-command-injection.js:14:6:14:30 | fewerArgs | provenance | | -| command-line-parameter-command-injection.js:14:18:14:30 | args.slice(1) [ArrayElement] | command-line-parameter-command-injection.js:14:6:14:30 | fewerArgs [ArrayElement] | provenance | | +| command-line-parameter-command-injection.js:14:18:14:30 | args.slice(1) | command-line-parameter-command-injection.js:14:6:14:14 | fewerArgs | provenance | | +| command-line-parameter-command-injection.js:14:18:14:30 | args.slice(1) [ArrayElement] | command-line-parameter-command-injection.js:14:6:14:14 | fewerArgs [ArrayElement] | provenance | | | command-line-parameter-command-injection.js:15:14:15:22 | fewerArgs | command-line-parameter-command-injection.js:15:14:15:25 | fewerArgs[0] | provenance | | | command-line-parameter-command-injection.js:15:14:15:22 | fewerArgs [ArrayElement] | command-line-parameter-command-injection.js:15:14:15:25 | fewerArgs[0] | provenance | | | command-line-parameter-command-injection.js:16:26:16:34 | fewerArgs | command-line-parameter-command-injection.js:16:14:16:37 | "cmd.sh ... Args[0] | provenance | | | command-line-parameter-command-injection.js:16:26:16:34 | fewerArgs [ArrayElement] | command-line-parameter-command-injection.js:16:26:16:37 | fewerArgs[0] | provenance | | | command-line-parameter-command-injection.js:16:26:16:37 | fewerArgs[0] | command-line-parameter-command-injection.js:16:14:16:37 | "cmd.sh ... Args[0] | provenance | | -| command-line-parameter-command-injection.js:18:6:18:24 | arg0 | command-line-parameter-command-injection.js:19:14:19:17 | arg0 | provenance | | -| command-line-parameter-command-injection.js:18:6:18:24 | arg0 | command-line-parameter-command-injection.js:20:26:20:29 | arg0 | provenance | | -| command-line-parameter-command-injection.js:18:13:18:21 | fewerArgs | command-line-parameter-command-injection.js:18:6:18:24 | arg0 | provenance | | +| command-line-parameter-command-injection.js:18:6:18:9 | arg0 | command-line-parameter-command-injection.js:19:14:19:17 | arg0 | provenance | | +| command-line-parameter-command-injection.js:18:6:18:9 | arg0 | command-line-parameter-command-injection.js:20:26:20:29 | arg0 | provenance | | +| command-line-parameter-command-injection.js:18:13:18:21 | fewerArgs | command-line-parameter-command-injection.js:18:6:18:9 | arg0 | provenance | | | command-line-parameter-command-injection.js:18:13:18:21 | fewerArgs [ArrayElement] | command-line-parameter-command-injection.js:18:13:18:24 | fewerArgs[0] | provenance | | -| command-line-parameter-command-injection.js:18:13:18:24 | fewerArgs[0] | command-line-parameter-command-injection.js:18:6:18:24 | arg0 | provenance | | +| command-line-parameter-command-injection.js:18:13:18:24 | fewerArgs[0] | command-line-parameter-command-injection.js:18:6:18:9 | arg0 | provenance | | | command-line-parameter-command-injection.js:20:26:20:29 | arg0 | command-line-parameter-command-injection.js:20:14:20:29 | "cmd.sh " + arg0 | provenance | | -| command-line-parameter-command-injection.js:24:8:24:35 | args | command-line-parameter-command-injection.js:26:32:26:35 | args | provenance | | -| command-line-parameter-command-injection.js:24:8:24:35 | args | command-line-parameter-command-injection.js:27:32:27:35 | args | provenance | | -| command-line-parameter-command-injection.js:24:8:24:35 | args [ArrayElement] | command-line-parameter-command-injection.js:26:32:26:35 | args [ArrayElement] | provenance | | -| command-line-parameter-command-injection.js:24:8:24:35 | args [ArrayElement] | command-line-parameter-command-injection.js:27:32:27:35 | args [ArrayElement] | provenance | | +| command-line-parameter-command-injection.js:24:8:24:11 | args | command-line-parameter-command-injection.js:26:32:26:35 | args | provenance | | +| command-line-parameter-command-injection.js:24:8:24:11 | args | command-line-parameter-command-injection.js:27:32:27:35 | args | provenance | | +| command-line-parameter-command-injection.js:24:8:24:11 | args [ArrayElement] | command-line-parameter-command-injection.js:26:32:26:35 | args [ArrayElement] | provenance | | +| command-line-parameter-command-injection.js:24:8:24:11 | args [ArrayElement] | command-line-parameter-command-injection.js:27:32:27:35 | args [ArrayElement] | provenance | | | command-line-parameter-command-injection.js:24:15:24:26 | process.argv | command-line-parameter-command-injection.js:24:15:24:35 | process ... lice(2) | provenance | | | command-line-parameter-command-injection.js:24:15:24:26 | process.argv | command-line-parameter-command-injection.js:24:15:24:35 | process ... lice(2) [ArrayElement] | provenance | | -| command-line-parameter-command-injection.js:24:15:24:35 | process ... lice(2) | command-line-parameter-command-injection.js:24:8:24:35 | args | provenance | | -| command-line-parameter-command-injection.js:24:15:24:35 | process ... lice(2) [ArrayElement] | command-line-parameter-command-injection.js:24:8:24:35 | args [ArrayElement] | provenance | | +| command-line-parameter-command-injection.js:24:15:24:35 | process ... lice(2) | command-line-parameter-command-injection.js:24:8:24:11 | args | provenance | | +| command-line-parameter-command-injection.js:24:15:24:35 | process ... lice(2) [ArrayElement] | command-line-parameter-command-injection.js:24:8:24:11 | args [ArrayElement] | provenance | | | command-line-parameter-command-injection.js:26:32:26:35 | args | command-line-parameter-command-injection.js:26:14:26:50 | `node $ ... ption"` | provenance | | | command-line-parameter-command-injection.js:26:32:26:35 | args [ArrayElement] | command-line-parameter-command-injection.js:26:32:26:38 | args[0] | provenance | | | command-line-parameter-command-injection.js:26:32:26:38 | args[0] | command-line-parameter-command-injection.js:26:14:26:50 | `node $ ... ption"` | provenance | | @@ -105,43 +105,43 @@ edges | command-line-parameter-command-injection.js:30:21:30:46 | require ... rgs")() | command-line-parameter-command-injection.js:30:9:30:50 | "cmd.sh ... )().foo | provenance | | | command-line-parameter-command-injection.js:32:21:32:41 | require ... ").argv | command-line-parameter-command-injection.js:32:9:32:45 | "cmd.sh ... rgv.foo | provenance | | | command-line-parameter-command-injection.js:33:21:33:44 | require ... ").argv | command-line-parameter-command-injection.js:33:9:33:48 | "cmd.sh ... rgv.foo | provenance | | -| command-line-parameter-command-injection.js:36:6:39:7 | args | command-line-parameter-command-injection.js:41:22:41:25 | args | provenance | | -| command-line-parameter-command-injection.js:36:13:39:7 | require ... \\t\\t.argv | command-line-parameter-command-injection.js:36:6:39:7 | args | provenance | | +| command-line-parameter-command-injection.js:36:6:36:9 | args | command-line-parameter-command-injection.js:41:22:41:25 | args | provenance | | +| command-line-parameter-command-injection.js:36:13:39:7 | require ... \\t\\t.argv | command-line-parameter-command-injection.js:36:6:36:9 | args | provenance | | | command-line-parameter-command-injection.js:41:22:41:25 | args | command-line-parameter-command-injection.js:41:10:41:25 | "cmd.sh " + args | provenance | | | command-line-parameter-command-injection.js:43:22:43:58 | require ... parse() | command-line-parameter-command-injection.js:43:10:43:62 | "cmd.sh ... e().foo | provenance | | -| command-line-parameter-command-injection.js:47:8:53:12 | args | command-line-parameter-command-injection.js:55:22:55:25 | args | provenance | | | command-line-parameter-command-injection.js:48:3:50:3 | argv: { ... rgs\\n\\t\\t} | command-line-parameter-command-injection.js:48:9:50:3 | {\\n\\t\\t\\t...args\\n\\t\\t} | provenance | | -| command-line-parameter-command-injection.js:48:9:50:3 | {\\n\\t\\t\\t...args\\n\\t\\t} | command-line-parameter-command-injection.js:47:8:53:12 | args | provenance | | +| command-line-parameter-command-injection.js:48:9:50:3 | {\\n\\t\\t\\t...args\\n\\t\\t} | command-line-parameter-command-injection.js:49:7:49:10 | args | provenance | | +| command-line-parameter-command-injection.js:49:7:49:10 | args | command-line-parameter-command-injection.js:55:22:55:25 | args | provenance | | | command-line-parameter-command-injection.js:55:22:55:25 | args | command-line-parameter-command-injection.js:55:10:55:25 | "cmd.sh " + args | provenance | | -| command-line-parameter-command-injection.js:57:6:57:37 | tainted1 | command-line-parameter-command-injection.js:61:11:61:18 | tainted1 | provenance | | -| command-line-parameter-command-injection.js:57:17:57:37 | require ... ').argv | command-line-parameter-command-injection.js:57:6:57:37 | tainted1 | provenance | | -| command-line-parameter-command-injection.js:58:6:58:40 | tainted2 | command-line-parameter-command-injection.js:62:11:62:18 | tainted2 | provenance | | -| command-line-parameter-command-injection.js:58:17:58:40 | require ... parse() | command-line-parameter-command-injection.js:58:6:58:40 | tainted2 | provenance | | +| command-line-parameter-command-injection.js:57:6:57:13 | tainted1 | command-line-parameter-command-injection.js:61:11:61:18 | tainted1 | provenance | | +| command-line-parameter-command-injection.js:57:17:57:37 | require ... ').argv | command-line-parameter-command-injection.js:57:6:57:13 | tainted1 | provenance | | +| command-line-parameter-command-injection.js:58:6:58:13 | tainted2 | command-line-parameter-command-injection.js:62:11:62:18 | tainted2 | provenance | | +| command-line-parameter-command-injection.js:58:17:58:40 | require ... parse() | command-line-parameter-command-injection.js:58:6:58:13 | tainted2 | provenance | | | command-line-parameter-command-injection.js:60:8:60:56 | {taint1 ... 2rest}} [taint1] | command-line-parameter-command-injection.js:60:9:60:31 | taint1: ... t1rest} | provenance | | | command-line-parameter-command-injection.js:60:8:60:56 | {taint1 ... 2rest}} [taint2] | command-line-parameter-command-injection.js:60:33:60:55 | taint2: ... t2rest} | provenance | | -| command-line-parameter-command-injection.js:60:8:63:2 | taint1rest | command-line-parameter-command-injection.js:65:22:65:31 | taint1rest | provenance | | -| command-line-parameter-command-injection.js:60:8:63:2 | taint2rest | command-line-parameter-command-injection.js:66:22:66:31 | taint2rest | provenance | | | command-line-parameter-command-injection.js:60:9:60:31 | taint1: ... t1rest} | command-line-parameter-command-injection.js:60:17:60:31 | {...taint1rest} | provenance | | -| command-line-parameter-command-injection.js:60:17:60:31 | {...taint1rest} | command-line-parameter-command-injection.js:60:8:63:2 | taint1rest | provenance | | +| command-line-parameter-command-injection.js:60:17:60:31 | {...taint1rest} | command-line-parameter-command-injection.js:60:21:60:30 | taint1rest | provenance | | +| command-line-parameter-command-injection.js:60:21:60:30 | taint1rest | command-line-parameter-command-injection.js:65:22:65:31 | taint1rest | provenance | | | command-line-parameter-command-injection.js:60:33:60:55 | taint2: ... t2rest} | command-line-parameter-command-injection.js:60:41:60:55 | {...taint2rest} | provenance | | -| command-line-parameter-command-injection.js:60:41:60:55 | {...taint2rest} | command-line-parameter-command-injection.js:60:8:63:2 | taint2rest | provenance | | +| command-line-parameter-command-injection.js:60:41:60:55 | {...taint2rest} | command-line-parameter-command-injection.js:60:45:60:54 | taint2rest | provenance | | +| command-line-parameter-command-injection.js:60:45:60:54 | taint2rest | command-line-parameter-command-injection.js:66:22:66:31 | taint2rest | provenance | | | command-line-parameter-command-injection.js:60:60:63:2 | {\\n\\t\\ttai ... ted2\\n\\t} [taint1] | command-line-parameter-command-injection.js:60:8:60:56 | {taint1 ... 2rest}} [taint1] | provenance | | | command-line-parameter-command-injection.js:60:60:63:2 | {\\n\\t\\ttai ... ted2\\n\\t} [taint2] | command-line-parameter-command-injection.js:60:8:60:56 | {taint1 ... 2rest}} [taint2] | provenance | | | command-line-parameter-command-injection.js:61:11:61:18 | tainted1 | command-line-parameter-command-injection.js:60:60:63:2 | {\\n\\t\\ttai ... ted2\\n\\t} [taint1] | provenance | | | command-line-parameter-command-injection.js:62:11:62:18 | tainted2 | command-line-parameter-command-injection.js:60:60:63:2 | {\\n\\t\\ttai ... ted2\\n\\t} [taint2] | provenance | | | command-line-parameter-command-injection.js:65:22:65:31 | taint1rest | command-line-parameter-command-injection.js:65:10:65:31 | "cmd.sh ... nt1rest | provenance | | | command-line-parameter-command-injection.js:66:22:66:31 | taint2rest | command-line-parameter-command-injection.js:66:10:66:31 | "cmd.sh ... nt2rest | provenance | | -| command-line-parameter-command-injection.js:68:6:68:16 | {...taint3} | command-line-parameter-command-injection.js:68:6:68:40 | taint3 | provenance | | -| command-line-parameter-command-injection.js:68:6:68:40 | taint3 | command-line-parameter-command-injection.js:69:22:69:27 | taint3 | provenance | | +| command-line-parameter-command-injection.js:68:6:68:16 | {...taint3} | command-line-parameter-command-injection.js:68:10:68:15 | taint3 | provenance | | +| command-line-parameter-command-injection.js:68:10:68:15 | taint3 | command-line-parameter-command-injection.js:69:22:69:27 | taint3 | provenance | | | command-line-parameter-command-injection.js:68:20:68:40 | require ... ').argv | command-line-parameter-command-injection.js:68:6:68:16 | {...taint3} | provenance | | | command-line-parameter-command-injection.js:69:22:69:27 | taint3 | command-line-parameter-command-injection.js:69:10:69:27 | "cmd.sh " + taint3 | provenance | | -| command-line-parameter-command-injection.js:71:6:71:16 | [...taint4] | command-line-parameter-command-injection.js:71:6:71:40 | taint4 | provenance | | -| command-line-parameter-command-injection.js:71:6:71:40 | taint4 | command-line-parameter-command-injection.js:72:22:72:27 | taint4 | provenance | | +| command-line-parameter-command-injection.js:71:6:71:16 | [...taint4] | command-line-parameter-command-injection.js:71:10:71:15 | taint4 | provenance | | +| command-line-parameter-command-injection.js:71:10:71:15 | taint4 | command-line-parameter-command-injection.js:72:22:72:27 | taint4 | provenance | | | command-line-parameter-command-injection.js:71:20:71:40 | require ... ').argv | command-line-parameter-command-injection.js:71:6:71:16 | [...taint4] | provenance | | | command-line-parameter-command-injection.js:72:22:72:27 | taint4 | command-line-parameter-command-injection.js:72:10:72:27 | "cmd.sh " + taint4 | provenance | | -| command-line-parameter-command-injection.js:76:8:76:35 | argv | command-line-parameter-command-injection.js:79:31:79:34 | argv | provenance | | +| command-line-parameter-command-injection.js:76:8:76:11 | argv | command-line-parameter-command-injection.js:79:31:79:34 | argv | provenance | | | command-line-parameter-command-injection.js:76:15:76:26 | process.argv | command-line-parameter-command-injection.js:76:15:76:35 | process ... lice(2) | provenance | | -| command-line-parameter-command-injection.js:76:15:76:35 | process ... lice(2) | command-line-parameter-command-injection.js:76:8:76:35 | argv | provenance | | +| command-line-parameter-command-injection.js:76:15:76:35 | process ... lice(2) | command-line-parameter-command-injection.js:76:8:76:11 | argv | provenance | | | command-line-parameter-command-injection.js:79:22:79:35 | minimist(argv) | command-line-parameter-command-injection.js:79:10:79:39 | "cmd.sh ... gv).foo | provenance | | | command-line-parameter-command-injection.js:79:31:79:34 | argv | command-line-parameter-command-injection.js:79:22:79:35 | minimist(argv) | provenance | | | command-line-parameter-command-injection.js:82:22:82:50 | subarg( ... ice(2)) | command-line-parameter-command-injection.js:82:10:82:54 | "cmd.sh ... 2)).foo | provenance | | @@ -150,28 +150,28 @@ edges | command-line-parameter-command-injection.js:85:22:85:55 | yargsPa ... ice(2)) | command-line-parameter-command-injection.js:85:10:85:59 | "cmd.sh ... 2)).foo | provenance | | | command-line-parameter-command-injection.js:85:34:85:45 | process.argv | command-line-parameter-command-injection.js:85:34:85:54 | process ... lice(2) | provenance | | | command-line-parameter-command-injection.js:85:34:85:54 | process ... lice(2) | command-line-parameter-command-injection.js:85:22:85:55 | yargsPa ... ice(2)) | provenance | | -| command-line-parameter-command-injection.js:88:6:88:37 | flags | command-line-parameter-command-injection.js:89:22:89:26 | flags | provenance | | -| command-line-parameter-command-injection.js:88:14:88:37 | args.pa ... s.argv) | command-line-parameter-command-injection.js:88:6:88:37 | flags | provenance | | +| command-line-parameter-command-injection.js:88:6:88:10 | flags | command-line-parameter-command-injection.js:89:22:89:26 | flags | provenance | | +| command-line-parameter-command-injection.js:88:14:88:37 | args.pa ... s.argv) | command-line-parameter-command-injection.js:88:6:88:10 | flags | provenance | | | command-line-parameter-command-injection.js:88:25:88:36 | process.argv | command-line-parameter-command-injection.js:88:14:88:37 | args.pa ... s.argv) | provenance | | | command-line-parameter-command-injection.js:89:22:89:26 | flags | command-line-parameter-command-injection.js:89:10:89:30 | "cmd.sh ... ags.foo | provenance | | -| command-line-parameter-command-injection.js:91:6:91:38 | flags | command-line-parameter-command-injection.js:92:22:92:26 | flags | provenance | | -| command-line-parameter-command-injection.js:91:14:91:38 | require ... .spec}) | command-line-parameter-command-injection.js:91:6:91:38 | flags | provenance | | +| command-line-parameter-command-injection.js:91:6:91:10 | flags | command-line-parameter-command-injection.js:92:22:92:26 | flags | provenance | | +| command-line-parameter-command-injection.js:91:14:91:38 | require ... .spec}) | command-line-parameter-command-injection.js:91:6:91:10 | flags | provenance | | | command-line-parameter-command-injection.js:92:22:92:26 | flags | command-line-parameter-command-injection.js:92:10:92:30 | "cmd.sh ... ags.foo | provenance | | | command-line-parameter-command-injection.js:102:22:102:40 | parser.parse_args() | command-line-parameter-command-injection.js:102:10:102:44 | "cmd.sh ... s().foo | provenance | | -| command-line-parameter-command-injection.js:107:8:107:51 | options | command-line-parameter-command-injection.js:108:22:108:28 | options | provenance | | -| command-line-parameter-command-injection.js:107:18:107:51 | command ... itions) | command-line-parameter-command-injection.js:107:8:107:51 | options | provenance | | +| command-line-parameter-command-injection.js:107:8:107:14 | options | command-line-parameter-command-injection.js:108:22:108:28 | options | provenance | | +| command-line-parameter-command-injection.js:107:18:107:51 | command ... itions) | command-line-parameter-command-injection.js:107:8:107:14 | options | provenance | | | command-line-parameter-command-injection.js:108:22:108:28 | options | command-line-parameter-command-injection.js:108:10:108:32 | "cmd.sh ... ons.foo | provenance | | -| command-line-parameter-command-injection.js:114:8:114:52 | cli | command-line-parameter-command-injection.js:116:22:116:24 | cli | provenance | | -| command-line-parameter-command-injection.js:114:14:114:52 | meow(`h ... lags}}) | command-line-parameter-command-injection.js:114:8:114:52 | cli | provenance | | +| command-line-parameter-command-injection.js:114:8:114:10 | cli | command-line-parameter-command-injection.js:116:22:116:24 | cli | provenance | | +| command-line-parameter-command-injection.js:114:14:114:52 | meow(`h ... lags}}) | command-line-parameter-command-injection.js:114:8:114:10 | cli | provenance | | | command-line-parameter-command-injection.js:116:22:116:24 | cli | command-line-parameter-command-injection.js:116:10:116:33 | "cmd.sh ... nput[0] | provenance | | -| command-line-parameter-command-injection.js:122:6:122:46 | opts | command-line-parameter-command-injection.js:124:22:124:25 | opts | provenance | | -| command-line-parameter-command-injection.js:122:13:122:46 | dashdas ... tions}) | command-line-parameter-command-injection.js:122:6:122:46 | opts | provenance | | +| command-line-parameter-command-injection.js:122:6:122:9 | opts | command-line-parameter-command-injection.js:124:22:124:25 | opts | provenance | | +| command-line-parameter-command-injection.js:122:13:122:46 | dashdas ... tions}) | command-line-parameter-command-injection.js:122:6:122:9 | opts | provenance | | | command-line-parameter-command-injection.js:124:22:124:25 | opts | command-line-parameter-command-injection.js:124:10:124:29 | "cmd.sh " + opts.foo | provenance | | -| command-line-parameter-command-injection.js:127:6:127:26 | opts | command-line-parameter-command-injection.js:129:22:129:25 | opts | provenance | | -| command-line-parameter-command-injection.js:127:13:127:26 | parser.parse() | command-line-parameter-command-injection.js:127:6:127:26 | opts | provenance | | +| command-line-parameter-command-injection.js:127:6:127:9 | opts | command-line-parameter-command-injection.js:129:22:129:25 | opts | provenance | | +| command-line-parameter-command-injection.js:127:13:127:26 | parser.parse() | command-line-parameter-command-injection.js:127:6:127:9 | opts | provenance | | | command-line-parameter-command-injection.js:129:22:129:25 | opts | command-line-parameter-command-injection.js:129:10:129:29 | "cmd.sh " + opts.foo | provenance | | -| command-line-parameter-command-injection.js:133:8:133:41 | program | command-line-parameter-command-injection.js:137:22:137:28 | program | provenance | | -| command-line-parameter-command-injection.js:133:10:133:16 | program | command-line-parameter-command-injection.js:133:8:133:41 | program | provenance | | +| command-line-parameter-command-injection.js:133:10:133:16 | program | command-line-parameter-command-injection.js:133:10:133:16 | program | provenance | | +| command-line-parameter-command-injection.js:133:10:133:16 | program | command-line-parameter-command-injection.js:137:22:137:28 | program | provenance | | | command-line-parameter-command-injection.js:136:22:136:35 | program.opts() | command-line-parameter-command-injection.js:136:10:136:45 | "cmd.sh ... zzaType | provenance | | | command-line-parameter-command-injection.js:136:22:136:45 | program ... zzaType | command-line-parameter-command-injection.js:136:10:136:45 | "cmd.sh ... zzaType | provenance | | | command-line-parameter-command-injection.js:137:22:137:28 | program | command-line-parameter-command-injection.js:137:10:137:38 | "cmd.sh ... zzaType | provenance | | @@ -196,8 +196,8 @@ nodes | command-line-parameter-command-injection.js:4:10:4:21 | process.argv | semmle.label | process.argv | | command-line-parameter-command-injection.js:8:10:8:36 | "cmd.sh ... argv[2] | semmle.label | "cmd.sh ... argv[2] | | command-line-parameter-command-injection.js:8:22:8:33 | process.argv | semmle.label | process.argv | -| command-line-parameter-command-injection.js:10:6:10:33 | args | semmle.label | args | -| command-line-parameter-command-injection.js:10:6:10:33 | args [ArrayElement] | semmle.label | args [ArrayElement] | +| command-line-parameter-command-injection.js:10:6:10:9 | args | semmle.label | args | +| command-line-parameter-command-injection.js:10:6:10:9 | args [ArrayElement] | semmle.label | args [ArrayElement] | | command-line-parameter-command-injection.js:10:13:10:24 | process.argv | semmle.label | process.argv | | command-line-parameter-command-injection.js:10:13:10:33 | process ... lice(2) | semmle.label | process ... lice(2) | | command-line-parameter-command-injection.js:10:13:10:33 | process ... lice(2) [ArrayElement] | semmle.label | process ... lice(2) [ArrayElement] | @@ -208,8 +208,8 @@ nodes | command-line-parameter-command-injection.js:12:26:12:29 | args | semmle.label | args | | command-line-parameter-command-injection.js:12:26:12:29 | args [ArrayElement] | semmle.label | args [ArrayElement] | | command-line-parameter-command-injection.js:12:26:12:32 | args[0] | semmle.label | args[0] | -| command-line-parameter-command-injection.js:14:6:14:30 | fewerArgs | semmle.label | fewerArgs | -| command-line-parameter-command-injection.js:14:6:14:30 | fewerArgs [ArrayElement] | semmle.label | fewerArgs [ArrayElement] | +| command-line-parameter-command-injection.js:14:6:14:14 | fewerArgs | semmle.label | fewerArgs | +| command-line-parameter-command-injection.js:14:6:14:14 | fewerArgs [ArrayElement] | semmle.label | fewerArgs [ArrayElement] | | command-line-parameter-command-injection.js:14:18:14:21 | args | semmle.label | args | | command-line-parameter-command-injection.js:14:18:14:21 | args [ArrayElement] | semmle.label | args [ArrayElement] | | command-line-parameter-command-injection.js:14:18:14:30 | args.slice(1) | semmle.label | args.slice(1) | @@ -221,15 +221,15 @@ nodes | command-line-parameter-command-injection.js:16:26:16:34 | fewerArgs | semmle.label | fewerArgs | | command-line-parameter-command-injection.js:16:26:16:34 | fewerArgs [ArrayElement] | semmle.label | fewerArgs [ArrayElement] | | command-line-parameter-command-injection.js:16:26:16:37 | fewerArgs[0] | semmle.label | fewerArgs[0] | -| command-line-parameter-command-injection.js:18:6:18:24 | arg0 | semmle.label | arg0 | +| command-line-parameter-command-injection.js:18:6:18:9 | arg0 | semmle.label | arg0 | | command-line-parameter-command-injection.js:18:13:18:21 | fewerArgs | semmle.label | fewerArgs | | command-line-parameter-command-injection.js:18:13:18:21 | fewerArgs [ArrayElement] | semmle.label | fewerArgs [ArrayElement] | | command-line-parameter-command-injection.js:18:13:18:24 | fewerArgs[0] | semmle.label | fewerArgs[0] | | command-line-parameter-command-injection.js:19:14:19:17 | arg0 | semmle.label | arg0 | | command-line-parameter-command-injection.js:20:14:20:29 | "cmd.sh " + arg0 | semmle.label | "cmd.sh " + arg0 | | command-line-parameter-command-injection.js:20:26:20:29 | arg0 | semmle.label | arg0 | -| command-line-parameter-command-injection.js:24:8:24:35 | args | semmle.label | args | -| command-line-parameter-command-injection.js:24:8:24:35 | args [ArrayElement] | semmle.label | args [ArrayElement] | +| command-line-parameter-command-injection.js:24:8:24:11 | args | semmle.label | args | +| command-line-parameter-command-injection.js:24:8:24:11 | args [ArrayElement] | semmle.label | args [ArrayElement] | | command-line-parameter-command-injection.js:24:15:24:26 | process.argv | semmle.label | process.argv | | command-line-parameter-command-injection.js:24:15:24:35 | process ... lice(2) | semmle.label | process ... lice(2) | | command-line-parameter-command-injection.js:24:15:24:35 | process ... lice(2) [ArrayElement] | semmle.label | process ... lice(2) [ArrayElement] | @@ -247,29 +247,29 @@ nodes | command-line-parameter-command-injection.js:32:21:32:41 | require ... ").argv | semmle.label | require ... ").argv | | command-line-parameter-command-injection.js:33:9:33:48 | "cmd.sh ... rgv.foo | semmle.label | "cmd.sh ... rgv.foo | | command-line-parameter-command-injection.js:33:21:33:44 | require ... ").argv | semmle.label | require ... ").argv | -| command-line-parameter-command-injection.js:36:6:39:7 | args | semmle.label | args | +| command-line-parameter-command-injection.js:36:6:36:9 | args | semmle.label | args | | command-line-parameter-command-injection.js:36:13:39:7 | require ... \\t\\t.argv | semmle.label | require ... \\t\\t.argv | | command-line-parameter-command-injection.js:41:10:41:25 | "cmd.sh " + args | semmle.label | "cmd.sh " + args | | command-line-parameter-command-injection.js:41:22:41:25 | args | semmle.label | args | | command-line-parameter-command-injection.js:43:10:43:62 | "cmd.sh ... e().foo | semmle.label | "cmd.sh ... e().foo | | command-line-parameter-command-injection.js:43:22:43:58 | require ... parse() | semmle.label | require ... parse() | -| command-line-parameter-command-injection.js:47:8:53:12 | args | semmle.label | args | | command-line-parameter-command-injection.js:48:3:50:3 | argv: { ... rgs\\n\\t\\t} | semmle.label | argv: { ... rgs\\n\\t\\t} | | command-line-parameter-command-injection.js:48:9:50:3 | {\\n\\t\\t\\t...args\\n\\t\\t} | semmle.label | {\\n\\t\\t\\t...args\\n\\t\\t} | +| command-line-parameter-command-injection.js:49:7:49:10 | args | semmle.label | args | | command-line-parameter-command-injection.js:55:10:55:25 | "cmd.sh " + args | semmle.label | "cmd.sh " + args | | command-line-parameter-command-injection.js:55:22:55:25 | args | semmle.label | args | -| command-line-parameter-command-injection.js:57:6:57:37 | tainted1 | semmle.label | tainted1 | +| command-line-parameter-command-injection.js:57:6:57:13 | tainted1 | semmle.label | tainted1 | | command-line-parameter-command-injection.js:57:17:57:37 | require ... ').argv | semmle.label | require ... ').argv | -| command-line-parameter-command-injection.js:58:6:58:40 | tainted2 | semmle.label | tainted2 | +| command-line-parameter-command-injection.js:58:6:58:13 | tainted2 | semmle.label | tainted2 | | command-line-parameter-command-injection.js:58:17:58:40 | require ... parse() | semmle.label | require ... parse() | | command-line-parameter-command-injection.js:60:8:60:56 | {taint1 ... 2rest}} [taint1] | semmle.label | {taint1 ... 2rest}} [taint1] | | command-line-parameter-command-injection.js:60:8:60:56 | {taint1 ... 2rest}} [taint2] | semmle.label | {taint1 ... 2rest}} [taint2] | -| command-line-parameter-command-injection.js:60:8:63:2 | taint1rest | semmle.label | taint1rest | -| command-line-parameter-command-injection.js:60:8:63:2 | taint2rest | semmle.label | taint2rest | | command-line-parameter-command-injection.js:60:9:60:31 | taint1: ... t1rest} | semmle.label | taint1: ... t1rest} | | command-line-parameter-command-injection.js:60:17:60:31 | {...taint1rest} | semmle.label | {...taint1rest} | +| command-line-parameter-command-injection.js:60:21:60:30 | taint1rest | semmle.label | taint1rest | | command-line-parameter-command-injection.js:60:33:60:55 | taint2: ... t2rest} | semmle.label | taint2: ... t2rest} | | command-line-parameter-command-injection.js:60:41:60:55 | {...taint2rest} | semmle.label | {...taint2rest} | +| command-line-parameter-command-injection.js:60:45:60:54 | taint2rest | semmle.label | taint2rest | | command-line-parameter-command-injection.js:60:60:63:2 | {\\n\\t\\ttai ... ted2\\n\\t} [taint1] | semmle.label | {\\n\\t\\ttai ... ted2\\n\\t} [taint1] | | command-line-parameter-command-injection.js:60:60:63:2 | {\\n\\t\\ttai ... ted2\\n\\t} [taint2] | semmle.label | {\\n\\t\\ttai ... ted2\\n\\t} [taint2] | | command-line-parameter-command-injection.js:61:11:61:18 | tainted1 | semmle.label | tainted1 | @@ -279,16 +279,16 @@ nodes | command-line-parameter-command-injection.js:66:10:66:31 | "cmd.sh ... nt2rest | semmle.label | "cmd.sh ... nt2rest | | command-line-parameter-command-injection.js:66:22:66:31 | taint2rest | semmle.label | taint2rest | | command-line-parameter-command-injection.js:68:6:68:16 | {...taint3} | semmle.label | {...taint3} | -| command-line-parameter-command-injection.js:68:6:68:40 | taint3 | semmle.label | taint3 | +| command-line-parameter-command-injection.js:68:10:68:15 | taint3 | semmle.label | taint3 | | command-line-parameter-command-injection.js:68:20:68:40 | require ... ').argv | semmle.label | require ... ').argv | | command-line-parameter-command-injection.js:69:10:69:27 | "cmd.sh " + taint3 | semmle.label | "cmd.sh " + taint3 | | command-line-parameter-command-injection.js:69:22:69:27 | taint3 | semmle.label | taint3 | | command-line-parameter-command-injection.js:71:6:71:16 | [...taint4] | semmle.label | [...taint4] | -| command-line-parameter-command-injection.js:71:6:71:40 | taint4 | semmle.label | taint4 | +| command-line-parameter-command-injection.js:71:10:71:15 | taint4 | semmle.label | taint4 | | command-line-parameter-command-injection.js:71:20:71:40 | require ... ').argv | semmle.label | require ... ').argv | | command-line-parameter-command-injection.js:72:10:72:27 | "cmd.sh " + taint4 | semmle.label | "cmd.sh " + taint4 | | command-line-parameter-command-injection.js:72:22:72:27 | taint4 | semmle.label | taint4 | -| command-line-parameter-command-injection.js:76:8:76:35 | argv | semmle.label | argv | +| command-line-parameter-command-injection.js:76:8:76:11 | argv | semmle.label | argv | | command-line-parameter-command-injection.js:76:15:76:26 | process.argv | semmle.label | process.argv | | command-line-parameter-command-injection.js:76:15:76:35 | process ... lice(2) | semmle.label | process ... lice(2) | | command-line-parameter-command-injection.js:79:10:79:39 | "cmd.sh ... gv).foo | semmle.label | "cmd.sh ... gv).foo | @@ -302,34 +302,34 @@ nodes | command-line-parameter-command-injection.js:85:22:85:55 | yargsPa ... ice(2)) | semmle.label | yargsPa ... ice(2)) | | command-line-parameter-command-injection.js:85:34:85:45 | process.argv | semmle.label | process.argv | | command-line-parameter-command-injection.js:85:34:85:54 | process ... lice(2) | semmle.label | process ... lice(2) | -| command-line-parameter-command-injection.js:88:6:88:37 | flags | semmle.label | flags | +| command-line-parameter-command-injection.js:88:6:88:10 | flags | semmle.label | flags | | command-line-parameter-command-injection.js:88:14:88:37 | args.pa ... s.argv) | semmle.label | args.pa ... s.argv) | | command-line-parameter-command-injection.js:88:25:88:36 | process.argv | semmle.label | process.argv | | command-line-parameter-command-injection.js:89:10:89:30 | "cmd.sh ... ags.foo | semmle.label | "cmd.sh ... ags.foo | | command-line-parameter-command-injection.js:89:22:89:26 | flags | semmle.label | flags | -| command-line-parameter-command-injection.js:91:6:91:38 | flags | semmle.label | flags | +| command-line-parameter-command-injection.js:91:6:91:10 | flags | semmle.label | flags | | command-line-parameter-command-injection.js:91:14:91:38 | require ... .spec}) | semmle.label | require ... .spec}) | | command-line-parameter-command-injection.js:92:10:92:30 | "cmd.sh ... ags.foo | semmle.label | "cmd.sh ... ags.foo | | command-line-parameter-command-injection.js:92:22:92:26 | flags | semmle.label | flags | | command-line-parameter-command-injection.js:102:10:102:44 | "cmd.sh ... s().foo | semmle.label | "cmd.sh ... s().foo | | command-line-parameter-command-injection.js:102:22:102:40 | parser.parse_args() | semmle.label | parser.parse_args() | -| command-line-parameter-command-injection.js:107:8:107:51 | options | semmle.label | options | +| command-line-parameter-command-injection.js:107:8:107:14 | options | semmle.label | options | | command-line-parameter-command-injection.js:107:18:107:51 | command ... itions) | semmle.label | command ... itions) | | command-line-parameter-command-injection.js:108:10:108:32 | "cmd.sh ... ons.foo | semmle.label | "cmd.sh ... ons.foo | | command-line-parameter-command-injection.js:108:22:108:28 | options | semmle.label | options | -| command-line-parameter-command-injection.js:114:8:114:52 | cli | semmle.label | cli | +| command-line-parameter-command-injection.js:114:8:114:10 | cli | semmle.label | cli | | command-line-parameter-command-injection.js:114:14:114:52 | meow(`h ... lags}}) | semmle.label | meow(`h ... lags}}) | | command-line-parameter-command-injection.js:116:10:116:33 | "cmd.sh ... nput[0] | semmle.label | "cmd.sh ... nput[0] | | command-line-parameter-command-injection.js:116:22:116:24 | cli | semmle.label | cli | -| command-line-parameter-command-injection.js:122:6:122:46 | opts | semmle.label | opts | +| command-line-parameter-command-injection.js:122:6:122:9 | opts | semmle.label | opts | | command-line-parameter-command-injection.js:122:13:122:46 | dashdas ... tions}) | semmle.label | dashdas ... tions}) | | command-line-parameter-command-injection.js:124:10:124:29 | "cmd.sh " + opts.foo | semmle.label | "cmd.sh " + opts.foo | | command-line-parameter-command-injection.js:124:22:124:25 | opts | semmle.label | opts | -| command-line-parameter-command-injection.js:127:6:127:26 | opts | semmle.label | opts | +| command-line-parameter-command-injection.js:127:6:127:9 | opts | semmle.label | opts | | command-line-parameter-command-injection.js:127:13:127:26 | parser.parse() | semmle.label | parser.parse() | | command-line-parameter-command-injection.js:129:10:129:29 | "cmd.sh " + opts.foo | semmle.label | "cmd.sh " + opts.foo | | command-line-parameter-command-injection.js:129:22:129:25 | opts | semmle.label | opts | -| command-line-parameter-command-injection.js:133:8:133:41 | program | semmle.label | program | +| command-line-parameter-command-injection.js:133:10:133:16 | program | semmle.label | program | | command-line-parameter-command-injection.js:133:10:133:16 | program | semmle.label | program | | command-line-parameter-command-injection.js:136:10:136:45 | "cmd.sh ... zzaType | semmle.label | "cmd.sh ... zzaType | | command-line-parameter-command-injection.js:136:22:136:35 | program.opts() | semmle.label | program.opts() | diff --git a/javascript/ql/test/query-tests/Security/CWE-078/SecondOrderCommandInjection/SecondOrderCommandInjection.expected b/javascript/ql/test/query-tests/Security/CWE-078/SecondOrderCommandInjection/SecondOrderCommandInjection.expected index e4396669dc8..85d629191c5 100644 --- a/javascript/ql/test/query-tests/Security/CWE-078/SecondOrderCommandInjection/SecondOrderCommandInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-078/SecondOrderCommandInjection/SecondOrderCommandInjection.expected @@ -9,20 +9,20 @@ | second-order.js:42:31:42:46 | req.query.remote | second-order.js:42:31:42:46 | req.query.remote | second-order.js:42:31:42:46 | req.query.remote | Command line argument that depends on $@ can execute an arbitrary command if --config=alias.= is used with hg. | second-order.js:42:31:42:46 | req.query.remote | a user-provided value | | second-order.js:44:18:44:31 | req.query.args | second-order.js:44:18:44:31 | req.query.args | second-order.js:44:18:44:31 | req.query.args | Command line argument that depends on $@ can execute an arbitrary command if --config=alias.= is used with hg. | second-order.js:44:18:44:31 | req.query.args | a user-provided value | edges -| second-order.js:6:9:6:33 | remote | second-order.js:7:33:7:38 | remote | provenance | | -| second-order.js:6:9:6:33 | remote | second-order.js:9:29:9:34 | remote | provenance | | -| second-order.js:6:9:6:33 | remote | second-order.js:11:33:11:38 | remote | provenance | | -| second-order.js:6:9:6:33 | remote | second-order.js:26:35:26:40 | remote | provenance | | -| second-order.js:6:18:6:33 | req.query.remote | second-order.js:6:9:6:33 | remote | provenance | | -| second-order.js:13:9:13:31 | myArgs | second-order.js:15:19:15:24 | myArgs | provenance | | -| second-order.js:13:18:13:31 | req.query.args | second-order.js:13:9:13:31 | myArgs | provenance | | +| second-order.js:6:9:6:14 | remote | second-order.js:7:33:7:38 | remote | provenance | | +| second-order.js:6:9:6:14 | remote | second-order.js:9:29:9:34 | remote | provenance | | +| second-order.js:6:9:6:14 | remote | second-order.js:11:33:11:38 | remote | provenance | | +| second-order.js:6:9:6:14 | remote | second-order.js:26:35:26:40 | remote | provenance | | +| second-order.js:6:18:6:33 | req.query.remote | second-order.js:6:9:6:14 | remote | provenance | | +| second-order.js:13:9:13:14 | myArgs | second-order.js:15:19:15:24 | myArgs | provenance | | +| second-order.js:13:18:13:31 | req.query.args | second-order.js:13:9:13:14 | myArgs | provenance | | nodes -| second-order.js:6:9:6:33 | remote | semmle.label | remote | +| second-order.js:6:9:6:14 | remote | semmle.label | remote | | second-order.js:6:18:6:33 | req.query.remote | semmle.label | req.query.remote | | second-order.js:7:33:7:38 | remote | semmle.label | remote | | second-order.js:9:29:9:34 | remote | semmle.label | remote | | second-order.js:11:33:11:38 | remote | semmle.label | remote | -| second-order.js:13:9:13:31 | myArgs | semmle.label | myArgs | +| second-order.js:13:9:13:14 | myArgs | semmle.label | myArgs | | second-order.js:13:18:13:31 | req.query.args | semmle.label | req.query.args | | second-order.js:15:19:15:24 | myArgs | semmle.label | myArgs | | second-order.js:26:35:26:40 | remote | semmle.label | remote | diff --git a/javascript/ql/test/query-tests/Security/CWE-078/UnsafeShellCommandConstruction/UnsafeShellCommandConstruction.expected b/javascript/ql/test/query-tests/Security/CWE-078/UnsafeShellCommandConstruction/UnsafeShellCommandConstruction.expected index c4b16b01a38..564d9ca221e 100644 --- a/javascript/ql/test/query-tests/Security/CWE-078/UnsafeShellCommandConstruction/UnsafeShellCommandConstruction.expected +++ b/javascript/ql/test/query-tests/Security/CWE-078/UnsafeShellCommandConstruction/UnsafeShellCommandConstruction.expected @@ -142,10 +142,10 @@ edges | lib/lib.js:155:38:155:41 | name | lib/lib.js:161:25:161:28 | name | provenance | | | lib/lib.js:170:41:170:44 | name | lib/lib.js:173:20:173:23 | name | provenance | | | lib/lib.js:177:38:177:41 | name | lib/lib.js:181:21:181:24 | name | provenance | | -| lib/lib.js:181:6:181:52 | broken | lib/lib.js:182:22:182:27 | broken | provenance | | +| lib/lib.js:181:6:181:11 | broken | lib/lib.js:182:22:182:27 | broken | provenance | | | lib/lib.js:181:21:181:24 | name | lib/lib.js:181:21:181:46 | name.re ... "'\\''") | provenance | | | lib/lib.js:181:21:181:24 | name | lib/lib.js:181:21:181:46 | name.re ... "'\\''") | provenance | | -| lib/lib.js:181:21:181:46 | name.re ... "'\\''") | lib/lib.js:181:6:181:52 | broken | provenance | | +| lib/lib.js:181:21:181:46 | name.re ... "'\\''") | lib/lib.js:181:6:181:11 | broken | provenance | | | lib/lib.js:186:34:186:37 | name | lib/lib.js:187:22:187:25 | name | provenance | | | lib/lib.js:186:34:186:37 | name | lib/lib.js:190:23:190:26 | name | provenance | | | lib/lib.js:196:45:196:48 | name | lib/lib.js:197:22:197:25 | name | provenance | | @@ -160,8 +160,8 @@ edges | lib/lib.js:239:28:239:28 | s | lib/lib.js:245:9:245:9 | s | provenance | | | lib/lib.js:248:42:248:45 | name | lib/lib.js:249:22:249:25 | name | provenance | | | lib/lib.js:248:42:248:45 | name | lib/lib.js:251:27:251:30 | name | provenance | | -| lib/lib.js:251:6:251:31 | cleaned | lib/lib.js:253:22:253:28 | cleaned | provenance | | -| lib/lib.js:251:16:251:31 | cleanInput(name) | lib/lib.js:251:6:251:31 | cleaned | provenance | | +| lib/lib.js:251:6:251:12 | cleaned | lib/lib.js:253:22:253:28 | cleaned | provenance | | +| lib/lib.js:251:16:251:31 | cleanInput(name) | lib/lib.js:251:6:251:12 | cleaned | provenance | | | lib/lib.js:251:27:251:30 | name | lib/lib.js:239:28:239:28 | s | provenance | | | lib/lib.js:251:27:251:30 | name | lib/lib.js:251:16:251:31 | cleanInput(name) | provenance | | | lib/lib.js:257:35:257:38 | name | lib/lib.js:258:22:258:25 | name | provenance | | @@ -235,10 +235,10 @@ edges | lib/lib.js:608:42:608:45 | name | lib/lib.js:626:29:626:32 | name | provenance | | | lib/lib.js:608:42:608:45 | name | lib/lib.js:629:25:629:28 | name | provenance | | | lib/lib.js:632:38:632:41 | name | lib/lib.js:633:24:633:27 | name | provenance | | -| lib/lib.js:633:6:633:68 | sanitized | lib/lib.js:634:22:634:30 | sanitized | provenance | | +| lib/lib.js:633:6:633:14 | sanitized | lib/lib.js:634:22:634:30 | sanitized | provenance | | | lib/lib.js:633:24:633:27 | name | lib/lib.js:633:24:633:62 | name.re ... '\\\\''") | provenance | | | lib/lib.js:633:24:633:27 | name | lib/lib.js:633:24:633:62 | name.re ... '\\\\''") | provenance | | -| lib/lib.js:633:24:633:62 | name.re ... '\\\\''") | lib/lib.js:633:6:633:68 | sanitized | provenance | | +| lib/lib.js:633:24:633:62 | name.re ... '\\\\''") | lib/lib.js:633:6:633:14 | sanitized | provenance | | | lib/subLib2/compiled-file.ts:3:26:3:29 | name | lib/subLib2/compiled-file.ts:4:25:4:28 | name | provenance | | | lib/subLib2/special-file.js:3:28:3:31 | name | lib/subLib2/special-file.js:4:22:4:25 | name | provenance | | | lib/subLib3/my-file.ts:3:28:3:31 | name | lib/subLib3/my-file.ts:4:22:4:25 | name | provenance | | @@ -308,7 +308,7 @@ nodes | lib/lib.js:170:41:170:44 | name | semmle.label | name | | lib/lib.js:173:20:173:23 | name | semmle.label | name | | lib/lib.js:177:38:177:41 | name | semmle.label | name | -| lib/lib.js:181:6:181:52 | broken | semmle.label | broken | +| lib/lib.js:181:6:181:11 | broken | semmle.label | broken | | lib/lib.js:181:21:181:24 | name | semmle.label | name | | lib/lib.js:181:21:181:46 | name.re ... "'\\''") | semmle.label | name.re ... "'\\''") | | lib/lib.js:181:21:181:46 | name.re ... "'\\''") | semmle.label | name.re ... "'\\''") | @@ -333,7 +333,7 @@ nodes | lib/lib.js:245:9:245:9 | s | semmle.label | s | | lib/lib.js:248:42:248:45 | name | semmle.label | name | | lib/lib.js:249:22:249:25 | name | semmle.label | name | -| lib/lib.js:251:6:251:31 | cleaned | semmle.label | cleaned | +| lib/lib.js:251:6:251:12 | cleaned | semmle.label | cleaned | | lib/lib.js:251:16:251:31 | cleanInput(name) | semmle.label | cleanInput(name) | | lib/lib.js:251:27:251:30 | name | semmle.label | name | | lib/lib.js:253:22:253:28 | cleaned | semmle.label | cleaned | @@ -428,7 +428,7 @@ nodes | lib/lib.js:626:29:626:32 | name | semmle.label | name | | lib/lib.js:629:25:629:28 | name | semmle.label | name | | lib/lib.js:632:38:632:41 | name | semmle.label | name | -| lib/lib.js:633:6:633:68 | sanitized | semmle.label | sanitized | +| lib/lib.js:633:6:633:14 | sanitized | semmle.label | sanitized | | lib/lib.js:633:24:633:27 | name | semmle.label | name | | lib/lib.js:633:24:633:62 | name.re ... '\\\\''") | semmle.label | name.re ... '\\\\''") | | lib/lib.js:633:24:633:62 | name.re ... '\\\\''") | semmle.label | name.re ... '\\\\''") | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected index 0f565949211..fce55fec293 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected @@ -244,8 +244,8 @@ edges | addEventListener.js:1:43:1:47 | event | addEventListener.js:2:20:2:24 | event | provenance | | | addEventListener.js:2:20:2:24 | event | addEventListener.js:2:20:2:29 | event.data | provenance | | -| addEventListener.js:5:43:5:48 | data | addEventListener.js:6:20:6:23 | data | provenance | | -| addEventListener.js:5:43:5:48 | {data} | addEventListener.js:5:43:5:48 | data | provenance | | +| addEventListener.js:5:43:5:48 | {data} | addEventListener.js:5:44:5:47 | data | provenance | | +| addEventListener.js:5:44:5:47 | data | addEventListener.js:6:20:6:23 | data | provenance | | | addEventListener.js:10:21:10:25 | event | addEventListener.js:12:24:12:28 | event | provenance | | | addEventListener.js:12:24:12:28 | event | addEventListener.js:12:24:12:33 | event.data | provenance | | | angular2-client.ts:26:44:26:69 | this.ro ... .params | angular2-client.ts:26:44:26:73 | this.ro ... ams.foo | provenance | | @@ -270,25 +270,25 @@ edges | classnames.js:15:52:15:62 | window.name | classnames.js:15:47:15:63 | clsx(window.name) | provenance | | | classnames.js:17:48:17:64 | clsx(window.name) | classnames.js:17:32:17:79 | `` | provenance | | | classnames.js:17:53:17:63 | window.name | classnames.js:17:48:17:64 | clsx(window.name) | provenance | | -| clipboard.ts:8:11:8:51 | html | clipboard.ts:15:25:15:28 | html | provenance | | -| clipboard.ts:8:18:8:51 | clipboa ... /html') | clipboard.ts:8:11:8:51 | html | provenance | | -| clipboard.ts:43:15:43:55 | html | clipboard.ts:50:29:50:32 | html | provenance | | -| clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | provenance | | -| clipboard.ts:71:13:71:62 | droppedHtml | clipboard.ts:73:29:73:39 | droppedHtml | provenance | | -| clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | provenance | | -| clipboard.ts:98:15:98:54 | html | clipboard.ts:99:23:99:26 | html | provenance | | -| clipboard.ts:98:22:98:54 | dataTra ... /html') | clipboard.ts:98:15:98:54 | html | provenance | | +| clipboard.ts:8:11:8:14 | html | clipboard.ts:15:25:15:28 | html | provenance | | +| clipboard.ts:8:18:8:51 | clipboa ... /html') | clipboard.ts:8:11:8:14 | html | provenance | | +| clipboard.ts:43:15:43:18 | html | clipboard.ts:50:29:50:32 | html | provenance | | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:18 | html | provenance | | +| clipboard.ts:71:13:71:23 | droppedHtml | clipboard.ts:73:29:73:39 | droppedHtml | provenance | | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:23 | droppedHtml | provenance | | +| clipboard.ts:98:15:98:18 | html | clipboard.ts:99:23:99:26 | html | provenance | | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | clipboard.ts:98:15:98:18 | html | provenance | | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | provenance | | | d3.js:4:12:4:22 | window.name | d3.js:12:20:12:29 | getTaint() | provenance | | | d3.js:4:12:4:22 | window.name | d3.js:14:20:14:29 | getTaint() | provenance | | | d3.js:4:12:4:22 | window.name | d3.js:21:15:21:24 | getTaint() | provenance | | -| dates.js:9:9:9:69 | taint | dates.js:11:63:11:67 | taint | provenance | | -| dates.js:9:9:9:69 | taint | dates.js:12:66:12:70 | taint | provenance | | -| dates.js:9:9:9:69 | taint | dates.js:13:59:13:63 | taint | provenance | | -| dates.js:9:9:9:69 | taint | dates.js:16:62:16:66 | taint | provenance | | -| dates.js:9:9:9:69 | taint | dates.js:18:59:18:63 | taint | provenance | | -| dates.js:9:9:9:69 | taint | dates.js:21:61:21:65 | taint | provenance | | -| dates.js:9:17:9:69 | decodeU ... ing(1)) | dates.js:9:9:9:69 | taint | provenance | | +| dates.js:9:9:9:13 | taint | dates.js:11:63:11:67 | taint | provenance | | +| dates.js:9:9:9:13 | taint | dates.js:12:66:12:70 | taint | provenance | | +| dates.js:9:9:9:13 | taint | dates.js:13:59:13:63 | taint | provenance | | +| dates.js:9:9:9:13 | taint | dates.js:16:62:16:66 | taint | provenance | | +| dates.js:9:9:9:13 | taint | dates.js:18:59:18:63 | taint | provenance | | +| dates.js:9:9:9:13 | taint | dates.js:21:61:21:65 | taint | provenance | | +| dates.js:9:17:9:69 | decodeU ... ing(1)) | dates.js:9:9:9:13 | taint | provenance | | | dates.js:9:36:9:55 | window.location.hash | dates.js:9:36:9:68 | window. ... ring(1) | provenance | | | dates.js:9:36:9:55 | window.location.hash | dates.js:9:36:9:68 | window. ... ring(1) | provenance | Config | | dates.js:9:36:9:68 | window. ... ring(1) | dates.js:9:17:9:69 | decodeU ... ing(1)) | provenance | | @@ -304,11 +304,11 @@ edges | dates.js:18:59:18:63 | taint | dates.js:18:42:18:64 | datefor ... taint) | provenance | | | dates.js:21:42:21:66 | dayjs(t ... (taint) | dates.js:21:31:21:68 | `Time i ... aint)}` | provenance | | | dates.js:21:61:21:65 | taint | dates.js:21:42:21:66 | dayjs(t ... (taint) | provenance | | -| dates.js:30:9:30:69 | taint | dates.js:37:77:37:81 | taint | provenance | | -| dates.js:30:9:30:69 | taint | dates.js:38:77:38:81 | taint | provenance | | -| dates.js:30:9:30:69 | taint | dates.js:39:79:39:83 | taint | provenance | | -| dates.js:30:9:30:69 | taint | dates.js:40:77:40:81 | taint | provenance | | -| dates.js:30:17:30:69 | decodeU ... ing(1)) | dates.js:30:9:30:69 | taint | provenance | | +| dates.js:30:9:30:13 | taint | dates.js:37:77:37:81 | taint | provenance | | +| dates.js:30:9:30:13 | taint | dates.js:38:77:38:81 | taint | provenance | | +| dates.js:30:9:30:13 | taint | dates.js:39:79:39:83 | taint | provenance | | +| dates.js:30:9:30:13 | taint | dates.js:40:77:40:81 | taint | provenance | | +| dates.js:30:17:30:69 | decodeU ... ing(1)) | dates.js:30:9:30:13 | taint | provenance | | | dates.js:30:36:30:55 | window.location.hash | dates.js:30:36:30:68 | window. ... ring(1) | provenance | | | dates.js:30:36:30:55 | window.location.hash | dates.js:30:36:30:68 | window. ... ring(1) | provenance | Config | | dates.js:30:36:30:68 | window. ... ring(1) | dates.js:30:17:30:69 | decodeU ... ing(1)) | provenance | | @@ -320,10 +320,10 @@ edges | dates.js:39:79:39:83 | taint | dates.js:39:42:39:84 | moment. ... taint) | provenance | | | dates.js:40:42:40:82 | dayjs.f ... taint) | dates.js:40:31:40:84 | `Time i ... aint)}` | provenance | | | dates.js:40:77:40:81 | taint | dates.js:40:42:40:82 | dayjs.f ... taint) | provenance | | -| dates.js:46:9:46:69 | taint | dates.js:48:83:48:87 | taint | provenance | | -| dates.js:46:9:46:69 | taint | dates.js:49:82:49:86 | taint | provenance | | -| dates.js:46:9:46:69 | taint | dates.js:50:97:50:101 | taint | provenance | | -| dates.js:46:17:46:69 | decodeU ... ing(1)) | dates.js:46:9:46:69 | taint | provenance | | +| dates.js:46:9:46:13 | taint | dates.js:48:83:48:87 | taint | provenance | | +| dates.js:46:9:46:13 | taint | dates.js:49:82:49:86 | taint | provenance | | +| dates.js:46:9:46:13 | taint | dates.js:50:97:50:101 | taint | provenance | | +| dates.js:46:17:46:69 | decodeU ... ing(1)) | dates.js:46:9:46:13 | taint | provenance | | | dates.js:46:36:46:55 | window.location.hash | dates.js:46:36:46:68 | window. ... ring(1) | provenance | | | dates.js:46:36:46:55 | window.location.hash | dates.js:46:36:46:68 | window. ... ring(1) | provenance | Config | | dates.js:46:36:46:68 | window. ... ring(1) | dates.js:46:17:46:69 | decodeU ... ing(1)) | provenance | | @@ -333,10 +333,10 @@ edges | dates.js:49:82:49:86 | taint | dates.js:49:42:49:87 | new Dat ... (taint) | provenance | | | dates.js:50:42:50:102 | DateTim ... (taint) | dates.js:50:31:50:104 | `Time i ... aint)}` | provenance | | | dates.js:50:97:50:101 | taint | dates.js:50:42:50:102 | DateTim ... (taint) | provenance | | -| dates.js:54:9:54:69 | taint | dates.js:57:94:57:98 | taint | provenance | | -| dates.js:54:9:54:69 | taint | dates.js:59:80:59:84 | taint | provenance | | -| dates.js:54:9:54:69 | taint | dates.js:61:81:61:85 | taint | provenance | | -| dates.js:54:17:54:69 | decodeU ... ing(1)) | dates.js:54:9:54:69 | taint | provenance | | +| dates.js:54:9:54:13 | taint | dates.js:57:94:57:98 | taint | provenance | | +| dates.js:54:9:54:13 | taint | dates.js:59:80:59:84 | taint | provenance | | +| dates.js:54:9:54:13 | taint | dates.js:61:81:61:85 | taint | provenance | | +| dates.js:54:17:54:69 | decodeU ... ing(1)) | dates.js:54:9:54:13 | taint | provenance | | | dates.js:54:36:54:55 | window.location.hash | dates.js:54:36:54:68 | window. ... ring(1) | provenance | | | dates.js:54:36:54:55 | window.location.hash | dates.js:54:36:54:68 | window. ... ring(1) | provenance | Config | | dates.js:54:36:54:68 | window. ... ring(1) | dates.js:54:17:54:69 | decodeU ... ing(1)) | provenance | | @@ -346,21 +346,21 @@ edges | dates.js:59:80:59:84 | taint | dates.js:59:42:59:85 | luxon.e ... (taint) | provenance | | | dates.js:61:42:61:86 | dayjs.s ... (taint) | dates.js:61:31:61:88 | `Time i ... aint)}` | provenance | | | dates.js:61:81:61:85 | taint | dates.js:61:42:61:86 | dayjs.s ... (taint) | provenance | | -| dragAndDrop.ts:8:11:8:50 | html | dragAndDrop.ts:15:25:15:28 | html | provenance | | -| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:8:11:8:50 | html | provenance | | -| dragAndDrop.ts:43:15:43:54 | html | dragAndDrop.ts:50:29:50:32 | html | provenance | | -| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | provenance | | -| dragAndDrop.ts:71:13:71:61 | droppedHtml | dragAndDrop.ts:73:29:73:39 | droppedHtml | provenance | | -| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:71:13:71:61 | droppedHtml | provenance | | +| dragAndDrop.ts:8:11:8:14 | html | dragAndDrop.ts:15:25:15:28 | html | provenance | | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:8:11:8:14 | html | provenance | | +| dragAndDrop.ts:43:15:43:18 | html | dragAndDrop.ts:50:29:50:32 | html | provenance | | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:18 | html | provenance | | +| dragAndDrop.ts:71:13:71:23 | droppedHtml | dragAndDrop.ts:73:29:73:39 | droppedHtml | provenance | | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:71:13:71:23 | droppedHtml | provenance | | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | provenance | | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | provenance | Config | -| jquery.js:2:7:2:40 | tainted | jquery.js:4:5:4:11 | tainted | provenance | | -| jquery.js:2:7:2:40 | tainted | jquery.js:5:13:5:19 | tainted | provenance | | -| jquery.js:2:7:2:40 | tainted | jquery.js:6:11:6:17 | tainted | provenance | | -| jquery.js:2:7:2:40 | tainted | jquery.js:7:20:7:26 | tainted | provenance | | -| jquery.js:2:7:2:40 | tainted | jquery.js:8:28:8:34 | tainted | provenance | | -| jquery.js:2:7:2:40 | tainted | jquery.js:36:25:36:31 | tainted | provenance | | -| jquery.js:2:17:2:40 | documen ... .search | jquery.js:2:7:2:40 | tainted | provenance | | +| jquery.js:2:7:2:13 | tainted | jquery.js:4:5:4:11 | tainted | provenance | | +| jquery.js:2:7:2:13 | tainted | jquery.js:5:13:5:19 | tainted | provenance | | +| jquery.js:2:7:2:13 | tainted | jquery.js:6:11:6:17 | tainted | provenance | | +| jquery.js:2:7:2:13 | tainted | jquery.js:7:20:7:26 | tainted | provenance | | +| jquery.js:2:7:2:13 | tainted | jquery.js:8:28:8:34 | tainted | provenance | | +| jquery.js:2:7:2:13 | tainted | jquery.js:36:25:36:31 | tainted | provenance | | +| jquery.js:2:17:2:40 | documen ... .search | jquery.js:2:7:2:13 | tainted | provenance | | | jquery.js:4:5:4:11 | tainted | jquery.js:5:13:5:19 | tainted | provenance | | | jquery.js:5:13:5:19 | tainted | jquery.js:6:11:6:17 | tainted | provenance | | | jquery.js:6:11:6:17 | tainted | jquery.js:7:20:7:26 | tainted | provenance | | @@ -374,13 +374,13 @@ edges | jquery.js:15:38:15:59 | window. ... .search | jquery.js:15:19:15:60 | decodeU ... search) | provenance | | | jquery.js:16:38:16:52 | window.location | jquery.js:16:38:16:63 | window. ... tring() | provenance | | | jquery.js:16:38:16:63 | window. ... tring() | jquery.js:16:19:16:64 | decodeU ... ring()) | provenance | | -| jquery.js:18:7:18:33 | hash | jquery.js:21:5:21:8 | hash | provenance | | -| jquery.js:18:7:18:33 | hash | jquery.js:22:5:22:8 | hash | provenance | | -| jquery.js:18:7:18:33 | hash | jquery.js:23:5:23:8 | hash | provenance | | -| jquery.js:18:7:18:33 | hash | jquery.js:24:5:24:8 | hash | provenance | | -| jquery.js:18:7:18:33 | hash | jquery.js:27:5:27:8 | hash | provenance | | -| jquery.js:18:7:18:33 | hash | jquery.js:34:13:34:16 | hash | provenance | | -| jquery.js:18:14:18:33 | window.location.hash | jquery.js:18:7:18:33 | hash | provenance | | +| jquery.js:18:7:18:10 | hash | jquery.js:21:5:21:8 | hash | provenance | | +| jquery.js:18:7:18:10 | hash | jquery.js:22:5:22:8 | hash | provenance | | +| jquery.js:18:7:18:10 | hash | jquery.js:23:5:23:8 | hash | provenance | | +| jquery.js:18:7:18:10 | hash | jquery.js:24:5:24:8 | hash | provenance | | +| jquery.js:18:7:18:10 | hash | jquery.js:27:5:27:8 | hash | provenance | | +| jquery.js:18:7:18:10 | hash | jquery.js:34:13:34:16 | hash | provenance | | +| jquery.js:18:14:18:33 | window.location.hash | jquery.js:18:7:18:10 | hash | provenance | | | jquery.js:21:5:21:8 | hash | jquery.js:21:5:21:21 | hash.substring(1) | provenance | Config | | jquery.js:22:5:22:8 | hash | jquery.js:22:5:22:25 | hash.su ... (1, 10) | provenance | Config | | jquery.js:23:5:23:8 | hash | jquery.js:23:5:23:18 | hash.substr(1) | provenance | Config | @@ -390,47 +390,47 @@ edges | jquery.js:34:13:34:16 | hash | jquery.js:34:5:34:25 | '' + ... '' | provenance | Config | | jquery.js:36:25:36:31 | tainted | jquery.js:37:31:37:37 | tainted | provenance | | | jquery.js:37:31:37:37 | tainted | jquery.js:37:25:37:37 | () => tainted | provenance | Config | -| json-stringify.jsx:5:9:5:36 | locale | json-stringify.jsx:11:51:11:56 | locale | provenance | | -| json-stringify.jsx:5:9:5:36 | locale | json-stringify.jsx:19:56:19:61 | locale | provenance | | -| json-stringify.jsx:5:9:5:36 | locale | json-stringify.jsx:31:55:31:60 | locale | provenance | | -| json-stringify.jsx:5:18:5:36 | req.param("locale") | json-stringify.jsx:5:9:5:36 | locale | provenance | | +| json-stringify.jsx:5:9:5:14 | locale | json-stringify.jsx:11:51:11:56 | locale | provenance | | +| json-stringify.jsx:5:9:5:14 | locale | json-stringify.jsx:19:56:19:61 | locale | provenance | | +| json-stringify.jsx:5:9:5:14 | locale | json-stringify.jsx:31:55:31:60 | locale | provenance | | +| json-stringify.jsx:5:18:5:36 | req.param("locale") | json-stringify.jsx:5:9:5:14 | locale | provenance | | | json-stringify.jsx:11:51:11:56 | locale | json-stringify.jsx:35:40:35:61 | JSON.st ... jsonLD) | provenance | | | json-stringify.jsx:19:56:19:61 | locale | json-stringify.jsx:35:40:35:61 | JSON.st ... jsonLD) | provenance | | | json-stringify.jsx:31:55:31:60 | locale | json-stringify.jsx:31:40:31:61 | JSON.st ... locale) | provenance | | -| jwt-server.js:7:9:7:35 | taint | jwt-server.js:9:16:9:20 | taint | provenance | | -| jwt-server.js:7:17:7:35 | req.param("wobble") | jwt-server.js:7:9:7:35 | taint | provenance | | +| jwt-server.js:7:9:7:13 | taint | jwt-server.js:9:16:9:20 | taint | provenance | | +| jwt-server.js:7:17:7:35 | req.param("wobble") | jwt-server.js:7:9:7:13 | taint | provenance | | | jwt-server.js:9:16:9:20 | taint | jwt-server.js:9:55:9:61 | decoded | provenance | | | jwt-server.js:9:55:9:61 | decoded | jwt-server.js:10:19:10:25 | decoded | provenance | | | jwt-server.js:10:19:10:25 | decoded | jwt-server.js:10:19:10:29 | decoded.foo | provenance | | | nodemailer.js:13:50:13:66 | req.query.message | nodemailer.js:13:11:13:69 | `Hi, yo ... sage}.` | provenance | | -| optionalSanitizer.js:2:7:2:39 | target | optionalSanitizer.js:6:18:6:23 | target | provenance | | -| optionalSanitizer.js:2:7:2:39 | target | optionalSanitizer.js:8:17:8:22 | target | provenance | | -| optionalSanitizer.js:2:7:2:39 | target | optionalSanitizer.js:15:9:15:14 | target | provenance | | -| optionalSanitizer.js:2:16:2:39 | documen ... .search | optionalSanitizer.js:2:7:2:39 | target | provenance | | -| optionalSanitizer.js:8:7:8:22 | tainted | optionalSanitizer.js:9:18:9:24 | tainted | provenance | | -| optionalSanitizer.js:8:17:8:22 | target | optionalSanitizer.js:8:7:8:22 | tainted | provenance | | +| optionalSanitizer.js:2:7:2:12 | target | optionalSanitizer.js:6:18:6:23 | target | provenance | | +| optionalSanitizer.js:2:7:2:12 | target | optionalSanitizer.js:8:17:8:22 | target | provenance | | +| optionalSanitizer.js:2:7:2:12 | target | optionalSanitizer.js:15:9:15:14 | target | provenance | | +| optionalSanitizer.js:2:16:2:39 | documen ... .search | optionalSanitizer.js:2:7:2:12 | target | provenance | | +| optionalSanitizer.js:8:7:8:13 | tainted | optionalSanitizer.js:9:18:9:24 | tainted | provenance | | +| optionalSanitizer.js:8:17:8:22 | target | optionalSanitizer.js:8:7:8:13 | tainted | provenance | | | optionalSanitizer.js:15:9:15:14 | target | optionalSanitizer.js:16:18:16:18 | x | provenance | | | optionalSanitizer.js:16:18:16:18 | x | optionalSanitizer.js:17:20:17:20 | x | provenance | | -| optionalSanitizer.js:26:7:26:39 | target | optionalSanitizer.js:31:18:31:23 | target | provenance | | -| optionalSanitizer.js:26:7:26:39 | target | optionalSanitizer.js:38:18:38:23 | target | provenance | | -| optionalSanitizer.js:26:7:26:39 | target | optionalSanitizer.js:45:41:45:46 | target | provenance | | -| optionalSanitizer.js:26:7:26:39 | target | optionalSanitizer.js:45:51:45:56 | target | provenance | | -| optionalSanitizer.js:26:16:26:39 | documen ... .search | optionalSanitizer.js:26:7:26:39 | target | provenance | | +| optionalSanitizer.js:26:7:26:12 | target | optionalSanitizer.js:31:18:31:23 | target | provenance | | +| optionalSanitizer.js:26:7:26:12 | target | optionalSanitizer.js:38:18:38:23 | target | provenance | | +| optionalSanitizer.js:26:7:26:12 | target | optionalSanitizer.js:45:41:45:46 | target | provenance | | +| optionalSanitizer.js:26:7:26:12 | target | optionalSanitizer.js:45:51:45:56 | target | provenance | | +| optionalSanitizer.js:26:16:26:39 | documen ... .search | optionalSanitizer.js:26:7:26:12 | target | provenance | | | optionalSanitizer.js:28:24:28:24 | x | optionalSanitizer.js:29:12:29:12 | x | provenance | | -| optionalSanitizer.js:31:7:31:23 | tainted2 | optionalSanitizer.js:32:18:32:25 | tainted2 | provenance | | -| optionalSanitizer.js:31:7:31:23 | tainted2 | optionalSanitizer.js:34:28:34:35 | tainted2 | provenance | | -| optionalSanitizer.js:31:7:31:23 | tainted2 | optionalSanitizer.js:36:18:36:25 | tainted2 | provenance | | -| optionalSanitizer.js:31:18:31:23 | target | optionalSanitizer.js:31:7:31:23 | tainted2 | provenance | | -| optionalSanitizer.js:34:5:34:36 | tainted2 | optionalSanitizer.js:36:18:36:25 | tainted2 | provenance | | -| optionalSanitizer.js:34:16:34:36 | sanitiz ... inted2) | optionalSanitizer.js:34:5:34:36 | tainted2 | provenance | | +| optionalSanitizer.js:31:7:31:14 | tainted2 | optionalSanitizer.js:32:18:32:25 | tainted2 | provenance | | +| optionalSanitizer.js:31:7:31:14 | tainted2 | optionalSanitizer.js:34:28:34:35 | tainted2 | provenance | | +| optionalSanitizer.js:31:7:31:14 | tainted2 | optionalSanitizer.js:36:18:36:25 | tainted2 | provenance | | +| optionalSanitizer.js:31:18:31:23 | target | optionalSanitizer.js:31:7:31:14 | tainted2 | provenance | | +| optionalSanitizer.js:34:5:34:12 | tainted2 | optionalSanitizer.js:36:18:36:25 | tainted2 | provenance | | +| optionalSanitizer.js:34:16:34:36 | sanitiz ... inted2) | optionalSanitizer.js:34:5:34:12 | tainted2 | provenance | | | optionalSanitizer.js:34:28:34:35 | tainted2 | optionalSanitizer.js:28:24:28:24 | x | provenance | | | optionalSanitizer.js:34:28:34:35 | tainted2 | optionalSanitizer.js:34:16:34:36 | sanitiz ... inted2) | provenance | | -| optionalSanitizer.js:38:7:38:23 | tainted3 | optionalSanitizer.js:39:18:39:25 | tainted3 | provenance | | -| optionalSanitizer.js:38:7:38:23 | tainted3 | optionalSanitizer.js:41:28:41:35 | tainted3 | provenance | | -| optionalSanitizer.js:38:7:38:23 | tainted3 | optionalSanitizer.js:43:18:43:25 | tainted3 | provenance | | -| optionalSanitizer.js:38:18:38:23 | target | optionalSanitizer.js:38:7:38:23 | tainted3 | provenance | | -| optionalSanitizer.js:41:5:41:36 | tainted3 | optionalSanitizer.js:43:18:43:25 | tainted3 | provenance | | -| optionalSanitizer.js:41:16:41:36 | sanitiz ... inted3) | optionalSanitizer.js:41:5:41:36 | tainted3 | provenance | | +| optionalSanitizer.js:38:7:38:14 | tainted3 | optionalSanitizer.js:39:18:39:25 | tainted3 | provenance | | +| optionalSanitizer.js:38:7:38:14 | tainted3 | optionalSanitizer.js:41:28:41:35 | tainted3 | provenance | | +| optionalSanitizer.js:38:7:38:14 | tainted3 | optionalSanitizer.js:43:18:43:25 | tainted3 | provenance | | +| optionalSanitizer.js:38:18:38:23 | target | optionalSanitizer.js:38:7:38:14 | tainted3 | provenance | | +| optionalSanitizer.js:41:5:41:12 | tainted3 | optionalSanitizer.js:43:18:43:25 | tainted3 | provenance | | +| optionalSanitizer.js:41:16:41:36 | sanitiz ... inted3) | optionalSanitizer.js:41:5:41:12 | tainted3 | provenance | | | optionalSanitizer.js:41:28:41:35 | tainted3 | optionalSanitizer.js:28:24:28:24 | x | provenance | | | optionalSanitizer.js:41:28:41:35 | tainted3 | optionalSanitizer.js:41:16:41:36 | sanitiz ... inted3) | provenance | | | optionalSanitizer.js:45:29:45:47 | sanitizeBad(target) | optionalSanitizer.js:45:18:45:56 | sanitiz ... target | provenance | | @@ -439,8 +439,8 @@ edges | optionalSanitizer.js:45:51:45:56 | target | optionalSanitizer.js:45:18:45:56 | sanitiz ... target | provenance | | | pages/[id].jsx:3:30:3:35 | params [id] | pages/[id].jsx:13:44:13:49 | params [id] | provenance | | | pages/[id].jsx:3:30:3:35 | params [q] | pages/[id].jsx:16:44:16:49 | params [q] | provenance | | -| pages/[id].jsx:5:9:5:14 | { id } | pages/[id].jsx:5:9:5:29 | id | provenance | | -| pages/[id].jsx:5:9:5:29 | id | pages/[id].jsx:10:44:10:45 | id | provenance | | +| pages/[id].jsx:5:9:5:14 | { id } | pages/[id].jsx:5:11:5:12 | id | provenance | | +| pages/[id].jsx:5:11:5:12 | id | pages/[id].jsx:10:44:10:45 | id | provenance | | | pages/[id].jsx:5:18:5:29 | router.query | pages/[id].jsx:5:9:5:14 | { id } | provenance | | | pages/[id].jsx:13:44:13:49 | params [id] | pages/[id].jsx:13:44:13:52 | params.id | provenance | | | pages/[id].jsx:16:44:16:49 | params [q] | pages/[id].jsx:16:44:16:51 | params.q | provenance | | @@ -450,30 +450,30 @@ edges | pages/[id].jsx:25:11:25:33 | context ... d \|\| "" | pages/[id].jsx:24:12:27:5 | {\\n ... e\\n } [id] | provenance | | | pages/[id].jsx:26:10:26:22 | context.query | pages/[id].jsx:26:10:26:36 | context ... r \|\| "" | provenance | | | pages/[id].jsx:26:10:26:36 | context ... r \|\| "" | pages/[id].jsx:24:12:27:5 | {\\n ... e\\n } [q] | provenance | | -| react-native.js:7:7:7:33 | tainted | react-native.js:8:18:8:24 | tainted | provenance | | -| react-native.js:7:7:7:33 | tainted | react-native.js:9:27:9:33 | tainted | provenance | | -| react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:33 | tainted | provenance | | +| react-native.js:7:7:7:13 | tainted | react-native.js:8:18:8:24 | tainted | provenance | | +| react-native.js:7:7:7:13 | tainted | react-native.js:9:27:9:33 | tainted | provenance | | +| react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:13 | tainted | provenance | | | react-use-router.js:8:21:8:32 | router.query | react-use-router.js:8:21:8:39 | router.query.foobar | provenance | | | react-use-router.js:11:24:11:35 | router.query | react-use-router.js:11:24:11:42 | router.query.foobar | provenance | | | react-use-router.js:23:43:23:54 | router.query | react-use-router.js:23:43:23:61 | router.query.foobar | provenance | | | react-use-router.js:33:21:33:32 | router.query | react-use-router.js:33:21:33:39 | router.query.foobar | provenance | | -| react-use-state.js:4:9:4:49 | state | react-use-state.js:5:51:5:55 | state | provenance | | -| react-use-state.js:4:38:4:48 | window.name | react-use-state.js:4:9:4:49 | state | provenance | | -| react-use-state.js:9:9:9:43 | state | react-use-state.js:11:51:11:55 | state | provenance | | -| react-use-state.js:10:14:10:24 | window.name | react-use-state.js:9:9:9:43 | state | provenance | | -| react-use-state.js:15:9:15:43 | state | react-use-state.js:17:51:17:55 | state | provenance | | -| react-use-state.js:15:10:15:14 | state | react-use-state.js:15:9:15:43 | state | provenance | | +| react-use-state.js:4:10:4:14 | state | react-use-state.js:5:51:5:55 | state | provenance | | +| react-use-state.js:4:38:4:48 | window.name | react-use-state.js:4:10:4:14 | state | provenance | | +| react-use-state.js:9:10:9:14 | state | react-use-state.js:11:51:11:55 | state | provenance | | +| react-use-state.js:10:14:10:24 | window.name | react-use-state.js:9:10:9:14 | state | provenance | | +| react-use-state.js:15:10:15:14 | state | react-use-state.js:15:10:15:14 | state | provenance | | +| react-use-state.js:15:10:15:14 | state | react-use-state.js:17:51:17:55 | state | provenance | | | react-use-state.js:16:20:16:30 | window.name | react-use-state.js:15:10:15:14 | state | provenance | | | react-use-state.js:21:10:21:14 | state | react-use-state.js:22:14:22:17 | prev | provenance | | | react-use-state.js:22:14:22:17 | prev | react-use-state.js:23:35:23:38 | prev | provenance | | | react-use-state.js:25:20:25:30 | window.name | react-use-state.js:21:10:21:14 | state | provenance | | -| sanitiser.js:16:7:16:27 | tainted | sanitiser.js:23:29:23:35 | tainted | provenance | | -| sanitiser.js:16:7:16:27 | tainted | sanitiser.js:30:29:30:35 | tainted | provenance | | -| sanitiser.js:16:7:16:27 | tainted | sanitiser.js:33:29:33:35 | tainted | provenance | | -| sanitiser.js:16:7:16:27 | tainted | sanitiser.js:38:29:38:35 | tainted | provenance | | -| sanitiser.js:16:7:16:27 | tainted | sanitiser.js:45:29:45:35 | tainted | provenance | | -| sanitiser.js:16:7:16:27 | tainted | sanitiser.js:48:19:48:25 | tainted | provenance | | -| sanitiser.js:16:17:16:27 | window.name | sanitiser.js:16:7:16:27 | tainted | provenance | | +| sanitiser.js:16:7:16:13 | tainted | sanitiser.js:23:29:23:35 | tainted | provenance | | +| sanitiser.js:16:7:16:13 | tainted | sanitiser.js:30:29:30:35 | tainted | provenance | | +| sanitiser.js:16:7:16:13 | tainted | sanitiser.js:33:29:33:35 | tainted | provenance | | +| sanitiser.js:16:7:16:13 | tainted | sanitiser.js:38:29:38:35 | tainted | provenance | | +| sanitiser.js:16:7:16:13 | tainted | sanitiser.js:45:29:45:35 | tainted | provenance | | +| sanitiser.js:16:7:16:13 | tainted | sanitiser.js:48:19:48:25 | tainted | provenance | | +| sanitiser.js:16:17:16:27 | window.name | sanitiser.js:16:7:16:13 | tainted | provenance | | | sanitiser.js:23:29:23:35 | tainted | sanitiser.js:23:21:23:44 | '' + ... '' | provenance | | | sanitiser.js:30:29:30:35 | tainted | sanitiser.js:30:21:30:44 | '' + ... '' | provenance | | | sanitiser.js:33:29:33:35 | tainted | sanitiser.js:33:21:33:44 | '' + ... '' | provenance | | @@ -483,8 +483,8 @@ edges | stored-xss.js:2:39:2:62 | documen ... .search | stored-xss.js:5:20:5:52 | session ... ssion') | provenance | | | stored-xss.js:3:35:3:58 | documen ... .search | stored-xss.js:8:20:8:48 | localSt ... local') | provenance | | | stored-xss.js:3:35:3:58 | documen ... .search | stored-xss.js:10:16:10:44 | localSt ... local') | provenance | | -| stored-xss.js:10:9:10:44 | href | stored-xss.js:12:35:12:38 | href | provenance | | -| stored-xss.js:10:16:10:44 | localSt ... local') | stored-xss.js:10:9:10:44 | href | provenance | | +| stored-xss.js:10:9:10:12 | href | stored-xss.js:12:35:12:38 | href | provenance | | +| stored-xss.js:10:16:10:44 | localSt ... local') | stored-xss.js:10:9:10:12 | href | provenance | | | stored-xss.js:12:35:12:38 | href | stored-xss.js:12:20:12:54 | "" | provenance | | | stored-xss.js:12:35:12:38 | href | stored-xss.js:12:20:12:54 | "" | provenance | Config | | string-manipulations.js:5:16:5:37 | documen ... on.href | string-manipulations.js:5:16:5:47 | documen ... lueOf() | provenance | | @@ -494,24 +494,24 @@ edges | string-manipulations.js:9:36:9:57 | documen ... on.href | string-manipulations.js:9:16:9:58 | String. ... n.href) | provenance | | | string-manipulations.js:10:23:10:44 | documen ... on.href | string-manipulations.js:10:16:10:45 | String( ... n.href) | provenance | | | tainted-url-suffix-arguments.js:3:17:3:17 | y | tainted-url-suffix-arguments.js:6:22:6:22 | y | provenance | | -| tainted-url-suffix-arguments.js:11:11:11:36 | url | tainted-url-suffix-arguments.js:12:17:12:19 | url | provenance | | -| tainted-url-suffix-arguments.js:11:17:11:36 | window.location.href | tainted-url-suffix-arguments.js:11:11:11:36 | url | provenance | | +| tainted-url-suffix-arguments.js:11:11:11:13 | url | tainted-url-suffix-arguments.js:12:17:12:19 | url | provenance | | +| tainted-url-suffix-arguments.js:11:17:11:36 | window.location.href | tainted-url-suffix-arguments.js:11:11:11:13 | url | provenance | | | tainted-url-suffix-arguments.js:12:17:12:19 | url | tainted-url-suffix-arguments.js:3:17:3:17 | y | provenance | | -| tooltip.jsx:6:11:6:30 | source | tooltip.jsx:10:25:10:30 | source | provenance | | -| tooltip.jsx:6:11:6:30 | source | tooltip.jsx:11:25:11:30 | source | provenance | | -| tooltip.jsx:6:20:6:30 | window.name | tooltip.jsx:6:11:6:30 | source | provenance | | -| tooltip.jsx:17:11:17:33 | provide [source] | tooltip.jsx:18:51:18:57 | provide [source] | provenance | | -| tooltip.jsx:17:21:17:33 | props.provide [source] | tooltip.jsx:17:11:17:33 | provide [source] | provenance | | +| tooltip.jsx:6:11:6:16 | source | tooltip.jsx:10:25:10:30 | source | provenance | | +| tooltip.jsx:6:11:6:16 | source | tooltip.jsx:11:25:11:30 | source | provenance | | +| tooltip.jsx:6:20:6:30 | window.name | tooltip.jsx:6:11:6:16 | source | provenance | | +| tooltip.jsx:17:11:17:17 | provide [source] | tooltip.jsx:18:51:18:57 | provide [source] | provenance | | +| tooltip.jsx:17:21:17:33 | props.provide [source] | tooltip.jsx:17:11:17:17 | provide [source] | provenance | | | tooltip.jsx:18:51:18:57 | provide [source] | tooltip.jsx:18:51:18:59 | provide() | provenance | | | tooltip.jsx:18:51:18:57 | provide [source] | tooltip.jsx:23:38:23:43 | source | provenance | | -| tooltip.jsx:22:11:22:30 | source | tooltip.jsx:17:21:17:33 | props.provide [source] | provenance | | -| tooltip.jsx:22:20:22:30 | window.name | tooltip.jsx:22:11:22:30 | source | provenance | | -| translate.js:6:7:6:39 | target | translate.js:7:42:7:47 | target | provenance | | -| translate.js:6:16:6:39 | documen ... .search | translate.js:6:7:6:39 | target | provenance | | -| translate.js:7:7:7:61 | searchParams | translate.js:8:27:8:38 | searchParams | provenance | | -| translate.js:7:7:7:61 | searchParams [MapValue] | translate.js:8:27:8:38 | searchParams [MapValue] | provenance | | -| translate.js:7:22:7:61 | new URL ... ing(1)) | translate.js:7:7:7:61 | searchParams | provenance | | -| translate.js:7:22:7:61 | new URL ... ing(1)) [MapValue] | translate.js:7:7:7:61 | searchParams [MapValue] | provenance | | +| tooltip.jsx:22:11:22:16 | source | tooltip.jsx:17:21:17:33 | props.provide [source] | provenance | | +| tooltip.jsx:22:20:22:30 | window.name | tooltip.jsx:22:11:22:16 | source | provenance | | +| translate.js:6:7:6:12 | target | translate.js:7:42:7:47 | target | provenance | | +| translate.js:6:16:6:39 | documen ... .search | translate.js:6:7:6:12 | target | provenance | | +| translate.js:7:7:7:18 | searchParams | translate.js:8:27:8:38 | searchParams | provenance | | +| translate.js:7:7:7:18 | searchParams [MapValue] | translate.js:8:27:8:38 | searchParams [MapValue] | provenance | | +| translate.js:7:22:7:61 | new URL ... ing(1)) | translate.js:7:7:7:18 | searchParams | provenance | | +| translate.js:7:22:7:61 | new URL ... ing(1)) [MapValue] | translate.js:7:7:7:18 | searchParams [MapValue] | provenance | | | translate.js:7:42:7:47 | target | translate.js:7:42:7:60 | target.substring(1) | provenance | | | translate.js:7:42:7:47 | target | translate.js:7:42:7:60 | target.substring(1) | provenance | Config | | translate.js:7:42:7:47 | target | translate.js:7:42:7:60 | target.substring(1) | provenance | Config | @@ -538,32 +538,32 @@ edges | tst3.js:7:32:7:35 | data | tst3.js:7:32:7:37 | data.p | provenance | | | tst3.js:9:37:9:40 | data | tst3.js:9:37:9:42 | data.p | provenance | | | tst3.js:10:38:10:41 | data | tst3.js:10:38:10:43 | data.p | provenance | | -| tst.js:2:7:2:39 | target | tst.js:4:18:4:23 | target | provenance | | -| tst.js:2:7:2:39 | target | tst.js:9:28:9:33 | target | provenance | | -| tst.js:2:7:2:39 | target | tst.js:17:42:17:47 | target | provenance | | -| tst.js:2:16:2:39 | documen ... .search | tst.js:2:7:2:39 | target | provenance | | +| tst.js:2:7:2:12 | target | tst.js:4:18:4:23 | target | provenance | | +| tst.js:2:7:2:12 | target | tst.js:9:28:9:33 | target | provenance | | +| tst.js:2:7:2:12 | target | tst.js:17:42:17:47 | target | provenance | | +| tst.js:2:16:2:39 | documen ... .search | tst.js:2:7:2:12 | target | provenance | | | tst.js:6:37:6:58 | documen ... on.href | tst.js:6:37:6:114 | documen ... t=")+8) | provenance | | | tst.js:6:37:6:58 | documen ... on.href | tst.js:6:37:6:114 | documen ... t=")+8) | provenance | Config | | tst.js:6:37:6:114 | documen ... t=")+8) | tst.js:6:18:6:126 | "" | provenance | | | tst.js:6:37:6:114 | documen ... t=")+8) | tst.js:6:18:6:126 | "" | provenance | | | tst.js:6:37:6:114 | documen ... t=")+8) | tst.js:6:18:6:126 | "" | provenance | Config | | tst.js:9:28:9:33 | target | tst.js:9:5:9:42 | '
    ' | provenance | Config | -| tst.js:14:7:14:56 | params | tst.js:15:18:15:23 | params | provenance | | -| tst.js:14:7:14:56 | params [MapValue] | tst.js:15:18:15:23 | params [MapValue] | provenance | | +| tst.js:14:7:14:12 | params | tst.js:15:18:15:23 | params | provenance | | +| tst.js:14:7:14:12 | params [MapValue] | tst.js:15:18:15:23 | params [MapValue] | provenance | | | tst.js:14:16:14:43 | (new UR ... ation)) [searchParams, MapValue] | tst.js:14:16:14:56 | (new UR ... hParams [MapValue] | provenance | | | tst.js:14:16:14:43 | (new UR ... ation)) [searchParams] | tst.js:14:16:14:56 | (new UR ... hParams | provenance | | -| tst.js:14:16:14:56 | (new UR ... hParams | tst.js:14:7:14:56 | params | provenance | | -| tst.js:14:16:14:56 | (new UR ... hParams [MapValue] | tst.js:14:7:14:56 | params [MapValue] | provenance | | +| tst.js:14:16:14:56 | (new UR ... hParams | tst.js:14:7:14:12 | params | provenance | | +| tst.js:14:16:14:56 | (new UR ... hParams [MapValue] | tst.js:14:7:14:12 | params [MapValue] | provenance | | | tst.js:14:17:14:42 | new URL ... cation) [searchParams, MapValue] | tst.js:14:16:14:43 | (new UR ... ation)) [searchParams, MapValue] | provenance | | | tst.js:14:17:14:42 | new URL ... cation) [searchParams] | tst.js:14:16:14:43 | (new UR ... ation)) [searchParams] | provenance | | | tst.js:14:25:14:41 | document.location | tst.js:14:17:14:42 | new URL ... cation) [searchParams, MapValue] | provenance | | | tst.js:14:25:14:41 | document.location | tst.js:14:17:14:42 | new URL ... cation) [searchParams] | provenance | | | tst.js:15:18:15:23 | params | tst.js:15:18:15:35 | params.get('name') | provenance | Config | | tst.js:15:18:15:23 | params [MapValue] | tst.js:15:18:15:35 | params.get('name') | provenance | | -| tst.js:17:7:17:61 | searchParams | tst.js:18:18:18:29 | searchParams | provenance | | -| tst.js:17:7:17:61 | searchParams [MapValue] | tst.js:18:18:18:29 | searchParams [MapValue] | provenance | | -| tst.js:17:22:17:61 | new URL ... ing(1)) | tst.js:17:7:17:61 | searchParams | provenance | | -| tst.js:17:22:17:61 | new URL ... ing(1)) [MapValue] | tst.js:17:7:17:61 | searchParams [MapValue] | provenance | | +| tst.js:17:7:17:18 | searchParams | tst.js:18:18:18:29 | searchParams | provenance | | +| tst.js:17:7:17:18 | searchParams [MapValue] | tst.js:18:18:18:29 | searchParams [MapValue] | provenance | | +| tst.js:17:22:17:61 | new URL ... ing(1)) | tst.js:17:7:17:18 | searchParams | provenance | | +| tst.js:17:22:17:61 | new URL ... ing(1)) [MapValue] | tst.js:17:7:17:18 | searchParams [MapValue] | provenance | | | tst.js:17:42:17:47 | target | tst.js:17:42:17:60 | target.substring(1) | provenance | | | tst.js:17:42:17:47 | target | tst.js:17:42:17:60 | target.substring(1) | provenance | Config | | tst.js:17:42:17:47 | target | tst.js:17:42:17:60 | target.substring(1) | provenance | Config | @@ -613,31 +613,31 @@ edges | tst.js:58:1:58:27 | [,docum ... search] [1] | tst.js:58:46:58:46 | x | provenance | | | tst.js:58:3:58:26 | documen ... .search | tst.js:58:1:58:27 | [,docum ... search] [1] | provenance | | | tst.js:58:46:58:46 | x | tst.js:60:20:60:20 | x | provenance | | -| tst.js:93:7:93:44 | v | tst.js:95:18:95:18 | v | provenance | | -| tst.js:93:7:93:44 | v | tst.js:120:18:120:18 | v | provenance | | +| tst.js:93:7:93:7 | v | tst.js:95:18:95:18 | v | provenance | | +| tst.js:93:7:93:7 | v | tst.js:120:18:120:18 | v | provenance | | | tst.js:93:11:93:34 | documen ... .search | tst.js:93:11:93:44 | documen ... bstr(1) | provenance | | | tst.js:93:11:93:34 | documen ... .search | tst.js:93:11:93:44 | documen ... bstr(1) | provenance | Config | -| tst.js:93:11:93:44 | documen ... bstr(1) | tst.js:93:7:93:44 | v | provenance | | +| tst.js:93:11:93:44 | documen ... bstr(1) | tst.js:93:7:93:7 | v | provenance | | | tst.js:132:29:132:50 | window. ... .search | tst.js:135:29:135:29 | v | provenance | | | tst.js:135:29:135:29 | v | tst.js:135:49:135:49 | v | provenance | | | tst.js:142:40:142:61 | window. ... .search | tst.js:139:29:139:46 | xssSourceService() | provenance | | -| tst.js:161:9:161:41 | target | tst.js:164:28:164:33 | target | provenance | | -| tst.js:161:18:161:41 | documen ... .search | tst.js:161:9:161:41 | target | provenance | | -| tst.js:168:9:168:42 | tainted | tst.js:170:31:170:37 | tainted | provenance | | -| tst.js:168:9:168:42 | tainted | tst.js:172:42:172:48 | tainted | provenance | | -| tst.js:168:9:168:42 | tainted | tst.js:173:33:173:39 | tainted | provenance | | -| tst.js:168:9:168:42 | tainted | tst.js:175:54:175:60 | tainted | provenance | | -| tst.js:168:9:168:42 | tainted | tst.js:176:45:176:51 | tainted | provenance | | -| tst.js:168:9:168:42 | tainted | tst.js:177:49:177:55 | tainted | provenance | | -| tst.js:168:19:168:42 | documen ... .search | tst.js:168:9:168:42 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:183:67:183:73 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:184:67:184:73 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:220:35:220:41 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:222:20:222:26 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:224:23:224:29 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:225:23:225:29 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:239:23:239:29 | tainted | provenance | | -| tst.js:181:19:181:42 | documen ... .search | tst.js:181:9:181:42 | tainted | provenance | | +| tst.js:161:9:161:14 | target | tst.js:164:28:164:33 | target | provenance | | +| tst.js:161:18:161:41 | documen ... .search | tst.js:161:9:161:14 | target | provenance | | +| tst.js:168:9:168:15 | tainted | tst.js:170:31:170:37 | tainted | provenance | | +| tst.js:168:9:168:15 | tainted | tst.js:172:42:172:48 | tainted | provenance | | +| tst.js:168:9:168:15 | tainted | tst.js:173:33:173:39 | tainted | provenance | | +| tst.js:168:9:168:15 | tainted | tst.js:175:54:175:60 | tainted | provenance | | +| tst.js:168:9:168:15 | tainted | tst.js:176:45:176:51 | tainted | provenance | | +| tst.js:168:9:168:15 | tainted | tst.js:177:49:177:55 | tainted | provenance | | +| tst.js:168:19:168:42 | documen ... .search | tst.js:168:9:168:15 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:183:67:183:73 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:184:67:184:73 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:220:35:220:41 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:222:20:222:26 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:224:23:224:29 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:225:23:225:29 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:239:23:239:29 | tainted | provenance | | +| tst.js:181:19:181:42 | documen ... .search | tst.js:181:9:181:15 | tainted | provenance | | | tst.js:183:67:183:73 | tainted | tst.js:184:67:184:73 | tainted | provenance | | | tst.js:184:67:184:73 | tainted | tst.js:188:35:188:41 | tainted | provenance | | | tst.js:184:67:184:73 | tainted | tst.js:190:46:190:52 | tainted | provenance | | @@ -658,8 +658,8 @@ edges | tst.js:225:23:225:29 | tainted | tst.js:239:23:239:29 | tainted | provenance | | | tst.js:231:39:231:55 | props.propTainted | tst.js:235:60:235:82 | this.st ... Tainted | provenance | | | tst.js:239:23:239:29 | tainted | tst.js:231:39:231:55 | props.propTainted | provenance | | -| tst.js:269:9:269:29 | tainted | tst.js:272:59:272:65 | tainted | provenance | | -| tst.js:269:19:269:29 | window.name | tst.js:269:9:269:29 | tainted | provenance | | +| tst.js:269:9:269:15 | tainted | tst.js:272:59:272:65 | tainted | provenance | | +| tst.js:269:19:269:29 | window.name | tst.js:269:9:269:15 | tainted | provenance | | | tst.js:285:9:285:16 | location | tst.js:286:10:286:10 | e | provenance | | | tst.js:286:10:286:10 | e | tst.js:287:20:287:20 | e | provenance | | | tst.js:292:10:292:17 | location | tst.js:294:10:294:10 | e | provenance | | @@ -668,34 +668,34 @@ edges | tst.js:311:10:311:35 | new URL ... cation) [searchParams] | tst.js:315:16:315:30 | getTaintedUrl() [searchParams] | provenance | | | tst.js:311:18:311:34 | document.location | tst.js:311:10:311:35 | new URL ... cation) [searchParams, MapValue] | provenance | | | tst.js:311:18:311:34 | document.location | tst.js:311:10:311:35 | new URL ... cation) [searchParams] | provenance | | -| tst.js:315:7:315:43 | params | tst.js:316:18:316:23 | params | provenance | | -| tst.js:315:7:315:43 | params [MapValue] | tst.js:316:18:316:23 | params [MapValue] | provenance | | +| tst.js:315:7:315:12 | params | tst.js:316:18:316:23 | params | provenance | | +| tst.js:315:7:315:12 | params [MapValue] | tst.js:316:18:316:23 | params [MapValue] | provenance | | | tst.js:315:16:315:30 | getTaintedUrl() [searchParams, MapValue] | tst.js:315:16:315:43 | getTain ... hParams [MapValue] | provenance | | | tst.js:315:16:315:30 | getTaintedUrl() [searchParams] | tst.js:315:16:315:43 | getTain ... hParams | provenance | | -| tst.js:315:16:315:43 | getTain ... hParams | tst.js:315:7:315:43 | params | provenance | | -| tst.js:315:16:315:43 | getTain ... hParams [MapValue] | tst.js:315:7:315:43 | params [MapValue] | provenance | | +| tst.js:315:16:315:43 | getTain ... hParams | tst.js:315:7:315:12 | params | provenance | | +| tst.js:315:16:315:43 | getTain ... hParams [MapValue] | tst.js:315:7:315:12 | params [MapValue] | provenance | | | tst.js:316:18:316:23 | params | tst.js:316:18:316:35 | params.get('name') | provenance | Config | | tst.js:316:18:316:23 | params [MapValue] | tst.js:316:18:316:35 | params.get('name') | provenance | | | tst.js:325:12:325:37 | new URL ... cation) [hash] | tst.js:327:5:327:12 | getUrl() [hash] | provenance | | | tst.js:325:20:325:36 | document.location | tst.js:325:12:325:37 | new URL ... cation) [hash] | provenance | | | tst.js:327:5:327:12 | getUrl() [hash] | tst.js:327:5:327:17 | getUrl().hash | provenance | | | tst.js:327:5:327:17 | getUrl().hash | tst.js:327:5:327:30 | getUrl( ... ring(1) | provenance | Config | -| tst.js:332:7:332:39 | target | tst.js:333:12:333:17 | target | provenance | | -| tst.js:332:16:332:39 | documen ... .search | tst.js:332:7:332:39 | target | provenance | | -| tst.js:339:10:339:42 | target | tst.js:340:16:340:21 | target | provenance | | -| tst.js:339:10:339:42 | target | tst.js:341:20:341:25 | target | provenance | | -| tst.js:339:19:339:42 | documen ... .search | tst.js:339:10:339:42 | target | provenance | | +| tst.js:332:7:332:12 | target | tst.js:333:12:333:17 | target | provenance | | +| tst.js:332:16:332:39 | documen ... .search | tst.js:332:7:332:12 | target | provenance | | +| tst.js:339:10:339:15 | target | tst.js:340:16:340:21 | target | provenance | | +| tst.js:339:10:339:15 | target | tst.js:341:20:341:25 | target | provenance | | +| tst.js:339:19:339:42 | documen ... .search | tst.js:339:10:339:15 | target | provenance | | | tst.js:340:16:340:21 | target | tst.js:341:20:341:25 | target | provenance | | | tst.js:341:20:341:25 | target | tst.js:344:21:344:26 | target | provenance | | | tst.js:341:20:341:25 | target | tst.js:347:18:347:23 | target | provenance | | -| tst.js:355:7:355:39 | target | tst.js:357:18:357:23 | target | provenance | | -| tst.js:355:16:355:39 | documen ... .search | tst.js:355:7:355:39 | target | provenance | | -| tst.js:364:7:364:39 | target | tst.js:367:18:367:23 | target | provenance | | -| tst.js:364:7:364:39 | target | tst.js:369:18:369:23 | target | provenance | | -| tst.js:364:7:364:39 | target | tst.js:380:18:380:23 | target | provenance | | -| tst.js:364:7:364:39 | target | tst.js:389:18:389:23 | target | provenance | | -| tst.js:364:7:364:39 | target | tst.js:391:19:391:24 | target | provenance | | -| tst.js:364:16:364:39 | documen ... .search | tst.js:364:7:364:39 | target | provenance | | +| tst.js:355:7:355:12 | target | tst.js:357:18:357:23 | target | provenance | | +| tst.js:355:16:355:39 | documen ... .search | tst.js:355:7:355:12 | target | provenance | | +| tst.js:364:7:364:12 | target | tst.js:367:18:367:23 | target | provenance | | +| tst.js:364:7:364:12 | target | tst.js:369:18:369:23 | target | provenance | | +| tst.js:364:7:364:12 | target | tst.js:380:18:380:23 | target | provenance | | +| tst.js:364:7:364:12 | target | tst.js:389:18:389:23 | target | provenance | | +| tst.js:364:7:364:12 | target | tst.js:391:19:391:24 | target | provenance | | +| tst.js:364:16:364:39 | documen ... .search | tst.js:364:7:364:12 | target | provenance | | | tst.js:369:18:369:23 | target | tst.js:369:18:369:29 | target.taint | provenance | | | tst.js:374:3:374:8 | [post update] target [taint3] | tst.js:375:18:375:23 | target [taint3] | provenance | | | tst.js:374:19:374:42 | documen ... .search | tst.js:374:3:374:8 | [post update] target [taint3] | provenance | | @@ -708,64 +708,64 @@ edges | tst.js:391:19:391:24 | target [taint8] | tst.js:391:19:391:31 | target.taint8 | provenance | | | tst.js:391:19:391:31 | target.taint8 | tst.js:391:3:391:8 | [post update] target [taint8] | provenance | | | tst.js:392:18:392:23 | target [taint8] | tst.js:392:18:392:30 | target.taint8 | provenance | | -| tst.js:399:7:399:46 | payload | tst.js:400:18:400:24 | payload | provenance | | +| tst.js:399:7:399:13 | payload | tst.js:400:18:400:24 | payload | provenance | | | tst.js:399:17:399:36 | window.location.hash | tst.js:399:17:399:46 | window. ... bstr(1) | provenance | | | tst.js:399:17:399:36 | window.location.hash | tst.js:399:17:399:46 | window. ... bstr(1) | provenance | Config | -| tst.js:399:17:399:46 | window. ... bstr(1) | tst.js:399:7:399:46 | payload | provenance | | -| tst.js:402:7:402:55 | match | tst.js:404:20:404:24 | match | provenance | | +| tst.js:399:17:399:46 | window. ... bstr(1) | tst.js:399:7:399:13 | payload | provenance | | +| tst.js:402:7:402:11 | match | tst.js:404:20:404:24 | match | provenance | | | tst.js:402:15:402:34 | window.location.hash | tst.js:402:15:402:55 | window. ... (\\w+)/) | provenance | | -| tst.js:402:15:402:55 | window. ... (\\w+)/) | tst.js:402:7:402:55 | match | provenance | | +| tst.js:402:15:402:55 | window. ... (\\w+)/) | tst.js:402:7:402:11 | match | provenance | | | tst.js:404:20:404:24 | match | tst.js:404:20:404:27 | match[1] | provenance | | | tst.js:407:18:407:37 | window.location.hash | tst.js:407:18:407:48 | window. ... it('#') [1] | provenance | Config | | tst.js:407:18:407:48 | window. ... it('#') [1] | tst.js:407:18:407:51 | window. ... '#')[1] | provenance | | -| tst.js:411:7:411:39 | target | tst.js:413:18:413:23 | target | provenance | | -| tst.js:411:16:411:39 | documen ... .search | tst.js:411:7:411:39 | target | provenance | | +| tst.js:411:7:411:12 | target | tst.js:413:18:413:23 | target | provenance | | +| tst.js:411:16:411:39 | documen ... .search | tst.js:411:7:411:12 | target | provenance | | | tst.js:413:18:413:23 | target | tst.js:413:18:413:89 | target. ... data>') | provenance | | -| tst.js:419:6:419:38 | source | tst.js:423:28:423:33 | source | provenance | | -| tst.js:419:6:419:38 | source | tst.js:424:33:424:38 | source | provenance | | -| tst.js:419:6:419:38 | source | tst.js:425:34:425:39 | source | provenance | | -| tst.js:419:6:419:38 | source | tst.js:426:41:426:46 | source | provenance | | -| tst.js:419:6:419:38 | source | tst.js:427:44:427:49 | source | provenance | | -| tst.js:419:6:419:38 | source | tst.js:428:32:428:37 | source | provenance | | -| tst.js:419:15:419:38 | documen ... .search | tst.js:419:6:419:38 | source | provenance | | -| tst.js:436:7:436:39 | source | tst.js:438:18:438:23 | source | provenance | | -| tst.js:436:7:436:39 | source | tst.js:439:36:439:41 | source | provenance | | -| tst.js:436:16:436:39 | documen ... .search | tst.js:436:7:436:39 | source | provenance | | +| tst.js:419:6:419:11 | source | tst.js:423:28:423:33 | source | provenance | | +| tst.js:419:6:419:11 | source | tst.js:424:33:424:38 | source | provenance | | +| tst.js:419:6:419:11 | source | tst.js:425:34:425:39 | source | provenance | | +| tst.js:419:6:419:11 | source | tst.js:426:41:426:46 | source | provenance | | +| tst.js:419:6:419:11 | source | tst.js:427:44:427:49 | source | provenance | | +| tst.js:419:6:419:11 | source | tst.js:428:32:428:37 | source | provenance | | +| tst.js:419:15:419:38 | documen ... .search | tst.js:419:6:419:11 | source | provenance | | +| tst.js:436:7:436:12 | source | tst.js:438:18:438:23 | source | provenance | | +| tst.js:436:7:436:12 | source | tst.js:439:36:439:41 | source | provenance | | +| tst.js:436:16:436:39 | documen ... .search | tst.js:436:7:436:12 | source | provenance | | | tst.js:439:36:439:41 | source | tst.js:439:18:439:42 | ansiToH ... source) | provenance | | -| tst.js:443:6:443:38 | source | tst.js:446:21:446:26 | source | provenance | | -| tst.js:443:6:443:38 | source | tst.js:448:19:448:24 | source | provenance | | -| tst.js:443:6:443:38 | source | tst.js:450:20:450:25 | source | provenance | | -| tst.js:443:15:443:38 | documen ... .search | tst.js:443:6:443:38 | source | provenance | | -| tst.js:454:7:454:46 | url | tst.js:456:19:456:21 | url | provenance | | -| tst.js:454:7:454:46 | url | tst.js:457:26:457:28 | url | provenance | | -| tst.js:454:7:454:46 | url | tst.js:458:25:458:27 | url | provenance | | -| tst.js:454:7:454:46 | url | tst.js:459:20:459:22 | url | provenance | | -| tst.js:454:7:454:46 | url | tst.js:469:22:469:24 | url | provenance | | +| tst.js:443:6:443:11 | source | tst.js:446:21:446:26 | source | provenance | | +| tst.js:443:6:443:11 | source | tst.js:448:19:448:24 | source | provenance | | +| tst.js:443:6:443:11 | source | tst.js:450:20:450:25 | source | provenance | | +| tst.js:443:15:443:38 | documen ... .search | tst.js:443:6:443:11 | source | provenance | | +| tst.js:454:7:454:9 | url | tst.js:456:19:456:21 | url | provenance | | +| tst.js:454:7:454:9 | url | tst.js:457:26:457:28 | url | provenance | | +| tst.js:454:7:454:9 | url | tst.js:458:25:458:27 | url | provenance | | +| tst.js:454:7:454:9 | url | tst.js:459:20:459:22 | url | provenance | | +| tst.js:454:7:454:9 | url | tst.js:469:22:469:24 | url | provenance | | | tst.js:454:13:454:36 | documen ... .search | tst.js:454:13:454:46 | documen ... bstr(1) | provenance | Config | -| tst.js:454:13:454:46 | documen ... bstr(1) | tst.js:454:7:454:46 | url | provenance | | +| tst.js:454:13:454:46 | documen ... bstr(1) | tst.js:454:7:454:9 | url | provenance | | | tst.js:474:23:474:35 | location.hash | tst.js:474:23:474:45 | locatio ... bstr(1) | provenance | Config | | tst.js:477:18:477:30 | location.hash | tst.js:477:18:477:40 | locatio ... bstr(1) | provenance | Config | | tst.js:484:43:484:62 | window.location.hash | tst.js:484:33:484:63 | decodeU ... n.hash) | provenance | | -| tst.js:491:7:491:39 | target | tst.js:492:18:492:23 | target | provenance | | -| tst.js:491:16:491:39 | documen ... .search | tst.js:491:7:491:39 | target | provenance | | +| tst.js:491:7:491:12 | target | tst.js:492:18:492:23 | target | provenance | | +| tst.js:491:16:491:39 | documen ... .search | tst.js:491:7:491:12 | target | provenance | | | tst.js:492:18:492:23 | target | tst.js:492:18:492:54 | target. ... "), '') | provenance | | -| tst.js:498:7:498:26 | source | tst.js:499:27:499:32 | source | provenance | | -| tst.js:498:16:498:26 | window.name | tst.js:498:7:498:26 | source | provenance | | +| tst.js:498:7:498:12 | source | tst.js:499:27:499:32 | source | provenance | | +| tst.js:498:16:498:26 | window.name | tst.js:498:7:498:12 | source | provenance | | | tst.js:499:27:499:32 | source | tst.js:499:18:499:33 | unescape(source) | provenance | | -| typeahead.js:20:13:20:45 | target | typeahead.js:21:12:21:17 | target | provenance | | -| typeahead.js:20:22:20:45 | documen ... .search | typeahead.js:20:13:20:45 | target | provenance | | +| typeahead.js:20:13:20:18 | target | typeahead.js:21:12:21:17 | target | provenance | | +| typeahead.js:20:22:20:45 | documen ... .search | typeahead.js:20:13:20:18 | target | provenance | | | typeahead.js:21:12:21:17 | target | typeahead.js:24:30:24:32 | val | provenance | | | typeahead.js:24:30:24:32 | val | typeahead.js:25:18:25:20 | val | provenance | | | v-html.vue:6:42:6:58 | document.location | v-html.vue:2:8:2:23 | v-html=tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:4:14:4:20 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:5:12:5:18 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:6:19:6:25 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:7:14:7:20 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:9:19:9:25 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:10:16:10:22 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:11:24:11:30 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:12:19:12:25 | tainted | provenance | | -| various-concat-obfuscations.js:2:16:2:39 | documen ... .search | various-concat-obfuscations.js:2:6:2:39 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:4:14:4:20 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:5:12:5:18 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:6:19:6:25 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:7:14:7:20 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:9:19:9:25 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:10:16:10:22 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:11:24:11:30 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:12:19:12:25 | tainted | provenance | | +| various-concat-obfuscations.js:2:16:2:39 | documen ... .search | various-concat-obfuscations.js:2:6:2:12 | tainted | provenance | | | various-concat-obfuscations.js:4:14:4:20 | tainted | various-concat-obfuscations.js:4:4:4:31 | "
    " ...
    " | provenance | Config | | various-concat-obfuscations.js:5:12:5:18 | tainted | various-concat-obfuscations.js:5:4:5:26 | `
    $ ...
    ` | provenance | Config | | various-concat-obfuscations.js:6:4:6:26 | "
    " ... ainted) | various-concat-obfuscations.js:6:4:6:43 | "
    " ... /div>") | provenance | | @@ -795,17 +795,17 @@ edges | various-concat-obfuscations.js:21:17:21:40 | documen ... .search | various-concat-obfuscations.js:21:17:21:46 | documen ... h.attrs | provenance | | | various-concat-obfuscations.js:21:17:21:46 | documen ... h.attrs | various-concat-obfuscations.js:17:24:17:28 | attrs | provenance | | | various-concat-obfuscations.js:21:17:21:46 | documen ... h.attrs | various-concat-obfuscations.js:21:4:21:47 | indirec ... .attrs) | provenance | Config | -| winjs.js:2:7:2:53 | tainted | winjs.js:3:43:3:49 | tainted | provenance | | -| winjs.js:2:7:2:53 | tainted | winjs.js:4:43:4:49 | tainted | provenance | | +| winjs.js:2:7:2:13 | tainted | winjs.js:3:43:3:49 | tainted | provenance | | +| winjs.js:2:7:2:13 | tainted | winjs.js:4:43:4:49 | tainted | provenance | | | winjs.js:2:17:2:40 | documen ... .search | winjs.js:2:17:2:53 | documen ... ring(1) | provenance | | | winjs.js:2:17:2:40 | documen ... .search | winjs.js:2:17:2:53 | documen ... ring(1) | provenance | Config | -| winjs.js:2:17:2:53 | documen ... ring(1) | winjs.js:2:7:2:53 | tainted | provenance | | +| winjs.js:2:17:2:53 | documen ... ring(1) | winjs.js:2:7:2:13 | tainted | provenance | | nodes | addEventListener.js:1:43:1:47 | event | semmle.label | event | | addEventListener.js:2:20:2:24 | event | semmle.label | event | | addEventListener.js:2:20:2:29 | event.data | semmle.label | event.data | -| addEventListener.js:5:43:5:48 | data | semmle.label | data | | addEventListener.js:5:43:5:48 | {data} | semmle.label | {data} | +| addEventListener.js:5:44:5:47 | data | semmle.label | data | | addEventListener.js:6:20:6:23 | data | semmle.label | data | | addEventListener.js:10:21:10:25 | event | semmle.label | event | | addEventListener.js:12:24:12:28 | event | semmle.label | event | @@ -855,19 +855,19 @@ nodes | classnames.js:17:32:17:79 | `` | semmle.label | `` | | classnames.js:17:48:17:64 | clsx(window.name) | semmle.label | clsx(window.name) | | classnames.js:17:53:17:63 | window.name | semmle.label | window.name | -| clipboard.ts:8:11:8:51 | html | semmle.label | html | +| clipboard.ts:8:11:8:14 | html | semmle.label | html | | clipboard.ts:8:18:8:51 | clipboa ... /html') | semmle.label | clipboa ... /html') | | clipboard.ts:15:25:15:28 | html | semmle.label | html | | clipboard.ts:24:23:24:58 | e.clipb ... /html') | semmle.label | e.clipb ... /html') | | clipboard.ts:29:19:29:54 | e.clipb ... /html') | semmle.label | e.clipb ... /html') | | clipboard.ts:33:19:33:68 | e.origi ... /html') | semmle.label | e.origi ... /html') | -| clipboard.ts:43:15:43:55 | html | semmle.label | html | +| clipboard.ts:43:15:43:18 | html | semmle.label | html | | clipboard.ts:43:22:43:55 | clipboa ... /html') | semmle.label | clipboa ... /html') | | clipboard.ts:50:29:50:32 | html | semmle.label | html | -| clipboard.ts:71:13:71:62 | droppedHtml | semmle.label | droppedHtml | +| clipboard.ts:71:13:71:23 | droppedHtml | semmle.label | droppedHtml | | clipboard.ts:71:27:71:62 | e.clipb ... /html') | semmle.label | e.clipb ... /html') | | clipboard.ts:73:29:73:39 | droppedHtml | semmle.label | droppedHtml | -| clipboard.ts:98:15:98:54 | html | semmle.label | html | +| clipboard.ts:98:15:98:18 | html | semmle.label | html | | clipboard.ts:98:22:98:54 | dataTra ... /html') | semmle.label | dataTra ... /html') | | clipboard.ts:99:23:99:26 | html | semmle.label | html | | custom-element.js:5:26:5:36 | window.name | semmle.label | window.name | @@ -876,7 +876,7 @@ nodes | d3.js:12:20:12:29 | getTaint() | semmle.label | getTaint() | | d3.js:14:20:14:29 | getTaint() | semmle.label | getTaint() | | d3.js:21:15:21:24 | getTaint() | semmle.label | getTaint() | -| dates.js:9:9:9:69 | taint | semmle.label | taint | +| dates.js:9:9:9:13 | taint | semmle.label | taint | | dates.js:9:17:9:69 | decodeU ... ing(1)) | semmle.label | decodeU ... ing(1)) | | dates.js:9:36:9:55 | window.location.hash | semmle.label | window.location.hash | | dates.js:9:36:9:68 | window. ... ring(1) | semmle.label | window. ... ring(1) | @@ -898,7 +898,7 @@ nodes | dates.js:21:31:21:68 | `Time i ... aint)}` | semmle.label | `Time i ... aint)}` | | dates.js:21:42:21:66 | dayjs(t ... (taint) | semmle.label | dayjs(t ... (taint) | | dates.js:21:61:21:65 | taint | semmle.label | taint | -| dates.js:30:9:30:69 | taint | semmle.label | taint | +| dates.js:30:9:30:13 | taint | semmle.label | taint | | dates.js:30:17:30:69 | decodeU ... ing(1)) | semmle.label | decodeU ... ing(1)) | | dates.js:30:36:30:55 | window.location.hash | semmle.label | window.location.hash | | dates.js:30:36:30:68 | window. ... ring(1) | semmle.label | window. ... ring(1) | @@ -914,7 +914,7 @@ nodes | dates.js:40:31:40:84 | `Time i ... aint)}` | semmle.label | `Time i ... aint)}` | | dates.js:40:42:40:82 | dayjs.f ... taint) | semmle.label | dayjs.f ... taint) | | dates.js:40:77:40:81 | taint | semmle.label | taint | -| dates.js:46:9:46:69 | taint | semmle.label | taint | +| dates.js:46:9:46:13 | taint | semmle.label | taint | | dates.js:46:17:46:69 | decodeU ... ing(1)) | semmle.label | decodeU ... ing(1)) | | dates.js:46:36:46:55 | window.location.hash | semmle.label | window.location.hash | | dates.js:46:36:46:68 | window. ... ring(1) | semmle.label | window. ... ring(1) | @@ -927,7 +927,7 @@ nodes | dates.js:50:31:50:104 | `Time i ... aint)}` | semmle.label | `Time i ... aint)}` | | dates.js:50:42:50:102 | DateTim ... (taint) | semmle.label | DateTim ... (taint) | | dates.js:50:97:50:101 | taint | semmle.label | taint | -| dates.js:54:9:54:69 | taint | semmle.label | taint | +| dates.js:54:9:54:13 | taint | semmle.label | taint | | dates.js:54:17:54:69 | decodeU ... ing(1)) | semmle.label | decodeU ... ing(1)) | | dates.js:54:36:54:55 | window.location.hash | semmle.label | window.location.hash | | dates.js:54:36:54:68 | window. ... ring(1) | semmle.label | window. ... ring(1) | @@ -941,16 +941,16 @@ nodes | dates.js:61:42:61:86 | dayjs.s ... (taint) | semmle.label | dayjs.s ... (taint) | | dates.js:61:81:61:85 | taint | semmle.label | taint | | dom.js:4:20:4:30 | window.name | semmle.label | window.name | -| dragAndDrop.ts:8:11:8:50 | html | semmle.label | html | +| dragAndDrop.ts:8:11:8:14 | html | semmle.label | html | | dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | semmle.label | dataTra ... /html') | | dragAndDrop.ts:15:25:15:28 | html | semmle.label | html | | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | semmle.label | e.dataT ... /html') | | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | semmle.label | e.dataT ... /html') | | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | semmle.label | e.origi ... /html') | -| dragAndDrop.ts:43:15:43:54 | html | semmle.label | html | +| dragAndDrop.ts:43:15:43:18 | html | semmle.label | html | | dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | semmle.label | dataTra ... /html') | | dragAndDrop.ts:50:29:50:32 | html | semmle.label | html | -| dragAndDrop.ts:71:13:71:61 | droppedHtml | semmle.label | droppedHtml | +| dragAndDrop.ts:71:13:71:23 | droppedHtml | semmle.label | droppedHtml | | dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | semmle.label | e.dataT ... /html') | | dragAndDrop.ts:73:29:73:39 | droppedHtml | semmle.label | droppedHtml | | event-handler-receiver.js:2:31:2:83 | '

    ' | semmle.label | '

    ' | @@ -958,7 +958,7 @@ nodes | express.js:6:15:6:33 | req.param("wobble") | semmle.label | req.param("wobble") | | jquery-declare-any.ts:6:7:6:17 | window.name | semmle.label | window.name | | jquery-declare-type.ts:6:7:6:17 | window.name | semmle.label | window.name | -| jquery.js:2:7:2:40 | tainted | semmle.label | tainted | +| jquery.js:2:7:2:13 | tainted | semmle.label | tainted | | jquery.js:2:17:2:40 | documen ... .search | semmle.label | documen ... .search | | jquery.js:4:5:4:11 | tainted | semmle.label | tainted | | jquery.js:5:13:5:19 | tainted | semmle.label | tainted | @@ -977,7 +977,7 @@ nodes | jquery.js:16:19:16:64 | decodeU ... ring()) | semmle.label | decodeU ... ring()) | | jquery.js:16:38:16:52 | window.location | semmle.label | window.location | | jquery.js:16:38:16:63 | window. ... tring() | semmle.label | window. ... tring() | -| jquery.js:18:7:18:33 | hash | semmle.label | hash | +| jquery.js:18:7:18:10 | hash | semmle.label | hash | | jquery.js:18:14:18:33 | window.location.hash | semmle.label | window.location.hash | | jquery.js:21:5:21:8 | hash | semmle.label | hash | | jquery.js:21:5:21:21 | hash.substring(1) | semmle.label | hash.substring(1) | @@ -996,14 +996,14 @@ nodes | jquery.js:36:25:36:31 | tainted | semmle.label | tainted | | jquery.js:37:25:37:37 | () => tainted | semmle.label | () => tainted | | jquery.js:37:31:37:37 | tainted | semmle.label | tainted | -| json-stringify.jsx:5:9:5:36 | locale | semmle.label | locale | +| json-stringify.jsx:5:9:5:14 | locale | semmle.label | locale | | json-stringify.jsx:5:18:5:36 | req.param("locale") | semmle.label | req.param("locale") | | json-stringify.jsx:11:51:11:56 | locale | semmle.label | locale | | json-stringify.jsx:19:56:19:61 | locale | semmle.label | locale | | json-stringify.jsx:31:40:31:61 | JSON.st ... locale) | semmle.label | JSON.st ... locale) | | json-stringify.jsx:31:55:31:60 | locale | semmle.label | locale | | json-stringify.jsx:35:40:35:61 | JSON.st ... jsonLD) | semmle.label | JSON.st ... jsonLD) | -| jwt-server.js:7:9:7:35 | taint | semmle.label | taint | +| jwt-server.js:7:9:7:13 | taint | semmle.label | taint | | jwt-server.js:7:17:7:35 | req.param("wobble") | semmle.label | req.param("wobble") | | jwt-server.js:9:16:9:20 | taint | semmle.label | taint | | jwt-server.js:9:55:9:61 | decoded | semmle.label | decoded | @@ -1011,30 +1011,30 @@ nodes | jwt-server.js:10:19:10:29 | decoded.foo | semmle.label | decoded.foo | | nodemailer.js:13:11:13:69 | `Hi, yo ... sage}.` | semmle.label | `Hi, yo ... sage}.` | | nodemailer.js:13:50:13:66 | req.query.message | semmle.label | req.query.message | -| optionalSanitizer.js:2:7:2:39 | target | semmle.label | target | +| optionalSanitizer.js:2:7:2:12 | target | semmle.label | target | | optionalSanitizer.js:2:16:2:39 | documen ... .search | semmle.label | documen ... .search | | optionalSanitizer.js:6:18:6:23 | target | semmle.label | target | -| optionalSanitizer.js:8:7:8:22 | tainted | semmle.label | tainted | +| optionalSanitizer.js:8:7:8:13 | tainted | semmle.label | tainted | | optionalSanitizer.js:8:17:8:22 | target | semmle.label | target | | optionalSanitizer.js:9:18:9:24 | tainted | semmle.label | tainted | | optionalSanitizer.js:15:9:15:14 | target | semmle.label | target | | optionalSanitizer.js:16:18:16:18 | x | semmle.label | x | | optionalSanitizer.js:17:20:17:20 | x | semmle.label | x | -| optionalSanitizer.js:26:7:26:39 | target | semmle.label | target | +| optionalSanitizer.js:26:7:26:12 | target | semmle.label | target | | optionalSanitizer.js:26:16:26:39 | documen ... .search | semmle.label | documen ... .search | | optionalSanitizer.js:28:24:28:24 | x | semmle.label | x | | optionalSanitizer.js:29:12:29:12 | x | semmle.label | x | -| optionalSanitizer.js:31:7:31:23 | tainted2 | semmle.label | tainted2 | +| optionalSanitizer.js:31:7:31:14 | tainted2 | semmle.label | tainted2 | | optionalSanitizer.js:31:18:31:23 | target | semmle.label | target | | optionalSanitizer.js:32:18:32:25 | tainted2 | semmle.label | tainted2 | -| optionalSanitizer.js:34:5:34:36 | tainted2 | semmle.label | tainted2 | +| optionalSanitizer.js:34:5:34:12 | tainted2 | semmle.label | tainted2 | | optionalSanitizer.js:34:16:34:36 | sanitiz ... inted2) | semmle.label | sanitiz ... inted2) | | optionalSanitizer.js:34:28:34:35 | tainted2 | semmle.label | tainted2 | | optionalSanitizer.js:36:18:36:25 | tainted2 | semmle.label | tainted2 | -| optionalSanitizer.js:38:7:38:23 | tainted3 | semmle.label | tainted3 | +| optionalSanitizer.js:38:7:38:14 | tainted3 | semmle.label | tainted3 | | optionalSanitizer.js:38:18:38:23 | target | semmle.label | target | | optionalSanitizer.js:39:18:39:25 | tainted3 | semmle.label | tainted3 | -| optionalSanitizer.js:41:5:41:36 | tainted3 | semmle.label | tainted3 | +| optionalSanitizer.js:41:5:41:12 | tainted3 | semmle.label | tainted3 | | optionalSanitizer.js:41:16:41:36 | sanitiz ... inted3) | semmle.label | sanitiz ... inted3) | | optionalSanitizer.js:41:28:41:35 | tainted3 | semmle.label | tainted3 | | optionalSanitizer.js:43:18:43:25 | tainted3 | semmle.label | tainted3 | @@ -1045,7 +1045,7 @@ nodes | pages/[id].jsx:3:30:3:35 | params [id] | semmle.label | params [id] | | pages/[id].jsx:3:30:3:35 | params [q] | semmle.label | params [q] | | pages/[id].jsx:5:9:5:14 | { id } | semmle.label | { id } | -| pages/[id].jsx:5:9:5:29 | id | semmle.label | id | +| pages/[id].jsx:5:11:5:12 | id | semmle.label | id | | pages/[id].jsx:5:18:5:29 | router.query | semmle.label | router.query | | pages/[id].jsx:10:44:10:45 | id | semmle.label | id | | pages/[id].jsx:13:44:13:49 | params [id] | semmle.label | params [id] | @@ -1058,7 +1058,7 @@ nodes | pages/[id].jsx:25:11:25:33 | context ... d \|\| "" | semmle.label | context ... d \|\| "" | | pages/[id].jsx:26:10:26:22 | context.query | semmle.label | context.query | | pages/[id].jsx:26:10:26:36 | context ... r \|\| "" | semmle.label | context ... r \|\| "" | -| react-native.js:7:7:7:33 | tainted | semmle.label | tainted | +| react-native.js:7:7:7:13 | tainted | semmle.label | tainted | | react-native.js:7:17:7:33 | req.param("code") | semmle.label | req.param("code") | | react-native.js:8:18:8:24 | tainted | semmle.label | tainted | | react-native.js:9:27:9:33 | tainted | semmle.label | tainted | @@ -1072,13 +1072,13 @@ nodes | react-use-router.js:23:43:23:61 | router.query.foobar | semmle.label | router.query.foobar | | react-use-router.js:33:21:33:32 | router.query | semmle.label | router.query | | react-use-router.js:33:21:33:39 | router.query.foobar | semmle.label | router.query.foobar | -| react-use-state.js:4:9:4:49 | state | semmle.label | state | +| react-use-state.js:4:10:4:14 | state | semmle.label | state | | react-use-state.js:4:38:4:48 | window.name | semmle.label | window.name | | react-use-state.js:5:51:5:55 | state | semmle.label | state | -| react-use-state.js:9:9:9:43 | state | semmle.label | state | +| react-use-state.js:9:10:9:14 | state | semmle.label | state | | react-use-state.js:10:14:10:24 | window.name | semmle.label | window.name | | react-use-state.js:11:51:11:55 | state | semmle.label | state | -| react-use-state.js:15:9:15:43 | state | semmle.label | state | +| react-use-state.js:15:10:15:14 | state | semmle.label | state | | react-use-state.js:15:10:15:14 | state | semmle.label | state | | react-use-state.js:16:20:16:30 | window.name | semmle.label | window.name | | react-use-state.js:17:51:17:55 | state | semmle.label | state | @@ -1086,7 +1086,7 @@ nodes | react-use-state.js:22:14:22:17 | prev | semmle.label | prev | | react-use-state.js:23:35:23:38 | prev | semmle.label | prev | | react-use-state.js:25:20:25:30 | window.name | semmle.label | window.name | -| sanitiser.js:16:7:16:27 | tainted | semmle.label | tainted | +| sanitiser.js:16:7:16:13 | tainted | semmle.label | tainted | | sanitiser.js:16:17:16:27 | window.name | semmle.label | window.name | | sanitiser.js:23:21:23:44 | '' + ... '' | semmle.label | '' + ... '' | | sanitiser.js:23:29:23:35 | tainted | semmle.label | tainted | @@ -1104,7 +1104,7 @@ nodes | stored-xss.js:3:35:3:58 | documen ... .search | semmle.label | documen ... .search | | stored-xss.js:5:20:5:52 | session ... ssion') | semmle.label | session ... ssion') | | stored-xss.js:8:20:8:48 | localSt ... local') | semmle.label | localSt ... local') | -| stored-xss.js:10:9:10:44 | href | semmle.label | href | +| stored-xss.js:10:9:10:12 | href | semmle.label | href | | stored-xss.js:10:16:10:44 | localSt ... local') | semmle.label | localSt ... local') | | stored-xss.js:12:20:12:54 | "" | semmle.label | "" | | stored-xss.js:12:35:12:38 | href | semmle.label | href | @@ -1124,24 +1124,24 @@ nodes | string-manipulations.js:10:23:10:44 | documen ... on.href | semmle.label | documen ... on.href | | tainted-url-suffix-arguments.js:3:17:3:17 | y | semmle.label | y | | tainted-url-suffix-arguments.js:6:22:6:22 | y | semmle.label | y | -| tainted-url-suffix-arguments.js:11:11:11:36 | url | semmle.label | url | +| tainted-url-suffix-arguments.js:11:11:11:13 | url | semmle.label | url | | tainted-url-suffix-arguments.js:11:17:11:36 | window.location.href | semmle.label | window.location.href | | tainted-url-suffix-arguments.js:12:17:12:19 | url | semmle.label | url | -| tooltip.jsx:6:11:6:30 | source | semmle.label | source | +| tooltip.jsx:6:11:6:16 | source | semmle.label | source | | tooltip.jsx:6:20:6:30 | window.name | semmle.label | window.name | | tooltip.jsx:10:25:10:30 | source | semmle.label | source | | tooltip.jsx:11:25:11:30 | source | semmle.label | source | -| tooltip.jsx:17:11:17:33 | provide [source] | semmle.label | provide [source] | +| tooltip.jsx:17:11:17:17 | provide [source] | semmle.label | provide [source] | | tooltip.jsx:17:21:17:33 | props.provide [source] | semmle.label | props.provide [source] | | tooltip.jsx:18:51:18:57 | provide [source] | semmle.label | provide [source] | | tooltip.jsx:18:51:18:59 | provide() | semmle.label | provide() | -| tooltip.jsx:22:11:22:30 | source | semmle.label | source | +| tooltip.jsx:22:11:22:16 | source | semmle.label | source | | tooltip.jsx:22:20:22:30 | window.name | semmle.label | window.name | | tooltip.jsx:23:38:23:43 | source | semmle.label | source | -| translate.js:6:7:6:39 | target | semmle.label | target | +| translate.js:6:7:6:12 | target | semmle.label | target | | translate.js:6:16:6:39 | documen ... .search | semmle.label | documen ... .search | -| translate.js:7:7:7:61 | searchParams | semmle.label | searchParams | -| translate.js:7:7:7:61 | searchParams [MapValue] | semmle.label | searchParams [MapValue] | +| translate.js:7:7:7:18 | searchParams | semmle.label | searchParams | +| translate.js:7:7:7:18 | searchParams [MapValue] | semmle.label | searchParams [MapValue] | | translate.js:7:22:7:61 | new URL ... ing(1)) | semmle.label | new URL ... ing(1)) | | translate.js:7:22:7:61 | new URL ... ing(1)) [MapValue] | semmle.label | new URL ... ing(1)) [MapValue] | | translate.js:7:42:7:47 | target | semmle.label | target | @@ -1171,7 +1171,7 @@ nodes | tst3.js:9:37:9:42 | data.p | semmle.label | data.p | | tst3.js:10:38:10:41 | data | semmle.label | data | | tst3.js:10:38:10:43 | data.p | semmle.label | data.p | -| tst.js:2:7:2:39 | target | semmle.label | target | +| tst.js:2:7:2:12 | target | semmle.label | target | | tst.js:2:16:2:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:4:18:4:23 | target | semmle.label | target | | tst.js:6:18:6:126 | "" | semmle.label | "" | @@ -1180,8 +1180,8 @@ nodes | tst.js:6:37:6:114 | documen ... t=")+8) | semmle.label | documen ... t=")+8) | | tst.js:9:5:9:42 | '
    ' | semmle.label | '
    ' | | tst.js:9:28:9:33 | target | semmle.label | target | -| tst.js:14:7:14:56 | params | semmle.label | params | -| tst.js:14:7:14:56 | params [MapValue] | semmle.label | params [MapValue] | +| tst.js:14:7:14:12 | params | semmle.label | params | +| tst.js:14:7:14:12 | params [MapValue] | semmle.label | params [MapValue] | | tst.js:14:16:14:43 | (new UR ... ation)) [searchParams, MapValue] | semmle.label | (new UR ... ation)) [searchParams, MapValue] | | tst.js:14:16:14:43 | (new UR ... ation)) [searchParams] | semmle.label | (new UR ... ation)) [searchParams] | | tst.js:14:16:14:56 | (new UR ... hParams | semmle.label | (new UR ... hParams | @@ -1192,8 +1192,8 @@ nodes | tst.js:15:18:15:23 | params | semmle.label | params | | tst.js:15:18:15:23 | params [MapValue] | semmle.label | params [MapValue] | | tst.js:15:18:15:35 | params.get('name') | semmle.label | params.get('name') | -| tst.js:17:7:17:61 | searchParams | semmle.label | searchParams | -| tst.js:17:7:17:61 | searchParams [MapValue] | semmle.label | searchParams [MapValue] | +| tst.js:17:7:17:18 | searchParams | semmle.label | searchParams | +| tst.js:17:7:17:18 | searchParams [MapValue] | semmle.label | searchParams [MapValue] | | tst.js:17:22:17:61 | new URL ... ing(1)) | semmle.label | new URL ... ing(1)) | | tst.js:17:22:17:61 | new URL ... ing(1)) [MapValue] | semmle.label | new URL ... ing(1)) [MapValue] | | tst.js:17:42:17:47 | target | semmle.label | target | @@ -1249,7 +1249,7 @@ nodes | tst.js:76:39:76:62 | documen ... .search | semmle.label | documen ... .search | | tst.js:82:30:82:53 | documen ... .search | semmle.label | documen ... .search | | tst.js:88:25:88:48 | documen ... .search | semmle.label | documen ... .search | -| tst.js:93:7:93:44 | v | semmle.label | v | +| tst.js:93:7:93:7 | v | semmle.label | v | | tst.js:93:11:93:34 | documen ... .search | semmle.label | documen ... .search | | tst.js:93:11:93:44 | documen ... bstr(1) | semmle.label | documen ... bstr(1) | | tst.js:95:18:95:18 | v | semmle.label | v | @@ -1259,10 +1259,10 @@ nodes | tst.js:135:49:135:49 | v | semmle.label | v | | tst.js:139:29:139:46 | xssSourceService() | semmle.label | xssSourceService() | | tst.js:142:40:142:61 | window. ... .search | semmle.label | window. ... .search | -| tst.js:161:9:161:41 | target | semmle.label | target | +| tst.js:161:9:161:14 | target | semmle.label | target | | tst.js:161:18:161:41 | documen ... .search | semmle.label | documen ... .search | | tst.js:164:28:164:33 | target | semmle.label | target | -| tst.js:168:9:168:42 | tainted | semmle.label | tainted | +| tst.js:168:9:168:15 | tainted | semmle.label | tainted | | tst.js:168:19:168:42 | documen ... .search | semmle.label | documen ... .search | | tst.js:170:31:170:37 | tainted | semmle.label | tainted | | tst.js:172:42:172:48 | tainted | semmle.label | tainted | @@ -1270,7 +1270,7 @@ nodes | tst.js:175:54:175:60 | tainted | semmle.label | tainted | | tst.js:176:45:176:51 | tainted | semmle.label | tainted | | tst.js:177:49:177:55 | tainted | semmle.label | tainted | -| tst.js:181:9:181:42 | tainted | semmle.label | tainted | +| tst.js:181:9:181:15 | tainted | semmle.label | tainted | | tst.js:181:19:181:42 | documen ... .search | semmle.label | documen ... .search | | tst.js:183:67:183:73 | tainted | semmle.label | tainted | | tst.js:184:67:184:73 | tainted | semmle.label | tainted | @@ -1297,7 +1297,7 @@ nodes | tst.js:244:7:244:10 | name | semmle.label | name | | tst.js:248:11:248:21 | window.name | semmle.label | window.name | | tst.js:264:22:264:29 | location | semmle.label | location | -| tst.js:269:9:269:29 | tainted | semmle.label | tainted | +| tst.js:269:9:269:15 | tainted | semmle.label | tainted | | tst.js:269:19:269:29 | window.name | semmle.label | window.name | | tst.js:272:59:272:65 | tainted | semmle.label | tainted | | tst.js:285:9:285:16 | location | semmle.label | location | @@ -1310,8 +1310,8 @@ nodes | tst.js:311:10:311:35 | new URL ... cation) [searchParams, MapValue] | semmle.label | new URL ... cation) [searchParams, MapValue] | | tst.js:311:10:311:35 | new URL ... cation) [searchParams] | semmle.label | new URL ... cation) [searchParams] | | tst.js:311:18:311:34 | document.location | semmle.label | document.location | -| tst.js:315:7:315:43 | params | semmle.label | params | -| tst.js:315:7:315:43 | params [MapValue] | semmle.label | params [MapValue] | +| tst.js:315:7:315:12 | params | semmle.label | params | +| tst.js:315:7:315:12 | params [MapValue] | semmle.label | params [MapValue] | | tst.js:315:16:315:30 | getTaintedUrl() [searchParams, MapValue] | semmle.label | getTaintedUrl() [searchParams, MapValue] | | tst.js:315:16:315:30 | getTaintedUrl() [searchParams] | semmle.label | getTaintedUrl() [searchParams] | | tst.js:315:16:315:43 | getTain ... hParams | semmle.label | getTain ... hParams | @@ -1324,19 +1324,19 @@ nodes | tst.js:327:5:327:12 | getUrl() [hash] | semmle.label | getUrl() [hash] | | tst.js:327:5:327:17 | getUrl().hash | semmle.label | getUrl().hash | | tst.js:327:5:327:30 | getUrl( ... ring(1) | semmle.label | getUrl( ... ring(1) | -| tst.js:332:7:332:39 | target | semmle.label | target | +| tst.js:332:7:332:12 | target | semmle.label | target | | tst.js:332:16:332:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:333:12:333:17 | target | semmle.label | target | -| tst.js:339:10:339:42 | target | semmle.label | target | +| tst.js:339:10:339:15 | target | semmle.label | target | | tst.js:339:19:339:42 | documen ... .search | semmle.label | documen ... .search | | tst.js:340:16:340:21 | target | semmle.label | target | | tst.js:341:20:341:25 | target | semmle.label | target | | tst.js:344:21:344:26 | target | semmle.label | target | | tst.js:347:18:347:23 | target | semmle.label | target | -| tst.js:355:7:355:39 | target | semmle.label | target | +| tst.js:355:7:355:12 | target | semmle.label | target | | tst.js:355:16:355:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:357:18:357:23 | target | semmle.label | target | -| tst.js:364:7:364:39 | target | semmle.label | target | +| tst.js:364:7:364:12 | target | semmle.label | target | | tst.js:364:16:364:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:367:18:367:23 | target | semmle.label | target | | tst.js:369:18:369:23 | target | semmle.label | target | @@ -1355,11 +1355,11 @@ nodes | tst.js:391:19:391:31 | target.taint8 | semmle.label | target.taint8 | | tst.js:392:18:392:23 | target [taint8] | semmle.label | target [taint8] | | tst.js:392:18:392:30 | target.taint8 | semmle.label | target.taint8 | -| tst.js:399:7:399:46 | payload | semmle.label | payload | +| tst.js:399:7:399:13 | payload | semmle.label | payload | | tst.js:399:17:399:36 | window.location.hash | semmle.label | window.location.hash | | tst.js:399:17:399:46 | window. ... bstr(1) | semmle.label | window. ... bstr(1) | | tst.js:400:18:400:24 | payload | semmle.label | payload | -| tst.js:402:7:402:55 | match | semmle.label | match | +| tst.js:402:7:402:11 | match | semmle.label | match | | tst.js:402:15:402:34 | window.location.hash | semmle.label | window.location.hash | | tst.js:402:15:402:55 | window. ... (\\w+)/) | semmle.label | window. ... (\\w+)/) | | tst.js:404:20:404:24 | match | semmle.label | match | @@ -1367,11 +1367,11 @@ nodes | tst.js:407:18:407:37 | window.location.hash | semmle.label | window.location.hash | | tst.js:407:18:407:48 | window. ... it('#') [1] | semmle.label | window. ... it('#') [1] | | tst.js:407:18:407:51 | window. ... '#')[1] | semmle.label | window. ... '#')[1] | -| tst.js:411:7:411:39 | target | semmle.label | target | +| tst.js:411:7:411:12 | target | semmle.label | target | | tst.js:411:16:411:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:413:18:413:23 | target | semmle.label | target | | tst.js:413:18:413:89 | target. ... data>') | semmle.label | target. ... data>') | -| tst.js:419:6:419:38 | source | semmle.label | source | +| tst.js:419:6:419:11 | source | semmle.label | source | | tst.js:419:15:419:38 | documen ... .search | semmle.label | documen ... .search | | tst.js:423:28:423:33 | source | semmle.label | source | | tst.js:424:33:424:38 | source | semmle.label | source | @@ -1379,17 +1379,17 @@ nodes | tst.js:426:41:426:46 | source | semmle.label | source | | tst.js:427:44:427:49 | source | semmle.label | source | | tst.js:428:32:428:37 | source | semmle.label | source | -| tst.js:436:7:436:39 | source | semmle.label | source | +| tst.js:436:7:436:12 | source | semmle.label | source | | tst.js:436:16:436:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:438:18:438:23 | source | semmle.label | source | | tst.js:439:18:439:42 | ansiToH ... source) | semmle.label | ansiToH ... source) | | tst.js:439:36:439:41 | source | semmle.label | source | -| tst.js:443:6:443:38 | source | semmle.label | source | +| tst.js:443:6:443:11 | source | semmle.label | source | | tst.js:443:15:443:38 | documen ... .search | semmle.label | documen ... .search | | tst.js:446:21:446:26 | source | semmle.label | source | | tst.js:448:19:448:24 | source | semmle.label | source | | tst.js:450:20:450:25 | source | semmle.label | source | -| tst.js:454:7:454:46 | url | semmle.label | url | +| tst.js:454:7:454:9 | url | semmle.label | url | | tst.js:454:13:454:36 | documen ... .search | semmle.label | documen ... .search | | tst.js:454:13:454:46 | documen ... bstr(1) | semmle.label | documen ... bstr(1) | | tst.js:456:19:456:21 | url | semmle.label | url | @@ -1403,22 +1403,22 @@ nodes | tst.js:477:18:477:40 | locatio ... bstr(1) | semmle.label | locatio ... bstr(1) | | tst.js:484:33:484:63 | decodeU ... n.hash) | semmle.label | decodeU ... n.hash) | | tst.js:484:43:484:62 | window.location.hash | semmle.label | window.location.hash | -| tst.js:491:7:491:39 | target | semmle.label | target | +| tst.js:491:7:491:12 | target | semmle.label | target | | tst.js:491:16:491:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:492:18:492:23 | target | semmle.label | target | | tst.js:492:18:492:54 | target. ... "), '') | semmle.label | target. ... "), '') | -| tst.js:498:7:498:26 | source | semmle.label | source | +| tst.js:498:7:498:12 | source | semmle.label | source | | tst.js:498:16:498:26 | window.name | semmle.label | window.name | | tst.js:499:18:499:33 | unescape(source) | semmle.label | unescape(source) | | tst.js:499:27:499:32 | source | semmle.label | source | -| typeahead.js:20:13:20:45 | target | semmle.label | target | +| typeahead.js:20:13:20:18 | target | semmle.label | target | | typeahead.js:20:22:20:45 | documen ... .search | semmle.label | documen ... .search | | typeahead.js:21:12:21:17 | target | semmle.label | target | | typeahead.js:24:30:24:32 | val | semmle.label | val | | typeahead.js:25:18:25:20 | val | semmle.label | val | | v-html.vue:2:8:2:23 | v-html=tainted | semmle.label | v-html=tainted | | v-html.vue:6:42:6:58 | document.location | semmle.label | document.location | -| various-concat-obfuscations.js:2:6:2:39 | tainted | semmle.label | tainted | +| various-concat-obfuscations.js:2:6:2:12 | tainted | semmle.label | tainted | | various-concat-obfuscations.js:2:16:2:39 | documen ... .search | semmle.label | documen ... .search | | various-concat-obfuscations.js:4:4:4:31 | "
    " ...
    " | semmle.label | "
    " ...
    " | | various-concat-obfuscations.js:4:14:4:20 | tainted | semmle.label | tainted | @@ -1458,7 +1458,7 @@ nodes | various-concat-obfuscations.js:21:4:21:47 | indirec ... .attrs) | semmle.label | indirec ... .attrs) | | various-concat-obfuscations.js:21:17:21:40 | documen ... .search | semmle.label | documen ... .search | | various-concat-obfuscations.js:21:17:21:46 | documen ... h.attrs | semmle.label | documen ... h.attrs | -| winjs.js:2:7:2:53 | tainted | semmle.label | tainted | +| winjs.js:2:7:2:13 | tainted | semmle.label | tainted | | winjs.js:2:17:2:40 | documen ... .search | semmle.label | documen ... .search | | winjs.js:2:17:2:53 | documen ... ring(1) | semmle.label | documen ... ring(1) | | winjs.js:3:43:3:49 | tainted | semmle.label | tainted | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected index c031b7c1810..4f27cd94835 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected @@ -2,8 +2,8 @@ nodes | addEventListener.js:1:43:1:47 | event | semmle.label | event | | addEventListener.js:2:20:2:24 | event | semmle.label | event | | addEventListener.js:2:20:2:29 | event.data | semmle.label | event.data | -| addEventListener.js:5:43:5:48 | data | semmle.label | data | | addEventListener.js:5:43:5:48 | {data} | semmle.label | {data} | +| addEventListener.js:5:44:5:47 | data | semmle.label | data | | addEventListener.js:6:20:6:23 | data | semmle.label | data | | addEventListener.js:10:21:10:25 | event | semmle.label | event | | addEventListener.js:12:24:12:28 | event | semmle.label | event | @@ -53,19 +53,19 @@ nodes | classnames.js:17:32:17:79 | `` | semmle.label | `` | | classnames.js:17:48:17:64 | clsx(window.name) | semmle.label | clsx(window.name) | | classnames.js:17:53:17:63 | window.name | semmle.label | window.name | -| clipboard.ts:8:11:8:51 | html | semmle.label | html | +| clipboard.ts:8:11:8:14 | html | semmle.label | html | | clipboard.ts:8:18:8:51 | clipboa ... /html') | semmle.label | clipboa ... /html') | | clipboard.ts:15:25:15:28 | html | semmle.label | html | | clipboard.ts:24:23:24:58 | e.clipb ... /html') | semmle.label | e.clipb ... /html') | | clipboard.ts:29:19:29:54 | e.clipb ... /html') | semmle.label | e.clipb ... /html') | | clipboard.ts:33:19:33:68 | e.origi ... /html') | semmle.label | e.origi ... /html') | -| clipboard.ts:43:15:43:55 | html | semmle.label | html | +| clipboard.ts:43:15:43:18 | html | semmle.label | html | | clipboard.ts:43:22:43:55 | clipboa ... /html') | semmle.label | clipboa ... /html') | | clipboard.ts:50:29:50:32 | html | semmle.label | html | -| clipboard.ts:71:13:71:62 | droppedHtml | semmle.label | droppedHtml | +| clipboard.ts:71:13:71:23 | droppedHtml | semmle.label | droppedHtml | | clipboard.ts:71:27:71:62 | e.clipb ... /html') | semmle.label | e.clipb ... /html') | | clipboard.ts:73:29:73:39 | droppedHtml | semmle.label | droppedHtml | -| clipboard.ts:98:15:98:54 | html | semmle.label | html | +| clipboard.ts:98:15:98:18 | html | semmle.label | html | | clipboard.ts:98:22:98:54 | dataTra ... /html') | semmle.label | dataTra ... /html') | | clipboard.ts:99:23:99:26 | html | semmle.label | html | | custom-element.js:5:26:5:36 | window.name | semmle.label | window.name | @@ -74,7 +74,7 @@ nodes | d3.js:12:20:12:29 | getTaint() | semmle.label | getTaint() | | d3.js:14:20:14:29 | getTaint() | semmle.label | getTaint() | | d3.js:21:15:21:24 | getTaint() | semmle.label | getTaint() | -| dates.js:9:9:9:69 | taint | semmle.label | taint | +| dates.js:9:9:9:13 | taint | semmle.label | taint | | dates.js:9:17:9:69 | decodeU ... ing(1)) | semmle.label | decodeU ... ing(1)) | | dates.js:9:36:9:55 | window.location.hash | semmle.label | window.location.hash | | dates.js:9:36:9:68 | window. ... ring(1) | semmle.label | window. ... ring(1) | @@ -96,7 +96,7 @@ nodes | dates.js:21:31:21:68 | `Time i ... aint)}` | semmle.label | `Time i ... aint)}` | | dates.js:21:42:21:66 | dayjs(t ... (taint) | semmle.label | dayjs(t ... (taint) | | dates.js:21:61:21:65 | taint | semmle.label | taint | -| dates.js:30:9:30:69 | taint | semmle.label | taint | +| dates.js:30:9:30:13 | taint | semmle.label | taint | | dates.js:30:17:30:69 | decodeU ... ing(1)) | semmle.label | decodeU ... ing(1)) | | dates.js:30:36:30:55 | window.location.hash | semmle.label | window.location.hash | | dates.js:30:36:30:68 | window. ... ring(1) | semmle.label | window. ... ring(1) | @@ -112,7 +112,7 @@ nodes | dates.js:40:31:40:84 | `Time i ... aint)}` | semmle.label | `Time i ... aint)}` | | dates.js:40:42:40:82 | dayjs.f ... taint) | semmle.label | dayjs.f ... taint) | | dates.js:40:77:40:81 | taint | semmle.label | taint | -| dates.js:46:9:46:69 | taint | semmle.label | taint | +| dates.js:46:9:46:13 | taint | semmle.label | taint | | dates.js:46:17:46:69 | decodeU ... ing(1)) | semmle.label | decodeU ... ing(1)) | | dates.js:46:36:46:55 | window.location.hash | semmle.label | window.location.hash | | dates.js:46:36:46:68 | window. ... ring(1) | semmle.label | window. ... ring(1) | @@ -125,7 +125,7 @@ nodes | dates.js:50:31:50:104 | `Time i ... aint)}` | semmle.label | `Time i ... aint)}` | | dates.js:50:42:50:102 | DateTim ... (taint) | semmle.label | DateTim ... (taint) | | dates.js:50:97:50:101 | taint | semmle.label | taint | -| dates.js:54:9:54:69 | taint | semmle.label | taint | +| dates.js:54:9:54:13 | taint | semmle.label | taint | | dates.js:54:17:54:69 | decodeU ... ing(1)) | semmle.label | decodeU ... ing(1)) | | dates.js:54:36:54:55 | window.location.hash | semmle.label | window.location.hash | | dates.js:54:36:54:68 | window. ... ring(1) | semmle.label | window. ... ring(1) | @@ -139,16 +139,16 @@ nodes | dates.js:61:42:61:86 | dayjs.s ... (taint) | semmle.label | dayjs.s ... (taint) | | dates.js:61:81:61:85 | taint | semmle.label | taint | | dom.js:4:20:4:30 | window.name | semmle.label | window.name | -| dragAndDrop.ts:8:11:8:50 | html | semmle.label | html | +| dragAndDrop.ts:8:11:8:14 | html | semmle.label | html | | dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | semmle.label | dataTra ... /html') | | dragAndDrop.ts:15:25:15:28 | html | semmle.label | html | | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | semmle.label | e.dataT ... /html') | | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | semmle.label | e.dataT ... /html') | | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | semmle.label | e.origi ... /html') | -| dragAndDrop.ts:43:15:43:54 | html | semmle.label | html | +| dragAndDrop.ts:43:15:43:18 | html | semmle.label | html | | dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | semmle.label | dataTra ... /html') | | dragAndDrop.ts:50:29:50:32 | html | semmle.label | html | -| dragAndDrop.ts:71:13:71:61 | droppedHtml | semmle.label | droppedHtml | +| dragAndDrop.ts:71:13:71:23 | droppedHtml | semmle.label | droppedHtml | | dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | semmle.label | e.dataT ... /html') | | dragAndDrop.ts:73:29:73:39 | droppedHtml | semmle.label | droppedHtml | | event-handler-receiver.js:2:31:2:83 | '

    ' | semmle.label | '

    ' | @@ -184,7 +184,7 @@ nodes | hana.js:90:33:90:45 | rs[0].comment | semmle.label | rs[0].comment | | jquery-declare-any.ts:6:7:6:17 | window.name | semmle.label | window.name | | jquery-declare-type.ts:6:7:6:17 | window.name | semmle.label | window.name | -| jquery.js:2:7:2:40 | tainted | semmle.label | tainted | +| jquery.js:2:7:2:13 | tainted | semmle.label | tainted | | jquery.js:2:17:2:40 | documen ... .search | semmle.label | documen ... .search | | jquery.js:4:5:4:11 | tainted | semmle.label | tainted | | jquery.js:5:13:5:19 | tainted | semmle.label | tainted | @@ -203,7 +203,7 @@ nodes | jquery.js:16:19:16:64 | decodeU ... ring()) | semmle.label | decodeU ... ring()) | | jquery.js:16:38:16:52 | window.location | semmle.label | window.location | | jquery.js:16:38:16:63 | window. ... tring() | semmle.label | window. ... tring() | -| jquery.js:18:7:18:33 | hash | semmle.label | hash | +| jquery.js:18:7:18:10 | hash | semmle.label | hash | | jquery.js:18:14:18:33 | window.location.hash | semmle.label | window.location.hash | | jquery.js:21:5:21:8 | hash | semmle.label | hash | | jquery.js:21:5:21:21 | hash.substring(1) | semmle.label | hash.substring(1) | @@ -222,50 +222,50 @@ nodes | jquery.js:36:25:36:31 | tainted | semmle.label | tainted | | jquery.js:37:25:37:37 | () => tainted | semmle.label | () => tainted | | jquery.js:37:31:37:37 | tainted | semmle.label | tainted | -| json-stringify.jsx:5:9:5:36 | locale | semmle.label | locale | +| json-stringify.jsx:5:9:5:14 | locale | semmle.label | locale | | json-stringify.jsx:5:18:5:36 | req.param("locale") | semmle.label | req.param("locale") | | json-stringify.jsx:11:51:11:56 | locale | semmle.label | locale | | json-stringify.jsx:19:56:19:61 | locale | semmle.label | locale | | json-stringify.jsx:31:40:31:61 | JSON.st ... locale) | semmle.label | JSON.st ... locale) | | json-stringify.jsx:31:55:31:60 | locale | semmle.label | locale | | json-stringify.jsx:35:40:35:61 | JSON.st ... jsonLD) | semmle.label | JSON.st ... jsonLD) | -| jwt-server.js:7:9:7:35 | taint | semmle.label | taint | +| jwt-server.js:7:9:7:13 | taint | semmle.label | taint | | jwt-server.js:7:17:7:35 | req.param("wobble") | semmle.label | req.param("wobble") | | jwt-server.js:9:16:9:20 | taint | semmle.label | taint | | jwt-server.js:9:55:9:61 | decoded | semmle.label | decoded | | jwt-server.js:10:19:10:25 | decoded | semmle.label | decoded | | jwt-server.js:10:19:10:29 | decoded.foo | semmle.label | decoded.foo | | jwt.js:4:36:4:39 | data | semmle.label | data | -| jwt.js:5:9:5:34 | decoded | semmle.label | decoded | +| jwt.js:5:9:5:15 | decoded | semmle.label | decoded | | jwt.js:5:19:5:34 | jwt_decode(data) | semmle.label | jwt_decode(data) | | jwt.js:5:30:5:33 | data | semmle.label | data | | jwt.js:6:14:6:20 | decoded | semmle.label | decoded | | nodemailer.js:13:11:13:69 | `Hi, yo ... sage}.` | semmle.label | `Hi, yo ... sage}.` | | nodemailer.js:13:50:13:66 | req.query.message | semmle.label | req.query.message | -| optionalSanitizer.js:2:7:2:39 | target | semmle.label | target | +| optionalSanitizer.js:2:7:2:12 | target | semmle.label | target | | optionalSanitizer.js:2:16:2:39 | documen ... .search | semmle.label | documen ... .search | | optionalSanitizer.js:6:18:6:23 | target | semmle.label | target | -| optionalSanitizer.js:8:7:8:22 | tainted | semmle.label | tainted | +| optionalSanitizer.js:8:7:8:13 | tainted | semmle.label | tainted | | optionalSanitizer.js:8:17:8:22 | target | semmle.label | target | | optionalSanitizer.js:9:18:9:24 | tainted | semmle.label | tainted | | optionalSanitizer.js:15:9:15:14 | target | semmle.label | target | | optionalSanitizer.js:16:18:16:18 | x | semmle.label | x | | optionalSanitizer.js:17:20:17:20 | x | semmle.label | x | -| optionalSanitizer.js:26:7:26:39 | target | semmle.label | target | +| optionalSanitizer.js:26:7:26:12 | target | semmle.label | target | | optionalSanitizer.js:26:16:26:39 | documen ... .search | semmle.label | documen ... .search | | optionalSanitizer.js:28:24:28:24 | x | semmle.label | x | | optionalSanitizer.js:29:12:29:12 | x | semmle.label | x | -| optionalSanitizer.js:31:7:31:23 | tainted2 | semmle.label | tainted2 | +| optionalSanitizer.js:31:7:31:14 | tainted2 | semmle.label | tainted2 | | optionalSanitizer.js:31:18:31:23 | target | semmle.label | target | | optionalSanitizer.js:32:18:32:25 | tainted2 | semmle.label | tainted2 | -| optionalSanitizer.js:34:5:34:36 | tainted2 | semmle.label | tainted2 | +| optionalSanitizer.js:34:5:34:12 | tainted2 | semmle.label | tainted2 | | optionalSanitizer.js:34:16:34:36 | sanitiz ... inted2) | semmle.label | sanitiz ... inted2) | | optionalSanitizer.js:34:28:34:35 | tainted2 | semmle.label | tainted2 | | optionalSanitizer.js:36:18:36:25 | tainted2 | semmle.label | tainted2 | -| optionalSanitizer.js:38:7:38:23 | tainted3 | semmle.label | tainted3 | +| optionalSanitizer.js:38:7:38:14 | tainted3 | semmle.label | tainted3 | | optionalSanitizer.js:38:18:38:23 | target | semmle.label | target | | optionalSanitizer.js:39:18:39:25 | tainted3 | semmle.label | tainted3 | -| optionalSanitizer.js:41:5:41:36 | tainted3 | semmle.label | tainted3 | +| optionalSanitizer.js:41:5:41:12 | tainted3 | semmle.label | tainted3 | | optionalSanitizer.js:41:16:41:36 | sanitiz ... inted3) | semmle.label | sanitiz ... inted3) | | optionalSanitizer.js:41:28:41:35 | tainted3 | semmle.label | tainted3 | | optionalSanitizer.js:43:18:43:25 | tainted3 | semmle.label | tainted3 | @@ -276,7 +276,7 @@ nodes | pages/[id].jsx:3:30:3:35 | params [id] | semmle.label | params [id] | | pages/[id].jsx:3:30:3:35 | params [q] | semmle.label | params [q] | | pages/[id].jsx:5:9:5:14 | { id } | semmle.label | { id } | -| pages/[id].jsx:5:9:5:29 | id | semmle.label | id | +| pages/[id].jsx:5:11:5:12 | id | semmle.label | id | | pages/[id].jsx:5:18:5:29 | router.query | semmle.label | router.query | | pages/[id].jsx:10:44:10:45 | id | semmle.label | id | | pages/[id].jsx:13:44:13:49 | params [id] | semmle.label | params [id] | @@ -289,7 +289,7 @@ nodes | pages/[id].jsx:25:11:25:33 | context ... d \|\| "" | semmle.label | context ... d \|\| "" | | pages/[id].jsx:26:10:26:22 | context.query | semmle.label | context.query | | pages/[id].jsx:26:10:26:36 | context ... r \|\| "" | semmle.label | context ... r \|\| "" | -| react-native.js:7:7:7:33 | tainted | semmle.label | tainted | +| react-native.js:7:7:7:13 | tainted | semmle.label | tainted | | react-native.js:7:17:7:33 | req.param("code") | semmle.label | req.param("code") | | react-native.js:8:18:8:24 | tainted | semmle.label | tainted | | react-native.js:9:27:9:33 | tainted | semmle.label | tainted | @@ -303,13 +303,13 @@ nodes | react-use-router.js:23:43:23:61 | router.query.foobar | semmle.label | router.query.foobar | | react-use-router.js:33:21:33:32 | router.query | semmle.label | router.query | | react-use-router.js:33:21:33:39 | router.query.foobar | semmle.label | router.query.foobar | -| react-use-state.js:4:9:4:49 | state | semmle.label | state | +| react-use-state.js:4:10:4:14 | state | semmle.label | state | | react-use-state.js:4:38:4:48 | window.name | semmle.label | window.name | | react-use-state.js:5:51:5:55 | state | semmle.label | state | -| react-use-state.js:9:9:9:43 | state | semmle.label | state | +| react-use-state.js:9:10:9:14 | state | semmle.label | state | | react-use-state.js:10:14:10:24 | window.name | semmle.label | window.name | | react-use-state.js:11:51:11:55 | state | semmle.label | state | -| react-use-state.js:15:9:15:43 | state | semmle.label | state | +| react-use-state.js:15:10:15:14 | state | semmle.label | state | | react-use-state.js:15:10:15:14 | state | semmle.label | state | | react-use-state.js:16:20:16:30 | window.name | semmle.label | window.name | | react-use-state.js:17:51:17:55 | state | semmle.label | state | @@ -317,7 +317,7 @@ nodes | react-use-state.js:22:14:22:17 | prev | semmle.label | prev | | react-use-state.js:23:35:23:38 | prev | semmle.label | prev | | react-use-state.js:25:20:25:30 | window.name | semmle.label | window.name | -| sanitiser.js:16:7:16:27 | tainted | semmle.label | tainted | +| sanitiser.js:16:7:16:13 | tainted | semmle.label | tainted | | sanitiser.js:16:17:16:27 | window.name | semmle.label | window.name | | sanitiser.js:23:21:23:44 | '' + ... '' | semmle.label | '' + ... '' | | sanitiser.js:23:29:23:35 | tainted | semmle.label | tainted | @@ -335,7 +335,7 @@ nodes | stored-xss.js:3:35:3:58 | documen ... .search | semmle.label | documen ... .search | | stored-xss.js:5:20:5:52 | session ... ssion') | semmle.label | session ... ssion') | | stored-xss.js:8:20:8:48 | localSt ... local') | semmle.label | localSt ... local') | -| stored-xss.js:10:9:10:44 | href | semmle.label | href | +| stored-xss.js:10:9:10:12 | href | semmle.label | href | | stored-xss.js:10:16:10:44 | localSt ... local') | semmle.label | localSt ... local') | | stored-xss.js:12:20:12:54 | "" | semmle.label | "" | | stored-xss.js:12:35:12:38 | href | semmle.label | href | @@ -355,24 +355,24 @@ nodes | string-manipulations.js:10:23:10:44 | documen ... on.href | semmle.label | documen ... on.href | | tainted-url-suffix-arguments.js:3:17:3:17 | y | semmle.label | y | | tainted-url-suffix-arguments.js:6:22:6:22 | y | semmle.label | y | -| tainted-url-suffix-arguments.js:11:11:11:36 | url | semmle.label | url | +| tainted-url-suffix-arguments.js:11:11:11:13 | url | semmle.label | url | | tainted-url-suffix-arguments.js:11:17:11:36 | window.location.href | semmle.label | window.location.href | | tainted-url-suffix-arguments.js:12:17:12:19 | url | semmle.label | url | -| tooltip.jsx:6:11:6:30 | source | semmle.label | source | +| tooltip.jsx:6:11:6:16 | source | semmle.label | source | | tooltip.jsx:6:20:6:30 | window.name | semmle.label | window.name | | tooltip.jsx:10:25:10:30 | source | semmle.label | source | | tooltip.jsx:11:25:11:30 | source | semmle.label | source | -| tooltip.jsx:17:11:17:33 | provide [source] | semmle.label | provide [source] | +| tooltip.jsx:17:11:17:17 | provide [source] | semmle.label | provide [source] | | tooltip.jsx:17:21:17:33 | props.provide [source] | semmle.label | props.provide [source] | | tooltip.jsx:18:51:18:57 | provide [source] | semmle.label | provide [source] | | tooltip.jsx:18:51:18:59 | provide() | semmle.label | provide() | -| tooltip.jsx:22:11:22:30 | source | semmle.label | source | +| tooltip.jsx:22:11:22:16 | source | semmle.label | source | | tooltip.jsx:22:20:22:30 | window.name | semmle.label | window.name | | tooltip.jsx:23:38:23:43 | source | semmle.label | source | -| translate.js:6:7:6:39 | target | semmle.label | target | +| translate.js:6:7:6:12 | target | semmle.label | target | | translate.js:6:16:6:39 | documen ... .search | semmle.label | documen ... .search | -| translate.js:7:7:7:61 | searchParams | semmle.label | searchParams | -| translate.js:7:7:7:61 | searchParams [MapValue] | semmle.label | searchParams [MapValue] | +| translate.js:7:7:7:18 | searchParams | semmle.label | searchParams | +| translate.js:7:7:7:18 | searchParams [MapValue] | semmle.label | searchParams [MapValue] | | translate.js:7:22:7:61 | new URL ... ing(1)) | semmle.label | new URL ... ing(1)) | | translate.js:7:22:7:61 | new URL ... ing(1)) [MapValue] | semmle.label | new URL ... ing(1)) [MapValue] | | translate.js:7:42:7:47 | target | semmle.label | target | @@ -402,7 +402,7 @@ nodes | tst3.js:9:37:9:42 | data.p | semmle.label | data.p | | tst3.js:10:38:10:41 | data | semmle.label | data | | tst3.js:10:38:10:43 | data.p | semmle.label | data.p | -| tst.js:2:7:2:39 | target | semmle.label | target | +| tst.js:2:7:2:12 | target | semmle.label | target | | tst.js:2:16:2:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:4:18:4:23 | target | semmle.label | target | | tst.js:6:18:6:126 | "" | semmle.label | "" | @@ -411,8 +411,8 @@ nodes | tst.js:6:37:6:114 | documen ... t=")+8) | semmle.label | documen ... t=")+8) | | tst.js:9:5:9:42 | '
    ' | semmle.label | '
    ' | | tst.js:9:28:9:33 | target | semmle.label | target | -| tst.js:14:7:14:56 | params | semmle.label | params | -| tst.js:14:7:14:56 | params [MapValue] | semmle.label | params [MapValue] | +| tst.js:14:7:14:12 | params | semmle.label | params | +| tst.js:14:7:14:12 | params [MapValue] | semmle.label | params [MapValue] | | tst.js:14:16:14:43 | (new UR ... ation)) [searchParams, MapValue] | semmle.label | (new UR ... ation)) [searchParams, MapValue] | | tst.js:14:16:14:43 | (new UR ... ation)) [searchParams] | semmle.label | (new UR ... ation)) [searchParams] | | tst.js:14:16:14:56 | (new UR ... hParams | semmle.label | (new UR ... hParams | @@ -423,8 +423,8 @@ nodes | tst.js:15:18:15:23 | params | semmle.label | params | | tst.js:15:18:15:23 | params [MapValue] | semmle.label | params [MapValue] | | tst.js:15:18:15:35 | params.get('name') | semmle.label | params.get('name') | -| tst.js:17:7:17:61 | searchParams | semmle.label | searchParams | -| tst.js:17:7:17:61 | searchParams [MapValue] | semmle.label | searchParams [MapValue] | +| tst.js:17:7:17:18 | searchParams | semmle.label | searchParams | +| tst.js:17:7:17:18 | searchParams [MapValue] | semmle.label | searchParams [MapValue] | | tst.js:17:22:17:61 | new URL ... ing(1)) | semmle.label | new URL ... ing(1)) | | tst.js:17:22:17:61 | new URL ... ing(1)) [MapValue] | semmle.label | new URL ... ing(1)) [MapValue] | | tst.js:17:42:17:47 | target | semmle.label | target | @@ -480,7 +480,7 @@ nodes | tst.js:76:39:76:62 | documen ... .search | semmle.label | documen ... .search | | tst.js:82:30:82:53 | documen ... .search | semmle.label | documen ... .search | | tst.js:88:25:88:48 | documen ... .search | semmle.label | documen ... .search | -| tst.js:93:7:93:44 | v | semmle.label | v | +| tst.js:93:7:93:7 | v | semmle.label | v | | tst.js:93:11:93:34 | documen ... .search | semmle.label | documen ... .search | | tst.js:93:11:93:44 | documen ... bstr(1) | semmle.label | documen ... bstr(1) | | tst.js:95:18:95:18 | v | semmle.label | v | @@ -490,10 +490,10 @@ nodes | tst.js:135:49:135:49 | v | semmle.label | v | | tst.js:139:29:139:46 | xssSourceService() | semmle.label | xssSourceService() | | tst.js:142:40:142:61 | window. ... .search | semmle.label | window. ... .search | -| tst.js:161:9:161:41 | target | semmle.label | target | +| tst.js:161:9:161:14 | target | semmle.label | target | | tst.js:161:18:161:41 | documen ... .search | semmle.label | documen ... .search | | tst.js:164:28:164:33 | target | semmle.label | target | -| tst.js:168:9:168:42 | tainted | semmle.label | tainted | +| tst.js:168:9:168:15 | tainted | semmle.label | tainted | | tst.js:168:19:168:42 | documen ... .search | semmle.label | documen ... .search | | tst.js:170:31:170:37 | tainted | semmle.label | tainted | | tst.js:172:42:172:48 | tainted | semmle.label | tainted | @@ -501,7 +501,7 @@ nodes | tst.js:175:54:175:60 | tainted | semmle.label | tainted | | tst.js:176:45:176:51 | tainted | semmle.label | tainted | | tst.js:177:49:177:55 | tainted | semmle.label | tainted | -| tst.js:181:9:181:42 | tainted | semmle.label | tainted | +| tst.js:181:9:181:15 | tainted | semmle.label | tainted | | tst.js:181:19:181:42 | documen ... .search | semmle.label | documen ... .search | | tst.js:183:67:183:73 | tainted | semmle.label | tainted | | tst.js:184:67:184:73 | tainted | semmle.label | tainted | @@ -528,7 +528,7 @@ nodes | tst.js:244:7:244:10 | name | semmle.label | name | | tst.js:248:11:248:21 | window.name | semmle.label | window.name | | tst.js:264:22:264:29 | location | semmle.label | location | -| tst.js:269:9:269:29 | tainted | semmle.label | tainted | +| tst.js:269:9:269:15 | tainted | semmle.label | tainted | | tst.js:269:19:269:29 | window.name | semmle.label | window.name | | tst.js:272:59:272:65 | tainted | semmle.label | tainted | | tst.js:285:9:285:16 | location | semmle.label | location | @@ -541,8 +541,8 @@ nodes | tst.js:311:10:311:35 | new URL ... cation) [searchParams, MapValue] | semmle.label | new URL ... cation) [searchParams, MapValue] | | tst.js:311:10:311:35 | new URL ... cation) [searchParams] | semmle.label | new URL ... cation) [searchParams] | | tst.js:311:18:311:34 | document.location | semmle.label | document.location | -| tst.js:315:7:315:43 | params | semmle.label | params | -| tst.js:315:7:315:43 | params [MapValue] | semmle.label | params [MapValue] | +| tst.js:315:7:315:12 | params | semmle.label | params | +| tst.js:315:7:315:12 | params [MapValue] | semmle.label | params [MapValue] | | tst.js:315:16:315:30 | getTaintedUrl() [searchParams, MapValue] | semmle.label | getTaintedUrl() [searchParams, MapValue] | | tst.js:315:16:315:30 | getTaintedUrl() [searchParams] | semmle.label | getTaintedUrl() [searchParams] | | tst.js:315:16:315:43 | getTain ... hParams | semmle.label | getTain ... hParams | @@ -555,19 +555,19 @@ nodes | tst.js:327:5:327:12 | getUrl() [hash] | semmle.label | getUrl() [hash] | | tst.js:327:5:327:17 | getUrl().hash | semmle.label | getUrl().hash | | tst.js:327:5:327:30 | getUrl( ... ring(1) | semmle.label | getUrl( ... ring(1) | -| tst.js:332:7:332:39 | target | semmle.label | target | +| tst.js:332:7:332:12 | target | semmle.label | target | | tst.js:332:16:332:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:333:12:333:17 | target | semmle.label | target | -| tst.js:339:10:339:42 | target | semmle.label | target | +| tst.js:339:10:339:15 | target | semmle.label | target | | tst.js:339:19:339:42 | documen ... .search | semmle.label | documen ... .search | | tst.js:340:16:340:21 | target | semmle.label | target | | tst.js:341:20:341:25 | target | semmle.label | target | | tst.js:344:21:344:26 | target | semmle.label | target | | tst.js:347:18:347:23 | target | semmle.label | target | -| tst.js:355:7:355:39 | target | semmle.label | target | +| tst.js:355:7:355:12 | target | semmle.label | target | | tst.js:355:16:355:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:357:18:357:23 | target | semmle.label | target | -| tst.js:364:7:364:39 | target | semmle.label | target | +| tst.js:364:7:364:12 | target | semmle.label | target | | tst.js:364:16:364:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:367:18:367:23 | target | semmle.label | target | | tst.js:369:18:369:23 | target | semmle.label | target | @@ -586,11 +586,11 @@ nodes | tst.js:391:19:391:31 | target.taint8 | semmle.label | target.taint8 | | tst.js:392:18:392:23 | target [taint8] | semmle.label | target [taint8] | | tst.js:392:18:392:30 | target.taint8 | semmle.label | target.taint8 | -| tst.js:399:7:399:46 | payload | semmle.label | payload | +| tst.js:399:7:399:13 | payload | semmle.label | payload | | tst.js:399:17:399:36 | window.location.hash | semmle.label | window.location.hash | | tst.js:399:17:399:46 | window. ... bstr(1) | semmle.label | window. ... bstr(1) | | tst.js:400:18:400:24 | payload | semmle.label | payload | -| tst.js:402:7:402:55 | match | semmle.label | match | +| tst.js:402:7:402:11 | match | semmle.label | match | | tst.js:402:15:402:34 | window.location.hash | semmle.label | window.location.hash | | tst.js:402:15:402:55 | window. ... (\\w+)/) | semmle.label | window. ... (\\w+)/) | | tst.js:404:20:404:24 | match | semmle.label | match | @@ -598,11 +598,11 @@ nodes | tst.js:407:18:407:37 | window.location.hash | semmle.label | window.location.hash | | tst.js:407:18:407:48 | window. ... it('#') [1] | semmle.label | window. ... it('#') [1] | | tst.js:407:18:407:51 | window. ... '#')[1] | semmle.label | window. ... '#')[1] | -| tst.js:411:7:411:39 | target | semmle.label | target | +| tst.js:411:7:411:12 | target | semmle.label | target | | tst.js:411:16:411:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:413:18:413:23 | target | semmle.label | target | | tst.js:413:18:413:89 | target. ... data>') | semmle.label | target. ... data>') | -| tst.js:419:6:419:38 | source | semmle.label | source | +| tst.js:419:6:419:11 | source | semmle.label | source | | tst.js:419:15:419:38 | documen ... .search | semmle.label | documen ... .search | | tst.js:423:28:423:33 | source | semmle.label | source | | tst.js:424:33:424:38 | source | semmle.label | source | @@ -610,17 +610,17 @@ nodes | tst.js:426:41:426:46 | source | semmle.label | source | | tst.js:427:44:427:49 | source | semmle.label | source | | tst.js:428:32:428:37 | source | semmle.label | source | -| tst.js:436:7:436:39 | source | semmle.label | source | +| tst.js:436:7:436:12 | source | semmle.label | source | | tst.js:436:16:436:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:438:18:438:23 | source | semmle.label | source | | tst.js:439:18:439:42 | ansiToH ... source) | semmle.label | ansiToH ... source) | | tst.js:439:36:439:41 | source | semmle.label | source | -| tst.js:443:6:443:38 | source | semmle.label | source | +| tst.js:443:6:443:11 | source | semmle.label | source | | tst.js:443:15:443:38 | documen ... .search | semmle.label | documen ... .search | | tst.js:446:21:446:26 | source | semmle.label | source | | tst.js:448:19:448:24 | source | semmle.label | source | | tst.js:450:20:450:25 | source | semmle.label | source | -| tst.js:454:7:454:46 | url | semmle.label | url | +| tst.js:454:7:454:9 | url | semmle.label | url | | tst.js:454:13:454:36 | documen ... .search | semmle.label | documen ... .search | | tst.js:454:13:454:46 | documen ... bstr(1) | semmle.label | documen ... bstr(1) | | tst.js:456:19:456:21 | url | semmle.label | url | @@ -634,24 +634,24 @@ nodes | tst.js:477:18:477:40 | locatio ... bstr(1) | semmle.label | locatio ... bstr(1) | | tst.js:484:33:484:63 | decodeU ... n.hash) | semmle.label | decodeU ... n.hash) | | tst.js:484:43:484:62 | window.location.hash | semmle.label | window.location.hash | -| tst.js:491:7:491:39 | target | semmle.label | target | +| tst.js:491:7:491:12 | target | semmle.label | target | | tst.js:491:16:491:39 | documen ... .search | semmle.label | documen ... .search | | tst.js:492:18:492:23 | target | semmle.label | target | | tst.js:492:18:492:54 | target. ... "), '') | semmle.label | target. ... "), '') | -| tst.js:498:7:498:26 | source | semmle.label | source | +| tst.js:498:7:498:12 | source | semmle.label | source | | tst.js:498:16:498:26 | window.name | semmle.label | window.name | | tst.js:499:18:499:33 | unescape(source) | semmle.label | unescape(source) | | tst.js:499:27:499:32 | source | semmle.label | source | | typeahead.js:9:28:9:30 | loc | semmle.label | loc | | typeahead.js:10:16:10:18 | loc | semmle.label | loc | -| typeahead.js:20:13:20:45 | target | semmle.label | target | +| typeahead.js:20:13:20:18 | target | semmle.label | target | | typeahead.js:20:22:20:45 | documen ... .search | semmle.label | documen ... .search | | typeahead.js:21:12:21:17 | target | semmle.label | target | | typeahead.js:24:30:24:32 | val | semmle.label | val | | typeahead.js:25:18:25:20 | val | semmle.label | val | | v-html.vue:2:8:2:23 | v-html=tainted | semmle.label | v-html=tainted | | v-html.vue:6:42:6:58 | document.location | semmle.label | document.location | -| various-concat-obfuscations.js:2:6:2:39 | tainted | semmle.label | tainted | +| various-concat-obfuscations.js:2:6:2:12 | tainted | semmle.label | tainted | | various-concat-obfuscations.js:2:16:2:39 | documen ... .search | semmle.label | documen ... .search | | various-concat-obfuscations.js:4:4:4:31 | "
    " ...
    " | semmle.label | "
    " ...
    " | | various-concat-obfuscations.js:4:14:4:20 | tainted | semmle.label | tainted | @@ -691,20 +691,20 @@ nodes | various-concat-obfuscations.js:21:4:21:47 | indirec ... .attrs) | semmle.label | indirec ... .attrs) | | various-concat-obfuscations.js:21:17:21:40 | documen ... .search | semmle.label | documen ... .search | | various-concat-obfuscations.js:21:17:21:46 | documen ... h.attrs | semmle.label | documen ... h.attrs | -| winjs.js:2:7:2:53 | tainted | semmle.label | tainted | +| winjs.js:2:7:2:13 | tainted | semmle.label | tainted | | winjs.js:2:17:2:40 | documen ... .search | semmle.label | documen ... .search | | winjs.js:2:17:2:53 | documen ... ring(1) | semmle.label | documen ... ring(1) | | winjs.js:3:43:3:49 | tainted | semmle.label | tainted | | winjs.js:4:43:4:49 | tainted | semmle.label | tainted | -| xmlRequest.js:8:13:8:47 | json | semmle.label | json | +| xmlRequest.js:8:13:8:16 | json | semmle.label | json | | xmlRequest.js:8:20:8:47 | JSON.pa ... seText) | semmle.label | JSON.pa ... seText) | | xmlRequest.js:8:31:8:46 | xhr.responseText | semmle.label | xhr.responseText | | xmlRequest.js:9:28:9:31 | json | semmle.label | json | | xmlRequest.js:9:28:9:39 | json.message | semmle.label | json.message | -| xmlRequest.js:20:11:20:48 | resp | semmle.label | resp | +| xmlRequest.js:20:11:20:14 | resp | semmle.label | resp | | xmlRequest.js:20:18:20:48 | await g ... rl }}") | semmle.label | await g ... rl }}") | | xmlRequest.js:20:24:20:48 | got.get ... rl }}") | semmle.label | got.get ... rl }}") | -| xmlRequest.js:21:11:21:38 | json | semmle.label | json | +| xmlRequest.js:21:11:21:14 | json | semmle.label | json | | xmlRequest.js:21:18:21:38 | JSON.pa ... p.body) | semmle.label | JSON.pa ... p.body) | | xmlRequest.js:21:29:21:32 | resp | semmle.label | resp | | xmlRequest.js:22:24:22:27 | json | semmle.label | json | @@ -712,8 +712,8 @@ nodes edges | addEventListener.js:1:43:1:47 | event | addEventListener.js:2:20:2:24 | event | provenance | | | addEventListener.js:2:20:2:24 | event | addEventListener.js:2:20:2:29 | event.data | provenance | | -| addEventListener.js:5:43:5:48 | data | addEventListener.js:6:20:6:23 | data | provenance | | -| addEventListener.js:5:43:5:48 | {data} | addEventListener.js:5:43:5:48 | data | provenance | | +| addEventListener.js:5:43:5:48 | {data} | addEventListener.js:5:44:5:47 | data | provenance | | +| addEventListener.js:5:44:5:47 | data | addEventListener.js:6:20:6:23 | data | provenance | | | addEventListener.js:10:21:10:25 | event | addEventListener.js:12:24:12:28 | event | provenance | | | addEventListener.js:12:24:12:28 | event | addEventListener.js:12:24:12:33 | event.data | provenance | | | angular2-client.ts:26:44:26:69 | this.ro ... .params | angular2-client.ts:26:44:26:73 | this.ro ... ams.foo | provenance | | @@ -738,25 +738,25 @@ edges | classnames.js:15:52:15:62 | window.name | classnames.js:15:47:15:63 | clsx(window.name) | provenance | | | classnames.js:17:48:17:64 | clsx(window.name) | classnames.js:17:32:17:79 | `` | provenance | | | classnames.js:17:53:17:63 | window.name | classnames.js:17:48:17:64 | clsx(window.name) | provenance | | -| clipboard.ts:8:11:8:51 | html | clipboard.ts:15:25:15:28 | html | provenance | | -| clipboard.ts:8:18:8:51 | clipboa ... /html') | clipboard.ts:8:11:8:51 | html | provenance | | -| clipboard.ts:43:15:43:55 | html | clipboard.ts:50:29:50:32 | html | provenance | | -| clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | provenance | | -| clipboard.ts:71:13:71:62 | droppedHtml | clipboard.ts:73:29:73:39 | droppedHtml | provenance | | -| clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | provenance | | -| clipboard.ts:98:15:98:54 | html | clipboard.ts:99:23:99:26 | html | provenance | | -| clipboard.ts:98:22:98:54 | dataTra ... /html') | clipboard.ts:98:15:98:54 | html | provenance | | +| clipboard.ts:8:11:8:14 | html | clipboard.ts:15:25:15:28 | html | provenance | | +| clipboard.ts:8:18:8:51 | clipboa ... /html') | clipboard.ts:8:11:8:14 | html | provenance | | +| clipboard.ts:43:15:43:18 | html | clipboard.ts:50:29:50:32 | html | provenance | | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:18 | html | provenance | | +| clipboard.ts:71:13:71:23 | droppedHtml | clipboard.ts:73:29:73:39 | droppedHtml | provenance | | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:23 | droppedHtml | provenance | | +| clipboard.ts:98:15:98:18 | html | clipboard.ts:99:23:99:26 | html | provenance | | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | clipboard.ts:98:15:98:18 | html | provenance | | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | provenance | | | d3.js:4:12:4:22 | window.name | d3.js:12:20:12:29 | getTaint() | provenance | | | d3.js:4:12:4:22 | window.name | d3.js:14:20:14:29 | getTaint() | provenance | | | d3.js:4:12:4:22 | window.name | d3.js:21:15:21:24 | getTaint() | provenance | | -| dates.js:9:9:9:69 | taint | dates.js:11:63:11:67 | taint | provenance | | -| dates.js:9:9:9:69 | taint | dates.js:12:66:12:70 | taint | provenance | | -| dates.js:9:9:9:69 | taint | dates.js:13:59:13:63 | taint | provenance | | -| dates.js:9:9:9:69 | taint | dates.js:16:62:16:66 | taint | provenance | | -| dates.js:9:9:9:69 | taint | dates.js:18:59:18:63 | taint | provenance | | -| dates.js:9:9:9:69 | taint | dates.js:21:61:21:65 | taint | provenance | | -| dates.js:9:17:9:69 | decodeU ... ing(1)) | dates.js:9:9:9:69 | taint | provenance | | +| dates.js:9:9:9:13 | taint | dates.js:11:63:11:67 | taint | provenance | | +| dates.js:9:9:9:13 | taint | dates.js:12:66:12:70 | taint | provenance | | +| dates.js:9:9:9:13 | taint | dates.js:13:59:13:63 | taint | provenance | | +| dates.js:9:9:9:13 | taint | dates.js:16:62:16:66 | taint | provenance | | +| dates.js:9:9:9:13 | taint | dates.js:18:59:18:63 | taint | provenance | | +| dates.js:9:9:9:13 | taint | dates.js:21:61:21:65 | taint | provenance | | +| dates.js:9:17:9:69 | decodeU ... ing(1)) | dates.js:9:9:9:13 | taint | provenance | | | dates.js:9:36:9:55 | window.location.hash | dates.js:9:36:9:68 | window. ... ring(1) | provenance | | | dates.js:9:36:9:55 | window.location.hash | dates.js:9:36:9:68 | window. ... ring(1) | provenance | Config | | dates.js:9:36:9:68 | window. ... ring(1) | dates.js:9:17:9:69 | decodeU ... ing(1)) | provenance | | @@ -772,11 +772,11 @@ edges | dates.js:18:59:18:63 | taint | dates.js:18:42:18:64 | datefor ... taint) | provenance | | | dates.js:21:42:21:66 | dayjs(t ... (taint) | dates.js:21:31:21:68 | `Time i ... aint)}` | provenance | | | dates.js:21:61:21:65 | taint | dates.js:21:42:21:66 | dayjs(t ... (taint) | provenance | | -| dates.js:30:9:30:69 | taint | dates.js:37:77:37:81 | taint | provenance | | -| dates.js:30:9:30:69 | taint | dates.js:38:77:38:81 | taint | provenance | | -| dates.js:30:9:30:69 | taint | dates.js:39:79:39:83 | taint | provenance | | -| dates.js:30:9:30:69 | taint | dates.js:40:77:40:81 | taint | provenance | | -| dates.js:30:17:30:69 | decodeU ... ing(1)) | dates.js:30:9:30:69 | taint | provenance | | +| dates.js:30:9:30:13 | taint | dates.js:37:77:37:81 | taint | provenance | | +| dates.js:30:9:30:13 | taint | dates.js:38:77:38:81 | taint | provenance | | +| dates.js:30:9:30:13 | taint | dates.js:39:79:39:83 | taint | provenance | | +| dates.js:30:9:30:13 | taint | dates.js:40:77:40:81 | taint | provenance | | +| dates.js:30:17:30:69 | decodeU ... ing(1)) | dates.js:30:9:30:13 | taint | provenance | | | dates.js:30:36:30:55 | window.location.hash | dates.js:30:36:30:68 | window. ... ring(1) | provenance | | | dates.js:30:36:30:55 | window.location.hash | dates.js:30:36:30:68 | window. ... ring(1) | provenance | Config | | dates.js:30:36:30:68 | window. ... ring(1) | dates.js:30:17:30:69 | decodeU ... ing(1)) | provenance | | @@ -788,10 +788,10 @@ edges | dates.js:39:79:39:83 | taint | dates.js:39:42:39:84 | moment. ... taint) | provenance | | | dates.js:40:42:40:82 | dayjs.f ... taint) | dates.js:40:31:40:84 | `Time i ... aint)}` | provenance | | | dates.js:40:77:40:81 | taint | dates.js:40:42:40:82 | dayjs.f ... taint) | provenance | | -| dates.js:46:9:46:69 | taint | dates.js:48:83:48:87 | taint | provenance | | -| dates.js:46:9:46:69 | taint | dates.js:49:82:49:86 | taint | provenance | | -| dates.js:46:9:46:69 | taint | dates.js:50:97:50:101 | taint | provenance | | -| dates.js:46:17:46:69 | decodeU ... ing(1)) | dates.js:46:9:46:69 | taint | provenance | | +| dates.js:46:9:46:13 | taint | dates.js:48:83:48:87 | taint | provenance | | +| dates.js:46:9:46:13 | taint | dates.js:49:82:49:86 | taint | provenance | | +| dates.js:46:9:46:13 | taint | dates.js:50:97:50:101 | taint | provenance | | +| dates.js:46:17:46:69 | decodeU ... ing(1)) | dates.js:46:9:46:13 | taint | provenance | | | dates.js:46:36:46:55 | window.location.hash | dates.js:46:36:46:68 | window. ... ring(1) | provenance | | | dates.js:46:36:46:55 | window.location.hash | dates.js:46:36:46:68 | window. ... ring(1) | provenance | Config | | dates.js:46:36:46:68 | window. ... ring(1) | dates.js:46:17:46:69 | decodeU ... ing(1)) | provenance | | @@ -801,10 +801,10 @@ edges | dates.js:49:82:49:86 | taint | dates.js:49:42:49:87 | new Dat ... (taint) | provenance | | | dates.js:50:42:50:102 | DateTim ... (taint) | dates.js:50:31:50:104 | `Time i ... aint)}` | provenance | | | dates.js:50:97:50:101 | taint | dates.js:50:42:50:102 | DateTim ... (taint) | provenance | | -| dates.js:54:9:54:69 | taint | dates.js:57:94:57:98 | taint | provenance | | -| dates.js:54:9:54:69 | taint | dates.js:59:80:59:84 | taint | provenance | | -| dates.js:54:9:54:69 | taint | dates.js:61:81:61:85 | taint | provenance | | -| dates.js:54:17:54:69 | decodeU ... ing(1)) | dates.js:54:9:54:69 | taint | provenance | | +| dates.js:54:9:54:13 | taint | dates.js:57:94:57:98 | taint | provenance | | +| dates.js:54:9:54:13 | taint | dates.js:59:80:59:84 | taint | provenance | | +| dates.js:54:9:54:13 | taint | dates.js:61:81:61:85 | taint | provenance | | +| dates.js:54:17:54:69 | decodeU ... ing(1)) | dates.js:54:9:54:13 | taint | provenance | | | dates.js:54:36:54:55 | window.location.hash | dates.js:54:36:54:68 | window. ... ring(1) | provenance | | | dates.js:54:36:54:55 | window.location.hash | dates.js:54:36:54:68 | window. ... ring(1) | provenance | Config | | dates.js:54:36:54:68 | window. ... ring(1) | dates.js:54:17:54:69 | decodeU ... ing(1)) | provenance | | @@ -814,12 +814,12 @@ edges | dates.js:59:80:59:84 | taint | dates.js:59:42:59:85 | luxon.e ... (taint) | provenance | | | dates.js:61:42:61:86 | dayjs.s ... (taint) | dates.js:61:31:61:88 | `Time i ... aint)}` | provenance | | | dates.js:61:81:61:85 | taint | dates.js:61:42:61:86 | dayjs.s ... (taint) | provenance | | -| dragAndDrop.ts:8:11:8:50 | html | dragAndDrop.ts:15:25:15:28 | html | provenance | | -| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:8:11:8:50 | html | provenance | | -| dragAndDrop.ts:43:15:43:54 | html | dragAndDrop.ts:50:29:50:32 | html | provenance | | -| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | provenance | | -| dragAndDrop.ts:71:13:71:61 | droppedHtml | dragAndDrop.ts:73:29:73:39 | droppedHtml | provenance | | -| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:71:13:71:61 | droppedHtml | provenance | | +| dragAndDrop.ts:8:11:8:14 | html | dragAndDrop.ts:15:25:15:28 | html | provenance | | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:8:11:8:14 | html | provenance | | +| dragAndDrop.ts:43:15:43:18 | html | dragAndDrop.ts:50:29:50:32 | html | provenance | | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:18 | html | provenance | | +| dragAndDrop.ts:71:13:71:23 | droppedHtml | dragAndDrop.ts:73:29:73:39 | droppedHtml | provenance | | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:71:13:71:23 | droppedHtml | provenance | | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | provenance | | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | provenance | Config | | hana.js:11:37:11:40 | rows | hana.js:11:37:11:51 | rows[0].comment | provenance | | @@ -836,13 +836,13 @@ edges | hana.js:84:35:84:43 | dummyRows | hana.js:84:35:84:54 | dummyRows[0].comment | provenance | | | hana.js:85:35:85:43 | tableRows | hana.js:85:35:85:54 | tableRows[0].comment | provenance | | | hana.js:90:33:90:34 | rs | hana.js:90:33:90:45 | rs[0].comment | provenance | | -| jquery.js:2:7:2:40 | tainted | jquery.js:4:5:4:11 | tainted | provenance | | -| jquery.js:2:7:2:40 | tainted | jquery.js:5:13:5:19 | tainted | provenance | | -| jquery.js:2:7:2:40 | tainted | jquery.js:6:11:6:17 | tainted | provenance | | -| jquery.js:2:7:2:40 | tainted | jquery.js:7:20:7:26 | tainted | provenance | | -| jquery.js:2:7:2:40 | tainted | jquery.js:8:28:8:34 | tainted | provenance | | -| jquery.js:2:7:2:40 | tainted | jquery.js:36:25:36:31 | tainted | provenance | | -| jquery.js:2:17:2:40 | documen ... .search | jquery.js:2:7:2:40 | tainted | provenance | | +| jquery.js:2:7:2:13 | tainted | jquery.js:4:5:4:11 | tainted | provenance | | +| jquery.js:2:7:2:13 | tainted | jquery.js:5:13:5:19 | tainted | provenance | | +| jquery.js:2:7:2:13 | tainted | jquery.js:6:11:6:17 | tainted | provenance | | +| jquery.js:2:7:2:13 | tainted | jquery.js:7:20:7:26 | tainted | provenance | | +| jquery.js:2:7:2:13 | tainted | jquery.js:8:28:8:34 | tainted | provenance | | +| jquery.js:2:7:2:13 | tainted | jquery.js:36:25:36:31 | tainted | provenance | | +| jquery.js:2:17:2:40 | documen ... .search | jquery.js:2:7:2:13 | tainted | provenance | | | jquery.js:4:5:4:11 | tainted | jquery.js:5:13:5:19 | tainted | provenance | | | jquery.js:5:13:5:19 | tainted | jquery.js:6:11:6:17 | tainted | provenance | | | jquery.js:6:11:6:17 | tainted | jquery.js:7:20:7:26 | tainted | provenance | | @@ -856,13 +856,13 @@ edges | jquery.js:15:38:15:59 | window. ... .search | jquery.js:15:19:15:60 | decodeU ... search) | provenance | | | jquery.js:16:38:16:52 | window.location | jquery.js:16:38:16:63 | window. ... tring() | provenance | | | jquery.js:16:38:16:63 | window. ... tring() | jquery.js:16:19:16:64 | decodeU ... ring()) | provenance | | -| jquery.js:18:7:18:33 | hash | jquery.js:21:5:21:8 | hash | provenance | | -| jquery.js:18:7:18:33 | hash | jquery.js:22:5:22:8 | hash | provenance | | -| jquery.js:18:7:18:33 | hash | jquery.js:23:5:23:8 | hash | provenance | | -| jquery.js:18:7:18:33 | hash | jquery.js:24:5:24:8 | hash | provenance | | -| jquery.js:18:7:18:33 | hash | jquery.js:27:5:27:8 | hash | provenance | | -| jquery.js:18:7:18:33 | hash | jquery.js:34:13:34:16 | hash | provenance | | -| jquery.js:18:14:18:33 | window.location.hash | jquery.js:18:7:18:33 | hash | provenance | | +| jquery.js:18:7:18:10 | hash | jquery.js:21:5:21:8 | hash | provenance | | +| jquery.js:18:7:18:10 | hash | jquery.js:22:5:22:8 | hash | provenance | | +| jquery.js:18:7:18:10 | hash | jquery.js:23:5:23:8 | hash | provenance | | +| jquery.js:18:7:18:10 | hash | jquery.js:24:5:24:8 | hash | provenance | | +| jquery.js:18:7:18:10 | hash | jquery.js:27:5:27:8 | hash | provenance | | +| jquery.js:18:7:18:10 | hash | jquery.js:34:13:34:16 | hash | provenance | | +| jquery.js:18:14:18:33 | window.location.hash | jquery.js:18:7:18:10 | hash | provenance | | | jquery.js:21:5:21:8 | hash | jquery.js:21:5:21:21 | hash.substring(1) | provenance | Config | | jquery.js:22:5:22:8 | hash | jquery.js:22:5:22:25 | hash.su ... (1, 10) | provenance | Config | | jquery.js:23:5:23:8 | hash | jquery.js:23:5:23:18 | hash.substr(1) | provenance | Config | @@ -872,51 +872,51 @@ edges | jquery.js:34:13:34:16 | hash | jquery.js:34:5:34:25 | '' + ... '' | provenance | Config | | jquery.js:36:25:36:31 | tainted | jquery.js:37:31:37:37 | tainted | provenance | | | jquery.js:37:31:37:37 | tainted | jquery.js:37:25:37:37 | () => tainted | provenance | Config | -| json-stringify.jsx:5:9:5:36 | locale | json-stringify.jsx:11:51:11:56 | locale | provenance | | -| json-stringify.jsx:5:9:5:36 | locale | json-stringify.jsx:19:56:19:61 | locale | provenance | | -| json-stringify.jsx:5:9:5:36 | locale | json-stringify.jsx:31:55:31:60 | locale | provenance | | -| json-stringify.jsx:5:18:5:36 | req.param("locale") | json-stringify.jsx:5:9:5:36 | locale | provenance | | +| json-stringify.jsx:5:9:5:14 | locale | json-stringify.jsx:11:51:11:56 | locale | provenance | | +| json-stringify.jsx:5:9:5:14 | locale | json-stringify.jsx:19:56:19:61 | locale | provenance | | +| json-stringify.jsx:5:9:5:14 | locale | json-stringify.jsx:31:55:31:60 | locale | provenance | | +| json-stringify.jsx:5:18:5:36 | req.param("locale") | json-stringify.jsx:5:9:5:14 | locale | provenance | | | json-stringify.jsx:11:51:11:56 | locale | json-stringify.jsx:35:40:35:61 | JSON.st ... jsonLD) | provenance | | | json-stringify.jsx:19:56:19:61 | locale | json-stringify.jsx:35:40:35:61 | JSON.st ... jsonLD) | provenance | | | json-stringify.jsx:31:55:31:60 | locale | json-stringify.jsx:31:40:31:61 | JSON.st ... locale) | provenance | | -| jwt-server.js:7:9:7:35 | taint | jwt-server.js:9:16:9:20 | taint | provenance | | -| jwt-server.js:7:17:7:35 | req.param("wobble") | jwt-server.js:7:9:7:35 | taint | provenance | | +| jwt-server.js:7:9:7:13 | taint | jwt-server.js:9:16:9:20 | taint | provenance | | +| jwt-server.js:7:17:7:35 | req.param("wobble") | jwt-server.js:7:9:7:13 | taint | provenance | | | jwt-server.js:9:16:9:20 | taint | jwt-server.js:9:55:9:61 | decoded | provenance | | | jwt-server.js:9:55:9:61 | decoded | jwt-server.js:10:19:10:25 | decoded | provenance | | | jwt-server.js:10:19:10:25 | decoded | jwt-server.js:10:19:10:29 | decoded.foo | provenance | | | jwt.js:4:36:4:39 | data | jwt.js:5:30:5:33 | data | provenance | | -| jwt.js:5:9:5:34 | decoded | jwt.js:6:14:6:20 | decoded | provenance | | -| jwt.js:5:19:5:34 | jwt_decode(data) | jwt.js:5:9:5:34 | decoded | provenance | | +| jwt.js:5:9:5:15 | decoded | jwt.js:6:14:6:20 | decoded | provenance | | +| jwt.js:5:19:5:34 | jwt_decode(data) | jwt.js:5:9:5:15 | decoded | provenance | | | jwt.js:5:30:5:33 | data | jwt.js:5:19:5:34 | jwt_decode(data) | provenance | | | nodemailer.js:13:50:13:66 | req.query.message | nodemailer.js:13:11:13:69 | `Hi, yo ... sage}.` | provenance | | -| optionalSanitizer.js:2:7:2:39 | target | optionalSanitizer.js:6:18:6:23 | target | provenance | | -| optionalSanitizer.js:2:7:2:39 | target | optionalSanitizer.js:8:17:8:22 | target | provenance | | -| optionalSanitizer.js:2:7:2:39 | target | optionalSanitizer.js:15:9:15:14 | target | provenance | | -| optionalSanitizer.js:2:16:2:39 | documen ... .search | optionalSanitizer.js:2:7:2:39 | target | provenance | | -| optionalSanitizer.js:8:7:8:22 | tainted | optionalSanitizer.js:9:18:9:24 | tainted | provenance | | -| optionalSanitizer.js:8:17:8:22 | target | optionalSanitizer.js:8:7:8:22 | tainted | provenance | | +| optionalSanitizer.js:2:7:2:12 | target | optionalSanitizer.js:6:18:6:23 | target | provenance | | +| optionalSanitizer.js:2:7:2:12 | target | optionalSanitizer.js:8:17:8:22 | target | provenance | | +| optionalSanitizer.js:2:7:2:12 | target | optionalSanitizer.js:15:9:15:14 | target | provenance | | +| optionalSanitizer.js:2:16:2:39 | documen ... .search | optionalSanitizer.js:2:7:2:12 | target | provenance | | +| optionalSanitizer.js:8:7:8:13 | tainted | optionalSanitizer.js:9:18:9:24 | tainted | provenance | | +| optionalSanitizer.js:8:17:8:22 | target | optionalSanitizer.js:8:7:8:13 | tainted | provenance | | | optionalSanitizer.js:15:9:15:14 | target | optionalSanitizer.js:16:18:16:18 | x | provenance | | | optionalSanitizer.js:16:18:16:18 | x | optionalSanitizer.js:17:20:17:20 | x | provenance | | -| optionalSanitizer.js:26:7:26:39 | target | optionalSanitizer.js:31:18:31:23 | target | provenance | | -| optionalSanitizer.js:26:7:26:39 | target | optionalSanitizer.js:38:18:38:23 | target | provenance | | -| optionalSanitizer.js:26:7:26:39 | target | optionalSanitizer.js:45:41:45:46 | target | provenance | | -| optionalSanitizer.js:26:7:26:39 | target | optionalSanitizer.js:45:51:45:56 | target | provenance | | -| optionalSanitizer.js:26:16:26:39 | documen ... .search | optionalSanitizer.js:26:7:26:39 | target | provenance | | +| optionalSanitizer.js:26:7:26:12 | target | optionalSanitizer.js:31:18:31:23 | target | provenance | | +| optionalSanitizer.js:26:7:26:12 | target | optionalSanitizer.js:38:18:38:23 | target | provenance | | +| optionalSanitizer.js:26:7:26:12 | target | optionalSanitizer.js:45:41:45:46 | target | provenance | | +| optionalSanitizer.js:26:7:26:12 | target | optionalSanitizer.js:45:51:45:56 | target | provenance | | +| optionalSanitizer.js:26:16:26:39 | documen ... .search | optionalSanitizer.js:26:7:26:12 | target | provenance | | | optionalSanitizer.js:28:24:28:24 | x | optionalSanitizer.js:29:12:29:12 | x | provenance | | -| optionalSanitizer.js:31:7:31:23 | tainted2 | optionalSanitizer.js:32:18:32:25 | tainted2 | provenance | | -| optionalSanitizer.js:31:7:31:23 | tainted2 | optionalSanitizer.js:34:28:34:35 | tainted2 | provenance | | -| optionalSanitizer.js:31:7:31:23 | tainted2 | optionalSanitizer.js:36:18:36:25 | tainted2 | provenance | | -| optionalSanitizer.js:31:18:31:23 | target | optionalSanitizer.js:31:7:31:23 | tainted2 | provenance | | -| optionalSanitizer.js:34:5:34:36 | tainted2 | optionalSanitizer.js:36:18:36:25 | tainted2 | provenance | | -| optionalSanitizer.js:34:16:34:36 | sanitiz ... inted2) | optionalSanitizer.js:34:5:34:36 | tainted2 | provenance | | +| optionalSanitizer.js:31:7:31:14 | tainted2 | optionalSanitizer.js:32:18:32:25 | tainted2 | provenance | | +| optionalSanitizer.js:31:7:31:14 | tainted2 | optionalSanitizer.js:34:28:34:35 | tainted2 | provenance | | +| optionalSanitizer.js:31:7:31:14 | tainted2 | optionalSanitizer.js:36:18:36:25 | tainted2 | provenance | | +| optionalSanitizer.js:31:18:31:23 | target | optionalSanitizer.js:31:7:31:14 | tainted2 | provenance | | +| optionalSanitizer.js:34:5:34:12 | tainted2 | optionalSanitizer.js:36:18:36:25 | tainted2 | provenance | | +| optionalSanitizer.js:34:16:34:36 | sanitiz ... inted2) | optionalSanitizer.js:34:5:34:12 | tainted2 | provenance | | | optionalSanitizer.js:34:28:34:35 | tainted2 | optionalSanitizer.js:28:24:28:24 | x | provenance | | | optionalSanitizer.js:34:28:34:35 | tainted2 | optionalSanitizer.js:34:16:34:36 | sanitiz ... inted2) | provenance | | -| optionalSanitizer.js:38:7:38:23 | tainted3 | optionalSanitizer.js:39:18:39:25 | tainted3 | provenance | | -| optionalSanitizer.js:38:7:38:23 | tainted3 | optionalSanitizer.js:41:28:41:35 | tainted3 | provenance | | -| optionalSanitizer.js:38:7:38:23 | tainted3 | optionalSanitizer.js:43:18:43:25 | tainted3 | provenance | | -| optionalSanitizer.js:38:18:38:23 | target | optionalSanitizer.js:38:7:38:23 | tainted3 | provenance | | -| optionalSanitizer.js:41:5:41:36 | tainted3 | optionalSanitizer.js:43:18:43:25 | tainted3 | provenance | | -| optionalSanitizer.js:41:16:41:36 | sanitiz ... inted3) | optionalSanitizer.js:41:5:41:36 | tainted3 | provenance | | +| optionalSanitizer.js:38:7:38:14 | tainted3 | optionalSanitizer.js:39:18:39:25 | tainted3 | provenance | | +| optionalSanitizer.js:38:7:38:14 | tainted3 | optionalSanitizer.js:41:28:41:35 | tainted3 | provenance | | +| optionalSanitizer.js:38:7:38:14 | tainted3 | optionalSanitizer.js:43:18:43:25 | tainted3 | provenance | | +| optionalSanitizer.js:38:18:38:23 | target | optionalSanitizer.js:38:7:38:14 | tainted3 | provenance | | +| optionalSanitizer.js:41:5:41:12 | tainted3 | optionalSanitizer.js:43:18:43:25 | tainted3 | provenance | | +| optionalSanitizer.js:41:16:41:36 | sanitiz ... inted3) | optionalSanitizer.js:41:5:41:12 | tainted3 | provenance | | | optionalSanitizer.js:41:28:41:35 | tainted3 | optionalSanitizer.js:28:24:28:24 | x | provenance | | | optionalSanitizer.js:41:28:41:35 | tainted3 | optionalSanitizer.js:41:16:41:36 | sanitiz ... inted3) | provenance | | | optionalSanitizer.js:45:29:45:47 | sanitizeBad(target) | optionalSanitizer.js:45:18:45:56 | sanitiz ... target | provenance | | @@ -925,8 +925,8 @@ edges | optionalSanitizer.js:45:51:45:56 | target | optionalSanitizer.js:45:18:45:56 | sanitiz ... target | provenance | | | pages/[id].jsx:3:30:3:35 | params [id] | pages/[id].jsx:13:44:13:49 | params [id] | provenance | | | pages/[id].jsx:3:30:3:35 | params [q] | pages/[id].jsx:16:44:16:49 | params [q] | provenance | | -| pages/[id].jsx:5:9:5:14 | { id } | pages/[id].jsx:5:9:5:29 | id | provenance | | -| pages/[id].jsx:5:9:5:29 | id | pages/[id].jsx:10:44:10:45 | id | provenance | | +| pages/[id].jsx:5:9:5:14 | { id } | pages/[id].jsx:5:11:5:12 | id | provenance | | +| pages/[id].jsx:5:11:5:12 | id | pages/[id].jsx:10:44:10:45 | id | provenance | | | pages/[id].jsx:5:18:5:29 | router.query | pages/[id].jsx:5:9:5:14 | { id } | provenance | | | pages/[id].jsx:13:44:13:49 | params [id] | pages/[id].jsx:13:44:13:52 | params.id | provenance | | | pages/[id].jsx:16:44:16:49 | params [q] | pages/[id].jsx:16:44:16:51 | params.q | provenance | | @@ -936,30 +936,30 @@ edges | pages/[id].jsx:25:11:25:33 | context ... d \|\| "" | pages/[id].jsx:24:12:27:5 | {\\n ... e\\n } [id] | provenance | | | pages/[id].jsx:26:10:26:22 | context.query | pages/[id].jsx:26:10:26:36 | context ... r \|\| "" | provenance | | | pages/[id].jsx:26:10:26:36 | context ... r \|\| "" | pages/[id].jsx:24:12:27:5 | {\\n ... e\\n } [q] | provenance | | -| react-native.js:7:7:7:33 | tainted | react-native.js:8:18:8:24 | tainted | provenance | | -| react-native.js:7:7:7:33 | tainted | react-native.js:9:27:9:33 | tainted | provenance | | -| react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:33 | tainted | provenance | | +| react-native.js:7:7:7:13 | tainted | react-native.js:8:18:8:24 | tainted | provenance | | +| react-native.js:7:7:7:13 | tainted | react-native.js:9:27:9:33 | tainted | provenance | | +| react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:13 | tainted | provenance | | | react-use-router.js:8:21:8:32 | router.query | react-use-router.js:8:21:8:39 | router.query.foobar | provenance | | | react-use-router.js:11:24:11:35 | router.query | react-use-router.js:11:24:11:42 | router.query.foobar | provenance | | | react-use-router.js:23:43:23:54 | router.query | react-use-router.js:23:43:23:61 | router.query.foobar | provenance | | | react-use-router.js:33:21:33:32 | router.query | react-use-router.js:33:21:33:39 | router.query.foobar | provenance | | -| react-use-state.js:4:9:4:49 | state | react-use-state.js:5:51:5:55 | state | provenance | | -| react-use-state.js:4:38:4:48 | window.name | react-use-state.js:4:9:4:49 | state | provenance | | -| react-use-state.js:9:9:9:43 | state | react-use-state.js:11:51:11:55 | state | provenance | | -| react-use-state.js:10:14:10:24 | window.name | react-use-state.js:9:9:9:43 | state | provenance | | -| react-use-state.js:15:9:15:43 | state | react-use-state.js:17:51:17:55 | state | provenance | | -| react-use-state.js:15:10:15:14 | state | react-use-state.js:15:9:15:43 | state | provenance | | +| react-use-state.js:4:10:4:14 | state | react-use-state.js:5:51:5:55 | state | provenance | | +| react-use-state.js:4:38:4:48 | window.name | react-use-state.js:4:10:4:14 | state | provenance | | +| react-use-state.js:9:10:9:14 | state | react-use-state.js:11:51:11:55 | state | provenance | | +| react-use-state.js:10:14:10:24 | window.name | react-use-state.js:9:10:9:14 | state | provenance | | +| react-use-state.js:15:10:15:14 | state | react-use-state.js:15:10:15:14 | state | provenance | | +| react-use-state.js:15:10:15:14 | state | react-use-state.js:17:51:17:55 | state | provenance | | | react-use-state.js:16:20:16:30 | window.name | react-use-state.js:15:10:15:14 | state | provenance | | | react-use-state.js:21:10:21:14 | state | react-use-state.js:22:14:22:17 | prev | provenance | | | react-use-state.js:22:14:22:17 | prev | react-use-state.js:23:35:23:38 | prev | provenance | | | react-use-state.js:25:20:25:30 | window.name | react-use-state.js:21:10:21:14 | state | provenance | | -| sanitiser.js:16:7:16:27 | tainted | sanitiser.js:23:29:23:35 | tainted | provenance | | -| sanitiser.js:16:7:16:27 | tainted | sanitiser.js:30:29:30:35 | tainted | provenance | | -| sanitiser.js:16:7:16:27 | tainted | sanitiser.js:33:29:33:35 | tainted | provenance | | -| sanitiser.js:16:7:16:27 | tainted | sanitiser.js:38:29:38:35 | tainted | provenance | | -| sanitiser.js:16:7:16:27 | tainted | sanitiser.js:45:29:45:35 | tainted | provenance | | -| sanitiser.js:16:7:16:27 | tainted | sanitiser.js:48:19:48:25 | tainted | provenance | | -| sanitiser.js:16:17:16:27 | window.name | sanitiser.js:16:7:16:27 | tainted | provenance | | +| sanitiser.js:16:7:16:13 | tainted | sanitiser.js:23:29:23:35 | tainted | provenance | | +| sanitiser.js:16:7:16:13 | tainted | sanitiser.js:30:29:30:35 | tainted | provenance | | +| sanitiser.js:16:7:16:13 | tainted | sanitiser.js:33:29:33:35 | tainted | provenance | | +| sanitiser.js:16:7:16:13 | tainted | sanitiser.js:38:29:38:35 | tainted | provenance | | +| sanitiser.js:16:7:16:13 | tainted | sanitiser.js:45:29:45:35 | tainted | provenance | | +| sanitiser.js:16:7:16:13 | tainted | sanitiser.js:48:19:48:25 | tainted | provenance | | +| sanitiser.js:16:17:16:27 | window.name | sanitiser.js:16:7:16:13 | tainted | provenance | | | sanitiser.js:23:29:23:35 | tainted | sanitiser.js:23:21:23:44 | '' + ... '' | provenance | | | sanitiser.js:30:29:30:35 | tainted | sanitiser.js:30:21:30:44 | '' + ... '' | provenance | | | sanitiser.js:33:29:33:35 | tainted | sanitiser.js:33:21:33:44 | '' + ... '' | provenance | | @@ -969,8 +969,8 @@ edges | stored-xss.js:2:39:2:62 | documen ... .search | stored-xss.js:5:20:5:52 | session ... ssion') | provenance | | | stored-xss.js:3:35:3:58 | documen ... .search | stored-xss.js:8:20:8:48 | localSt ... local') | provenance | | | stored-xss.js:3:35:3:58 | documen ... .search | stored-xss.js:10:16:10:44 | localSt ... local') | provenance | | -| stored-xss.js:10:9:10:44 | href | stored-xss.js:12:35:12:38 | href | provenance | | -| stored-xss.js:10:16:10:44 | localSt ... local') | stored-xss.js:10:9:10:44 | href | provenance | | +| stored-xss.js:10:9:10:12 | href | stored-xss.js:12:35:12:38 | href | provenance | | +| stored-xss.js:10:16:10:44 | localSt ... local') | stored-xss.js:10:9:10:12 | href | provenance | | | stored-xss.js:12:35:12:38 | href | stored-xss.js:12:20:12:54 | "" | provenance | | | stored-xss.js:12:35:12:38 | href | stored-xss.js:12:20:12:54 | "" | provenance | Config | | string-manipulations.js:5:16:5:37 | documen ... on.href | string-manipulations.js:5:16:5:47 | documen ... lueOf() | provenance | | @@ -980,24 +980,24 @@ edges | string-manipulations.js:9:36:9:57 | documen ... on.href | string-manipulations.js:9:16:9:58 | String. ... n.href) | provenance | | | string-manipulations.js:10:23:10:44 | documen ... on.href | string-manipulations.js:10:16:10:45 | String( ... n.href) | provenance | | | tainted-url-suffix-arguments.js:3:17:3:17 | y | tainted-url-suffix-arguments.js:6:22:6:22 | y | provenance | | -| tainted-url-suffix-arguments.js:11:11:11:36 | url | tainted-url-suffix-arguments.js:12:17:12:19 | url | provenance | | -| tainted-url-suffix-arguments.js:11:17:11:36 | window.location.href | tainted-url-suffix-arguments.js:11:11:11:36 | url | provenance | | +| tainted-url-suffix-arguments.js:11:11:11:13 | url | tainted-url-suffix-arguments.js:12:17:12:19 | url | provenance | | +| tainted-url-suffix-arguments.js:11:17:11:36 | window.location.href | tainted-url-suffix-arguments.js:11:11:11:13 | url | provenance | | | tainted-url-suffix-arguments.js:12:17:12:19 | url | tainted-url-suffix-arguments.js:3:17:3:17 | y | provenance | | -| tooltip.jsx:6:11:6:30 | source | tooltip.jsx:10:25:10:30 | source | provenance | | -| tooltip.jsx:6:11:6:30 | source | tooltip.jsx:11:25:11:30 | source | provenance | | -| tooltip.jsx:6:20:6:30 | window.name | tooltip.jsx:6:11:6:30 | source | provenance | | -| tooltip.jsx:17:11:17:33 | provide [source] | tooltip.jsx:18:51:18:57 | provide [source] | provenance | | -| tooltip.jsx:17:21:17:33 | props.provide [source] | tooltip.jsx:17:11:17:33 | provide [source] | provenance | | +| tooltip.jsx:6:11:6:16 | source | tooltip.jsx:10:25:10:30 | source | provenance | | +| tooltip.jsx:6:11:6:16 | source | tooltip.jsx:11:25:11:30 | source | provenance | | +| tooltip.jsx:6:20:6:30 | window.name | tooltip.jsx:6:11:6:16 | source | provenance | | +| tooltip.jsx:17:11:17:17 | provide [source] | tooltip.jsx:18:51:18:57 | provide [source] | provenance | | +| tooltip.jsx:17:21:17:33 | props.provide [source] | tooltip.jsx:17:11:17:17 | provide [source] | provenance | | | tooltip.jsx:18:51:18:57 | provide [source] | tooltip.jsx:18:51:18:59 | provide() | provenance | | | tooltip.jsx:18:51:18:57 | provide [source] | tooltip.jsx:23:38:23:43 | source | provenance | | -| tooltip.jsx:22:11:22:30 | source | tooltip.jsx:17:21:17:33 | props.provide [source] | provenance | | -| tooltip.jsx:22:20:22:30 | window.name | tooltip.jsx:22:11:22:30 | source | provenance | | -| translate.js:6:7:6:39 | target | translate.js:7:42:7:47 | target | provenance | | -| translate.js:6:16:6:39 | documen ... .search | translate.js:6:7:6:39 | target | provenance | | -| translate.js:7:7:7:61 | searchParams | translate.js:8:27:8:38 | searchParams | provenance | | -| translate.js:7:7:7:61 | searchParams [MapValue] | translate.js:8:27:8:38 | searchParams [MapValue] | provenance | | -| translate.js:7:22:7:61 | new URL ... ing(1)) | translate.js:7:7:7:61 | searchParams | provenance | | -| translate.js:7:22:7:61 | new URL ... ing(1)) [MapValue] | translate.js:7:7:7:61 | searchParams [MapValue] | provenance | | +| tooltip.jsx:22:11:22:16 | source | tooltip.jsx:17:21:17:33 | props.provide [source] | provenance | | +| tooltip.jsx:22:20:22:30 | window.name | tooltip.jsx:22:11:22:16 | source | provenance | | +| translate.js:6:7:6:12 | target | translate.js:7:42:7:47 | target | provenance | | +| translate.js:6:16:6:39 | documen ... .search | translate.js:6:7:6:12 | target | provenance | | +| translate.js:7:7:7:18 | searchParams | translate.js:8:27:8:38 | searchParams | provenance | | +| translate.js:7:7:7:18 | searchParams [MapValue] | translate.js:8:27:8:38 | searchParams [MapValue] | provenance | | +| translate.js:7:22:7:61 | new URL ... ing(1)) | translate.js:7:7:7:18 | searchParams | provenance | | +| translate.js:7:22:7:61 | new URL ... ing(1)) [MapValue] | translate.js:7:7:7:18 | searchParams [MapValue] | provenance | | | translate.js:7:42:7:47 | target | translate.js:7:42:7:60 | target.substring(1) | provenance | | | translate.js:7:42:7:47 | target | translate.js:7:42:7:60 | target.substring(1) | provenance | Config | | translate.js:7:42:7:47 | target | translate.js:7:42:7:60 | target.substring(1) | provenance | Config | @@ -1024,32 +1024,32 @@ edges | tst3.js:7:32:7:35 | data | tst3.js:7:32:7:37 | data.p | provenance | | | tst3.js:9:37:9:40 | data | tst3.js:9:37:9:42 | data.p | provenance | | | tst3.js:10:38:10:41 | data | tst3.js:10:38:10:43 | data.p | provenance | | -| tst.js:2:7:2:39 | target | tst.js:4:18:4:23 | target | provenance | | -| tst.js:2:7:2:39 | target | tst.js:9:28:9:33 | target | provenance | | -| tst.js:2:7:2:39 | target | tst.js:17:42:17:47 | target | provenance | | -| tst.js:2:16:2:39 | documen ... .search | tst.js:2:7:2:39 | target | provenance | | +| tst.js:2:7:2:12 | target | tst.js:4:18:4:23 | target | provenance | | +| tst.js:2:7:2:12 | target | tst.js:9:28:9:33 | target | provenance | | +| tst.js:2:7:2:12 | target | tst.js:17:42:17:47 | target | provenance | | +| tst.js:2:16:2:39 | documen ... .search | tst.js:2:7:2:12 | target | provenance | | | tst.js:6:37:6:58 | documen ... on.href | tst.js:6:37:6:114 | documen ... t=")+8) | provenance | | | tst.js:6:37:6:58 | documen ... on.href | tst.js:6:37:6:114 | documen ... t=")+8) | provenance | Config | | tst.js:6:37:6:114 | documen ... t=")+8) | tst.js:6:18:6:126 | "" | provenance | | | tst.js:6:37:6:114 | documen ... t=")+8) | tst.js:6:18:6:126 | "" | provenance | | | tst.js:6:37:6:114 | documen ... t=")+8) | tst.js:6:18:6:126 | "" | provenance | Config | | tst.js:9:28:9:33 | target | tst.js:9:5:9:42 | '
    ' | provenance | Config | -| tst.js:14:7:14:56 | params | tst.js:15:18:15:23 | params | provenance | | -| tst.js:14:7:14:56 | params [MapValue] | tst.js:15:18:15:23 | params [MapValue] | provenance | | +| tst.js:14:7:14:12 | params | tst.js:15:18:15:23 | params | provenance | | +| tst.js:14:7:14:12 | params [MapValue] | tst.js:15:18:15:23 | params [MapValue] | provenance | | | tst.js:14:16:14:43 | (new UR ... ation)) [searchParams, MapValue] | tst.js:14:16:14:56 | (new UR ... hParams [MapValue] | provenance | | | tst.js:14:16:14:43 | (new UR ... ation)) [searchParams] | tst.js:14:16:14:56 | (new UR ... hParams | provenance | | -| tst.js:14:16:14:56 | (new UR ... hParams | tst.js:14:7:14:56 | params | provenance | | -| tst.js:14:16:14:56 | (new UR ... hParams [MapValue] | tst.js:14:7:14:56 | params [MapValue] | provenance | | +| tst.js:14:16:14:56 | (new UR ... hParams | tst.js:14:7:14:12 | params | provenance | | +| tst.js:14:16:14:56 | (new UR ... hParams [MapValue] | tst.js:14:7:14:12 | params [MapValue] | provenance | | | tst.js:14:17:14:42 | new URL ... cation) [searchParams, MapValue] | tst.js:14:16:14:43 | (new UR ... ation)) [searchParams, MapValue] | provenance | | | tst.js:14:17:14:42 | new URL ... cation) [searchParams] | tst.js:14:16:14:43 | (new UR ... ation)) [searchParams] | provenance | | | tst.js:14:25:14:41 | document.location | tst.js:14:17:14:42 | new URL ... cation) [searchParams, MapValue] | provenance | | | tst.js:14:25:14:41 | document.location | tst.js:14:17:14:42 | new URL ... cation) [searchParams] | provenance | | | tst.js:15:18:15:23 | params | tst.js:15:18:15:35 | params.get('name') | provenance | Config | | tst.js:15:18:15:23 | params [MapValue] | tst.js:15:18:15:35 | params.get('name') | provenance | | -| tst.js:17:7:17:61 | searchParams | tst.js:18:18:18:29 | searchParams | provenance | | -| tst.js:17:7:17:61 | searchParams [MapValue] | tst.js:18:18:18:29 | searchParams [MapValue] | provenance | | -| tst.js:17:22:17:61 | new URL ... ing(1)) | tst.js:17:7:17:61 | searchParams | provenance | | -| tst.js:17:22:17:61 | new URL ... ing(1)) [MapValue] | tst.js:17:7:17:61 | searchParams [MapValue] | provenance | | +| tst.js:17:7:17:18 | searchParams | tst.js:18:18:18:29 | searchParams | provenance | | +| tst.js:17:7:17:18 | searchParams [MapValue] | tst.js:18:18:18:29 | searchParams [MapValue] | provenance | | +| tst.js:17:22:17:61 | new URL ... ing(1)) | tst.js:17:7:17:18 | searchParams | provenance | | +| tst.js:17:22:17:61 | new URL ... ing(1)) [MapValue] | tst.js:17:7:17:18 | searchParams [MapValue] | provenance | | | tst.js:17:42:17:47 | target | tst.js:17:42:17:60 | target.substring(1) | provenance | | | tst.js:17:42:17:47 | target | tst.js:17:42:17:60 | target.substring(1) | provenance | Config | | tst.js:17:42:17:47 | target | tst.js:17:42:17:60 | target.substring(1) | provenance | Config | @@ -1099,31 +1099,31 @@ edges | tst.js:58:1:58:27 | [,docum ... search] [1] | tst.js:58:46:58:46 | x | provenance | | | tst.js:58:3:58:26 | documen ... .search | tst.js:58:1:58:27 | [,docum ... search] [1] | provenance | | | tst.js:58:46:58:46 | x | tst.js:60:20:60:20 | x | provenance | | -| tst.js:93:7:93:44 | v | tst.js:95:18:95:18 | v | provenance | | -| tst.js:93:7:93:44 | v | tst.js:120:18:120:18 | v | provenance | | +| tst.js:93:7:93:7 | v | tst.js:95:18:95:18 | v | provenance | | +| tst.js:93:7:93:7 | v | tst.js:120:18:120:18 | v | provenance | | | tst.js:93:11:93:34 | documen ... .search | tst.js:93:11:93:44 | documen ... bstr(1) | provenance | | | tst.js:93:11:93:34 | documen ... .search | tst.js:93:11:93:44 | documen ... bstr(1) | provenance | Config | -| tst.js:93:11:93:44 | documen ... bstr(1) | tst.js:93:7:93:44 | v | provenance | | +| tst.js:93:11:93:44 | documen ... bstr(1) | tst.js:93:7:93:7 | v | provenance | | | tst.js:132:29:132:50 | window. ... .search | tst.js:135:29:135:29 | v | provenance | | | tst.js:135:29:135:29 | v | tst.js:135:49:135:49 | v | provenance | | | tst.js:142:40:142:61 | window. ... .search | tst.js:139:29:139:46 | xssSourceService() | provenance | | -| tst.js:161:9:161:41 | target | tst.js:164:28:164:33 | target | provenance | | -| tst.js:161:18:161:41 | documen ... .search | tst.js:161:9:161:41 | target | provenance | | -| tst.js:168:9:168:42 | tainted | tst.js:170:31:170:37 | tainted | provenance | | -| tst.js:168:9:168:42 | tainted | tst.js:172:42:172:48 | tainted | provenance | | -| tst.js:168:9:168:42 | tainted | tst.js:173:33:173:39 | tainted | provenance | | -| tst.js:168:9:168:42 | tainted | tst.js:175:54:175:60 | tainted | provenance | | -| tst.js:168:9:168:42 | tainted | tst.js:176:45:176:51 | tainted | provenance | | -| tst.js:168:9:168:42 | tainted | tst.js:177:49:177:55 | tainted | provenance | | -| tst.js:168:19:168:42 | documen ... .search | tst.js:168:9:168:42 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:183:67:183:73 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:184:67:184:73 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:220:35:220:41 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:222:20:222:26 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:224:23:224:29 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:225:23:225:29 | tainted | provenance | | -| tst.js:181:9:181:42 | tainted | tst.js:239:23:239:29 | tainted | provenance | | -| tst.js:181:19:181:42 | documen ... .search | tst.js:181:9:181:42 | tainted | provenance | | +| tst.js:161:9:161:14 | target | tst.js:164:28:164:33 | target | provenance | | +| tst.js:161:18:161:41 | documen ... .search | tst.js:161:9:161:14 | target | provenance | | +| tst.js:168:9:168:15 | tainted | tst.js:170:31:170:37 | tainted | provenance | | +| tst.js:168:9:168:15 | tainted | tst.js:172:42:172:48 | tainted | provenance | | +| tst.js:168:9:168:15 | tainted | tst.js:173:33:173:39 | tainted | provenance | | +| tst.js:168:9:168:15 | tainted | tst.js:175:54:175:60 | tainted | provenance | | +| tst.js:168:9:168:15 | tainted | tst.js:176:45:176:51 | tainted | provenance | | +| tst.js:168:9:168:15 | tainted | tst.js:177:49:177:55 | tainted | provenance | | +| tst.js:168:19:168:42 | documen ... .search | tst.js:168:9:168:15 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:183:67:183:73 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:184:67:184:73 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:220:35:220:41 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:222:20:222:26 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:224:23:224:29 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:225:23:225:29 | tainted | provenance | | +| tst.js:181:9:181:15 | tainted | tst.js:239:23:239:29 | tainted | provenance | | +| tst.js:181:19:181:42 | documen ... .search | tst.js:181:9:181:15 | tainted | provenance | | | tst.js:183:67:183:73 | tainted | tst.js:184:67:184:73 | tainted | provenance | | | tst.js:184:67:184:73 | tainted | tst.js:188:35:188:41 | tainted | provenance | | | tst.js:184:67:184:73 | tainted | tst.js:190:46:190:52 | tainted | provenance | | @@ -1144,8 +1144,8 @@ edges | tst.js:225:23:225:29 | tainted | tst.js:239:23:239:29 | tainted | provenance | | | tst.js:231:39:231:55 | props.propTainted | tst.js:235:60:235:82 | this.st ... Tainted | provenance | | | tst.js:239:23:239:29 | tainted | tst.js:231:39:231:55 | props.propTainted | provenance | | -| tst.js:269:9:269:29 | tainted | tst.js:272:59:272:65 | tainted | provenance | | -| tst.js:269:19:269:29 | window.name | tst.js:269:9:269:29 | tainted | provenance | | +| tst.js:269:9:269:15 | tainted | tst.js:272:59:272:65 | tainted | provenance | | +| tst.js:269:19:269:29 | window.name | tst.js:269:9:269:15 | tainted | provenance | | | tst.js:285:9:285:16 | location | tst.js:286:10:286:10 | e | provenance | | | tst.js:286:10:286:10 | e | tst.js:287:20:287:20 | e | provenance | | | tst.js:292:10:292:17 | location | tst.js:294:10:294:10 | e | provenance | | @@ -1154,34 +1154,34 @@ edges | tst.js:311:10:311:35 | new URL ... cation) [searchParams] | tst.js:315:16:315:30 | getTaintedUrl() [searchParams] | provenance | | | tst.js:311:18:311:34 | document.location | tst.js:311:10:311:35 | new URL ... cation) [searchParams, MapValue] | provenance | | | tst.js:311:18:311:34 | document.location | tst.js:311:10:311:35 | new URL ... cation) [searchParams] | provenance | | -| tst.js:315:7:315:43 | params | tst.js:316:18:316:23 | params | provenance | | -| tst.js:315:7:315:43 | params [MapValue] | tst.js:316:18:316:23 | params [MapValue] | provenance | | +| tst.js:315:7:315:12 | params | tst.js:316:18:316:23 | params | provenance | | +| tst.js:315:7:315:12 | params [MapValue] | tst.js:316:18:316:23 | params [MapValue] | provenance | | | tst.js:315:16:315:30 | getTaintedUrl() [searchParams, MapValue] | tst.js:315:16:315:43 | getTain ... hParams [MapValue] | provenance | | | tst.js:315:16:315:30 | getTaintedUrl() [searchParams] | tst.js:315:16:315:43 | getTain ... hParams | provenance | | -| tst.js:315:16:315:43 | getTain ... hParams | tst.js:315:7:315:43 | params | provenance | | -| tst.js:315:16:315:43 | getTain ... hParams [MapValue] | tst.js:315:7:315:43 | params [MapValue] | provenance | | +| tst.js:315:16:315:43 | getTain ... hParams | tst.js:315:7:315:12 | params | provenance | | +| tst.js:315:16:315:43 | getTain ... hParams [MapValue] | tst.js:315:7:315:12 | params [MapValue] | provenance | | | tst.js:316:18:316:23 | params | tst.js:316:18:316:35 | params.get('name') | provenance | Config | | tst.js:316:18:316:23 | params [MapValue] | tst.js:316:18:316:35 | params.get('name') | provenance | | | tst.js:325:12:325:37 | new URL ... cation) [hash] | tst.js:327:5:327:12 | getUrl() [hash] | provenance | | | tst.js:325:20:325:36 | document.location | tst.js:325:12:325:37 | new URL ... cation) [hash] | provenance | | | tst.js:327:5:327:12 | getUrl() [hash] | tst.js:327:5:327:17 | getUrl().hash | provenance | | | tst.js:327:5:327:17 | getUrl().hash | tst.js:327:5:327:30 | getUrl( ... ring(1) | provenance | Config | -| tst.js:332:7:332:39 | target | tst.js:333:12:333:17 | target | provenance | | -| tst.js:332:16:332:39 | documen ... .search | tst.js:332:7:332:39 | target | provenance | | -| tst.js:339:10:339:42 | target | tst.js:340:16:340:21 | target | provenance | | -| tst.js:339:10:339:42 | target | tst.js:341:20:341:25 | target | provenance | | -| tst.js:339:19:339:42 | documen ... .search | tst.js:339:10:339:42 | target | provenance | | +| tst.js:332:7:332:12 | target | tst.js:333:12:333:17 | target | provenance | | +| tst.js:332:16:332:39 | documen ... .search | tst.js:332:7:332:12 | target | provenance | | +| tst.js:339:10:339:15 | target | tst.js:340:16:340:21 | target | provenance | | +| tst.js:339:10:339:15 | target | tst.js:341:20:341:25 | target | provenance | | +| tst.js:339:19:339:42 | documen ... .search | tst.js:339:10:339:15 | target | provenance | | | tst.js:340:16:340:21 | target | tst.js:341:20:341:25 | target | provenance | | | tst.js:341:20:341:25 | target | tst.js:344:21:344:26 | target | provenance | | | tst.js:341:20:341:25 | target | tst.js:347:18:347:23 | target | provenance | | -| tst.js:355:7:355:39 | target | tst.js:357:18:357:23 | target | provenance | | -| tst.js:355:16:355:39 | documen ... .search | tst.js:355:7:355:39 | target | provenance | | -| tst.js:364:7:364:39 | target | tst.js:367:18:367:23 | target | provenance | | -| tst.js:364:7:364:39 | target | tst.js:369:18:369:23 | target | provenance | | -| tst.js:364:7:364:39 | target | tst.js:380:18:380:23 | target | provenance | | -| tst.js:364:7:364:39 | target | tst.js:389:18:389:23 | target | provenance | | -| tst.js:364:7:364:39 | target | tst.js:391:19:391:24 | target | provenance | | -| tst.js:364:16:364:39 | documen ... .search | tst.js:364:7:364:39 | target | provenance | | +| tst.js:355:7:355:12 | target | tst.js:357:18:357:23 | target | provenance | | +| tst.js:355:16:355:39 | documen ... .search | tst.js:355:7:355:12 | target | provenance | | +| tst.js:364:7:364:12 | target | tst.js:367:18:367:23 | target | provenance | | +| tst.js:364:7:364:12 | target | tst.js:369:18:369:23 | target | provenance | | +| tst.js:364:7:364:12 | target | tst.js:380:18:380:23 | target | provenance | | +| tst.js:364:7:364:12 | target | tst.js:389:18:389:23 | target | provenance | | +| tst.js:364:7:364:12 | target | tst.js:391:19:391:24 | target | provenance | | +| tst.js:364:16:364:39 | documen ... .search | tst.js:364:7:364:12 | target | provenance | | | tst.js:369:18:369:23 | target | tst.js:369:18:369:29 | target.taint | provenance | | | tst.js:374:3:374:8 | [post update] target [taint3] | tst.js:375:18:375:23 | target [taint3] | provenance | | | tst.js:374:19:374:42 | documen ... .search | tst.js:374:3:374:8 | [post update] target [taint3] | provenance | | @@ -1194,65 +1194,65 @@ edges | tst.js:391:19:391:24 | target [taint8] | tst.js:391:19:391:31 | target.taint8 | provenance | | | tst.js:391:19:391:31 | target.taint8 | tst.js:391:3:391:8 | [post update] target [taint8] | provenance | | | tst.js:392:18:392:23 | target [taint8] | tst.js:392:18:392:30 | target.taint8 | provenance | | -| tst.js:399:7:399:46 | payload | tst.js:400:18:400:24 | payload | provenance | | +| tst.js:399:7:399:13 | payload | tst.js:400:18:400:24 | payload | provenance | | | tst.js:399:17:399:36 | window.location.hash | tst.js:399:17:399:46 | window. ... bstr(1) | provenance | | | tst.js:399:17:399:36 | window.location.hash | tst.js:399:17:399:46 | window. ... bstr(1) | provenance | Config | -| tst.js:399:17:399:46 | window. ... bstr(1) | tst.js:399:7:399:46 | payload | provenance | | -| tst.js:402:7:402:55 | match | tst.js:404:20:404:24 | match | provenance | | +| tst.js:399:17:399:46 | window. ... bstr(1) | tst.js:399:7:399:13 | payload | provenance | | +| tst.js:402:7:402:11 | match | tst.js:404:20:404:24 | match | provenance | | | tst.js:402:15:402:34 | window.location.hash | tst.js:402:15:402:55 | window. ... (\\w+)/) | provenance | | -| tst.js:402:15:402:55 | window. ... (\\w+)/) | tst.js:402:7:402:55 | match | provenance | | +| tst.js:402:15:402:55 | window. ... (\\w+)/) | tst.js:402:7:402:11 | match | provenance | | | tst.js:404:20:404:24 | match | tst.js:404:20:404:27 | match[1] | provenance | | | tst.js:407:18:407:37 | window.location.hash | tst.js:407:18:407:48 | window. ... it('#') [1] | provenance | Config | | tst.js:407:18:407:48 | window. ... it('#') [1] | tst.js:407:18:407:51 | window. ... '#')[1] | provenance | | -| tst.js:411:7:411:39 | target | tst.js:413:18:413:23 | target | provenance | | -| tst.js:411:16:411:39 | documen ... .search | tst.js:411:7:411:39 | target | provenance | | +| tst.js:411:7:411:12 | target | tst.js:413:18:413:23 | target | provenance | | +| tst.js:411:16:411:39 | documen ... .search | tst.js:411:7:411:12 | target | provenance | | | tst.js:413:18:413:23 | target | tst.js:413:18:413:89 | target. ... data>') | provenance | | -| tst.js:419:6:419:38 | source | tst.js:423:28:423:33 | source | provenance | | -| tst.js:419:6:419:38 | source | tst.js:424:33:424:38 | source | provenance | | -| tst.js:419:6:419:38 | source | tst.js:425:34:425:39 | source | provenance | | -| tst.js:419:6:419:38 | source | tst.js:426:41:426:46 | source | provenance | | -| tst.js:419:6:419:38 | source | tst.js:427:44:427:49 | source | provenance | | -| tst.js:419:6:419:38 | source | tst.js:428:32:428:37 | source | provenance | | -| tst.js:419:15:419:38 | documen ... .search | tst.js:419:6:419:38 | source | provenance | | -| tst.js:436:7:436:39 | source | tst.js:438:18:438:23 | source | provenance | | -| tst.js:436:7:436:39 | source | tst.js:439:36:439:41 | source | provenance | | -| tst.js:436:16:436:39 | documen ... .search | tst.js:436:7:436:39 | source | provenance | | +| tst.js:419:6:419:11 | source | tst.js:423:28:423:33 | source | provenance | | +| tst.js:419:6:419:11 | source | tst.js:424:33:424:38 | source | provenance | | +| tst.js:419:6:419:11 | source | tst.js:425:34:425:39 | source | provenance | | +| tst.js:419:6:419:11 | source | tst.js:426:41:426:46 | source | provenance | | +| tst.js:419:6:419:11 | source | tst.js:427:44:427:49 | source | provenance | | +| tst.js:419:6:419:11 | source | tst.js:428:32:428:37 | source | provenance | | +| tst.js:419:15:419:38 | documen ... .search | tst.js:419:6:419:11 | source | provenance | | +| tst.js:436:7:436:12 | source | tst.js:438:18:438:23 | source | provenance | | +| tst.js:436:7:436:12 | source | tst.js:439:36:439:41 | source | provenance | | +| tst.js:436:16:436:39 | documen ... .search | tst.js:436:7:436:12 | source | provenance | | | tst.js:439:36:439:41 | source | tst.js:439:18:439:42 | ansiToH ... source) | provenance | | -| tst.js:443:6:443:38 | source | tst.js:446:21:446:26 | source | provenance | | -| tst.js:443:6:443:38 | source | tst.js:448:19:448:24 | source | provenance | | -| tst.js:443:6:443:38 | source | tst.js:450:20:450:25 | source | provenance | | -| tst.js:443:15:443:38 | documen ... .search | tst.js:443:6:443:38 | source | provenance | | -| tst.js:454:7:454:46 | url | tst.js:456:19:456:21 | url | provenance | | -| tst.js:454:7:454:46 | url | tst.js:457:26:457:28 | url | provenance | | -| tst.js:454:7:454:46 | url | tst.js:458:25:458:27 | url | provenance | | -| tst.js:454:7:454:46 | url | tst.js:459:20:459:22 | url | provenance | | -| tst.js:454:7:454:46 | url | tst.js:469:22:469:24 | url | provenance | | +| tst.js:443:6:443:11 | source | tst.js:446:21:446:26 | source | provenance | | +| tst.js:443:6:443:11 | source | tst.js:448:19:448:24 | source | provenance | | +| tst.js:443:6:443:11 | source | tst.js:450:20:450:25 | source | provenance | | +| tst.js:443:15:443:38 | documen ... .search | tst.js:443:6:443:11 | source | provenance | | +| tst.js:454:7:454:9 | url | tst.js:456:19:456:21 | url | provenance | | +| tst.js:454:7:454:9 | url | tst.js:457:26:457:28 | url | provenance | | +| tst.js:454:7:454:9 | url | tst.js:458:25:458:27 | url | provenance | | +| tst.js:454:7:454:9 | url | tst.js:459:20:459:22 | url | provenance | | +| tst.js:454:7:454:9 | url | tst.js:469:22:469:24 | url | provenance | | | tst.js:454:13:454:36 | documen ... .search | tst.js:454:13:454:46 | documen ... bstr(1) | provenance | Config | -| tst.js:454:13:454:46 | documen ... bstr(1) | tst.js:454:7:454:46 | url | provenance | | +| tst.js:454:13:454:46 | documen ... bstr(1) | tst.js:454:7:454:9 | url | provenance | | | tst.js:474:23:474:35 | location.hash | tst.js:474:23:474:45 | locatio ... bstr(1) | provenance | Config | | tst.js:477:18:477:30 | location.hash | tst.js:477:18:477:40 | locatio ... bstr(1) | provenance | Config | | tst.js:484:43:484:62 | window.location.hash | tst.js:484:33:484:63 | decodeU ... n.hash) | provenance | | -| tst.js:491:7:491:39 | target | tst.js:492:18:492:23 | target | provenance | | -| tst.js:491:16:491:39 | documen ... .search | tst.js:491:7:491:39 | target | provenance | | +| tst.js:491:7:491:12 | target | tst.js:492:18:492:23 | target | provenance | | +| tst.js:491:16:491:39 | documen ... .search | tst.js:491:7:491:12 | target | provenance | | | tst.js:492:18:492:23 | target | tst.js:492:18:492:54 | target. ... "), '') | provenance | | -| tst.js:498:7:498:26 | source | tst.js:499:27:499:32 | source | provenance | | -| tst.js:498:16:498:26 | window.name | tst.js:498:7:498:26 | source | provenance | | +| tst.js:498:7:498:12 | source | tst.js:499:27:499:32 | source | provenance | | +| tst.js:498:16:498:26 | window.name | tst.js:498:7:498:12 | source | provenance | | | tst.js:499:27:499:32 | source | tst.js:499:18:499:33 | unescape(source) | provenance | | | typeahead.js:9:28:9:30 | loc | typeahead.js:10:16:10:18 | loc | provenance | | -| typeahead.js:20:13:20:45 | target | typeahead.js:21:12:21:17 | target | provenance | | -| typeahead.js:20:22:20:45 | documen ... .search | typeahead.js:20:13:20:45 | target | provenance | | +| typeahead.js:20:13:20:18 | target | typeahead.js:21:12:21:17 | target | provenance | | +| typeahead.js:20:22:20:45 | documen ... .search | typeahead.js:20:13:20:18 | target | provenance | | | typeahead.js:21:12:21:17 | target | typeahead.js:24:30:24:32 | val | provenance | | | typeahead.js:24:30:24:32 | val | typeahead.js:25:18:25:20 | val | provenance | | | v-html.vue:6:42:6:58 | document.location | v-html.vue:2:8:2:23 | v-html=tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:4:14:4:20 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:5:12:5:18 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:6:19:6:25 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:7:14:7:20 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:9:19:9:25 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:10:16:10:22 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:11:24:11:30 | tainted | provenance | | -| various-concat-obfuscations.js:2:6:2:39 | tainted | various-concat-obfuscations.js:12:19:12:25 | tainted | provenance | | -| various-concat-obfuscations.js:2:16:2:39 | documen ... .search | various-concat-obfuscations.js:2:6:2:39 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:4:14:4:20 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:5:12:5:18 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:6:19:6:25 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:7:14:7:20 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:9:19:9:25 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:10:16:10:22 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:11:24:11:30 | tainted | provenance | | +| various-concat-obfuscations.js:2:6:2:12 | tainted | various-concat-obfuscations.js:12:19:12:25 | tainted | provenance | | +| various-concat-obfuscations.js:2:16:2:39 | documen ... .search | various-concat-obfuscations.js:2:6:2:12 | tainted | provenance | | | various-concat-obfuscations.js:4:14:4:20 | tainted | various-concat-obfuscations.js:4:4:4:31 | "
    " ...
    " | provenance | Config | | various-concat-obfuscations.js:5:12:5:18 | tainted | various-concat-obfuscations.js:5:4:5:26 | `
    $ ...
    ` | provenance | Config | | various-concat-obfuscations.js:6:4:6:26 | "
    " ... ainted) | various-concat-obfuscations.js:6:4:6:43 | "
    " ... /div>") | provenance | | @@ -1282,20 +1282,20 @@ edges | various-concat-obfuscations.js:21:17:21:40 | documen ... .search | various-concat-obfuscations.js:21:17:21:46 | documen ... h.attrs | provenance | | | various-concat-obfuscations.js:21:17:21:46 | documen ... h.attrs | various-concat-obfuscations.js:17:24:17:28 | attrs | provenance | | | various-concat-obfuscations.js:21:17:21:46 | documen ... h.attrs | various-concat-obfuscations.js:21:4:21:47 | indirec ... .attrs) | provenance | Config | -| winjs.js:2:7:2:53 | tainted | winjs.js:3:43:3:49 | tainted | provenance | | -| winjs.js:2:7:2:53 | tainted | winjs.js:4:43:4:49 | tainted | provenance | | +| winjs.js:2:7:2:13 | tainted | winjs.js:3:43:3:49 | tainted | provenance | | +| winjs.js:2:7:2:13 | tainted | winjs.js:4:43:4:49 | tainted | provenance | | | winjs.js:2:17:2:40 | documen ... .search | winjs.js:2:17:2:53 | documen ... ring(1) | provenance | | | winjs.js:2:17:2:40 | documen ... .search | winjs.js:2:17:2:53 | documen ... ring(1) | provenance | Config | -| winjs.js:2:17:2:53 | documen ... ring(1) | winjs.js:2:7:2:53 | tainted | provenance | | -| xmlRequest.js:8:13:8:47 | json | xmlRequest.js:9:28:9:31 | json | provenance | | -| xmlRequest.js:8:20:8:47 | JSON.pa ... seText) | xmlRequest.js:8:13:8:47 | json | provenance | | +| winjs.js:2:17:2:53 | documen ... ring(1) | winjs.js:2:7:2:13 | tainted | provenance | | +| xmlRequest.js:8:13:8:16 | json | xmlRequest.js:9:28:9:31 | json | provenance | | +| xmlRequest.js:8:20:8:47 | JSON.pa ... seText) | xmlRequest.js:8:13:8:16 | json | provenance | | | xmlRequest.js:8:31:8:46 | xhr.responseText | xmlRequest.js:8:20:8:47 | JSON.pa ... seText) | provenance | | | xmlRequest.js:9:28:9:31 | json | xmlRequest.js:9:28:9:39 | json.message | provenance | | -| xmlRequest.js:20:11:20:48 | resp | xmlRequest.js:21:29:21:32 | resp | provenance | | -| xmlRequest.js:20:18:20:48 | await g ... rl }}") | xmlRequest.js:20:11:20:48 | resp | provenance | | +| xmlRequest.js:20:11:20:14 | resp | xmlRequest.js:21:29:21:32 | resp | provenance | | +| xmlRequest.js:20:18:20:48 | await g ... rl }}") | xmlRequest.js:20:11:20:14 | resp | provenance | | | xmlRequest.js:20:24:20:48 | got.get ... rl }}") | xmlRequest.js:20:18:20:48 | await g ... rl }}") | provenance | | -| xmlRequest.js:21:11:21:38 | json | xmlRequest.js:22:24:22:27 | json | provenance | | -| xmlRequest.js:21:18:21:38 | JSON.pa ... p.body) | xmlRequest.js:21:11:21:38 | json | provenance | | +| xmlRequest.js:21:11:21:14 | json | xmlRequest.js:22:24:22:27 | json | provenance | | +| xmlRequest.js:21:18:21:38 | JSON.pa ... p.body) | xmlRequest.js:21:11:21:14 | json | provenance | | | xmlRequest.js:21:29:21:32 | resp | xmlRequest.js:21:18:21:38 | JSON.pa ... p.body) | provenance | | | xmlRequest.js:22:24:22:27 | json | xmlRequest.js:22:24:22:35 | json.message | provenance | | subpaths diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXssWithResponseThreat/Xss.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXssWithResponseThreat/Xss.expected index afc30e24608..99cafddc41d 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXssWithResponseThreat/Xss.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXssWithResponseThreat/Xss.expected @@ -20,18 +20,18 @@ | testUseQueries.vue:25:10:25:23 | v-html=data2 | testUseQueries.vue:11:36:11:49 | fetch("${id}") | testUseQueries.vue:25:10:25:23 | v-html=data2 | Cross-site scripting vulnerability due to $@. | testUseQueries.vue:11:36:11:49 | fetch("${id}") | user-provided value | edges | interceptors.js:7:6:7:13 | response | interceptors.js:8:35:8:42 | response | provenance | | -| interceptors.js:8:15:8:47 | userGeneratedHtml | interceptors.js:9:56:9:72 | userGeneratedHtml | provenance | | -| interceptors.js:8:35:8:42 | response | interceptors.js:8:15:8:47 | userGeneratedHtml | provenance | | -| test.jsx:5:11:5:63 | response | test.jsx:6:24:6:31 | response | provenance | | -| test.jsx:5:22:5:63 | await f ... ntent") | test.jsx:5:11:5:63 | response | provenance | | +| interceptors.js:8:15:8:31 | userGeneratedHtml | interceptors.js:9:56:9:72 | userGeneratedHtml | provenance | | +| interceptors.js:8:35:8:42 | response | interceptors.js:8:15:8:31 | userGeneratedHtml | provenance | | +| test.jsx:5:11:5:18 | response | test.jsx:6:24:6:31 | response | provenance | | +| test.jsx:5:22:5:63 | await f ... ntent") | test.jsx:5:11:5:18 | response | provenance | | | test.jsx:5:28:5:63 | fetch(" ... ntent") | test.jsx:5:22:5:63 | await f ... ntent") | provenance | | -| test.jsx:6:11:6:38 | data | test.jsx:7:12:7:15 | data | provenance | | -| test.jsx:6:18:6:38 | await r ... .json() | test.jsx:6:11:6:38 | data | provenance | | +| test.jsx:6:11:6:14 | data | test.jsx:7:12:7:15 | data | provenance | | +| test.jsx:6:18:6:38 | await r ... .json() | test.jsx:6:11:6:14 | data | provenance | | | test.jsx:6:24:6:31 | response | test.jsx:6:24:6:38 | response.json() | provenance | | | test.jsx:6:24:6:38 | response.json() | test.jsx:6:18:6:38 | await r ... .json() | provenance | | | test.jsx:7:12:7:15 | data | test.jsx:15:13:15:16 | data | provenance | | -| test.jsx:15:11:17:5 | data | test.jsx:27:29:27:32 | data | provenance | | -| test.jsx:15:13:15:16 | data | test.jsx:15:11:17:5 | data | provenance | | +| test.jsx:15:13:15:16 | data | test.jsx:15:13:15:16 | data | provenance | | +| test.jsx:15:13:15:16 | data | test.jsx:27:29:27:32 | data | provenance | | | test.ts:8:9:8:79 | this.#h ... query') | test.ts:20:28:20:35 | response | provenance | | | test.ts:20:28:20:35 | response | test.ts:21:57:21:64 | response | provenance | | | test.ts:20:28:20:35 | response | test.ts:24:43:24:50 | response | provenance | | @@ -41,78 +41,78 @@ edges | test.ts:24:43:24:55 | response.name | test.ts:24:36:24:90 | `

    ${ ... o}

    ` | provenance | | | test.ts:24:67:24:74 | response | test.ts:24:67:24:84 | response.owner.bio | provenance | | | test.ts:24:67:24:84 | response.owner.bio | test.ts:24:36:24:90 | `

    ${ ... o}

    ` | provenance | | -| test.vue:7:11:13:6 | data | test.vue:15:21:15:24 | data | provenance | | -| test.vue:7:45:7:48 | data | test.vue:7:11:13:6 | data | provenance | | -| test.vue:10:15:10:84 | response | test.vue:11:16:11:23 | response | provenance | | -| test.vue:10:26:10:84 | await f ... sts/1") | test.vue:10:15:10:84 | response | provenance | | +| test.vue:7:45:7:48 | data | test.vue:7:45:7:48 | data | provenance | | +| test.vue:7:45:7:48 | data | test.vue:15:21:15:24 | data | provenance | | +| test.vue:10:15:10:22 | response | test.vue:11:16:11:23 | response | provenance | | +| test.vue:10:26:10:84 | await f ... sts/1") | test.vue:10:15:10:22 | response | provenance | | | test.vue:10:32:10:84 | fetch(" ... sts/1") | test.vue:10:26:10:84 | await f ... sts/1") | provenance | | | test.vue:11:16:11:23 | response | test.vue:11:16:11:30 | response.json() | provenance | | | test.vue:11:16:11:30 | response.json() | test.vue:7:45:7:48 | data | provenance | | | test.vue:15:21:15:24 | data | test.vue:22:10:22:22 | v-html=data | provenance | | -| testReactRelay.tsx:5:9:5:52 | commentData | testReactRelay.tsx:7:43:7:53 | commentData | provenance | | -| testReactRelay.tsx:5:23:5:52 | useFrag ... entRef) | testReactRelay.tsx:5:9:5:52 | commentData | provenance | | +| testReactRelay.tsx:5:9:5:19 | commentData | testReactRelay.tsx:7:43:7:53 | commentData | provenance | | +| testReactRelay.tsx:5:23:5:52 | useFrag ... entRef) | testReactRelay.tsx:5:9:5:19 | commentData | provenance | | | testReactRelay.tsx:7:43:7:53 | commentData | testReactRelay.tsx:7:43:7:58 | commentData.text | provenance | | -| testReactRelay.tsx:17:9:17:42 | data | testReactRelay.tsx:18:48:18:51 | data | provenance | | -| testReactRelay.tsx:17:16:17:42 | useLazy ... ry, {}) | testReactRelay.tsx:17:9:17:42 | data | provenance | | +| testReactRelay.tsx:17:9:17:12 | data | testReactRelay.tsx:18:48:18:51 | data | provenance | | +| testReactRelay.tsx:17:16:17:42 | useLazy ... ry, {}) | testReactRelay.tsx:17:9:17:12 | data | provenance | | | testReactRelay.tsx:18:48:18:51 | data | testReactRelay.tsx:18:48:18:68 | data.co ... 0].text | provenance | | | testReactRelay.tsx:28:17:28:56 | usePrel ... erence) | testReactRelay.tsx:28:17:28:67 | usePrel ... r?.name | provenance | | -| testReactRelay.tsx:37:9:37:40 | data | testReactRelay.tsx:38:49:38:52 | data | provenance | | -| testReactRelay.tsx:37:16:37:40 | useClie ... ry, {}) | testReactRelay.tsx:37:9:37:40 | data | provenance | | -| testReactRelay.tsx:44:9:44:70 | data | testReactRelay.tsx:47:46:47:49 | data | provenance | | -| testReactRelay.tsx:44:10:44:13 | data | testReactRelay.tsx:44:9:44:70 | data | provenance | | -| testReactRelay.tsx:61:9:70:38 | data | testReactRelay.tsx:71:49:71:52 | data | provenance | | -| testReactRelay.tsx:62:5:62:8 | data | testReactRelay.tsx:61:9:70:38 | data | provenance | | -| testReactRelay.tsx:80:9:80:54 | feedbackText | testReactRelay.tsx:88:50:88:61 | feedbackText | provenance | | -| testReactRelay.tsx:80:10:80:21 | feedbackText | testReactRelay.tsx:80:9:80:54 | feedbackText | provenance | | +| testReactRelay.tsx:37:9:37:12 | data | testReactRelay.tsx:38:49:38:52 | data | provenance | | +| testReactRelay.tsx:37:16:37:40 | useClie ... ry, {}) | testReactRelay.tsx:37:9:37:12 | data | provenance | | +| testReactRelay.tsx:44:10:44:13 | data | testReactRelay.tsx:44:10:44:13 | data | provenance | | +| testReactRelay.tsx:44:10:44:13 | data | testReactRelay.tsx:47:46:47:49 | data | provenance | | +| testReactRelay.tsx:62:5:62:8 | data | testReactRelay.tsx:62:5:62:8 | data | provenance | | +| testReactRelay.tsx:62:5:62:8 | data | testReactRelay.tsx:71:49:71:52 | data | provenance | | +| testReactRelay.tsx:80:10:80:21 | feedbackText | testReactRelay.tsx:80:10:80:21 | feedbackText | provenance | | +| testReactRelay.tsx:80:10:80:21 | feedbackText | testReactRelay.tsx:88:50:88:61 | feedbackText | provenance | | | testReactRelay.tsx:83:17:83:20 | data | testReactRelay.tsx:84:23:84:26 | data | provenance | | | testReactRelay.tsx:84:23:84:26 | data | testReactRelay.tsx:80:10:80:21 | feedbackText | provenance | | -| testReactRelay.tsx:95:9:95:50 | fragmentRef | testReactRelay.tsx:113:48:113:58 | fragmentRef | provenance | | -| testReactRelay.tsx:95:10:95:20 | fragmentRef | testReactRelay.tsx:95:9:95:50 | fragmentRef | provenance | | +| testReactRelay.tsx:95:10:95:20 | fragmentRef | testReactRelay.tsx:95:10:95:20 | fragmentRef | provenance | | +| testReactRelay.tsx:95:10:95:20 | fragmentRef | testReactRelay.tsx:113:48:113:58 | fragmentRef | provenance | | | testReactRelay.tsx:100:14:100:16 | res | testReactRelay.tsx:101:22:101:24 | res | provenance | | | testReactRelay.tsx:101:22:101:24 | res | testReactRelay.tsx:95:10:95:20 | fragmentRef | provenance | | | testReactRelay.tsx:124:12:124:15 | data | testReactRelay.tsx:127:35:127:38 | data | provenance | | | testReactRelay.tsx:127:35:127:38 | data | testReactRelay.tsx:127:35:127:43 | data.user | provenance | | -| testReactRelay.tsx:136:9:136:39 | data | testReactRelay.tsx:137:50:137:53 | data | provenance | | -| testReactRelay.tsx:136:16:136:39 | readFra ... y, key) | testReactRelay.tsx:136:9:136:39 | data | provenance | | -| testReactUseQueries.jsx:4:9:4:53 | response | testReactUseQueries.jsx:5:10:5:17 | response | provenance | | -| testReactUseQueries.jsx:4:20:4:53 | await f ... e.com') | testReactUseQueries.jsx:4:9:4:53 | response | provenance | | +| testReactRelay.tsx:136:9:136:12 | data | testReactRelay.tsx:137:50:137:53 | data | provenance | | +| testReactRelay.tsx:136:16:136:39 | readFra ... y, key) | testReactRelay.tsx:136:9:136:12 | data | provenance | | +| testReactUseQueries.jsx:4:9:4:16 | response | testReactUseQueries.jsx:5:10:5:17 | response | provenance | | +| testReactUseQueries.jsx:4:20:4:53 | await f ... e.com') | testReactUseQueries.jsx:4:9:4:16 | response | provenance | | | testReactUseQueries.jsx:4:26:4:53 | fetch(' ... e.com') | testReactUseQueries.jsx:4:20:4:53 | await f ... e.com') | provenance | | | testReactUseQueries.jsx:5:10:5:17 | response | testReactUseQueries.jsx:5:10:5:24 | response.json() | provenance | | | testReactUseQueries.jsx:5:10:5:24 | response.json() | testReactUseQueries.jsx:37:25:37:38 | repoQuery.data | provenance | | -| testUseQueries2.vue:6:11:6:63 | response | testUseQueries2.vue:7:24:7:31 | response | provenance | | -| testUseQueries2.vue:6:22:6:63 | await f ... ntent") | testUseQueries2.vue:6:11:6:63 | response | provenance | | +| testUseQueries2.vue:6:11:6:18 | response | testUseQueries2.vue:7:24:7:31 | response | provenance | | +| testUseQueries2.vue:6:22:6:63 | await f ... ntent") | testUseQueries2.vue:6:11:6:18 | response | provenance | | | testUseQueries2.vue:6:28:6:63 | fetch(" ... ntent") | testUseQueries2.vue:6:22:6:63 | await f ... ntent") | provenance | | -| testUseQueries2.vue:7:11:7:38 | data | testUseQueries2.vue:8:12:8:15 | data | provenance | | -| testUseQueries2.vue:7:18:7:38 | await r ... .json() | testUseQueries2.vue:7:11:7:38 | data | provenance | | +| testUseQueries2.vue:7:11:7:14 | data | testUseQueries2.vue:8:12:8:15 | data | provenance | | +| testUseQueries2.vue:7:18:7:38 | await r ... .json() | testUseQueries2.vue:7:11:7:14 | data | provenance | | | testUseQueries2.vue:7:24:7:31 | response | testUseQueries2.vue:7:24:7:38 | response.json() | provenance | | | testUseQueries2.vue:7:24:7:38 | response.json() | testUseQueries2.vue:7:18:7:38 | await r ... .json() | provenance | | | testUseQueries2.vue:8:12:8:15 | data | testUseQueries2.vue:33:22:33:36 | results[0].data | provenance | | -| testUseQueries2.vue:12:11:12:41 | response | testUseQueries2.vue:13:12:13:19 | response | provenance | | -| testUseQueries2.vue:12:22:12:41 | await fetch("${id}") | testUseQueries2.vue:12:11:12:41 | response | provenance | | +| testUseQueries2.vue:12:11:12:18 | response | testUseQueries2.vue:13:12:13:19 | response | provenance | | +| testUseQueries2.vue:12:22:12:41 | await fetch("${id}") | testUseQueries2.vue:12:11:12:18 | response | provenance | | | testUseQueries2.vue:12:28:12:41 | fetch("${id}") | testUseQueries2.vue:12:22:12:41 | await fetch("${id}") | provenance | | | testUseQueries2.vue:13:12:13:19 | response | testUseQueries2.vue:13:12:13:26 | response.json() | provenance | | | testUseQueries2.vue:13:12:13:26 | response.json() | testUseQueries2.vue:33:22:33:36 | results[0].data | provenance | | | testUseQueries2.vue:33:22:33:36 | results[0].data | testUseQueries2.vue:40:10:40:23 | v-html=data3 | provenance | | -| testUseQueries.vue:11:19:11:49 | response | testUseQueries.vue:12:20:12:27 | response | provenance | | -| testUseQueries.vue:11:30:11:49 | await fetch("${id}") | testUseQueries.vue:11:19:11:49 | response | provenance | | +| testUseQueries.vue:11:19:11:26 | response | testUseQueries.vue:12:20:12:27 | response | provenance | | +| testUseQueries.vue:11:30:11:49 | await fetch("${id}") | testUseQueries.vue:11:19:11:26 | response | provenance | | | testUseQueries.vue:11:36:11:49 | fetch("${id}") | testUseQueries.vue:11:30:11:49 | await fetch("${id}") | provenance | | | testUseQueries.vue:12:20:12:27 | response | testUseQueries.vue:12:20:12:34 | response.json() | provenance | | | testUseQueries.vue:12:20:12:34 | response.json() | testUseQueries.vue:18:22:18:36 | results[0].data | provenance | | | testUseQueries.vue:18:22:18:36 | results[0].data | testUseQueries.vue:25:10:25:23 | v-html=data2 | provenance | | nodes | interceptors.js:7:6:7:13 | response | semmle.label | response | -| interceptors.js:8:15:8:47 | userGeneratedHtml | semmle.label | userGeneratedHtml | +| interceptors.js:8:15:8:31 | userGeneratedHtml | semmle.label | userGeneratedHtml | | interceptors.js:8:35:8:42 | response | semmle.label | response | | interceptors.js:9:56:9:72 | userGeneratedHtml | semmle.label | userGeneratedHtml | -| test.jsx:5:11:5:63 | response | semmle.label | response | +| test.jsx:5:11:5:18 | response | semmle.label | response | | test.jsx:5:22:5:63 | await f ... ntent") | semmle.label | await f ... ntent") | | test.jsx:5:28:5:63 | fetch(" ... ntent") | semmle.label | fetch(" ... ntent") | -| test.jsx:6:11:6:38 | data | semmle.label | data | +| test.jsx:6:11:6:14 | data | semmle.label | data | | test.jsx:6:18:6:38 | await r ... .json() | semmle.label | await r ... .json() | | test.jsx:6:24:6:31 | response | semmle.label | response | | test.jsx:6:24:6:38 | response.json() | semmle.label | response.json() | | test.jsx:7:12:7:15 | data | semmle.label | data | -| test.jsx:15:11:17:5 | data | semmle.label | data | +| test.jsx:15:13:15:16 | data | semmle.label | data | | test.jsx:15:13:15:16 | data | semmle.label | data | | test.jsx:27:29:27:32 | data | semmle.label | data | | test.ts:8:9:8:79 | this.#h ... query') | semmle.label | this.#h ... query') | @@ -124,40 +124,40 @@ nodes | test.ts:24:43:24:55 | response.name | semmle.label | response.name | | test.ts:24:67:24:74 | response | semmle.label | response | | test.ts:24:67:24:84 | response.owner.bio | semmle.label | response.owner.bio | -| test.vue:7:11:13:6 | data | semmle.label | data | | test.vue:7:45:7:48 | data | semmle.label | data | -| test.vue:10:15:10:84 | response | semmle.label | response | +| test.vue:7:45:7:48 | data | semmle.label | data | +| test.vue:10:15:10:22 | response | semmle.label | response | | test.vue:10:26:10:84 | await f ... sts/1") | semmle.label | await f ... sts/1") | | test.vue:10:32:10:84 | fetch(" ... sts/1") | semmle.label | fetch(" ... sts/1") | | test.vue:11:16:11:23 | response | semmle.label | response | | test.vue:11:16:11:30 | response.json() | semmle.label | response.json() | | test.vue:15:21:15:24 | data | semmle.label | data | | test.vue:22:10:22:22 | v-html=data | semmle.label | v-html=data | -| testReactRelay.tsx:5:9:5:52 | commentData | semmle.label | commentData | +| testReactRelay.tsx:5:9:5:19 | commentData | semmle.label | commentData | | testReactRelay.tsx:5:23:5:52 | useFrag ... entRef) | semmle.label | useFrag ... entRef) | | testReactRelay.tsx:7:43:7:53 | commentData | semmle.label | commentData | | testReactRelay.tsx:7:43:7:58 | commentData.text | semmle.label | commentData.text | -| testReactRelay.tsx:17:9:17:42 | data | semmle.label | data | +| testReactRelay.tsx:17:9:17:12 | data | semmle.label | data | | testReactRelay.tsx:17:16:17:42 | useLazy ... ry, {}) | semmle.label | useLazy ... ry, {}) | | testReactRelay.tsx:18:48:18:51 | data | semmle.label | data | | testReactRelay.tsx:18:48:18:68 | data.co ... 0].text | semmle.label | data.co ... 0].text | | testReactRelay.tsx:28:17:28:56 | usePrel ... erence) | semmle.label | usePrel ... erence) | | testReactRelay.tsx:28:17:28:67 | usePrel ... r?.name | semmle.label | usePrel ... r?.name | -| testReactRelay.tsx:37:9:37:40 | data | semmle.label | data | +| testReactRelay.tsx:37:9:37:12 | data | semmle.label | data | | testReactRelay.tsx:37:16:37:40 | useClie ... ry, {}) | semmle.label | useClie ... ry, {}) | | testReactRelay.tsx:38:49:38:52 | data | semmle.label | data | -| testReactRelay.tsx:44:9:44:70 | data | semmle.label | data | +| testReactRelay.tsx:44:10:44:13 | data | semmle.label | data | | testReactRelay.tsx:44:10:44:13 | data | semmle.label | data | | testReactRelay.tsx:47:46:47:49 | data | semmle.label | data | -| testReactRelay.tsx:61:9:70:38 | data | semmle.label | data | +| testReactRelay.tsx:62:5:62:8 | data | semmle.label | data | | testReactRelay.tsx:62:5:62:8 | data | semmle.label | data | | testReactRelay.tsx:71:49:71:52 | data | semmle.label | data | -| testReactRelay.tsx:80:9:80:54 | feedbackText | semmle.label | feedbackText | +| testReactRelay.tsx:80:10:80:21 | feedbackText | semmle.label | feedbackText | | testReactRelay.tsx:80:10:80:21 | feedbackText | semmle.label | feedbackText | | testReactRelay.tsx:83:17:83:20 | data | semmle.label | data | | testReactRelay.tsx:84:23:84:26 | data | semmle.label | data | | testReactRelay.tsx:88:50:88:61 | feedbackText | semmle.label | feedbackText | -| testReactRelay.tsx:95:9:95:50 | fragmentRef | semmle.label | fragmentRef | +| testReactRelay.tsx:95:10:95:20 | fragmentRef | semmle.label | fragmentRef | | testReactRelay.tsx:95:10:95:20 | fragmentRef | semmle.label | fragmentRef | | testReactRelay.tsx:100:14:100:16 | res | semmle.label | res | | testReactRelay.tsx:101:22:101:24 | res | semmle.label | res | @@ -165,31 +165,31 @@ nodes | testReactRelay.tsx:124:12:124:15 | data | semmle.label | data | | testReactRelay.tsx:127:35:127:38 | data | semmle.label | data | | testReactRelay.tsx:127:35:127:43 | data.user | semmle.label | data.user | -| testReactRelay.tsx:136:9:136:39 | data | semmle.label | data | +| testReactRelay.tsx:136:9:136:12 | data | semmle.label | data | | testReactRelay.tsx:136:16:136:39 | readFra ... y, key) | semmle.label | readFra ... y, key) | | testReactRelay.tsx:137:50:137:53 | data | semmle.label | data | -| testReactUseQueries.jsx:4:9:4:53 | response | semmle.label | response | +| testReactUseQueries.jsx:4:9:4:16 | response | semmle.label | response | | testReactUseQueries.jsx:4:20:4:53 | await f ... e.com') | semmle.label | await f ... e.com') | | testReactUseQueries.jsx:4:26:4:53 | fetch(' ... e.com') | semmle.label | fetch(' ... e.com') | | testReactUseQueries.jsx:5:10:5:17 | response | semmle.label | response | | testReactUseQueries.jsx:5:10:5:24 | response.json() | semmle.label | response.json() | | testReactUseQueries.jsx:37:25:37:38 | repoQuery.data | semmle.label | repoQuery.data | -| testUseQueries2.vue:6:11:6:63 | response | semmle.label | response | +| testUseQueries2.vue:6:11:6:18 | response | semmle.label | response | | testUseQueries2.vue:6:22:6:63 | await f ... ntent") | semmle.label | await f ... ntent") | | testUseQueries2.vue:6:28:6:63 | fetch(" ... ntent") | semmle.label | fetch(" ... ntent") | -| testUseQueries2.vue:7:11:7:38 | data | semmle.label | data | +| testUseQueries2.vue:7:11:7:14 | data | semmle.label | data | | testUseQueries2.vue:7:18:7:38 | await r ... .json() | semmle.label | await r ... .json() | | testUseQueries2.vue:7:24:7:31 | response | semmle.label | response | | testUseQueries2.vue:7:24:7:38 | response.json() | semmle.label | response.json() | | testUseQueries2.vue:8:12:8:15 | data | semmle.label | data | -| testUseQueries2.vue:12:11:12:41 | response | semmle.label | response | +| testUseQueries2.vue:12:11:12:18 | response | semmle.label | response | | testUseQueries2.vue:12:22:12:41 | await fetch("${id}") | semmle.label | await fetch("${id}") | | testUseQueries2.vue:12:28:12:41 | fetch("${id}") | semmle.label | fetch("${id}") | | testUseQueries2.vue:13:12:13:19 | response | semmle.label | response | | testUseQueries2.vue:13:12:13:26 | response.json() | semmle.label | response.json() | | testUseQueries2.vue:33:22:33:36 | results[0].data | semmle.label | results[0].data | | testUseQueries2.vue:40:10:40:23 | v-html=data3 | semmle.label | v-html=data3 | -| testUseQueries.vue:11:19:11:49 | response | semmle.label | response | +| testUseQueries.vue:11:19:11:26 | response | semmle.label | response | | testUseQueries.vue:11:30:11:49 | await fetch("${id}") | semmle.label | await fetch("${id}") | | testUseQueries.vue:11:36:11:49 | fetch("${id}") | semmle.label | fetch("${id}") | | testUseQueries.vue:12:20:12:27 | response | semmle.label | response | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/ExceptionXss/ExceptionXss.expected b/javascript/ql/test/query-tests/Security/CWE-079/ExceptionXss/ExceptionXss.expected index 350f7bf5431..595187bdf6f 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/ExceptionXss/ExceptionXss.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/ExceptionXss/ExceptionXss.expected @@ -18,16 +18,16 @@ | exception-xss.js:175:18:175:18 | e | exception-xss.js:146:12:146:35 | documen ... .search | exception-xss.js:175:18:175:18 | e | $@ is reinterpreted as HTML without escaping meta-characters. | exception-xss.js:146:12:146:35 | documen ... .search | Exception text | | exception-xss.js:182:19:182:23 | error | exception-xss.js:180:10:180:22 | req.params.id | exception-xss.js:182:19:182:23 | error | $@ is reinterpreted as HTML without escaping meta-characters. | exception-xss.js:180:10:180:22 | req.params.id | Exception text | edges -| exception-xss.js:2:6:2:28 | foo | exception-xss.js:9:11:9:13 | foo | provenance | | -| exception-xss.js:2:6:2:28 | foo | exception-xss.js:15:9:15:11 | foo | provenance | | -| exception-xss.js:2:6:2:28 | foo | exception-xss.js:21:11:21:13 | foo | provenance | | -| exception-xss.js:2:6:2:28 | foo | exception-xss.js:33:19:33:21 | foo | provenance | | -| exception-xss.js:2:6:2:28 | foo | exception-xss.js:46:16:46:18 | foo | provenance | | -| exception-xss.js:2:6:2:28 | foo | exception-xss.js:81:16:81:18 | foo | provenance | | -| exception-xss.js:2:6:2:28 | foo | exception-xss.js:89:11:89:13 | foo | provenance | | -| exception-xss.js:2:6:2:28 | foo | exception-xss.js:95:12:95:14 | foo | provenance | | -| exception-xss.js:2:6:2:28 | foo | exception-xss.js:102:12:102:14 | foo | provenance | | -| exception-xss.js:2:12:2:28 | document.location | exception-xss.js:2:6:2:28 | foo | provenance | | +| exception-xss.js:2:6:2:8 | foo | exception-xss.js:9:11:9:13 | foo | provenance | | +| exception-xss.js:2:6:2:8 | foo | exception-xss.js:15:9:15:11 | foo | provenance | | +| exception-xss.js:2:6:2:8 | foo | exception-xss.js:21:11:21:13 | foo | provenance | | +| exception-xss.js:2:6:2:8 | foo | exception-xss.js:33:19:33:21 | foo | provenance | | +| exception-xss.js:2:6:2:8 | foo | exception-xss.js:46:16:46:18 | foo | provenance | | +| exception-xss.js:2:6:2:8 | foo | exception-xss.js:81:16:81:18 | foo | provenance | | +| exception-xss.js:2:6:2:8 | foo | exception-xss.js:89:11:89:13 | foo | provenance | | +| exception-xss.js:2:6:2:8 | foo | exception-xss.js:95:12:95:14 | foo | provenance | | +| exception-xss.js:2:6:2:8 | foo | exception-xss.js:102:12:102:14 | foo | provenance | | +| exception-xss.js:2:12:2:28 | document.location | exception-xss.js:2:6:2:8 | foo | provenance | | | exception-xss.js:4:17:4:17 | x | exception-xss.js:5:11:5:11 | x | provenance | | | exception-xss.js:9:11:9:13 | foo | exception-xss.js:10:11:10:11 | e | provenance | Config | | exception-xss.js:10:11:10:11 | e | exception-xss.js:11:18:11:18 | e | provenance | | @@ -75,10 +75,10 @@ edges | exception-xss.js:129:11:129:11 | e | exception-xss.js:130:18:130:18 | e | provenance | | | exception-xss.js:136:10:136:22 | req.params.id | exception-xss.js:136:26:136:30 | error | provenance | Config | | exception-xss.js:136:26:136:30 | error | exception-xss.js:138:19:138:23 | error | provenance | | -| exception-xss.js:146:6:146:35 | foo | exception-xss.js:148:33:148:35 | foo | provenance | | -| exception-xss.js:146:6:146:35 | foo | exception-xss.js:153:8:153:10 | foo | provenance | | -| exception-xss.js:146:6:146:35 | foo | exception-xss.js:174:31:174:33 | foo | provenance | | -| exception-xss.js:146:12:146:35 | documen ... .search | exception-xss.js:146:6:146:35 | foo | provenance | | +| exception-xss.js:146:6:146:8 | foo | exception-xss.js:148:33:148:35 | foo | provenance | | +| exception-xss.js:146:6:146:8 | foo | exception-xss.js:153:8:153:10 | foo | provenance | | +| exception-xss.js:146:6:146:8 | foo | exception-xss.js:174:31:174:33 | foo | provenance | | +| exception-xss.js:146:12:146:35 | documen ... .search | exception-xss.js:146:6:146:8 | foo | provenance | | | exception-xss.js:148:2:148:46 | new Pro ... solve)) [PromiseError] | exception-xss.js:148:55:148:55 | e | provenance | | | exception-xss.js:148:33:148:35 | foo | exception-xss.js:148:2:148:46 | new Pro ... solve)) [PromiseError] | provenance | Config | | exception-xss.js:148:55:148:55 | e | exception-xss.js:149:18:149:18 | e | provenance | | @@ -95,7 +95,7 @@ edges nodes | ajv.js:11:18:11:33 | ajv.errorsText() | semmle.label | ajv.errorsText() | | ajv.js:24:18:24:26 | val.error | semmle.label | val.error | -| exception-xss.js:2:6:2:28 | foo | semmle.label | foo | +| exception-xss.js:2:6:2:8 | foo | semmle.label | foo | | exception-xss.js:2:12:2:28 | document.location | semmle.label | document.location | | exception-xss.js:4:17:4:17 | x | semmle.label | x | | exception-xss.js:5:11:5:11 | x | semmle.label | x | @@ -154,7 +154,7 @@ nodes | exception-xss.js:136:10:136:22 | req.params.id | semmle.label | req.params.id | | exception-xss.js:136:26:136:30 | error | semmle.label | error | | exception-xss.js:138:19:138:23 | error | semmle.label | error | -| exception-xss.js:146:6:146:35 | foo | semmle.label | foo | +| exception-xss.js:146:6:146:8 | foo | semmle.label | foo | | exception-xss.js:146:12:146:35 | documen ... .search | semmle.label | documen ... .search | | exception-xss.js:148:2:148:46 | new Pro ... solve)) [PromiseError] | semmle.label | new Pro ... solve)) [PromiseError] | | exception-xss.js:148:33:148:35 | foo | semmle.label | foo | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.expected b/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.expected index c1e626a688a..e536364f805 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.expected @@ -78,8 +78,8 @@ edges | ReflectedXss.js:7:33:7:45 | req.params.id | ReflectedXss.js:7:14:7:45 | "Unknow ... rams.id | provenance | | | ReflectedXss.js:16:31:16:39 | params.id | ReflectedXss.js:16:12:16:39 | "Unknow ... rams.id | provenance | | | ReflectedXss.js:22:19:22:26 | req.body | ReflectedXss.js:22:12:22:27 | marked(req.body) | provenance | | -| ReflectedXss.js:29:7:32:4 | mytable | ReflectedXss.js:33:12:33:18 | mytable | provenance | | -| ReflectedXss.js:29:17:32:4 | table([ ... ce\\n ]) | ReflectedXss.js:29:7:32:4 | mytable | provenance | | +| ReflectedXss.js:29:7:29:13 | mytable | ReflectedXss.js:33:12:33:18 | mytable | provenance | | +| ReflectedXss.js:29:17:32:4 | table([ ... ce\\n ]) | ReflectedXss.js:29:7:29:13 | mytable | provenance | | | ReflectedXss.js:29:23:32:3 | [\\n [ ... rce\\n ] [1, 1] | ReflectedXss.js:29:17:32:4 | table([ ... ce\\n ]) | provenance | | | ReflectedXss.js:31:5:31:22 | ['body', req.body] [1] | ReflectedXss.js:29:23:32:3 | [\\n [ ... rce\\n ] [1, 1] | provenance | | | ReflectedXss.js:31:14:31:21 | req.body | ReflectedXss.js:31:5:31:22 | ['body', req.body] [1] | provenance | | @@ -97,23 +97,23 @@ edges | ReflectedXss.js:97:30:97:37 | req.body | ReflectedXss.js:97:12:97:38 | markdow ... q.body) | provenance | | | ReflectedXss.js:99:31:99:38 | req.body | ReflectedXss.js:99:12:99:39 | markdow ... q.body) | provenance | | | ReflectedXss.js:102:76:102:83 | req.body | ReflectedXss.js:102:12:102:84 | markdow ... q.body) | provenance | | -| ReflectedXss.js:113:11:113:41 | queryKeys | ReflectedXss.js:115:18:115:26 | queryKeys | provenance | | -| ReflectedXss.js:113:13:113:27 | keys: queryKeys | ReflectedXss.js:113:11:113:41 | queryKeys | provenance | | -| ReflectedXss.js:115:11:115:45 | keys | ReflectedXss.js:117:50:117:53 | keys | provenance | | -| ReflectedXss.js:115:11:115:45 | keys | ReflectedXss.js:117:58:117:61 | keys | provenance | | -| ReflectedXss.js:115:18:115:26 | queryKeys | ReflectedXss.js:115:11:115:45 | keys | provenance | | -| ReflectedXss.js:115:31:115:45 | paramKeys?.keys | ReflectedXss.js:115:11:115:45 | keys | provenance | | -| ReflectedXss.js:117:11:117:61 | keyArray | ReflectedXss.js:118:25:118:32 | keyArray | provenance | | -| ReflectedXss.js:117:11:117:61 | keyArray [0] | ReflectedXss.js:118:25:118:32 | keyArray [0] | provenance | | -| ReflectedXss.js:117:49:117:54 | [keys] [0] | ReflectedXss.js:117:11:117:61 | keyArray [0] | provenance | | +| ReflectedXss.js:113:13:113:27 | keys: queryKeys | ReflectedXss.js:113:19:113:27 | queryKeys | provenance | | +| ReflectedXss.js:113:19:113:27 | queryKeys | ReflectedXss.js:115:18:115:26 | queryKeys | provenance | | +| ReflectedXss.js:115:11:115:14 | keys | ReflectedXss.js:117:50:117:53 | keys | provenance | | +| ReflectedXss.js:115:11:115:14 | keys | ReflectedXss.js:117:58:117:61 | keys | provenance | | +| ReflectedXss.js:115:18:115:26 | queryKeys | ReflectedXss.js:115:11:115:14 | keys | provenance | | +| ReflectedXss.js:115:31:115:45 | paramKeys?.keys | ReflectedXss.js:115:11:115:14 | keys | provenance | | +| ReflectedXss.js:117:11:117:18 | keyArray | ReflectedXss.js:118:25:118:32 | keyArray | provenance | | +| ReflectedXss.js:117:11:117:18 | keyArray [0] | ReflectedXss.js:118:25:118:32 | keyArray [0] | provenance | | +| ReflectedXss.js:117:49:117:54 | [keys] [0] | ReflectedXss.js:117:11:117:18 | keyArray [0] | provenance | | | ReflectedXss.js:117:50:117:53 | keys | ReflectedXss.js:117:49:117:54 | [keys] [0] | provenance | | -| ReflectedXss.js:117:58:117:61 | keys | ReflectedXss.js:117:11:117:61 | keyArray | provenance | | -| ReflectedXss.js:118:11:118:72 | invalidKeys | ReflectedXss.js:121:33:121:43 | invalidKeys | provenance | | -| ReflectedXss.js:118:11:118:72 | invalidKeys [0] | ReflectedXss.js:121:33:121:43 | invalidKeys [0] | provenance | | +| ReflectedXss.js:117:58:117:61 | keys | ReflectedXss.js:117:11:117:18 | keyArray | provenance | | +| ReflectedXss.js:118:11:118:21 | invalidKeys | ReflectedXss.js:121:33:121:43 | invalidKeys | provenance | | +| ReflectedXss.js:118:11:118:21 | invalidKeys [0] | ReflectedXss.js:121:33:121:43 | invalidKeys [0] | provenance | | | ReflectedXss.js:118:25:118:32 | keyArray | ReflectedXss.js:118:25:118:72 | keyArra ... s(key)) | provenance | | | ReflectedXss.js:118:25:118:32 | keyArray [0] | ReflectedXss.js:118:25:118:72 | keyArra ... s(key)) [0] | provenance | | -| ReflectedXss.js:118:25:118:72 | keyArra ... s(key)) | ReflectedXss.js:118:11:118:72 | invalidKeys | provenance | | -| ReflectedXss.js:118:25:118:72 | keyArra ... s(key)) [0] | ReflectedXss.js:118:11:118:72 | invalidKeys [0] | provenance | | +| ReflectedXss.js:118:25:118:72 | keyArra ... s(key)) | ReflectedXss.js:118:11:118:21 | invalidKeys | provenance | | +| ReflectedXss.js:118:25:118:72 | keyArra ... s(key)) [0] | ReflectedXss.js:118:11:118:21 | invalidKeys [0] | provenance | | | ReflectedXss.js:121:33:121:43 | invalidKeys | ReflectedXss.js:121:33:121:54 | invalid ... n(', ') | provenance | | | ReflectedXss.js:121:33:121:43 | invalidKeys [0] | ReflectedXss.js:121:33:121:54 | invalid ... n(', ') | provenance | | | ReflectedXss.js:121:33:121:54 | invalid ... n(', ') | ReflectedXss.js:121:30:121:73 | `${inva ... telist` | provenance | | @@ -123,11 +123,11 @@ edges | ReflectedXssContentTypes.js:70:22:70:34 | req.params.id | ReflectedXssContentTypes.js:70:12:70:34 | "FOO: " ... rams.id | provenance | | | ReflectedXssGood3.js:68:22:68:26 | value | ReflectedXssGood3.js:77:16:77:20 | value | provenance | | | ReflectedXssGood3.js:68:22:68:26 | value | ReflectedXssGood3.js:105:18:105:22 | value | provenance | | -| ReflectedXssGood3.js:77:7:77:37 | parts | ReflectedXssGood3.js:108:10:108:14 | parts | provenance | | -| ReflectedXssGood3.js:77:7:77:37 | parts [0] | ReflectedXssGood3.js:108:10:108:14 | parts [0] | provenance | | -| ReflectedXssGood3.js:77:15:77:37 | [value. ... (0, i)] [0] | ReflectedXssGood3.js:77:7:77:37 | parts [0] | provenance | | +| ReflectedXssGood3.js:77:7:77:11 | parts | ReflectedXssGood3.js:108:10:108:14 | parts | provenance | | +| ReflectedXssGood3.js:77:7:77:11 | parts [0] | ReflectedXssGood3.js:108:10:108:14 | parts [0] | provenance | | +| ReflectedXssGood3.js:77:15:77:37 | [value. ... (0, i)] [0] | ReflectedXssGood3.js:77:7:77:11 | parts [0] | provenance | | | ReflectedXssGood3.js:77:16:77:20 | value | ReflectedXssGood3.js:77:16:77:36 | value.s ... g(0, i) | provenance | | -| ReflectedXssGood3.js:77:16:77:36 | value.s ... g(0, i) | ReflectedXssGood3.js:77:7:77:37 | parts | provenance | | +| ReflectedXssGood3.js:77:16:77:36 | value.s ... g(0, i) | ReflectedXssGood3.js:77:7:77:11 | parts | provenance | | | ReflectedXssGood3.js:77:16:77:36 | value.s ... g(0, i) | ReflectedXssGood3.js:77:15:77:37 | [value. ... (0, i)] [0] | provenance | | | ReflectedXssGood3.js:77:16:77:36 | value.s ... g(0, i) | ReflectedXssGood3.js:108:10:108:23 | parts.join('') | provenance | | | ReflectedXssGood3.js:105:7:105:11 | [post update] parts [ArrayElement] | ReflectedXssGood3.js:108:10:108:14 | parts [ArrayElement] | provenance | | @@ -136,34 +136,34 @@ edges | ReflectedXssGood3.js:108:10:108:14 | parts | ReflectedXssGood3.js:108:10:108:23 | parts.join('') | provenance | | | ReflectedXssGood3.js:108:10:108:14 | parts [0] | ReflectedXssGood3.js:108:10:108:23 | parts.join('') | provenance | | | ReflectedXssGood3.js:108:10:108:14 | parts [ArrayElement] | ReflectedXssGood3.js:108:10:108:23 | parts.join('') | provenance | | -| ReflectedXssGood3.js:135:9:135:27 | url | ReflectedXssGood3.js:139:24:139:26 | url | provenance | | -| ReflectedXssGood3.js:135:15:135:27 | req.params.id | ReflectedXssGood3.js:135:9:135:27 | url | provenance | | +| ReflectedXssGood3.js:135:9:135:11 | url | ReflectedXssGood3.js:139:24:139:26 | url | provenance | | +| ReflectedXssGood3.js:135:15:135:27 | req.params.id | ReflectedXssGood3.js:135:9:135:11 | url | provenance | | | ReflectedXssGood3.js:139:24:139:26 | url | ReflectedXssGood3.js:68:22:68:26 | value | provenance | | | ReflectedXssGood3.js:139:24:139:26 | url | ReflectedXssGood3.js:139:12:139:27 | escapeHtml3(url) | provenance | | -| app/api/route.ts:2:11:2:33 | body | app/api/route.ts:5:18:5:21 | body | provenance | | -| app/api/route.ts:2:11:2:33 | body | app/api/route.ts:13:18:13:21 | body | provenance | | -| app/api/route.ts:2:11:2:33 | body | app/api/route.ts:25:18:25:21 | body | provenance | | -| app/api/route.ts:2:11:2:33 | body | app/api/route.ts:29:25:29:28 | body | provenance | | -| app/api/route.ts:2:18:2:33 | await req.json() | app/api/route.ts:2:11:2:33 | body | provenance | | +| app/api/route.ts:2:11:2:14 | body | app/api/route.ts:5:18:5:21 | body | provenance | | +| app/api/route.ts:2:11:2:14 | body | app/api/route.ts:13:18:13:21 | body | provenance | | +| app/api/route.ts:2:11:2:14 | body | app/api/route.ts:25:18:25:21 | body | provenance | | +| app/api/route.ts:2:11:2:14 | body | app/api/route.ts:29:25:29:28 | body | provenance | | +| app/api/route.ts:2:18:2:33 | await req.json() | app/api/route.ts:2:11:2:14 | body | provenance | | | app/api/route.ts:2:24:2:33 | req.json() | app/api/route.ts:2:18:2:33 | await req.json() | provenance | | -| app/api/routeNextRequest.ts:4:9:4:31 | body | app/api/routeNextRequest.ts:7:20:7:23 | body | provenance | | -| app/api/routeNextRequest.ts:4:9:4:31 | body | app/api/routeNextRequest.ts:15:20:15:23 | body | provenance | | -| app/api/routeNextRequest.ts:4:9:4:31 | body | app/api/routeNextRequest.ts:27:20:27:23 | body | provenance | | -| app/api/routeNextRequest.ts:4:9:4:31 | body | app/api/routeNextRequest.ts:31:27:31:30 | body | provenance | | -| app/api/routeNextRequest.ts:4:16:4:31 | await req.json() | app/api/routeNextRequest.ts:4:9:4:31 | body | provenance | | +| app/api/routeNextRequest.ts:4:9:4:12 | body | app/api/routeNextRequest.ts:7:20:7:23 | body | provenance | | +| app/api/routeNextRequest.ts:4:9:4:12 | body | app/api/routeNextRequest.ts:15:20:15:23 | body | provenance | | +| app/api/routeNextRequest.ts:4:9:4:12 | body | app/api/routeNextRequest.ts:27:20:27:23 | body | provenance | | +| app/api/routeNextRequest.ts:4:9:4:12 | body | app/api/routeNextRequest.ts:31:27:31:30 | body | provenance | | +| app/api/routeNextRequest.ts:4:16:4:31 | await req.json() | app/api/routeNextRequest.ts:4:9:4:12 | body | provenance | | | app/api/routeNextRequest.ts:4:22:4:31 | req.json() | app/api/routeNextRequest.ts:4:16:4:31 | await req.json() | provenance | | -| etherpad.js:9:5:9:53 | response | etherpad.js:11:12:11:19 | response | provenance | | -| etherpad.js:9:16:9:30 | req.query.jsonp | etherpad.js:9:5:9:53 | response | provenance | | -| formatting.js:4:9:4:29 | evil | formatting.js:6:43:6:46 | evil | provenance | | -| formatting.js:4:9:4:29 | evil | formatting.js:7:49:7:52 | evil | provenance | | -| formatting.js:4:16:4:29 | req.query.evil | formatting.js:4:9:4:29 | evil | provenance | | +| etherpad.js:9:5:9:12 | response | etherpad.js:11:12:11:19 | response | provenance | | +| etherpad.js:9:16:9:30 | req.query.jsonp | etherpad.js:9:5:9:12 | response | provenance | | +| formatting.js:4:9:4:12 | evil | formatting.js:6:43:6:46 | evil | provenance | | +| formatting.js:4:9:4:12 | evil | formatting.js:7:49:7:52 | evil | provenance | | +| formatting.js:4:16:4:29 | req.query.evil | formatting.js:4:9:4:12 | evil | provenance | | | formatting.js:6:43:6:46 | evil | formatting.js:6:14:6:47 | util.fo ... , evil) | provenance | | | formatting.js:7:49:7:52 | evil | formatting.js:7:14:7:53 | require ... , evil) | provenance | | -| live-server.js:4:11:4:27 | tainted | live-server.js:6:28:6:34 | tainted | provenance | | -| live-server.js:4:21:4:27 | req.url | live-server.js:4:11:4:27 | tainted | provenance | | +| live-server.js:4:11:4:17 | tainted | live-server.js:6:28:6:34 | tainted | provenance | | +| live-server.js:4:21:4:27 | req.url | live-server.js:4:11:4:17 | tainted | provenance | | | live-server.js:6:28:6:34 | tainted | live-server.js:6:13:6:50 | ` ... /html>` | provenance | | -| live-server.js:10:11:10:27 | tainted | live-server.js:12:28:12:34 | tainted | provenance | | -| live-server.js:10:21:10:27 | req.url | live-server.js:10:11:10:27 | tainted | provenance | | +| live-server.js:10:11:10:17 | tainted | live-server.js:12:28:12:34 | tainted | provenance | | +| live-server.js:10:21:10:27 | req.url | live-server.js:10:11:10:17 | tainted | provenance | | | live-server.js:12:28:12:34 | tainted | live-server.js:12:13:12:50 | ` ... /html>` | provenance | | | partial.js:9:25:9:25 | x | partial.js:10:14:10:14 | x | provenance | | | partial.js:10:14:10:14 | x | partial.js:10:14:10:18 | x + y | provenance | | @@ -182,85 +182,85 @@ edges | promises.js:5:36:5:42 | [post update] resolve [resolve-value] | promises.js:5:16:5:22 | resolve [Return] [resolve-value] | provenance | | | promises.js:5:44:5:57 | req.query.data | promises.js:5:36:5:42 | [post update] resolve [resolve-value] | provenance | | | promises.js:6:11:6:11 | x | promises.js:6:25:6:25 | x | provenance | | -| response-object.js:7:11:7:25 | data | response-object.js:9:18:9:21 | data | provenance | | -| response-object.js:7:11:7:25 | data | response-object.js:10:18:10:21 | data | provenance | | -| response-object.js:7:11:7:25 | data | response-object.js:11:18:11:21 | data | provenance | | -| response-object.js:7:11:7:25 | data | response-object.js:14:18:14:21 | data | provenance | | -| response-object.js:7:11:7:25 | data | response-object.js:17:18:17:21 | data | provenance | | -| response-object.js:7:11:7:25 | data | response-object.js:23:18:23:21 | data | provenance | | -| response-object.js:7:11:7:25 | data | response-object.js:26:18:26:21 | data | provenance | | -| response-object.js:7:11:7:25 | data | response-object.js:34:18:34:21 | data | provenance | | -| response-object.js:7:11:7:25 | data | response-object.js:38:18:38:21 | data | provenance | | -| response-object.js:7:18:7:25 | req.body | response-object.js:7:11:7:25 | data | provenance | | -| tst2.js:6:7:6:30 | p | tst2.js:7:12:7:12 | p | provenance | | -| tst2.js:6:7:6:30 | r | tst2.js:8:12:8:12 | r | provenance | | -| tst2.js:6:9:6:9 | p | tst2.js:6:7:6:30 | p | provenance | | -| tst2.js:6:12:6:15 | q: r | tst2.js:6:7:6:30 | r | provenance | | -| tst2.js:14:7:14:24 | p | tst2.js:18:12:18:12 | p | provenance | | -| tst2.js:14:7:14:24 | p | tst2.js:21:14:21:14 | p | provenance | | -| tst2.js:14:9:14:9 | p | tst2.js:14:7:14:24 | p | provenance | | -| tst2.js:30:7:30:24 | p | tst2.js:33:11:33:11 | p | provenance | | -| tst2.js:30:7:30:24 | p | tst2.js:36:12:36:12 | p | provenance | | -| tst2.js:30:9:30:9 | p | tst2.js:30:7:30:24 | p | provenance | | +| response-object.js:7:11:7:14 | data | response-object.js:9:18:9:21 | data | provenance | | +| response-object.js:7:11:7:14 | data | response-object.js:10:18:10:21 | data | provenance | | +| response-object.js:7:11:7:14 | data | response-object.js:11:18:11:21 | data | provenance | | +| response-object.js:7:11:7:14 | data | response-object.js:14:18:14:21 | data | provenance | | +| response-object.js:7:11:7:14 | data | response-object.js:17:18:17:21 | data | provenance | | +| response-object.js:7:11:7:14 | data | response-object.js:23:18:23:21 | data | provenance | | +| response-object.js:7:11:7:14 | data | response-object.js:26:18:26:21 | data | provenance | | +| response-object.js:7:11:7:14 | data | response-object.js:34:18:34:21 | data | provenance | | +| response-object.js:7:11:7:14 | data | response-object.js:38:18:38:21 | data | provenance | | +| response-object.js:7:18:7:25 | req.body | response-object.js:7:11:7:14 | data | provenance | | +| tst2.js:6:9:6:9 | p | tst2.js:6:9:6:9 | p | provenance | | +| tst2.js:6:9:6:9 | p | tst2.js:7:12:7:12 | p | provenance | | +| tst2.js:6:12:6:15 | q: r | tst2.js:6:15:6:15 | r | provenance | | +| tst2.js:6:15:6:15 | r | tst2.js:8:12:8:12 | r | provenance | | +| tst2.js:14:9:14:9 | p | tst2.js:14:9:14:9 | p | provenance | | +| tst2.js:14:9:14:9 | p | tst2.js:18:12:18:12 | p | provenance | | +| tst2.js:14:9:14:9 | p | tst2.js:21:14:21:14 | p | provenance | | +| tst2.js:30:9:30:9 | p | tst2.js:30:9:30:9 | p | provenance | | +| tst2.js:30:9:30:9 | p | tst2.js:33:11:33:11 | p | provenance | | +| tst2.js:30:9:30:9 | p | tst2.js:36:12:36:12 | p | provenance | | | tst2.js:33:3:33:5 | [post update] obj [p] | tst2.js:34:21:34:23 | obj [p] | provenance | | | tst2.js:33:11:33:11 | p | tst2.js:33:3:33:5 | [post update] obj [p] | provenance | | -| tst2.js:34:7:34:24 | other [p] | tst2.js:37:12:37:16 | other [p] | provenance | | -| tst2.js:34:15:34:24 | clone(obj) [p] | tst2.js:34:7:34:24 | other [p] | provenance | | +| tst2.js:34:7:34:11 | other [p] | tst2.js:37:12:37:16 | other [p] | provenance | | +| tst2.js:34:15:34:24 | clone(obj) [p] | tst2.js:34:7:34:11 | other [p] | provenance | | | tst2.js:34:21:34:23 | obj [p] | tst2.js:34:15:34:24 | clone(obj) [p] | provenance | | | tst2.js:37:12:37:16 | other [p] | tst2.js:37:12:37:18 | other.p | provenance | | -| tst2.js:43:7:43:24 | p | tst2.js:49:36:49:36 | p | provenance | | -| tst2.js:43:9:43:9 | p | tst2.js:43:7:43:24 | p | provenance | | -| tst2.js:49:7:49:53 | unsafe | tst2.js:51:12:51:17 | unsafe | provenance | | -| tst2.js:49:16:49:53 | seriali ... true}) | tst2.js:49:7:49:53 | unsafe | provenance | | +| tst2.js:43:9:43:9 | p | tst2.js:43:9:43:9 | p | provenance | | +| tst2.js:43:9:43:9 | p | tst2.js:49:36:49:36 | p | provenance | | +| tst2.js:49:7:49:12 | unsafe | tst2.js:51:12:51:17 | unsafe | provenance | | +| tst2.js:49:16:49:53 | seriali ... true}) | tst2.js:49:7:49:12 | unsafe | provenance | | | tst2.js:49:36:49:36 | p | tst2.js:49:16:49:53 | seriali ... true}) | provenance | | -| tst2.js:57:7:57:24 | p | tst2.js:60:11:60:11 | p | provenance | | -| tst2.js:57:7:57:24 | p | tst2.js:63:12:63:12 | p | provenance | | -| tst2.js:57:9:57:9 | p | tst2.js:57:7:57:24 | p | provenance | | +| tst2.js:57:9:57:9 | p | tst2.js:57:9:57:9 | p | provenance | | +| tst2.js:57:9:57:9 | p | tst2.js:60:11:60:11 | p | provenance | | +| tst2.js:57:9:57:9 | p | tst2.js:63:12:63:12 | p | provenance | | | tst2.js:60:3:60:5 | [post update] obj [p] | tst2.js:61:22:61:24 | obj [p] | provenance | | | tst2.js:60:11:60:11 | p | tst2.js:60:3:60:5 | [post update] obj [p] | provenance | | -| tst2.js:61:7:61:25 | other [p] | tst2.js:64:12:64:16 | other [p] | provenance | | -| tst2.js:61:15:61:25 | fclone(obj) [p] | tst2.js:61:7:61:25 | other [p] | provenance | | +| tst2.js:61:7:61:11 | other [p] | tst2.js:64:12:64:16 | other [p] | provenance | | +| tst2.js:61:15:61:25 | fclone(obj) [p] | tst2.js:61:7:61:11 | other [p] | provenance | | | tst2.js:61:22:61:24 | obj [p] | tst2.js:61:15:61:25 | fclone(obj) [p] | provenance | | | tst2.js:64:12:64:16 | other [p] | tst2.js:64:12:64:18 | other.p | provenance | | -| tst2.js:69:7:69:24 | p | tst2.js:72:11:72:11 | p | provenance | | -| tst2.js:69:7:69:24 | p | tst2.js:75:12:75:12 | p | provenance | | -| tst2.js:69:9:69:9 | p | tst2.js:69:7:69:24 | p | provenance | | +| tst2.js:69:9:69:9 | p | tst2.js:69:9:69:9 | p | provenance | | +| tst2.js:69:9:69:9 | p | tst2.js:72:11:72:11 | p | provenance | | +| tst2.js:69:9:69:9 | p | tst2.js:75:12:75:12 | p | provenance | | | tst2.js:72:3:72:5 | [post update] obj [p] | tst2.js:73:40:73:42 | obj [p] | provenance | | | tst2.js:72:11:72:11 | p | tst2.js:72:3:72:5 | [post update] obj [p] | provenance | | -| tst2.js:73:7:73:44 | other [p] | tst2.js:76:12:76:16 | other [p] | provenance | | -| tst2.js:73:15:73:44 | jc.retr ... e(obj)) [p] | tst2.js:73:7:73:44 | other [p] | provenance | | +| tst2.js:73:7:73:11 | other [p] | tst2.js:76:12:76:16 | other [p] | provenance | | +| tst2.js:73:15:73:44 | jc.retr ... e(obj)) [p] | tst2.js:73:7:73:11 | other [p] | provenance | | | tst2.js:73:29:73:43 | jc.decycle(obj) [p] | tst2.js:73:15:73:44 | jc.retr ... e(obj)) [p] | provenance | | | tst2.js:73:40:73:42 | obj [p] | tst2.js:73:29:73:43 | jc.decycle(obj) [p] | provenance | | | tst2.js:76:12:76:16 | other [p] | tst2.js:76:12:76:18 | other.p | provenance | | -| tst2.js:82:7:82:24 | p | tst2.js:85:11:85:11 | p | provenance | | -| tst2.js:82:7:82:24 | p | tst2.js:88:12:88:12 | p | provenance | | -| tst2.js:82:9:82:9 | p | tst2.js:82:7:82:24 | p | provenance | | +| tst2.js:82:9:82:9 | p | tst2.js:82:9:82:9 | p | provenance | | +| tst2.js:82:9:82:9 | p | tst2.js:85:11:85:11 | p | provenance | | +| tst2.js:82:9:82:9 | p | tst2.js:88:12:88:12 | p | provenance | | | tst2.js:85:3:85:5 | [post update] obj [p] | tst2.js:86:24:86:26 | obj [p] | provenance | | | tst2.js:85:11:85:11 | p | tst2.js:85:3:85:5 | [post update] obj [p] | provenance | | -| tst2.js:86:7:86:27 | other [p] | tst2.js:89:12:89:16 | other [p] | provenance | | -| tst2.js:86:15:86:27 | sortKeys(obj) [p] | tst2.js:86:7:86:27 | other [p] | provenance | | +| tst2.js:86:7:86:11 | other [p] | tst2.js:89:12:89:16 | other [p] | provenance | | +| tst2.js:86:15:86:27 | sortKeys(obj) [p] | tst2.js:86:7:86:11 | other [p] | provenance | | | tst2.js:86:24:86:26 | obj [p] | tst2.js:86:15:86:27 | sortKeys(obj) [p] | provenance | | | tst2.js:89:12:89:16 | other [p] | tst2.js:89:12:89:18 | other.p | provenance | | -| tst2.js:93:7:93:24 | p | tst2.js:99:51:99:51 | p | provenance | | -| tst2.js:93:9:93:9 | p | tst2.js:93:7:93:24 | p | provenance | | -| tst2.js:99:7:99:69 | unsafe | tst2.js:101:12:101:17 | unsafe | provenance | | -| tst2.js:99:16:99:69 | seriali ... true}) | tst2.js:99:7:99:69 | unsafe | provenance | | +| tst2.js:93:9:93:9 | p | tst2.js:93:9:93:9 | p | provenance | | +| tst2.js:93:9:93:9 | p | tst2.js:99:51:99:51 | p | provenance | | +| tst2.js:99:7:99:12 | unsafe | tst2.js:101:12:101:17 | unsafe | provenance | | +| tst2.js:99:16:99:69 | seriali ... true}) | tst2.js:99:7:99:12 | unsafe | provenance | | | tst2.js:99:36:99:52 | {someProperty: p} [someProperty] | tst2.js:99:16:99:69 | seriali ... true}) | provenance | | | tst2.js:99:51:99:51 | p | tst2.js:99:16:99:69 | seriali ... true}) | provenance | | | tst2.js:99:51:99:51 | p | tst2.js:99:36:99:52 | {someProperty: p} [someProperty] | provenance | | -| tst2.js:105:7:105:24 | p | tst2.js:110:28:110:28 | p | provenance | | -| tst2.js:105:9:105:9 | p | tst2.js:105:7:105:24 | p | provenance | | -| tst2.js:110:7:110:29 | obj [someProperty] | tst2.js:111:36:111:38 | obj [someProperty] | provenance | | -| tst2.js:110:13:110:29 | {someProperty: p} [someProperty] | tst2.js:110:7:110:29 | obj [someProperty] | provenance | | +| tst2.js:105:9:105:9 | p | tst2.js:105:9:105:9 | p | provenance | | +| tst2.js:105:9:105:9 | p | tst2.js:110:28:110:28 | p | provenance | | +| tst2.js:110:7:110:9 | obj [someProperty] | tst2.js:111:36:111:38 | obj [someProperty] | provenance | | +| tst2.js:110:13:110:29 | {someProperty: p} [someProperty] | tst2.js:110:7:110:9 | obj [someProperty] | provenance | | | tst2.js:110:28:110:28 | p | tst2.js:110:13:110:29 | {someProperty: p} [someProperty] | provenance | | | tst2.js:110:28:110:28 | p | tst2.js:111:16:111:55 | seriali ... true}) | provenance | | -| tst2.js:111:7:111:55 | unsafe | tst2.js:113:12:113:17 | unsafe | provenance | | -| tst2.js:111:16:111:55 | seriali ... true}) | tst2.js:111:7:111:55 | unsafe | provenance | | +| tst2.js:111:7:111:12 | unsafe | tst2.js:113:12:113:17 | unsafe | provenance | | +| tst2.js:111:16:111:55 | seriali ... true}) | tst2.js:111:7:111:12 | unsafe | provenance | | | tst2.js:111:36:111:38 | obj [someProperty] | tst2.js:111:16:111:55 | seriali ... true}) | provenance | | -| tst3.js:5:7:5:24 | p | tst3.js:6:12:6:12 | p | provenance | | -| tst3.js:5:9:5:9 | p | tst3.js:5:7:5:24 | p | provenance | | -| tst3.js:11:9:11:74 | code | tst3.js:12:12:12:15 | code | provenance | | -| tst3.js:11:16:11:74 | prettie ... bel" }) | tst3.js:11:9:11:74 | code | provenance | | +| tst3.js:5:9:5:9 | p | tst3.js:5:9:5:9 | p | provenance | | +| tst3.js:5:9:5:9 | p | tst3.js:6:12:6:12 | p | provenance | | +| tst3.js:11:9:11:12 | code | tst3.js:12:12:12:15 | code | provenance | | +| tst3.js:11:16:11:74 | prettie ... bel" }) | tst3.js:11:9:11:12 | code | provenance | | | tst3.js:11:32:11:39 | reg.body | tst3.js:11:16:11:74 | prettie ... bel" }) | provenance | | nodes | ReflectedXss.js:7:14:7:45 | "Unknow ... rams.id | semmle.label | "Unknow ... rams.id | @@ -271,7 +271,7 @@ nodes | ReflectedXss.js:22:12:22:27 | marked(req.body) | semmle.label | marked(req.body) | | ReflectedXss.js:22:19:22:26 | req.body | semmle.label | req.body | | ReflectedXss.js:28:12:28:19 | req.body | semmle.label | req.body | -| ReflectedXss.js:29:7:32:4 | mytable | semmle.label | mytable | +| ReflectedXss.js:29:7:29:13 | mytable | semmle.label | mytable | | ReflectedXss.js:29:17:32:4 | table([ ... ce\\n ]) | semmle.label | table([ ... ce\\n ]) | | ReflectedXss.js:29:23:32:3 | [\\n [ ... rce\\n ] [1, 1] | semmle.label | [\\n [ ... rce\\n ] [1, 1] | | ReflectedXss.js:31:5:31:22 | ['body', req.body] [1] | semmle.label | ['body', req.body] [1] | @@ -306,18 +306,18 @@ nodes | ReflectedXss.js:102:12:102:84 | markdow ... q.body) | semmle.label | markdow ... q.body) | | ReflectedXss.js:102:76:102:83 | req.body | semmle.label | req.body | | ReflectedXss.js:109:16:109:30 | request.query.p | semmle.label | request.query.p | -| ReflectedXss.js:113:11:113:41 | queryKeys | semmle.label | queryKeys | | ReflectedXss.js:113:13:113:27 | keys: queryKeys | semmle.label | keys: queryKeys | -| ReflectedXss.js:115:11:115:45 | keys | semmle.label | keys | +| ReflectedXss.js:113:19:113:27 | queryKeys | semmle.label | queryKeys | +| ReflectedXss.js:115:11:115:14 | keys | semmle.label | keys | | ReflectedXss.js:115:18:115:26 | queryKeys | semmle.label | queryKeys | | ReflectedXss.js:115:31:115:45 | paramKeys?.keys | semmle.label | paramKeys?.keys | -| ReflectedXss.js:117:11:117:61 | keyArray | semmle.label | keyArray | -| ReflectedXss.js:117:11:117:61 | keyArray [0] | semmle.label | keyArray [0] | +| ReflectedXss.js:117:11:117:18 | keyArray | semmle.label | keyArray | +| ReflectedXss.js:117:11:117:18 | keyArray [0] | semmle.label | keyArray [0] | | ReflectedXss.js:117:49:117:54 | [keys] [0] | semmle.label | [keys] [0] | | ReflectedXss.js:117:50:117:53 | keys | semmle.label | keys | | ReflectedXss.js:117:58:117:61 | keys | semmle.label | keys | -| ReflectedXss.js:118:11:118:72 | invalidKeys | semmle.label | invalidKeys | -| ReflectedXss.js:118:11:118:72 | invalidKeys [0] | semmle.label | invalidKeys [0] | +| ReflectedXss.js:118:11:118:21 | invalidKeys | semmle.label | invalidKeys | +| ReflectedXss.js:118:11:118:21 | invalidKeys [0] | semmle.label | invalidKeys [0] | | ReflectedXss.js:118:25:118:32 | keyArray | semmle.label | keyArray | | ReflectedXss.js:118:25:118:32 | keyArray [0] | semmle.label | keyArray [0] | | ReflectedXss.js:118:25:118:72 | keyArra ... s(key)) | semmle.label | keyArra ... s(key)) | @@ -335,8 +335,8 @@ nodes | ReflectedXssContentTypes.js:70:12:70:34 | "FOO: " ... rams.id | semmle.label | "FOO: " ... rams.id | | ReflectedXssContentTypes.js:70:22:70:34 | req.params.id | semmle.label | req.params.id | | ReflectedXssGood3.js:68:22:68:26 | value | semmle.label | value | -| ReflectedXssGood3.js:77:7:77:37 | parts | semmle.label | parts | -| ReflectedXssGood3.js:77:7:77:37 | parts [0] | semmle.label | parts [0] | +| ReflectedXssGood3.js:77:7:77:11 | parts | semmle.label | parts | +| ReflectedXssGood3.js:77:7:77:11 | parts [0] | semmle.label | parts [0] | | ReflectedXssGood3.js:77:15:77:37 | [value. ... (0, i)] [0] | semmle.label | [value. ... (0, i)] [0] | | ReflectedXssGood3.js:77:16:77:20 | value | semmle.label | value | | ReflectedXssGood3.js:77:16:77:36 | value.s ... g(0, i) | semmle.label | value.s ... g(0, i) | @@ -347,38 +347,38 @@ nodes | ReflectedXssGood3.js:108:10:108:14 | parts [0] | semmle.label | parts [0] | | ReflectedXssGood3.js:108:10:108:14 | parts [ArrayElement] | semmle.label | parts [ArrayElement] | | ReflectedXssGood3.js:108:10:108:23 | parts.join('') | semmle.label | parts.join('') | -| ReflectedXssGood3.js:135:9:135:27 | url | semmle.label | url | +| ReflectedXssGood3.js:135:9:135:11 | url | semmle.label | url | | ReflectedXssGood3.js:135:15:135:27 | req.params.id | semmle.label | req.params.id | | ReflectedXssGood3.js:139:12:139:27 | escapeHtml3(url) | semmle.label | escapeHtml3(url) | | ReflectedXssGood3.js:139:24:139:26 | url | semmle.label | url | -| app/api/route.ts:2:11:2:33 | body | semmle.label | body | +| app/api/route.ts:2:11:2:14 | body | semmle.label | body | | app/api/route.ts:2:18:2:33 | await req.json() | semmle.label | await req.json() | | app/api/route.ts:2:24:2:33 | req.json() | semmle.label | req.json() | | app/api/route.ts:5:18:5:21 | body | semmle.label | body | | app/api/route.ts:13:18:13:21 | body | semmle.label | body | | app/api/route.ts:25:18:25:21 | body | semmle.label | body | | app/api/route.ts:29:25:29:28 | body | semmle.label | body | -| app/api/routeNextRequest.ts:4:9:4:31 | body | semmle.label | body | +| app/api/routeNextRequest.ts:4:9:4:12 | body | semmle.label | body | | app/api/routeNextRequest.ts:4:16:4:31 | await req.json() | semmle.label | await req.json() | | app/api/routeNextRequest.ts:4:22:4:31 | req.json() | semmle.label | req.json() | | app/api/routeNextRequest.ts:7:20:7:23 | body | semmle.label | body | | app/api/routeNextRequest.ts:15:20:15:23 | body | semmle.label | body | | app/api/routeNextRequest.ts:27:20:27:23 | body | semmle.label | body | | app/api/routeNextRequest.ts:31:27:31:30 | body | semmle.label | body | -| etherpad.js:9:5:9:53 | response | semmle.label | response | +| etherpad.js:9:5:9:12 | response | semmle.label | response | | etherpad.js:9:16:9:30 | req.query.jsonp | semmle.label | req.query.jsonp | | etherpad.js:11:12:11:19 | response | semmle.label | response | -| formatting.js:4:9:4:29 | evil | semmle.label | evil | +| formatting.js:4:9:4:12 | evil | semmle.label | evil | | formatting.js:4:16:4:29 | req.query.evil | semmle.label | req.query.evil | | formatting.js:6:14:6:47 | util.fo ... , evil) | semmle.label | util.fo ... , evil) | | formatting.js:6:43:6:46 | evil | semmle.label | evil | | formatting.js:7:14:7:53 | require ... , evil) | semmle.label | require ... , evil) | | formatting.js:7:49:7:52 | evil | semmle.label | evil | -| live-server.js:4:11:4:27 | tainted | semmle.label | tainted | +| live-server.js:4:11:4:17 | tainted | semmle.label | tainted | | live-server.js:4:21:4:27 | req.url | semmle.label | req.url | | live-server.js:6:13:6:50 | ` ... /html>` | semmle.label | ` ... /html>` | | live-server.js:6:28:6:34 | tainted | semmle.label | tainted | -| live-server.js:10:11:10:27 | tainted | semmle.label | tainted | +| live-server.js:10:11:10:17 | tainted | semmle.label | tainted | | live-server.js:10:21:10:27 | req.url | semmle.label | req.url | | live-server.js:12:13:12:50 | ` ... /html>` | semmle.label | ` ... /html>` | | live-server.js:12:28:12:34 | tainted | semmle.label | tainted | @@ -407,7 +407,7 @@ nodes | promises.js:5:44:5:57 | req.query.data | semmle.label | req.query.data | | promises.js:6:11:6:11 | x | semmle.label | x | | promises.js:6:25:6:25 | x | semmle.label | x | -| response-object.js:7:11:7:25 | data | semmle.label | data | +| response-object.js:7:11:7:14 | data | semmle.label | data | | response-object.js:7:18:7:25 | req.body | semmle.label | req.body | | response-object.js:9:18:9:21 | data | semmle.label | data | | response-object.js:10:18:10:21 | data | semmle.label | data | @@ -418,83 +418,83 @@ nodes | response-object.js:26:18:26:21 | data | semmle.label | data | | response-object.js:34:18:34:21 | data | semmle.label | data | | response-object.js:38:18:38:21 | data | semmle.label | data | -| tst2.js:6:7:6:30 | p | semmle.label | p | -| tst2.js:6:7:6:30 | r | semmle.label | r | +| tst2.js:6:9:6:9 | p | semmle.label | p | | tst2.js:6:9:6:9 | p | semmle.label | p | | tst2.js:6:12:6:15 | q: r | semmle.label | q: r | +| tst2.js:6:15:6:15 | r | semmle.label | r | | tst2.js:7:12:7:12 | p | semmle.label | p | | tst2.js:8:12:8:12 | r | semmle.label | r | -| tst2.js:14:7:14:24 | p | semmle.label | p | +| tst2.js:14:9:14:9 | p | semmle.label | p | | tst2.js:14:9:14:9 | p | semmle.label | p | | tst2.js:18:12:18:12 | p | semmle.label | p | | tst2.js:21:14:21:14 | p | semmle.label | p | -| tst2.js:30:7:30:24 | p | semmle.label | p | +| tst2.js:30:9:30:9 | p | semmle.label | p | | tst2.js:30:9:30:9 | p | semmle.label | p | | tst2.js:33:3:33:5 | [post update] obj [p] | semmle.label | [post update] obj [p] | | tst2.js:33:11:33:11 | p | semmle.label | p | -| tst2.js:34:7:34:24 | other [p] | semmle.label | other [p] | +| tst2.js:34:7:34:11 | other [p] | semmle.label | other [p] | | tst2.js:34:15:34:24 | clone(obj) [p] | semmle.label | clone(obj) [p] | | tst2.js:34:21:34:23 | obj [p] | semmle.label | obj [p] | | tst2.js:36:12:36:12 | p | semmle.label | p | | tst2.js:37:12:37:16 | other [p] | semmle.label | other [p] | | tst2.js:37:12:37:18 | other.p | semmle.label | other.p | -| tst2.js:43:7:43:24 | p | semmle.label | p | | tst2.js:43:9:43:9 | p | semmle.label | p | -| tst2.js:49:7:49:53 | unsafe | semmle.label | unsafe | +| tst2.js:43:9:43:9 | p | semmle.label | p | +| tst2.js:49:7:49:12 | unsafe | semmle.label | unsafe | | tst2.js:49:16:49:53 | seriali ... true}) | semmle.label | seriali ... true}) | | tst2.js:49:36:49:36 | p | semmle.label | p | | tst2.js:51:12:51:17 | unsafe | semmle.label | unsafe | -| tst2.js:57:7:57:24 | p | semmle.label | p | +| tst2.js:57:9:57:9 | p | semmle.label | p | | tst2.js:57:9:57:9 | p | semmle.label | p | | tst2.js:60:3:60:5 | [post update] obj [p] | semmle.label | [post update] obj [p] | | tst2.js:60:11:60:11 | p | semmle.label | p | -| tst2.js:61:7:61:25 | other [p] | semmle.label | other [p] | +| tst2.js:61:7:61:11 | other [p] | semmle.label | other [p] | | tst2.js:61:15:61:25 | fclone(obj) [p] | semmle.label | fclone(obj) [p] | | tst2.js:61:22:61:24 | obj [p] | semmle.label | obj [p] | | tst2.js:63:12:63:12 | p | semmle.label | p | | tst2.js:64:12:64:16 | other [p] | semmle.label | other [p] | | tst2.js:64:12:64:18 | other.p | semmle.label | other.p | -| tst2.js:69:7:69:24 | p | semmle.label | p | +| tst2.js:69:9:69:9 | p | semmle.label | p | | tst2.js:69:9:69:9 | p | semmle.label | p | | tst2.js:72:3:72:5 | [post update] obj [p] | semmle.label | [post update] obj [p] | | tst2.js:72:11:72:11 | p | semmle.label | p | -| tst2.js:73:7:73:44 | other [p] | semmle.label | other [p] | +| tst2.js:73:7:73:11 | other [p] | semmle.label | other [p] | | tst2.js:73:15:73:44 | jc.retr ... e(obj)) [p] | semmle.label | jc.retr ... e(obj)) [p] | | tst2.js:73:29:73:43 | jc.decycle(obj) [p] | semmle.label | jc.decycle(obj) [p] | | tst2.js:73:40:73:42 | obj [p] | semmle.label | obj [p] | | tst2.js:75:12:75:12 | p | semmle.label | p | | tst2.js:76:12:76:16 | other [p] | semmle.label | other [p] | | tst2.js:76:12:76:18 | other.p | semmle.label | other.p | -| tst2.js:82:7:82:24 | p | semmle.label | p | +| tst2.js:82:9:82:9 | p | semmle.label | p | | tst2.js:82:9:82:9 | p | semmle.label | p | | tst2.js:85:3:85:5 | [post update] obj [p] | semmle.label | [post update] obj [p] | | tst2.js:85:11:85:11 | p | semmle.label | p | -| tst2.js:86:7:86:27 | other [p] | semmle.label | other [p] | +| tst2.js:86:7:86:11 | other [p] | semmle.label | other [p] | | tst2.js:86:15:86:27 | sortKeys(obj) [p] | semmle.label | sortKeys(obj) [p] | | tst2.js:86:24:86:26 | obj [p] | semmle.label | obj [p] | | tst2.js:88:12:88:12 | p | semmle.label | p | | tst2.js:89:12:89:16 | other [p] | semmle.label | other [p] | | tst2.js:89:12:89:18 | other.p | semmle.label | other.p | -| tst2.js:93:7:93:24 | p | semmle.label | p | | tst2.js:93:9:93:9 | p | semmle.label | p | -| tst2.js:99:7:99:69 | unsafe | semmle.label | unsafe | +| tst2.js:93:9:93:9 | p | semmle.label | p | +| tst2.js:99:7:99:12 | unsafe | semmle.label | unsafe | | tst2.js:99:16:99:69 | seriali ... true}) | semmle.label | seriali ... true}) | | tst2.js:99:36:99:52 | {someProperty: p} [someProperty] | semmle.label | {someProperty: p} [someProperty] | | tst2.js:99:51:99:51 | p | semmle.label | p | | tst2.js:101:12:101:17 | unsafe | semmle.label | unsafe | -| tst2.js:105:7:105:24 | p | semmle.label | p | | tst2.js:105:9:105:9 | p | semmle.label | p | -| tst2.js:110:7:110:29 | obj [someProperty] | semmle.label | obj [someProperty] | +| tst2.js:105:9:105:9 | p | semmle.label | p | +| tst2.js:110:7:110:9 | obj [someProperty] | semmle.label | obj [someProperty] | | tst2.js:110:13:110:29 | {someProperty: p} [someProperty] | semmle.label | {someProperty: p} [someProperty] | | tst2.js:110:28:110:28 | p | semmle.label | p | -| tst2.js:111:7:111:55 | unsafe | semmle.label | unsafe | +| tst2.js:111:7:111:12 | unsafe | semmle.label | unsafe | | tst2.js:111:16:111:55 | seriali ... true}) | semmle.label | seriali ... true}) | | tst2.js:111:36:111:38 | obj [someProperty] | semmle.label | obj [someProperty] | | tst2.js:113:12:113:17 | unsafe | semmle.label | unsafe | -| tst3.js:5:7:5:24 | p | semmle.label | p | +| tst3.js:5:9:5:9 | p | semmle.label | p | | tst3.js:5:9:5:9 | p | semmle.label | p | | tst3.js:6:12:6:12 | p | semmle.label | p | -| tst3.js:11:9:11:74 | code | semmle.label | code | +| tst3.js:11:9:11:12 | code | semmle.label | code | | tst3.js:11:16:11:74 | prettie ... bel" }) | semmle.label | prettie ... bel" }) | | tst3.js:11:32:11:39 | reg.body | semmle.label | reg.body | | tst3.js:12:12:12:15 | code | semmle.label | code | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/StoredXss/StoredXss.expected b/javascript/ql/test/query-tests/Security/CWE-079/StoredXss/StoredXss.expected index a2bcd0163fd..26f888fa0ba 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/StoredXss/StoredXss.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/StoredXss/StoredXss.expected @@ -22,12 +22,12 @@ edges | xss-through-filenames.js:30:34:30:37 | file | xss-through-filenames.js:31:25:31:28 | file | provenance | | | xss-through-filenames.js:31:25:31:28 | file | xss-through-filenames.js:31:13:31:18 | [post update] files2 [ArrayElement] | provenance | | | xss-through-filenames.js:33:19:33:24 | files2 [ArrayElement] | xss-through-filenames.js:35:29:35:34 | files2 [ArrayElement] | provenance | | -| xss-through-filenames.js:35:13:35:35 | files3 | xss-through-filenames.js:37:19:37:24 | files3 | provenance | | -| xss-through-filenames.js:35:22:35:35 | format(files2) | xss-through-filenames.js:35:13:35:35 | files3 | provenance | | +| xss-through-filenames.js:35:13:35:18 | files3 | xss-through-filenames.js:37:19:37:24 | files3 | provenance | | +| xss-through-filenames.js:35:22:35:35 | format(files2) | xss-through-filenames.js:35:13:35:18 | files3 | provenance | | | xss-through-filenames.js:35:29:35:34 | files2 [ArrayElement] | xss-through-filenames.js:17:21:17:26 | files2 [ArrayElement] | provenance | | | xss-through-filenames.js:35:29:35:34 | files2 [ArrayElement] | xss-through-filenames.js:35:22:35:35 | format(files2) | provenance | | -| xss-through-torrent.js:6:6:6:24 | name | xss-through-torrent.js:7:11:7:14 | name | provenance | | -| xss-through-torrent.js:6:13:6:24 | torrent.name | xss-through-torrent.js:6:6:6:24 | name | provenance | | +| xss-through-torrent.js:6:6:6:9 | name | xss-through-torrent.js:7:11:7:14 | name | provenance | | +| xss-through-torrent.js:6:13:6:24 | torrent.name | xss-through-torrent.js:6:6:6:9 | name | provenance | | nodes | xss-through-filenames.js:7:43:7:48 | files1 | semmle.label | files1 | | xss-through-filenames.js:8:18:8:23 | files1 | semmle.label | files1 | @@ -48,11 +48,11 @@ nodes | xss-through-filenames.js:31:25:31:28 | file | semmle.label | file | | xss-through-filenames.js:33:19:33:24 | files2 | semmle.label | files2 | | xss-through-filenames.js:33:19:33:24 | files2 [ArrayElement] | semmle.label | files2 [ArrayElement] | -| xss-through-filenames.js:35:13:35:35 | files3 | semmle.label | files3 | +| xss-through-filenames.js:35:13:35:18 | files3 | semmle.label | files3 | | xss-through-filenames.js:35:22:35:35 | format(files2) | semmle.label | format(files2) | | xss-through-filenames.js:35:29:35:34 | files2 [ArrayElement] | semmle.label | files2 [ArrayElement] | | xss-through-filenames.js:37:19:37:24 | files3 | semmle.label | files3 | -| xss-through-torrent.js:6:6:6:24 | name | semmle.label | name | +| xss-through-torrent.js:6:6:6:9 | name | semmle.label | name | | xss-through-torrent.js:6:13:6:24 | torrent.name | semmle.label | torrent.name | | xss-through-torrent.js:7:11:7:14 | name | semmle.label | name | subpaths diff --git a/javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/UnsafeHtmlConstruction.expected b/javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/UnsafeHtmlConstruction.expected index 4f757d1a931..63bdfa1bcf2 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/UnsafeHtmlConstruction.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/UnsafeHtmlConstruction/UnsafeHtmlConstruction.expected @@ -29,11 +29,11 @@ edges | lib2/index.ts:1:28:1:28 | s | lib2/index.ts:2:27:2:27 | s | provenance | | | lib2/index.ts:6:29:6:36 | settings | lib2/index.ts:7:58:7:65 | settings | provenance | | | lib2/index.ts:6:29:6:36 | settings | lib2/index.ts:13:16:13:23 | settings | provenance | | -| lib2/index.ts:13:9:13:41 | name | lib2/index.ts:18:62:18:65 | name | provenance | | +| lib2/index.ts:13:9:13:12 | name | lib2/index.ts:18:62:18:65 | name | provenance | | | lib2/index.ts:13:16:13:23 | settings | lib2/index.ts:13:16:13:33 | settings.mySetting | provenance | Config | | lib2/index.ts:13:16:13:33 | settings.mySetting | lib2/index.ts:13:16:13:36 | setting ... ting[i] | provenance | Config | | lib2/index.ts:13:16:13:36 | setting ... ting[i] | lib2/index.ts:13:16:13:41 | setting ... i].name | provenance | Config | -| lib2/index.ts:13:16:13:41 | setting ... i].name | lib2/index.ts:13:9:13:41 | name | provenance | | +| lib2/index.ts:13:16:13:41 | setting ... i].name | lib2/index.ts:13:9:13:12 | name | provenance | | | lib2/src/MyNode.ts:1:28:1:28 | s | lib2/src/MyNode.ts:2:29:2:29 | s | provenance | | | lib/src/MyNode.ts:1:28:1:28 | s | lib/src/MyNode.ts:2:29:2:29 | s | provenance | | | main.js:1:55:1:55 | s | main.js:2:29:2:29 | s | provenance | | @@ -41,12 +41,12 @@ edges | main.js:11:60:11:60 | s | main.js:12:49:12:49 | s | provenance | | | main.js:21:47:21:47 | s | main.js:22:34:22:34 | s | provenance | | | main.js:56:28:56:34 | options | main.js:60:41:60:47 | options | provenance | | -| main.js:57:11:59:5 | defaults | main.js:60:31:60:38 | defaults | provenance | | -| main.js:57:11:59:5 | defaults | main.js:60:31:60:38 | defaults | provenance | | -| main.js:57:22:59:5 | {\\n ... "\\n } | main.js:57:11:59:5 | defaults | provenance | | -| main.js:57:22:59:5 | {\\n ... "\\n } | main.js:57:11:59:5 | defaults | provenance | | -| main.js:60:11:60:48 | settings | main.js:62:19:62:26 | settings | provenance | | -| main.js:60:22:60:48 | $.exten ... ptions) | main.js:60:11:60:48 | settings | provenance | | +| main.js:57:11:57:18 | defaults | main.js:60:31:60:38 | defaults | provenance | | +| main.js:57:11:57:18 | defaults | main.js:60:31:60:38 | defaults | provenance | | +| main.js:57:22:59:5 | {\\n ... "\\n } | main.js:57:11:57:18 | defaults | provenance | | +| main.js:57:22:59:5 | {\\n ... "\\n } | main.js:57:11:57:18 | defaults | provenance | | +| main.js:60:11:60:18 | settings | main.js:62:19:62:26 | settings | provenance | | +| main.js:60:22:60:48 | $.exten ... ptions) | main.js:60:11:60:18 | settings | provenance | | | main.js:60:31:60:38 | defaults | main.js:60:22:60:48 | $.exten ... ptions) | provenance | | | main.js:60:31:60:38 | defaults | main.js:60:22:60:48 | $.exten ... ptions) | provenance | | | main.js:60:31:60:38 | defaults | main.js:60:22:60:48 | $.exten ... ptions) | provenance | Config | @@ -78,7 +78,7 @@ nodes | lib2/index.ts:2:27:2:27 | s | semmle.label | s | | lib2/index.ts:6:29:6:36 | settings | semmle.label | settings | | lib2/index.ts:7:58:7:65 | settings | semmle.label | settings | -| lib2/index.ts:13:9:13:41 | name | semmle.label | name | +| lib2/index.ts:13:9:13:12 | name | semmle.label | name | | lib2/index.ts:13:16:13:23 | settings | semmle.label | settings | | lib2/index.ts:13:16:13:33 | settings.mySetting | semmle.label | settings.mySetting | | lib2/index.ts:13:16:13:36 | setting ... ting[i] | semmle.label | setting ... ting[i] | @@ -97,11 +97,11 @@ nodes | main.js:21:47:21:47 | s | semmle.label | s | | main.js:22:34:22:34 | s | semmle.label | s | | main.js:56:28:56:34 | options | semmle.label | options | -| main.js:57:11:59:5 | defaults | semmle.label | defaults | -| main.js:57:11:59:5 | defaults | semmle.label | defaults | +| main.js:57:11:57:18 | defaults | semmle.label | defaults | +| main.js:57:11:57:18 | defaults | semmle.label | defaults | | main.js:57:22:59:5 | {\\n ... "\\n } | semmle.label | {\\n ... "\\n } | | main.js:57:22:59:5 | {\\n ... "\\n } | semmle.label | {\\n ... "\\n } | -| main.js:60:11:60:48 | settings | semmle.label | settings | +| main.js:60:11:60:18 | settings | semmle.label | settings | | main.js:60:22:60:48 | $.exten ... ptions) | semmle.label | $.exten ... ptions) | | main.js:60:31:60:38 | defaults | semmle.label | defaults | | main.js:60:31:60:38 | defaults | semmle.label | defaults | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/UnsafeJQueryPlugin/UnsafeJQueryPlugin.expected b/javascript/ql/test/query-tests/Security/CWE-079/UnsafeJQueryPlugin/UnsafeJQueryPlugin.expected index 236f3b387fa..563f8b52d9c 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/UnsafeJQueryPlugin/UnsafeJQueryPlugin.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/UnsafeJQueryPlugin/UnsafeJQueryPlugin.expected @@ -32,15 +32,15 @@ edges | unsafe-jquery-plugin.js:5:5:5:18 | options.target | unsafe-jquery-plugin.js:11:16:11:29 | options.target | provenance | Config | | unsafe-jquery-plugin.js:7:17:7:23 | options | unsafe-jquery-plugin.js:7:17:7:30 | options.target | provenance | | | unsafe-jquery-plugin.js:7:17:7:30 | options.target | unsafe-jquery-plugin.js:11:16:11:29 | options.target | provenance | Config | -| unsafe-jquery-plugin.js:11:7:11:29 | target | unsafe-jquery-plugin.js:22:6:22:11 | target | provenance | | -| unsafe-jquery-plugin.js:11:7:11:29 | target | unsafe-jquery-plugin.js:30:6:30:11 | target | provenance | | -| unsafe-jquery-plugin.js:11:7:11:29 | target | unsafe-jquery-plugin.js:36:6:36:11 | target | provenance | | -| unsafe-jquery-plugin.js:11:7:11:29 | target | unsafe-jquery-plugin.js:40:6:40:11 | target | provenance | | -| unsafe-jquery-plugin.js:11:7:11:29 | target | unsafe-jquery-plugin.js:48:6:48:11 | target | provenance | | -| unsafe-jquery-plugin.js:11:7:11:29 | target | unsafe-jquery-plugin.js:52:6:52:11 | target | provenance | | -| unsafe-jquery-plugin.js:11:7:11:29 | target | unsafe-jquery-plugin.js:60:6:60:11 | target | provenance | | +| unsafe-jquery-plugin.js:11:7:11:12 | target | unsafe-jquery-plugin.js:22:6:22:11 | target | provenance | | +| unsafe-jquery-plugin.js:11:7:11:12 | target | unsafe-jquery-plugin.js:30:6:30:11 | target | provenance | | +| unsafe-jquery-plugin.js:11:7:11:12 | target | unsafe-jquery-plugin.js:36:6:36:11 | target | provenance | | +| unsafe-jquery-plugin.js:11:7:11:12 | target | unsafe-jquery-plugin.js:40:6:40:11 | target | provenance | | +| unsafe-jquery-plugin.js:11:7:11:12 | target | unsafe-jquery-plugin.js:48:6:48:11 | target | provenance | | +| unsafe-jquery-plugin.js:11:7:11:12 | target | unsafe-jquery-plugin.js:52:6:52:11 | target | provenance | | +| unsafe-jquery-plugin.js:11:7:11:12 | target | unsafe-jquery-plugin.js:60:6:60:11 | target | provenance | | | unsafe-jquery-plugin.js:11:16:11:22 | options | unsafe-jquery-plugin.js:11:16:11:29 | options.target | provenance | | -| unsafe-jquery-plugin.js:11:16:11:29 | options.target | unsafe-jquery-plugin.js:11:7:11:29 | target | provenance | | +| unsafe-jquery-plugin.js:11:16:11:29 | options.target | unsafe-jquery-plugin.js:11:7:11:12 | target | provenance | | | unsafe-jquery-plugin.js:65:47:65:53 | options | unsafe-jquery-plugin.js:67:37:67:43 | options | provenance | | | unsafe-jquery-plugin.js:67:3:67:6 | [post update] this [options] | unsafe-jquery-plugin.js:68:7:68:10 | this [options] | provenance | | | unsafe-jquery-plugin.js:67:24:67:44 | $.exten ... ptions) | unsafe-jquery-plugin.js:67:3:67:6 | [post update] this [options] | provenance | | @@ -57,18 +57,18 @@ edges | unsafe-jquery-plugin.js:86:4:86:7 | [post update] this [o] | unsafe-jquery-plugin.js:87:12:87:15 | this [o] | provenance | | | unsafe-jquery-plugin.js:86:13:86:27 | $.extend({}, o) | unsafe-jquery-plugin.js:86:4:86:7 | [post update] this [o] | provenance | | | unsafe-jquery-plugin.js:86:26:86:26 | o | unsafe-jquery-plugin.js:86:13:86:27 | $.extend({}, o) | provenance | | -| unsafe-jquery-plugin.js:87:8:87:24 | t | unsafe-jquery-plugin.js:90:6:90:6 | t | provenance | | +| unsafe-jquery-plugin.js:87:8:87:8 | t | unsafe-jquery-plugin.js:90:6:90:6 | t | provenance | | | unsafe-jquery-plugin.js:87:12:87:15 | this [o] | unsafe-jquery-plugin.js:87:12:87:17 | this.o | provenance | | -| unsafe-jquery-plugin.js:87:12:87:17 | this.o | unsafe-jquery-plugin.js:87:8:87:24 | t | provenance | | +| unsafe-jquery-plugin.js:87:12:87:17 | this.o | unsafe-jquery-plugin.js:87:8:87:8 | t | provenance | | | unsafe-jquery-plugin.js:92:5:92:11 | options | unsafe-jquery-plugin.js:85:14:85:14 | o | provenance | | | unsafe-jquery-plugin.js:101:38:101:44 | options | unsafe-jquery-plugin.js:105:6:105:12 | options | provenance | | -| unsafe-jquery-plugin.js:102:3:105:13 | options | unsafe-jquery-plugin.js:107:5:107:11 | options | provenance | | -| unsafe-jquery-plugin.js:102:13:105:13 | $.exten ... ptions) | unsafe-jquery-plugin.js:102:3:105:13 | options | provenance | | +| unsafe-jquery-plugin.js:102:3:102:9 | options | unsafe-jquery-plugin.js:107:5:107:11 | options | provenance | | +| unsafe-jquery-plugin.js:102:13:105:13 | $.exten ... ptions) | unsafe-jquery-plugin.js:102:3:102:9 | options | provenance | | | unsafe-jquery-plugin.js:105:6:105:12 | options | unsafe-jquery-plugin.js:102:13:105:13 | $.exten ... ptions) | provenance | | | unsafe-jquery-plugin.js:107:5:107:11 | options | unsafe-jquery-plugin.js:107:5:107:18 | options.target | provenance | | | unsafe-jquery-plugin.js:114:38:114:44 | options | unsafe-jquery-plugin.js:115:51:115:57 | options | provenance | | -| unsafe-jquery-plugin.js:115:3:115:58 | options | unsafe-jquery-plugin.js:117:5:117:11 | options | provenance | | -| unsafe-jquery-plugin.js:115:13:115:58 | $.exten ... ptions) | unsafe-jquery-plugin.js:115:3:115:58 | options | provenance | | +| unsafe-jquery-plugin.js:115:3:115:9 | options | unsafe-jquery-plugin.js:117:5:117:11 | options | provenance | | +| unsafe-jquery-plugin.js:115:13:115:58 | $.exten ... ptions) | unsafe-jquery-plugin.js:115:3:115:9 | options | provenance | | | unsafe-jquery-plugin.js:115:51:115:57 | options | unsafe-jquery-plugin.js:115:13:115:58 | $.exten ... ptions) | provenance | | | unsafe-jquery-plugin.js:117:5:117:11 | options | unsafe-jquery-plugin.js:117:5:117:18 | options.target | provenance | | | unsafe-jquery-plugin.js:121:40:121:46 | options | unsafe-jquery-plugin.js:122:5:122:11 | options | provenance | | @@ -90,8 +90,8 @@ edges | unsafe-jquery-plugin.js:157:44:157:50 | options | unsafe-jquery-plugin.js:157:44:157:57 | options.target | provenance | | | unsafe-jquery-plugin.js:157:44:157:57 | options.target | unsafe-jquery-plugin.js:157:44:157:59 | options.target.a | provenance | | | unsafe-jquery-plugin.js:160:38:160:44 | options | unsafe-jquery-plugin.js:165:16:165:22 | options | provenance | | -| unsafe-jquery-plugin.js:165:7:165:29 | target | unsafe-jquery-plugin.js:170:6:170:11 | target | provenance | | -| unsafe-jquery-plugin.js:165:16:165:22 | options | unsafe-jquery-plugin.js:165:7:165:29 | target | provenance | | +| unsafe-jquery-plugin.js:165:7:165:12 | target | unsafe-jquery-plugin.js:170:6:170:11 | target | provenance | | +| unsafe-jquery-plugin.js:165:16:165:22 | options | unsafe-jquery-plugin.js:165:7:165:12 | target | provenance | | | unsafe-jquery-plugin.js:178:27:178:33 | options | unsafe-jquery-plugin.js:179:5:179:11 | options | provenance | | | unsafe-jquery-plugin.js:179:5:179:11 | options | unsafe-jquery-plugin.js:179:5:179:18 | options.target | provenance | | | unsafe-jquery-plugin.js:185:28:185:34 | options | unsafe-jquery-plugin.js:186:21:186:27 | options | provenance | | @@ -105,7 +105,7 @@ nodes | unsafe-jquery-plugin.js:5:5:5:18 | options.target | semmle.label | options.target | | unsafe-jquery-plugin.js:7:17:7:23 | options | semmle.label | options | | unsafe-jquery-plugin.js:7:17:7:30 | options.target | semmle.label | options.target | -| unsafe-jquery-plugin.js:11:7:11:29 | target | semmle.label | target | +| unsafe-jquery-plugin.js:11:7:11:12 | target | semmle.label | target | | unsafe-jquery-plugin.js:11:16:11:22 | options | semmle.label | options | | unsafe-jquery-plugin.js:11:16:11:29 | options.target | semmle.label | options.target | | unsafe-jquery-plugin.js:22:6:22:11 | target | semmle.label | target | @@ -134,19 +134,19 @@ nodes | unsafe-jquery-plugin.js:86:4:86:7 | [post update] this [o] | semmle.label | [post update] this [o] | | unsafe-jquery-plugin.js:86:13:86:27 | $.extend({}, o) | semmle.label | $.extend({}, o) | | unsafe-jquery-plugin.js:86:26:86:26 | o | semmle.label | o | -| unsafe-jquery-plugin.js:87:8:87:24 | t | semmle.label | t | +| unsafe-jquery-plugin.js:87:8:87:8 | t | semmle.label | t | | unsafe-jquery-plugin.js:87:12:87:15 | this [o] | semmle.label | this [o] | | unsafe-jquery-plugin.js:87:12:87:17 | this.o | semmle.label | this.o | | unsafe-jquery-plugin.js:90:6:90:6 | t | semmle.label | t | | unsafe-jquery-plugin.js:92:5:92:11 | options | semmle.label | options | | unsafe-jquery-plugin.js:101:38:101:44 | options | semmle.label | options | -| unsafe-jquery-plugin.js:102:3:105:13 | options | semmle.label | options | +| unsafe-jquery-plugin.js:102:3:102:9 | options | semmle.label | options | | unsafe-jquery-plugin.js:102:13:105:13 | $.exten ... ptions) | semmle.label | $.exten ... ptions) | | unsafe-jquery-plugin.js:105:6:105:12 | options | semmle.label | options | | unsafe-jquery-plugin.js:107:5:107:11 | options | semmle.label | options | | unsafe-jquery-plugin.js:107:5:107:18 | options.target | semmle.label | options.target | | unsafe-jquery-plugin.js:114:38:114:44 | options | semmle.label | options | -| unsafe-jquery-plugin.js:115:3:115:58 | options | semmle.label | options | +| unsafe-jquery-plugin.js:115:3:115:9 | options | semmle.label | options | | unsafe-jquery-plugin.js:115:13:115:58 | $.exten ... ptions) | semmle.label | $.exten ... ptions) | | unsafe-jquery-plugin.js:115:51:115:57 | options | semmle.label | options | | unsafe-jquery-plugin.js:117:5:117:11 | options | semmle.label | options | @@ -172,7 +172,7 @@ nodes | unsafe-jquery-plugin.js:157:44:157:57 | options.target | semmle.label | options.target | | unsafe-jquery-plugin.js:157:44:157:59 | options.target.a | semmle.label | options.target.a | | unsafe-jquery-plugin.js:160:38:160:44 | options | semmle.label | options | -| unsafe-jquery-plugin.js:165:7:165:29 | target | semmle.label | target | +| unsafe-jquery-plugin.js:165:7:165:12 | target | semmle.label | target | | unsafe-jquery-plugin.js:165:16:165:22 | options | semmle.label | options | | unsafe-jquery-plugin.js:170:6:170:11 | target | semmle.label | target | | unsafe-jquery-plugin.js:178:27:178:33 | options | semmle.label | options | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected index 6f2eed5b139..fe0ee6ea788 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected @@ -58,38 +58,38 @@ edges | forms.js:25:23:25:28 | values | forms.js:25:23:25:34 | values.email | provenance | | | forms.js:28:20:28:25 | values | forms.js:29:23:29:28 | values | provenance | | | forms.js:29:23:29:28 | values | forms.js:29:23:29:34 | values.email | provenance | | -| forms.js:34:11:34:53 | values | forms.js:35:19:35:24 | values | provenance | | -| forms.js:34:13:34:18 | values | forms.js:34:11:34:53 | values | provenance | | +| forms.js:34:13:34:18 | values | forms.js:34:13:34:18 | values | provenance | | +| forms.js:34:13:34:18 | values | forms.js:35:19:35:24 | values | provenance | | | forms.js:35:19:35:24 | values | forms.js:35:19:35:30 | values.email | provenance | | | forms.js:44:21:44:26 | values | forms.js:45:21:45:26 | values | provenance | | | forms.js:45:21:45:26 | values | forms.js:45:21:45:33 | values.stooge | provenance | | | forms.js:71:21:71:24 | data | forms.js:72:19:72:22 | data | provenance | | | forms.js:72:19:72:22 | data | forms.js:72:19:72:27 | data.name | provenance | | -| forms.js:92:17:92:36 | values | forms.js:93:25:93:30 | values | provenance | | -| forms.js:92:26:92:36 | getValues() | forms.js:92:17:92:36 | values | provenance | | +| forms.js:92:17:92:22 | values | forms.js:93:25:93:30 | values | provenance | | +| forms.js:92:26:92:36 | getValues() | forms.js:92:17:92:22 | values | provenance | | | forms.js:93:25:93:30 | values | forms.js:93:25:93:35 | values.name | provenance | | -| xss-through-dom.js:73:9:73:41 | selector | xss-through-dom.js:77:4:77:11 | selector | provenance | | -| xss-through-dom.js:73:20:73:41 | $("inpu ... 0).name | xss-through-dom.js:73:9:73:41 | selector | provenance | | -| xss-through-dom.js:84:8:84:30 | text | xss-through-dom.js:86:33:86:36 | text | provenance | | -| xss-through-dom.js:84:8:84:30 | text | xss-through-dom.js:87:36:87:39 | text | provenance | | -| xss-through-dom.js:84:15:84:30 | $("text").text() | xss-through-dom.js:84:8:84:30 | text | provenance | | +| xss-through-dom.js:73:9:73:16 | selector | xss-through-dom.js:77:4:77:11 | selector | provenance | | +| xss-through-dom.js:73:20:73:41 | $("inpu ... 0).name | xss-through-dom.js:73:9:73:16 | selector | provenance | | +| xss-through-dom.js:84:8:84:11 | text | xss-through-dom.js:86:33:86:36 | text | provenance | | +| xss-through-dom.js:84:8:84:11 | text | xss-through-dom.js:87:36:87:39 | text | provenance | | +| xss-through-dom.js:84:15:84:30 | $("text").text() | xss-through-dom.js:84:8:84:11 | text | provenance | | | xss-through-dom.js:86:33:86:36 | text | xss-through-dom.js:86:16:86:37 | anser.a ... l(text) | provenance | | | xss-through-dom.js:87:36:87:39 | text | xss-through-dom.js:87:16:87:40 | new ans ... s(text) | provenance | | | xss-through-dom.js:109:45:109:55 | this.el.src | xss-through-dom.js:109:31:109:70 | "
    " | provenance | | -| xss-through-dom.js:114:11:114:52 | src | xss-through-dom.js:115:16:115:18 | src | provenance | | -| xss-through-dom.js:114:11:114:52 | src | xss-through-dom.js:117:26:117:28 | src | provenance | | -| xss-through-dom.js:114:17:114:52 | documen ... k").src | xss-through-dom.js:114:11:114:52 | src | provenance | | +| xss-through-dom.js:114:11:114:13 | src | xss-through-dom.js:115:16:115:18 | src | provenance | | +| xss-through-dom.js:114:11:114:13 | src | xss-through-dom.js:117:26:117:28 | src | provenance | | +| xss-through-dom.js:114:17:114:52 | documen ... k").src | xss-through-dom.js:114:11:114:13 | src | provenance | | | xss-through-dom.js:120:23:120:37 | ev.target.files | xss-through-dom.js:120:23:120:45 | ev.targ ... 0].name | provenance | | | xss-through-dom.js:122:53:122:67 | ev.target.files | xss-through-dom.js:122:53:122:70 | ev.target.files[0] | provenance | | | xss-through-dom.js:122:53:122:70 | ev.target.files[0] | xss-through-dom.js:122:33:122:71 | URL.cre ... les[0]) | provenance | Config | -| xss-through-dom.js:130:6:130:68 | linkText | xss-through-dom.js:131:19:131:26 | linkText | provenance | | -| xss-through-dom.js:130:6:130:68 | linkText | xss-through-dom.js:132:16:132:23 | linkText | provenance | | -| xss-through-dom.js:130:17:130:37 | wSelect ... tring() | xss-through-dom.js:130:6:130:68 | linkText | provenance | | -| xss-through-dom.js:130:42:130:62 | dSelect ... tring() | xss-through-dom.js:130:6:130:68 | linkText | provenance | | -| xss-through-dom.js:139:11:139:52 | src | xss-through-dom.js:140:19:140:21 | src | provenance | | -| xss-through-dom.js:139:11:139:52 | src | xss-through-dom.js:141:25:141:27 | src | provenance | | -| xss-through-dom.js:139:11:139:52 | src | xss-through-dom.js:150:24:150:26 | src | provenance | | -| xss-through-dom.js:139:17:139:52 | documen ... k").src | xss-through-dom.js:139:11:139:52 | src | provenance | | +| xss-through-dom.js:130:6:130:13 | linkText | xss-through-dom.js:131:19:131:26 | linkText | provenance | | +| xss-through-dom.js:130:6:130:13 | linkText | xss-through-dom.js:132:16:132:23 | linkText | provenance | | +| xss-through-dom.js:130:17:130:37 | wSelect ... tring() | xss-through-dom.js:130:6:130:13 | linkText | provenance | | +| xss-through-dom.js:130:42:130:62 | dSelect ... tring() | xss-through-dom.js:130:6:130:13 | linkText | provenance | | +| xss-through-dom.js:139:11:139:13 | src | xss-through-dom.js:140:19:140:21 | src | provenance | | +| xss-through-dom.js:139:11:139:13 | src | xss-through-dom.js:141:25:141:27 | src | provenance | | +| xss-through-dom.js:139:11:139:13 | src | xss-through-dom.js:150:24:150:26 | src | provenance | | +| xss-through-dom.js:139:17:139:52 | documen ... k").src | xss-through-dom.js:139:11:139:13 | src | provenance | | | xss-through-dom.js:154:25:154:27 | msg | xss-through-dom.js:155:27:155:29 | msg | provenance | | | xss-through-dom.js:159:34:159:52 | $("textarea").val() | xss-through-dom.js:154:25:154:27 | msg | provenance | | nodes @@ -111,7 +111,7 @@ nodes | forms.js:28:20:28:25 | values | semmle.label | values | | forms.js:29:23:29:28 | values | semmle.label | values | | forms.js:29:23:29:34 | values.email | semmle.label | values.email | -| forms.js:34:11:34:53 | values | semmle.label | values | +| forms.js:34:13:34:18 | values | semmle.label | values | | forms.js:34:13:34:18 | values | semmle.label | values | | forms.js:35:19:35:24 | values | semmle.label | values | | forms.js:35:19:35:30 | values.email | semmle.label | values.email | @@ -122,7 +122,7 @@ nodes | forms.js:71:21:71:24 | data | semmle.label | data | | forms.js:72:19:72:22 | data | semmle.label | data | | forms.js:72:19:72:27 | data.name | semmle.label | data.name | -| forms.js:92:17:92:36 | values | semmle.label | values | +| forms.js:92:17:92:22 | values | semmle.label | values | | forms.js:92:26:92:36 | getValues() | semmle.label | getValues() | | forms.js:93:25:93:30 | values | semmle.label | values | | forms.js:93:25:93:35 | values.name | semmle.label | values.name | @@ -142,12 +142,12 @@ nodes | xss-through-dom.js:61:30:61:69 | $(docum ... value") | semmle.label | $(docum ... value") | | xss-through-dom.js:64:30:64:40 | valMethod() | semmle.label | valMethod() | | xss-through-dom.js:71:11:71:32 | $("inpu ... 0).name | semmle.label | $("inpu ... 0).name | -| xss-through-dom.js:73:9:73:41 | selector | semmle.label | selector | +| xss-through-dom.js:73:9:73:16 | selector | semmle.label | selector | | xss-through-dom.js:73:20:73:41 | $("inpu ... 0).name | semmle.label | $("inpu ... 0).name | | xss-through-dom.js:77:4:77:11 | selector | semmle.label | selector | | xss-through-dom.js:79:4:79:34 | documen ... t.value | semmle.label | documen ... t.value | | xss-through-dom.js:81:17:81:43 | $('#foo ... rText') | semmle.label | $('#foo ... rText') | -| xss-through-dom.js:84:8:84:30 | text | semmle.label | text | +| xss-through-dom.js:84:8:84:11 | text | semmle.label | text | | xss-through-dom.js:84:15:84:30 | $("text").text() | semmle.label | $("text").text() | | xss-through-dom.js:86:16:86:37 | anser.a ... l(text) | semmle.label | anser.a ... l(text) | | xss-through-dom.js:86:33:86:36 | text | semmle.label | text | @@ -157,7 +157,7 @@ nodes | xss-through-dom.js:96:17:96:47 | $("#foo ... ].value | semmle.label | $("#foo ... ].value | | xss-through-dom.js:109:31:109:70 | "" | semmle.label | "" | | xss-through-dom.js:109:45:109:55 | this.el.src | semmle.label | this.el.src | -| xss-through-dom.js:114:11:114:52 | src | semmle.label | src | +| xss-through-dom.js:114:11:114:13 | src | semmle.label | src | | xss-through-dom.js:114:17:114:52 | documen ... k").src | semmle.label | documen ... k").src | | xss-through-dom.js:115:16:115:18 | src | semmle.label | src | | xss-through-dom.js:117:26:117:28 | src | semmle.label | src | @@ -166,12 +166,12 @@ nodes | xss-through-dom.js:122:33:122:71 | URL.cre ... les[0]) | semmle.label | URL.cre ... les[0]) | | xss-through-dom.js:122:53:122:67 | ev.target.files | semmle.label | ev.target.files | | xss-through-dom.js:122:53:122:70 | ev.target.files[0] | semmle.label | ev.target.files[0] | -| xss-through-dom.js:130:6:130:68 | linkText | semmle.label | linkText | +| xss-through-dom.js:130:6:130:13 | linkText | semmle.label | linkText | | xss-through-dom.js:130:17:130:37 | wSelect ... tring() | semmle.label | wSelect ... tring() | | xss-through-dom.js:130:42:130:62 | dSelect ... tring() | semmle.label | dSelect ... tring() | | xss-through-dom.js:131:19:131:26 | linkText | semmle.label | linkText | | xss-through-dom.js:132:16:132:23 | linkText | semmle.label | linkText | -| xss-through-dom.js:139:11:139:52 | src | semmle.label | src | +| xss-through-dom.js:139:11:139:13 | src | semmle.label | src | | xss-through-dom.js:139:17:139:52 | documen ... k").src | semmle.label | documen ... k").src | | xss-through-dom.js:140:19:140:21 | src | semmle.label | src | | xss-through-dom.js:141:25:141:27 | src | semmle.label | src | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/local-threat-source/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/local-threat-source/SqlInjection.expected index b6710ee92f5..48d4262921d 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/local-threat-source/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/local-threat-source/SqlInjection.expected @@ -1,11 +1,11 @@ #select | test.js:7:14:7:61 | 'SELECT ... + temp | test.js:4:12:4:22 | process.env | test.js:7:14:7:61 | 'SELECT ... + temp | This query string depends on a $@. | test.js:4:12:4:22 | process.env | user-provided value | edges -| test.js:4:5:4:29 | temp | test.js:7:58:7:61 | temp | provenance | | -| test.js:4:12:4:22 | process.env | test.js:4:5:4:29 | temp | provenance | | +| test.js:4:5:4:8 | temp | test.js:7:58:7:61 | temp | provenance | | +| test.js:4:12:4:22 | process.env | test.js:4:5:4:8 | temp | provenance | | | test.js:7:58:7:61 | temp | test.js:7:14:7:61 | 'SELECT ... + temp | provenance | | nodes -| test.js:4:5:4:29 | temp | semmle.label | temp | +| test.js:4:5:4:8 | temp | semmle.label | temp | | test.js:4:12:4:22 | process.env | semmle.label | process.env | | test.js:7:14:7:61 | 'SELECT ... + temp | semmle.label | 'SELECT ... + temp | | test.js:7:58:7:61 | temp | semmle.label | temp | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/typed/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/typed/SqlInjection.expected index b0ae2737b00..e4e45ed74d5 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/typed/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/typed/SqlInjection.expected @@ -3,26 +3,26 @@ | typedClient.ts:22:27:22:35 | { id: v } | typedClient.ts:21:22:21:29 | req.body | typedClient.ts:22:27:22:35 | { id: v } | This query object depends on a $@. | typedClient.ts:21:22:21:29 | req.body | user-provided value | | typedClient.ts:23:27:23:35 | { id: v } | typedClient.ts:21:22:21:29 | req.body | typedClient.ts:23:27:23:35 | { id: v } | This query object depends on a $@. | typedClient.ts:21:22:21:29 | req.body | user-provided value | edges -| typedClient.ts:13:7:13:32 | v | typedClient.ts:14:30:14:30 | v | provenance | | -| typedClient.ts:13:11:13:32 | JSON.pa ... body.x) | typedClient.ts:13:7:13:32 | v | provenance | | +| typedClient.ts:13:7:13:7 | v | typedClient.ts:14:30:14:30 | v | provenance | | +| typedClient.ts:13:11:13:32 | JSON.pa ... body.x) | typedClient.ts:13:7:13:7 | v | provenance | | | typedClient.ts:13:22:13:29 | req.body | typedClient.ts:13:22:13:31 | req.body.x | provenance | Config | | typedClient.ts:13:22:13:31 | req.body.x | typedClient.ts:13:11:13:32 | JSON.pa ... body.x) | provenance | Config | | typedClient.ts:14:30:14:30 | v | typedClient.ts:14:24:14:32 | { id: v } | provenance | Config | -| typedClient.ts:21:7:21:32 | v | typedClient.ts:22:33:22:33 | v | provenance | | -| typedClient.ts:21:7:21:32 | v | typedClient.ts:23:33:23:33 | v | provenance | | -| typedClient.ts:21:11:21:32 | JSON.pa ... body.x) | typedClient.ts:21:7:21:32 | v | provenance | | +| typedClient.ts:21:7:21:7 | v | typedClient.ts:22:33:22:33 | v | provenance | | +| typedClient.ts:21:7:21:7 | v | typedClient.ts:23:33:23:33 | v | provenance | | +| typedClient.ts:21:11:21:32 | JSON.pa ... body.x) | typedClient.ts:21:7:21:7 | v | provenance | | | typedClient.ts:21:22:21:29 | req.body | typedClient.ts:21:22:21:31 | req.body.x | provenance | Config | | typedClient.ts:21:22:21:31 | req.body.x | typedClient.ts:21:11:21:32 | JSON.pa ... body.x) | provenance | Config | | typedClient.ts:22:33:22:33 | v | typedClient.ts:22:27:22:35 | { id: v } | provenance | Config | | typedClient.ts:23:33:23:33 | v | typedClient.ts:23:27:23:35 | { id: v } | provenance | Config | nodes -| typedClient.ts:13:7:13:32 | v | semmle.label | v | +| typedClient.ts:13:7:13:7 | v | semmle.label | v | | typedClient.ts:13:11:13:32 | JSON.pa ... body.x) | semmle.label | JSON.pa ... body.x) | | typedClient.ts:13:22:13:29 | req.body | semmle.label | req.body | | typedClient.ts:13:22:13:31 | req.body.x | semmle.label | req.body.x | | typedClient.ts:14:24:14:32 | { id: v } | semmle.label | { id: v } | | typedClient.ts:14:30:14:30 | v | semmle.label | v | -| typedClient.ts:21:7:21:32 | v | semmle.label | v | +| typedClient.ts:21:7:21:7 | v | semmle.label | v | | typedClient.ts:21:11:21:32 | JSON.pa ... body.x) | semmle.label | JSON.pa ... body.x) | | typedClient.ts:21:22:21:29 | req.body | semmle.label | req.body | | typedClient.ts:21:22:21:31 | req.body.x | semmle.label | req.body.x | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index 843d41eb922..9405e075e33 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -137,63 +137,63 @@ | tst4.js:8:10:8:66 | 'SELECT ... d + '"' | tst4.js:8:46:8:60 | $routeParams.id | tst4.js:8:10:8:66 | 'SELECT ... d + '"' | This query string depends on a $@. | tst4.js:8:46:8:60 | $routeParams.id | user-provided value | | tst.js:10:10:10:64 | 'SELECT ... d + '"' | tst.js:10:46:10:58 | req.params.id | tst.js:10:10:10:64 | 'SELECT ... d + '"' | This query string depends on a $@. | tst.js:10:46:10:58 | req.params.id | user-provided value | edges -| graphql.js:8:11:8:28 | id | graphql.js:11:46:11:47 | id | provenance | | -| graphql.js:8:16:8:28 | req.params.id | graphql.js:8:11:8:28 | id | provenance | | +| graphql.js:8:11:8:12 | id | graphql.js:11:46:11:47 | id | provenance | | +| graphql.js:8:16:8:28 | req.params.id | graphql.js:8:11:8:12 | id | provenance | | | graphql.js:11:46:11:47 | id | graphql.js:9:34:19:5 | `\\n ... }\\n ` | provenance | | -| graphql.js:25:11:25:28 | id | graphql.js:26:37:26:38 | id | provenance | | -| graphql.js:25:11:25:28 | id | graphql.js:29:39:29:40 | id | provenance | | -| graphql.js:25:11:25:28 | id | graphql.js:32:25:32:26 | id | provenance | | -| graphql.js:25:16:25:28 | req.params.id | graphql.js:25:11:25:28 | id | provenance | | +| graphql.js:25:11:25:12 | id | graphql.js:26:37:26:38 | id | provenance | | +| graphql.js:25:11:25:12 | id | graphql.js:29:39:29:40 | id | provenance | | +| graphql.js:25:11:25:12 | id | graphql.js:32:25:32:26 | id | provenance | | +| graphql.js:25:16:25:28 | req.params.id | graphql.js:25:11:25:12 | id | provenance | | | graphql.js:26:37:26:38 | id | graphql.js:26:30:26:40 | `foo ${id}` | provenance | | | graphql.js:29:39:29:40 | id | graphql.js:29:32:29:42 | `foo ${id}` | provenance | | | graphql.js:32:25:32:26 | id | graphql.js:32:18:32:28 | `foo ${id}` | provenance | | -| graphql.js:38:11:38:28 | id | graphql.js:43:21:43:22 | id | provenance | | -| graphql.js:38:11:38:28 | id | graphql.js:47:51:47:52 | id | provenance | | -| graphql.js:38:16:38:28 | req.params.id | graphql.js:38:11:38:28 | id | provenance | | +| graphql.js:38:11:38:12 | id | graphql.js:43:21:43:22 | id | provenance | | +| graphql.js:38:11:38:12 | id | graphql.js:47:51:47:52 | id | provenance | | +| graphql.js:38:16:38:28 | req.params.id | graphql.js:38:11:38:12 | id | provenance | | | graphql.js:43:21:43:22 | id | graphql.js:43:14:43:24 | `foo ${id}` | provenance | | | graphql.js:47:51:47:52 | id | graphql.js:47:44:47:54 | `foo ${id}` | provenance | | -| graphql.js:54:11:54:28 | id | graphql.js:55:46:55:47 | id | provenance | | -| graphql.js:54:11:54:28 | id | graphql.js:57:73:57:74 | id | provenance | | -| graphql.js:54:16:54:28 | req.params.id | graphql.js:54:11:54:28 | id | provenance | | +| graphql.js:54:11:54:12 | id | graphql.js:55:46:55:47 | id | provenance | | +| graphql.js:54:11:54:12 | id | graphql.js:57:73:57:74 | id | provenance | | +| graphql.js:54:16:54:28 | req.params.id | graphql.js:54:11:54:12 | id | provenance | | | graphql.js:55:46:55:47 | id | graphql.js:55:39:55:49 | `foo ${id}` | provenance | | | graphql.js:57:73:57:74 | id | graphql.js:57:66:57:76 | `foo ${id}` | provenance | | -| graphql.js:73:9:73:25 | id | graphql.js:74:56:74:57 | id | provenance | | -| graphql.js:73:9:73:25 | id | graphql.js:86:13:86:14 | id | provenance | | -| graphql.js:73:14:73:25 | req.query.id | graphql.js:73:9:73:25 | id | provenance | | +| graphql.js:73:9:73:10 | id | graphql.js:74:56:74:57 | id | provenance | | +| graphql.js:73:9:73:10 | id | graphql.js:86:13:86:14 | id | provenance | | +| graphql.js:73:14:73:25 | req.query.id | graphql.js:73:9:73:10 | id | provenance | | | graphql.js:74:56:74:57 | id | graphql.js:74:46:74:64 | "{ foo" + id + " }" | provenance | | | graphql.js:86:13:86:14 | id | graphql.js:82:14:88:8 | `{\\n ... }` | provenance | | -| graphql.js:117:11:117:28 | id | graphql.js:118:45:118:46 | id | provenance | | -| graphql.js:117:16:117:28 | req.params.id | graphql.js:117:11:117:28 | id | provenance | | +| graphql.js:117:11:117:12 | id | graphql.js:118:45:118:46 | id | provenance | | +| graphql.js:117:16:117:28 | req.params.id | graphql.js:117:11:117:12 | id | provenance | | | graphql.js:118:45:118:46 | id | graphql.js:118:38:118:48 | `foo ${id}` | provenance | | -| hana.js:9:13:9:42 | maliciousInput | hana.js:10:64:10:77 | maliciousInput | provenance | | -| hana.js:9:30:9:37 | req.body | hana.js:9:13:9:42 | maliciousInput | provenance | | -| hana.js:10:15:10:80 | query | hana.js:11:19:11:23 | query | provenance | | -| hana.js:10:64:10:77 | maliciousInput | hana.js:10:15:10:80 | query | provenance | | -| hana.js:16:15:16:44 | maliciousInput | hana.js:17:87:17:100 | maliciousInput | provenance | | -| hana.js:16:32:16:39 | req.body | hana.js:16:15:16:44 | maliciousInput | provenance | | +| hana.js:9:13:9:26 | maliciousInput | hana.js:10:64:10:77 | maliciousInput | provenance | | +| hana.js:9:30:9:37 | req.body | hana.js:9:13:9:26 | maliciousInput | provenance | | +| hana.js:10:15:10:19 | query | hana.js:11:19:11:23 | query | provenance | | +| hana.js:10:64:10:77 | maliciousInput | hana.js:10:15:10:19 | query | provenance | | +| hana.js:16:15:16:28 | maliciousInput | hana.js:17:87:17:100 | maliciousInput | provenance | | +| hana.js:16:32:16:39 | req.body | hana.js:16:15:16:28 | maliciousInput | provenance | | | hana.js:17:87:17:100 | maliciousInput | hana.js:17:35:17:100 | `SELECT ... usInput | provenance | | -| hana.js:23:15:23:44 | maliciousInput | hana.js:24:83:24:96 | maliciousInput | provenance | | -| hana.js:23:32:23:39 | req.body | hana.js:23:15:23:44 | maliciousInput | provenance | | +| hana.js:23:15:23:28 | maliciousInput | hana.js:24:83:24:96 | maliciousInput | provenance | | +| hana.js:23:32:23:39 | req.body | hana.js:23:15:23:28 | maliciousInput | provenance | | | hana.js:24:83:24:96 | maliciousInput | hana.js:24:33:24:96 | `INSERT ... usInput | provenance | | -| hana.js:30:13:30:42 | maliciousInput | hana.js:31:84:31:97 | maliciousInput | provenance | | -| hana.js:30:30:30:37 | req.body | hana.js:30:13:30:42 | maliciousInput | provenance | | +| hana.js:30:13:30:26 | maliciousInput | hana.js:31:84:31:97 | maliciousInput | provenance | | +| hana.js:30:30:30:37 | req.body | hana.js:30:13:30:26 | maliciousInput | provenance | | | hana.js:31:84:31:97 | maliciousInput | hana.js:31:31:31:97 | "SELECT ... usInput | provenance | | -| hana.js:47:7:47:36 | maliciousInput | hana.js:48:39:48:52 | maliciousInput | provenance | | -| hana.js:47:7:47:36 | maliciousInput | hana.js:50:76:50:89 | maliciousInput | provenance | | -| hana.js:47:7:47:36 | maliciousInput | hana.js:54:53:54:66 | maliciousInput | provenance | | -| hana.js:47:24:47:31 | req.body | hana.js:47:7:47:36 | maliciousInput | provenance | | +| hana.js:47:7:47:20 | maliciousInput | hana.js:48:39:48:52 | maliciousInput | provenance | | +| hana.js:47:7:47:20 | maliciousInput | hana.js:50:76:50:89 | maliciousInput | provenance | | +| hana.js:47:7:47:20 | maliciousInput | hana.js:54:53:54:66 | maliciousInput | provenance | | +| hana.js:47:24:47:31 | req.body | hana.js:47:7:47:20 | maliciousInput | provenance | | | hana.js:48:39:48:52 | maliciousInput | hana.js:48:15:48:52 | 'SELECT ... usInput | provenance | | | hana.js:48:39:48:52 | maliciousInput | hana.js:50:76:50:89 | maliciousInput | provenance | | | hana.js:50:76:50:89 | maliciousInput | hana.js:50:40:50:89 | 'CALL P ... usInput | provenance | | | hana.js:50:76:50:89 | maliciousInput | hana.js:54:53:54:66 | maliciousInput | provenance | | | hana.js:54:53:54:66 | maliciousInput | hana.js:54:38:54:66 | 'PROC_D ... usInput | provenance | | -| hana.js:68:7:68:36 | maliciousInput | hana.js:71:86:71:99 | maliciousInput | provenance | | -| hana.js:68:7:68:36 | maliciousInput | hana.js:73:41:73:54 | maliciousInput | provenance | | -| hana.js:68:7:68:36 | maliciousInput | hana.js:74:41:74:54 | maliciousInput | provenance | | -| hana.js:68:7:68:36 | maliciousInput | hana.js:76:60:76:73 | maliciousInput | provenance | | -| hana.js:68:7:68:36 | maliciousInput | hana.js:80:56:80:69 | maliciousInput | provenance | | -| hana.js:68:7:68:36 | maliciousInput | hana.js:84:65:84:78 | maliciousInput | provenance | | -| hana.js:68:24:68:31 | req.body | hana.js:68:7:68:36 | maliciousInput | provenance | | +| hana.js:68:7:68:20 | maliciousInput | hana.js:71:86:71:99 | maliciousInput | provenance | | +| hana.js:68:7:68:20 | maliciousInput | hana.js:73:41:73:54 | maliciousInput | provenance | | +| hana.js:68:7:68:20 | maliciousInput | hana.js:74:41:74:54 | maliciousInput | provenance | | +| hana.js:68:7:68:20 | maliciousInput | hana.js:76:60:76:73 | maliciousInput | provenance | | +| hana.js:68:7:68:20 | maliciousInput | hana.js:80:56:80:69 | maliciousInput | provenance | | +| hana.js:68:7:68:20 | maliciousInput | hana.js:84:65:84:78 | maliciousInput | provenance | | +| hana.js:68:24:68:31 | req.body | hana.js:68:7:68:20 | maliciousInput | provenance | | | hana.js:71:86:71:99 | maliciousInput | hana.js:71:44:71:99 | "INSERT ... usInput | provenance | | | hana.js:73:41:73:54 | maliciousInput | hana.js:73:17:73:54 | 'select ... usInput | provenance | | | hana.js:74:41:74:54 | maliciousInput | hana.js:74:17:74:54 | 'select ... usInput | provenance | | @@ -201,151 +201,151 @@ edges | hana.js:80:56:80:69 | maliciousInput | hana.js:80:20:80:69 | 'call P ... usInput | provenance | | | hana.js:84:65:84:78 | maliciousInput | hana.js:84:20:84:78 | 'select ... usInput | provenance | | | html-sanitizer.js:13:39:13:44 | param1 | html-sanitizer.js:14:18:14:23 | param1 | provenance | | -| html-sanitizer.js:14:5:14:24 | param1 | html-sanitizer.js:16:54:16:59 | param1 | provenance | | -| html-sanitizer.js:14:14:14:24 | xss(param1) | html-sanitizer.js:14:5:14:24 | param1 | provenance | | +| html-sanitizer.js:14:5:14:10 | param1 | html-sanitizer.js:16:54:16:59 | param1 | provenance | | +| html-sanitizer.js:14:14:14:24 | xss(param1) | html-sanitizer.js:14:5:14:10 | param1 | provenance | | | html-sanitizer.js:14:18:14:23 | param1 | html-sanitizer.js:14:14:14:24 | xss(param1) | provenance | Config | | html-sanitizer.js:16:54:16:59 | param1 | html-sanitizer.js:16:9:16:59 | `SELECT ... param1 | provenance | | -| json-schema-validator.js:25:15:25:48 | query | json-schema-validator.js:33:22:33:26 | query | provenance | | -| json-schema-validator.js:25:15:25:48 | query | json-schema-validator.js:35:18:35:22 | query | provenance | | -| json-schema-validator.js:25:23:25:48 | JSON.pa ... y.data) | json-schema-validator.js:25:15:25:48 | query | provenance | | +| json-schema-validator.js:25:15:25:19 | query | json-schema-validator.js:33:22:33:26 | query | provenance | | +| json-schema-validator.js:25:15:25:19 | query | json-schema-validator.js:35:18:35:22 | query | provenance | | +| json-schema-validator.js:25:23:25:48 | JSON.pa ... y.data) | json-schema-validator.js:25:15:25:19 | query | provenance | | | json-schema-validator.js:25:34:25:47 | req.query.data | json-schema-validator.js:25:23:25:48 | JSON.pa ... y.data) | provenance | Config | -| json-schema-validator.js:50:15:50:48 | query | json-schema-validator.js:55:22:55:26 | query | provenance | | -| json-schema-validator.js:50:15:50:48 | query | json-schema-validator.js:59:22:59:26 | query | provenance | | -| json-schema-validator.js:50:15:50:48 | query | json-schema-validator.js:61:22:61:26 | query | provenance | | -| json-schema-validator.js:50:23:50:48 | JSON.pa ... y.data) | json-schema-validator.js:50:15:50:48 | query | provenance | | +| json-schema-validator.js:50:15:50:19 | query | json-schema-validator.js:55:22:55:26 | query | provenance | | +| json-schema-validator.js:50:15:50:19 | query | json-schema-validator.js:59:22:59:26 | query | provenance | | +| json-schema-validator.js:50:15:50:19 | query | json-schema-validator.js:61:22:61:26 | query | provenance | | +| json-schema-validator.js:50:23:50:48 | JSON.pa ... y.data) | json-schema-validator.js:50:15:50:19 | query | provenance | | | json-schema-validator.js:50:34:50:47 | req.query.data | json-schema-validator.js:50:23:50:48 | JSON.pa ... y.data) | provenance | Config | -| koarouter.js:5:11:5:33 | version | koarouter.js:14:38:14:44 | version | provenance | | -| koarouter.js:5:13:5:19 | version | koarouter.js:5:11:5:33 | version | provenance | | +| koarouter.js:5:13:5:19 | version | koarouter.js:5:13:5:19 | version | provenance | | +| koarouter.js:5:13:5:19 | version | koarouter.js:14:38:14:44 | version | provenance | | | koarouter.js:14:9:14:18 | [post update] conditions [ArrayElement] | koarouter.js:17:52:17:61 | conditions [ArrayElement] | provenance | | | koarouter.js:14:25:14:46 | `versio ... rsion}` | koarouter.js:14:9:14:18 | [post update] conditions [ArrayElement] | provenance | | | koarouter.js:14:38:14:44 | version | koarouter.js:14:25:14:46 | `versio ... rsion}` | provenance | | | koarouter.js:17:52:17:61 | conditions [ArrayElement] | koarouter.js:17:52:17:75 | conditi ... and ') | provenance | | | koarouter.js:17:52:17:75 | conditi ... and ') | koarouter.js:17:27:17:77 | `SELECT ... nd ')}` | provenance | | -| ldap.js:20:7:20:34 | q | ldap.js:22:18:22:18 | q | provenance | | -| ldap.js:20:11:20:34 | url.par ... , true) | ldap.js:20:7:20:34 | q | provenance | | +| ldap.js:20:7:20:7 | q | ldap.js:22:18:22:18 | q | provenance | | +| ldap.js:20:11:20:34 | url.par ... , true) | ldap.js:20:7:20:7 | q | provenance | | | ldap.js:20:21:20:27 | req.url | ldap.js:20:11:20:34 | url.par ... , true) | provenance | | -| ldap.js:22:7:22:33 | username | ldap.js:25:24:25:31 | username | provenance | | -| ldap.js:22:7:22:33 | username | ldap.js:25:46:25:53 | username | provenance | | -| ldap.js:22:7:22:33 | username | ldap.js:32:26:32:33 | username | provenance | | -| ldap.js:22:7:22:33 | username | ldap.js:32:48:32:55 | username | provenance | | -| ldap.js:22:7:22:33 | username | ldap.js:64:16:64:23 | username | provenance | | -| ldap.js:22:7:22:33 | username | ldap.js:64:38:64:45 | username | provenance | | -| ldap.js:22:7:22:33 | username | ldap.js:68:33:68:40 | username | provenance | | -| ldap.js:22:18:22:18 | q | ldap.js:22:7:22:33 | username | provenance | | +| ldap.js:22:7:22:14 | username | ldap.js:25:24:25:31 | username | provenance | | +| ldap.js:22:7:22:14 | username | ldap.js:25:46:25:53 | username | provenance | | +| ldap.js:22:7:22:14 | username | ldap.js:32:26:32:33 | username | provenance | | +| ldap.js:22:7:22:14 | username | ldap.js:32:48:32:55 | username | provenance | | +| ldap.js:22:7:22:14 | username | ldap.js:64:16:64:23 | username | provenance | | +| ldap.js:22:7:22:14 | username | ldap.js:64:38:64:45 | username | provenance | | +| ldap.js:22:7:22:14 | username | ldap.js:68:33:68:40 | username | provenance | | +| ldap.js:22:18:22:18 | q | ldap.js:22:7:22:14 | username | provenance | | | ldap.js:25:13:25:57 | `(\|(nam ... ame}))` | ldap.js:28:30:28:34 | opts1 | provenance | Config | | ldap.js:25:24:25:31 | username | ldap.js:25:13:25:57 | `(\|(nam ... ame}))` | provenance | | | ldap.js:25:46:25:53 | username | ldap.js:25:13:25:57 | `(\|(nam ... ame}))` | provenance | | | ldap.js:32:15:32:59 | `(\|(nam ... ame}))` | ldap.js:32:5:32:61 | { filte ... e}))` } | provenance | Config | | ldap.js:32:26:32:33 | username | ldap.js:32:15:32:59 | `(\|(nam ... ame}))` | provenance | | | ldap.js:32:48:32:55 | username | ldap.js:32:15:32:59 | `(\|(nam ... ame}))` | provenance | | -| ldap.js:63:9:65:3 | parsedFilter | ldap.js:66:40:66:51 | parsedFilter | provenance | | -| ldap.js:63:24:65:3 | ldap.pa ... ))`\\n ) | ldap.js:63:9:65:3 | parsedFilter | provenance | | +| ldap.js:63:9:63:20 | parsedFilter | ldap.js:66:40:66:51 | parsedFilter | provenance | | +| ldap.js:63:24:65:3 | ldap.pa ... ))`\\n ) | ldap.js:63:9:63:20 | parsedFilter | provenance | | | ldap.js:64:5:64:49 | `(\|(nam ... ame}))` | ldap.js:63:24:65:3 | ldap.pa ... ))`\\n ) | provenance | Config | | ldap.js:64:16:64:23 | username | ldap.js:64:5:64:49 | `(\|(nam ... ame}))` | provenance | | | ldap.js:64:38:64:45 | username | ldap.js:64:5:64:49 | `(\|(nam ... ame}))` | provenance | | | ldap.js:66:40:66:51 | parsedFilter | ldap.js:66:30:66:53 | { filte ... ilter } | provenance | Config | | ldap.js:68:33:68:40 | username | ldap.js:68:27:68:42 | `cn=${username}` | provenance | | -| marsdb-flow-to.js:10:9:10:18 | query | marsdb-flow-to.js:13:17:13:21 | query | provenance | | -| marsdb-flow-to.js:10:17:10:18 | {} | marsdb-flow-to.js:10:9:10:18 | query | provenance | | +| marsdb-flow-to.js:10:9:10:13 | query | marsdb-flow-to.js:13:17:13:21 | query | provenance | | +| marsdb-flow-to.js:10:17:10:18 | {} | marsdb-flow-to.js:10:9:10:13 | query | provenance | | | marsdb-flow-to.js:11:17:11:24 | req.body | marsdb-flow-to.js:11:17:11:30 | req.body.title | provenance | Config | -| marsdb-flow-to.js:11:17:11:30 | req.body.title | marsdb-flow-to.js:10:9:10:18 | query | provenance | Config | +| marsdb-flow-to.js:11:17:11:30 | req.body.title | marsdb-flow-to.js:10:9:10:13 | query | provenance | Config | | marsdb-flow-to.js:11:17:11:30 | req.body.title | marsdb-flow-to.js:10:17:10:18 | {} | provenance | Config | | marsdb-flow-to.js:11:17:11:30 | req.body.title | marsdb-flow-to.js:13:17:13:21 | query | provenance | Config | -| marsdb.js:12:9:12:18 | query | marsdb.js:15:12:15:16 | query | provenance | | -| marsdb.js:12:17:12:18 | {} | marsdb.js:12:9:12:18 | query | provenance | | +| marsdb.js:12:9:12:13 | query | marsdb.js:15:12:15:16 | query | provenance | | +| marsdb.js:12:17:12:18 | {} | marsdb.js:12:9:12:13 | query | provenance | | | marsdb.js:13:17:13:24 | req.body | marsdb.js:13:17:13:30 | req.body.title | provenance | Config | -| marsdb.js:13:17:13:30 | req.body.title | marsdb.js:12:9:12:18 | query | provenance | Config | +| marsdb.js:13:17:13:30 | req.body.title | marsdb.js:12:9:12:13 | query | provenance | Config | | marsdb.js:13:17:13:30 | req.body.title | marsdb.js:12:17:12:18 | {} | provenance | Config | | marsdb.js:13:17:13:30 | req.body.title | marsdb.js:15:12:15:16 | query | provenance | Config | -| minimongo.js:14:9:14:18 | query | minimongo.js:17:12:17:16 | query | provenance | | -| minimongo.js:14:17:14:18 | {} | minimongo.js:14:9:14:18 | query | provenance | | +| minimongo.js:14:9:14:13 | query | minimongo.js:17:12:17:16 | query | provenance | | +| minimongo.js:14:17:14:18 | {} | minimongo.js:14:9:14:13 | query | provenance | | | minimongo.js:15:17:15:24 | req.body | minimongo.js:15:17:15:30 | req.body.title | provenance | Config | -| minimongo.js:15:17:15:30 | req.body.title | minimongo.js:14:9:14:18 | query | provenance | Config | +| minimongo.js:15:17:15:30 | req.body.title | minimongo.js:14:9:14:13 | query | provenance | Config | | minimongo.js:15:17:15:30 | req.body.title | minimongo.js:14:17:14:18 | {} | provenance | Config | | minimongo.js:15:17:15:30 | req.body.title | minimongo.js:17:12:17:16 | query | provenance | Config | -| mongodb.js:12:11:12:20 | query | mongodb.js:13:5:13:9 | query | provenance | | -| mongodb.js:12:19:12:20 | {} | mongodb.js:12:11:12:20 | query | provenance | | +| mongodb.js:12:11:12:15 | query | mongodb.js:13:5:13:9 | query | provenance | | +| mongodb.js:12:19:12:20 | {} | mongodb.js:12:11:12:15 | query | provenance | | | mongodb.js:13:5:13:9 | query | mongodb.js:17:16:17:20 | query | provenance | | | mongodb.js:13:19:13:26 | req.body | mongodb.js:13:19:13:32 | req.body.title | provenance | Config | -| mongodb.js:13:19:13:32 | req.body.title | mongodb.js:12:11:12:20 | query | provenance | Config | +| mongodb.js:13:19:13:32 | req.body.title | mongodb.js:12:11:12:15 | query | provenance | Config | | mongodb.js:13:19:13:32 | req.body.title | mongodb.js:12:19:12:20 | {} | provenance | Config | | mongodb.js:13:19:13:32 | req.body.title | mongodb.js:13:5:13:9 | query | provenance | Config | | mongodb.js:13:19:13:32 | req.body.title | mongodb.js:17:16:17:20 | query | provenance | Config | -| mongodb.js:25:11:25:32 | title | mongodb.js:30:38:30:42 | title | provenance | | +| mongodb.js:25:11:25:15 | title | mongodb.js:30:38:30:42 | title | provenance | | | mongodb.js:25:19:25:26 | req.body | mongodb.js:25:19:25:32 | req.body.title | provenance | Config | -| mongodb.js:25:19:25:32 | req.body.title | mongodb.js:25:11:25:32 | title | provenance | | +| mongodb.js:25:19:25:32 | req.body.title | mongodb.js:25:11:25:15 | title | provenance | | | mongodb.js:30:27:30:43 | JSON.parse(title) | mongodb.js:30:18:30:45 | { title ... itle) } | provenance | Config | | mongodb.js:30:38:30:42 | title | mongodb.js:30:27:30:43 | JSON.parse(title) | provenance | Config | -| mongodb.js:46:11:46:20 | query | mongodb.js:47:5:47:9 | query | provenance | | -| mongodb.js:46:19:46:20 | {} | mongodb.js:46:11:46:20 | query | provenance | | +| mongodb.js:46:11:46:15 | query | mongodb.js:47:5:47:9 | query | provenance | | +| mongodb.js:46:19:46:20 | {} | mongodb.js:46:11:46:15 | query | provenance | | | mongodb.js:47:5:47:9 | query | mongodb.js:51:16:51:20 | query | provenance | | -| mongodb.js:47:19:47:33 | req.query.title | mongodb.js:46:11:46:20 | query | provenance | Config | +| mongodb.js:47:19:47:33 | req.query.title | mongodb.js:46:11:46:15 | query | provenance | Config | | mongodb.js:47:19:47:33 | req.query.title | mongodb.js:46:19:46:20 | {} | provenance | Config | | mongodb.js:47:19:47:33 | req.query.title | mongodb.js:47:5:47:9 | query | provenance | Config | | mongodb.js:47:19:47:33 | req.query.title | mongodb.js:51:16:51:20 | query | provenance | Config | -| mongodb.js:56:8:56:17 | query | mongodb.js:57:2:57:6 | query | provenance | | -| mongodb.js:56:16:56:17 | {} | mongodb.js:56:8:56:17 | query | provenance | | +| mongodb.js:56:8:56:12 | query | mongodb.js:57:2:57:6 | query | provenance | | +| mongodb.js:56:16:56:17 | {} | mongodb.js:56:8:56:12 | query | provenance | | | mongodb.js:57:2:57:6 | query | mongodb.js:61:12:61:16 | query | provenance | | -| mongodb.js:57:16:57:30 | req.query.title | mongodb.js:56:8:56:17 | query | provenance | Config | +| mongodb.js:57:16:57:30 | req.query.title | mongodb.js:56:8:56:12 | query | provenance | Config | | mongodb.js:57:16:57:30 | req.query.title | mongodb.js:56:16:56:17 | {} | provenance | Config | | mongodb.js:57:16:57:30 | req.query.title | mongodb.js:57:2:57:6 | query | provenance | Config | | mongodb.js:57:16:57:30 | req.query.title | mongodb.js:61:12:61:16 | query | provenance | Config | -| mongodb.js:66:7:66:25 | tag | mongodb.js:72:22:72:24 | tag | provenance | | -| mongodb.js:66:7:66:25 | tag | mongodb.js:79:20:79:22 | tag | provenance | | -| mongodb.js:66:13:66:25 | req.query.tag | mongodb.js:66:7:66:25 | tag | provenance | | +| mongodb.js:66:7:66:9 | tag | mongodb.js:72:22:72:24 | tag | provenance | | +| mongodb.js:66:7:66:9 | tag | mongodb.js:79:20:79:22 | tag | provenance | | +| mongodb.js:66:13:66:25 | req.query.tag | mongodb.js:66:7:66:9 | tag | provenance | | | mongodb.js:72:22:72:24 | tag | mongodb.js:72:14:72:26 | { tags: tag } | provenance | Config | | mongodb.js:79:20:79:22 | tag | mongodb.js:79:12:79:24 | { tags: tag } | provenance | Config | -| mongodb.js:100:9:100:18 | query | mongodb.js:101:3:101:7 | query | provenance | | -| mongodb.js:100:17:100:18 | {} | mongodb.js:100:9:100:18 | query | provenance | | +| mongodb.js:100:9:100:13 | query | mongodb.js:101:3:101:7 | query | provenance | | +| mongodb.js:100:17:100:18 | {} | mongodb.js:100:9:100:13 | query | provenance | | | mongodb.js:101:3:101:7 | query | mongodb.js:105:14:105:18 | query | provenance | | -| mongodb.js:101:17:101:29 | queries.title | mongodb.js:100:9:100:18 | query | provenance | Config | +| mongodb.js:101:17:101:29 | queries.title | mongodb.js:100:9:100:13 | query | provenance | Config | | mongodb.js:101:17:101:29 | queries.title | mongodb.js:100:17:100:18 | {} | provenance | Config | | mongodb.js:101:17:101:29 | queries.title | mongodb.js:101:3:101:7 | query | provenance | Config | | mongodb.js:101:17:101:29 | queries.title | mongodb.js:105:14:105:18 | query | provenance | Config | -| mongodb_bodySafe.js:23:11:23:20 | query | mongodb_bodySafe.js:24:5:24:9 | query | provenance | | -| mongodb_bodySafe.js:23:19:23:20 | {} | mongodb_bodySafe.js:23:11:23:20 | query | provenance | | +| mongodb_bodySafe.js:23:11:23:15 | query | mongodb_bodySafe.js:24:5:24:9 | query | provenance | | +| mongodb_bodySafe.js:23:19:23:20 | {} | mongodb_bodySafe.js:23:11:23:15 | query | provenance | | | mongodb_bodySafe.js:24:5:24:9 | query | mongodb_bodySafe.js:28:16:28:20 | query | provenance | | -| mongodb_bodySafe.js:24:19:24:33 | req.query.title | mongodb_bodySafe.js:23:11:23:20 | query | provenance | Config | +| mongodb_bodySafe.js:24:19:24:33 | req.query.title | mongodb_bodySafe.js:23:11:23:15 | query | provenance | Config | | mongodb_bodySafe.js:24:19:24:33 | req.query.title | mongodb_bodySafe.js:23:19:23:20 | {} | provenance | Config | | mongodb_bodySafe.js:24:19:24:33 | req.query.title | mongodb_bodySafe.js:24:5:24:9 | query | provenance | Config | | mongodb_bodySafe.js:24:19:24:33 | req.query.title | mongodb_bodySafe.js:28:16:28:20 | query | provenance | Config | -| mongoose.js:20:8:20:17 | query | mongoose.js:21:2:21:6 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:23:22:23:26 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:25:17:25:21 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:27:22:27:26 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:29:21:29:25 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:31:28:31:32 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:33:16:33:20 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:35:19:35:23 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:37:28:37:32 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:39:28:39:32 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:41:28:41:32 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:43:22:43:26 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:45:18:45:22 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:47:22:47:26 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:49:21:49:25 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:51:32:51:36 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:53:27:53:31 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:54:8:54:12 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:57:17:57:21 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:58:10:58:14 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:59:8:59:12 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:60:7:60:11 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:61:16:61:20 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:62:12:62:16 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:63:10:63:14 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:67:37:67:41 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:68:46:68:50 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:69:47:69:51 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:90:21:90:25 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:97:14:97:18 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:99:31:99:35 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:119:38:119:42 | query | provenance | | -| mongoose.js:20:8:20:17 | query | mongoose.js:122:30:122:34 | query | provenance | | -| mongoose.js:20:16:20:17 | {} | mongoose.js:20:8:20:17 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:21:2:21:6 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:23:22:23:26 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:25:17:25:21 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:27:22:27:26 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:29:21:29:25 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:31:28:31:32 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:33:16:33:20 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:35:19:35:23 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:37:28:37:32 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:39:28:39:32 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:41:28:41:32 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:43:22:43:26 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:45:18:45:22 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:47:22:47:26 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:49:21:49:25 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:51:32:51:36 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:53:27:53:31 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:54:8:54:12 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:57:17:57:21 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:58:10:58:14 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:59:8:59:12 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:60:7:60:11 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:61:16:61:20 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:62:12:62:16 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:63:10:63:14 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:67:37:67:41 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:68:46:68:50 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:69:47:69:51 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:90:21:90:25 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:97:14:97:18 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:99:31:99:35 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:119:38:119:42 | query | provenance | | +| mongoose.js:20:8:20:12 | query | mongoose.js:122:30:122:34 | query | provenance | | +| mongoose.js:20:16:20:17 | {} | mongoose.js:20:8:20:12 | query | provenance | | | mongoose.js:21:2:21:6 | query | mongoose.js:23:22:23:26 | query | provenance | | | mongoose.js:21:16:21:23 | req.body | mongoose.js:21:16:21:29 | req.body.title | provenance | Config | -| mongoose.js:21:16:21:29 | req.body.title | mongoose.js:20:8:20:17 | query | provenance | Config | +| mongoose.js:21:16:21:29 | req.body.title | mongoose.js:20:8:20:12 | query | provenance | Config | | mongoose.js:21:16:21:29 | req.body.title | mongoose.js:20:16:20:17 | {} | provenance | Config | | mongoose.js:21:16:21:29 | req.body.title | mongoose.js:21:2:21:6 | query | provenance | Config | | mongoose.js:21:16:21:29 | req.body.title | mongoose.js:23:22:23:26 | query | provenance | Config | @@ -423,59 +423,59 @@ edges | mongoose.js:90:21:90:25 | query | mongoose.js:97:14:97:18 | query | provenance | | | mongoose.js:97:14:97:18 | query | mongoose.js:99:31:99:35 | query | provenance | | | mongoose.js:99:31:99:35 | query | mongoose.js:119:38:119:42 | query | provenance | | -| mongoose.js:101:6:101:22 | id | mongoose.js:109:20:109:21 | id | provenance | | -| mongoose.js:101:6:101:22 | id | mongoose.js:116:23:116:24 | id | provenance | | -| mongoose.js:101:11:101:22 | req.query.id | mongoose.js:101:6:101:22 | id | provenance | | -| mongoose.js:101:25:101:45 | cond | mongoose.js:102:22:102:25 | cond | provenance | | -| mongoose.js:101:25:101:45 | cond | mongoose.js:103:21:103:24 | cond | provenance | | -| mongoose.js:101:25:101:45 | cond | mongoose.js:104:21:104:24 | cond | provenance | | -| mongoose.js:101:25:101:45 | cond | mongoose.js:105:18:105:21 | cond | provenance | | -| mongoose.js:101:25:101:45 | cond | mongoose.js:106:22:106:25 | cond | provenance | | -| mongoose.js:101:25:101:45 | cond | mongoose.js:107:16:107:19 | cond | provenance | | -| mongoose.js:101:25:101:45 | cond | mongoose.js:108:19:108:22 | cond | provenance | | -| mongoose.js:101:25:101:45 | cond | mongoose.js:110:28:110:31 | cond | provenance | | -| mongoose.js:101:25:101:45 | cond | mongoose.js:111:28:111:31 | cond | provenance | | -| mongoose.js:101:25:101:45 | cond | mongoose.js:112:28:112:31 | cond | provenance | | -| mongoose.js:101:25:101:45 | cond | mongoose.js:113:18:113:21 | cond | provenance | | -| mongoose.js:101:25:101:45 | cond | mongoose.js:114:22:114:25 | cond | provenance | | -| mongoose.js:101:25:101:45 | cond | mongoose.js:115:21:115:24 | cond | provenance | | -| mongoose.js:101:32:101:45 | req.query.cond | mongoose.js:101:25:101:45 | cond | provenance | | +| mongoose.js:101:6:101:7 | id | mongoose.js:109:20:109:21 | id | provenance | | +| mongoose.js:101:6:101:7 | id | mongoose.js:116:23:116:24 | id | provenance | | +| mongoose.js:101:11:101:22 | req.query.id | mongoose.js:101:6:101:7 | id | provenance | | +| mongoose.js:101:25:101:28 | cond | mongoose.js:102:22:102:25 | cond | provenance | | +| mongoose.js:101:25:101:28 | cond | mongoose.js:103:21:103:24 | cond | provenance | | +| mongoose.js:101:25:101:28 | cond | mongoose.js:104:21:104:24 | cond | provenance | | +| mongoose.js:101:25:101:28 | cond | mongoose.js:105:18:105:21 | cond | provenance | | +| mongoose.js:101:25:101:28 | cond | mongoose.js:106:22:106:25 | cond | provenance | | +| mongoose.js:101:25:101:28 | cond | mongoose.js:107:16:107:19 | cond | provenance | | +| mongoose.js:101:25:101:28 | cond | mongoose.js:108:19:108:22 | cond | provenance | | +| mongoose.js:101:25:101:28 | cond | mongoose.js:110:28:110:31 | cond | provenance | | +| mongoose.js:101:25:101:28 | cond | mongoose.js:111:28:111:31 | cond | provenance | | +| mongoose.js:101:25:101:28 | cond | mongoose.js:112:28:112:31 | cond | provenance | | +| mongoose.js:101:25:101:28 | cond | mongoose.js:113:18:113:21 | cond | provenance | | +| mongoose.js:101:25:101:28 | cond | mongoose.js:114:22:114:25 | cond | provenance | | +| mongoose.js:101:25:101:28 | cond | mongoose.js:115:21:115:24 | cond | provenance | | +| mongoose.js:101:32:101:45 | req.query.cond | mongoose.js:101:25:101:28 | cond | provenance | | | mongoose.js:116:23:116:24 | id | mongoose.js:116:16:116:26 | { _id: id } | provenance | Config | | mongoose.js:119:38:119:42 | query | mongoose.js:122:30:122:34 | query | provenance | | -| mongooseJsonParse.js:19:11:19:20 | query | mongooseJsonParse.js:22:19:22:23 | query | provenance | | -| mongooseJsonParse.js:19:19:19:20 | {} | mongooseJsonParse.js:19:11:19:20 | query | provenance | | +| mongooseJsonParse.js:19:11:19:15 | query | mongooseJsonParse.js:22:19:22:23 | query | provenance | | +| mongooseJsonParse.js:19:19:19:20 | {} | mongooseJsonParse.js:19:11:19:15 | query | provenance | | | mongooseJsonParse.js:20:19:20:44 | JSON.pa ... y.data) | mongooseJsonParse.js:20:19:20:50 | JSON.pa ... ).title | provenance | Config | -| mongooseJsonParse.js:20:19:20:50 | JSON.pa ... ).title | mongooseJsonParse.js:19:11:19:20 | query | provenance | Config | +| mongooseJsonParse.js:20:19:20:50 | JSON.pa ... ).title | mongooseJsonParse.js:19:11:19:15 | query | provenance | Config | | mongooseJsonParse.js:20:19:20:50 | JSON.pa ... ).title | mongooseJsonParse.js:19:19:19:20 | {} | provenance | Config | | mongooseJsonParse.js:20:19:20:50 | JSON.pa ... ).title | mongooseJsonParse.js:22:19:22:23 | query | provenance | Config | | mongooseJsonParse.js:20:30:20:43 | req.query.data | mongooseJsonParse.js:20:19:20:44 | JSON.pa ... y.data) | provenance | Config | -| mongooseModelClient.js:10:7:10:32 | v | mongooseModelClient.js:11:22:11:22 | v | provenance | | -| mongooseModelClient.js:10:11:10:32 | JSON.pa ... body.x) | mongooseModelClient.js:10:7:10:32 | v | provenance | | +| mongooseModelClient.js:10:7:10:7 | v | mongooseModelClient.js:11:22:11:22 | v | provenance | | +| mongooseModelClient.js:10:11:10:32 | JSON.pa ... body.x) | mongooseModelClient.js:10:7:10:7 | v | provenance | | | mongooseModelClient.js:10:22:10:29 | req.body | mongooseModelClient.js:10:22:10:31 | req.body.x | provenance | Config | | mongooseModelClient.js:10:22:10:31 | req.body.x | mongooseModelClient.js:10:11:10:32 | JSON.pa ... body.x) | provenance | Config | | mongooseModelClient.js:11:22:11:22 | v | mongooseModelClient.js:11:16:11:24 | { id: v } | provenance | Config | | mongooseModelClient.js:12:22:12:29 | req.body | mongooseModelClient.js:12:22:12:32 | req.body.id | provenance | Config | | mongooseModelClient.js:12:22:12:32 | req.body.id | mongooseModelClient.js:12:16:12:34 | { id: req.body.id } | provenance | Config | -| mysql.js:6:9:6:31 | temp | mysql.js:15:62:15:65 | temp | provenance | | -| mysql.js:6:9:6:31 | temp | mysql.js:19:70:19:73 | temp | provenance | | -| mysql.js:6:16:6:31 | req.params.value | mysql.js:6:9:6:31 | temp | provenance | | +| mysql.js:6:9:6:12 | temp | mysql.js:15:62:15:65 | temp | provenance | | +| mysql.js:6:9:6:12 | temp | mysql.js:19:70:19:73 | temp | provenance | | +| mysql.js:6:16:6:31 | req.params.value | mysql.js:6:9:6:12 | temp | provenance | | | mysql.js:15:62:15:65 | temp | mysql.js:15:18:15:65 | 'SELECT ... + temp | provenance | | | mysql.js:19:70:19:73 | temp | mysql.js:19:26:19:73 | 'SELECT ... + temp | provenance | | -| pg-promise-types.ts:7:9:7:28 | taint | pg-promise-types.ts:8:17:8:21 | taint | provenance | | -| pg-promise-types.ts:7:17:7:28 | req.params.x | pg-promise-types.ts:7:9:7:28 | taint | provenance | | -| pg-promise.js:6:7:7:55 | query | pg-promise.js:9:10:9:14 | query | provenance | | -| pg-promise.js:6:7:7:55 | query | pg-promise.js:10:11:10:15 | query | provenance | | -| pg-promise.js:6:7:7:55 | query | pg-promise.js:11:17:11:21 | query | provenance | | -| pg-promise.js:6:7:7:55 | query | pg-promise.js:12:10:12:14 | query | provenance | | -| pg-promise.js:6:7:7:55 | query | pg-promise.js:13:12:13:16 | query | provenance | | -| pg-promise.js:6:7:7:55 | query | pg-promise.js:14:18:14:22 | query | provenance | | -| pg-promise.js:6:7:7:55 | query | pg-promise.js:15:11:15:15 | query | provenance | | -| pg-promise.js:6:7:7:55 | query | pg-promise.js:16:10:16:14 | query | provenance | | -| pg-promise.js:6:7:7:55 | query | pg-promise.js:17:16:17:20 | query | provenance | | -| pg-promise.js:6:7:7:55 | query | pg-promise.js:18:12:18:16 | query | provenance | | -| pg-promise.js:6:7:7:55 | query | pg-promise.js:19:13:19:17 | query | provenance | | -| pg-promise.js:6:7:7:55 | query | pg-promise.js:22:11:22:15 | query | provenance | | -| pg-promise.js:7:16:7:34 | req.params.category | pg-promise.js:6:7:7:55 | query | provenance | | +| pg-promise-types.ts:7:9:7:13 | taint | pg-promise-types.ts:8:17:8:21 | taint | provenance | | +| pg-promise-types.ts:7:17:7:28 | req.params.x | pg-promise-types.ts:7:9:7:13 | taint | provenance | | +| pg-promise.js:6:7:6:11 | query | pg-promise.js:9:10:9:14 | query | provenance | | +| pg-promise.js:6:7:6:11 | query | pg-promise.js:10:11:10:15 | query | provenance | | +| pg-promise.js:6:7:6:11 | query | pg-promise.js:11:17:11:21 | query | provenance | | +| pg-promise.js:6:7:6:11 | query | pg-promise.js:12:10:12:14 | query | provenance | | +| pg-promise.js:6:7:6:11 | query | pg-promise.js:13:12:13:16 | query | provenance | | +| pg-promise.js:6:7:6:11 | query | pg-promise.js:14:18:14:22 | query | provenance | | +| pg-promise.js:6:7:6:11 | query | pg-promise.js:15:11:15:15 | query | provenance | | +| pg-promise.js:6:7:6:11 | query | pg-promise.js:16:10:16:14 | query | provenance | | +| pg-promise.js:6:7:6:11 | query | pg-promise.js:17:16:17:20 | query | provenance | | +| pg-promise.js:6:7:6:11 | query | pg-promise.js:18:12:18:16 | query | provenance | | +| pg-promise.js:6:7:6:11 | query | pg-promise.js:19:13:19:17 | query | provenance | | +| pg-promise.js:6:7:6:11 | query | pg-promise.js:22:11:22:15 | query | provenance | | +| pg-promise.js:7:16:7:34 | req.params.category | pg-promise.js:6:7:6:11 | query | provenance | | | pg-promise.js:9:10:9:14 | query | pg-promise.js:10:11:10:15 | query | provenance | | | pg-promise.js:10:11:10:15 | query | pg-promise.js:11:17:11:21 | query | provenance | | | pg-promise.js:11:17:11:21 | query | pg-promise.js:12:10:12:14 | query | provenance | | @@ -491,38 +491,38 @@ edges | pg-promise.js:22:11:22:15 | query | pg-promise.js:63:23:63:27 | query | provenance | | | pg-promise.js:22:11:22:15 | query | pg-promise.js:64:16:64:20 | query | provenance | | | redis.js:10:16:10:23 | req.body | redis.js:10:16:10:27 | req.body.key | provenance | Config | -| redis.js:12:9:12:26 | key | redis.js:13:16:13:18 | key | provenance | | -| redis.js:12:9:12:26 | key | redis.js:18:16:18:18 | key | provenance | | -| redis.js:12:9:12:26 | key | redis.js:19:43:19:45 | key | provenance | | -| redis.js:12:9:12:26 | key | redis.js:25:14:25:16 | key | provenance | | -| redis.js:12:9:12:26 | key | redis.js:26:14:26:16 | key | provenance | | -| redis.js:12:9:12:26 | key | redis.js:32:28:32:30 | key | provenance | | +| redis.js:12:9:12:11 | key | redis.js:13:16:13:18 | key | provenance | | +| redis.js:12:9:12:11 | key | redis.js:18:16:18:18 | key | provenance | | +| redis.js:12:9:12:11 | key | redis.js:19:43:19:45 | key | provenance | | +| redis.js:12:9:12:11 | key | redis.js:25:14:25:16 | key | provenance | | +| redis.js:12:9:12:11 | key | redis.js:26:14:26:16 | key | provenance | | +| redis.js:12:9:12:11 | key | redis.js:32:28:32:30 | key | provenance | | | redis.js:12:15:12:22 | req.body | redis.js:12:15:12:26 | req.body.key | provenance | Config | -| redis.js:12:15:12:26 | req.body.key | redis.js:12:9:12:26 | key | provenance | | +| redis.js:12:15:12:26 | req.body.key | redis.js:12:9:12:11 | key | provenance | | | redis.js:13:16:13:18 | key | redis.js:18:16:18:18 | key | provenance | | | redis.js:18:16:18:18 | key | redis.js:19:43:19:45 | key | provenance | | | redis.js:19:43:19:45 | key | redis.js:25:14:25:16 | key | provenance | | | redis.js:25:14:25:16 | key | redis.js:26:14:26:16 | key | provenance | | | redis.js:26:14:26:16 | key | redis.js:30:23:30:25 | key | provenance | | | redis.js:26:14:26:16 | key | redis.js:32:28:32:30 | key | provenance | | -| redis.js:38:11:38:28 | key | redis.js:39:16:39:18 | key | provenance | | -| redis.js:38:11:38:28 | key | redis.js:43:27:43:29 | key | provenance | | -| redis.js:38:11:38:28 | key | redis.js:46:34:46:36 | key | provenance | | +| redis.js:38:11:38:13 | key | redis.js:39:16:39:18 | key | provenance | | +| redis.js:38:11:38:13 | key | redis.js:43:27:43:29 | key | provenance | | +| redis.js:38:11:38:13 | key | redis.js:46:34:46:36 | key | provenance | | | redis.js:38:17:38:24 | req.body | redis.js:38:17:38:28 | req.body.key | provenance | Config | -| redis.js:38:17:38:28 | req.body.key | redis.js:38:11:38:28 | key | provenance | | +| redis.js:38:17:38:28 | req.body.key | redis.js:38:11:38:13 | key | provenance | | | socketio.js:10:25:10:30 | handle | socketio.js:11:46:11:51 | handle | provenance | | | socketio.js:11:46:11:51 | handle | socketio.js:11:12:11:53 | `INSERT ... andle}` | provenance | | | tst2.js:8:66:8:78 | req.params.id | tst2.js:8:27:8:84 | "select ... d + "'" | provenance | | -| tst3.js:7:7:8:55 | query1 | tst3.js:9:14:9:19 | query1 | provenance | | -| tst3.js:8:16:8:34 | req.params.category | tst3.js:7:7:8:55 | query1 | provenance | | +| tst3.js:7:7:7:12 | query1 | tst3.js:9:14:9:19 | query1 | provenance | | +| tst3.js:8:16:8:34 | req.params.category | tst3.js:7:7:7:12 | query1 | provenance | | | tst4.js:8:46:8:60 | $routeParams.id | tst4.js:8:10:8:66 | 'SELECT ... d + '"' | provenance | | | tst.js:10:46:10:58 | req.params.id | tst.js:10:10:10:64 | 'SELECT ... d + '"' | provenance | | nodes -| graphql.js:8:11:8:28 | id | semmle.label | id | +| graphql.js:8:11:8:12 | id | semmle.label | id | | graphql.js:8:16:8:28 | req.params.id | semmle.label | req.params.id | | graphql.js:9:34:19:5 | `\\n ... }\\n ` | semmle.label | `\\n ... }\\n ` | | graphql.js:11:46:11:47 | id | semmle.label | id | -| graphql.js:25:11:25:28 | id | semmle.label | id | +| graphql.js:25:11:25:12 | id | semmle.label | id | | graphql.js:25:16:25:28 | req.params.id | semmle.label | req.params.id | | graphql.js:26:30:26:40 | `foo ${id}` | semmle.label | `foo ${id}` | | graphql.js:26:37:26:38 | id | semmle.label | id | @@ -530,46 +530,46 @@ nodes | graphql.js:29:39:29:40 | id | semmle.label | id | | graphql.js:32:18:32:28 | `foo ${id}` | semmle.label | `foo ${id}` | | graphql.js:32:25:32:26 | id | semmle.label | id | -| graphql.js:38:11:38:28 | id | semmle.label | id | +| graphql.js:38:11:38:12 | id | semmle.label | id | | graphql.js:38:16:38:28 | req.params.id | semmle.label | req.params.id | | graphql.js:43:14:43:24 | `foo ${id}` | semmle.label | `foo ${id}` | | graphql.js:43:21:43:22 | id | semmle.label | id | | graphql.js:47:44:47:54 | `foo ${id}` | semmle.label | `foo ${id}` | | graphql.js:47:51:47:52 | id | semmle.label | id | -| graphql.js:54:11:54:28 | id | semmle.label | id | +| graphql.js:54:11:54:12 | id | semmle.label | id | | graphql.js:54:16:54:28 | req.params.id | semmle.label | req.params.id | | graphql.js:55:39:55:49 | `foo ${id}` | semmle.label | `foo ${id}` | | graphql.js:55:46:55:47 | id | semmle.label | id | | graphql.js:57:66:57:76 | `foo ${id}` | semmle.label | `foo ${id}` | | graphql.js:57:73:57:74 | id | semmle.label | id | -| graphql.js:73:9:73:25 | id | semmle.label | id | +| graphql.js:73:9:73:10 | id | semmle.label | id | | graphql.js:73:14:73:25 | req.query.id | semmle.label | req.query.id | | graphql.js:74:46:74:64 | "{ foo" + id + " }" | semmle.label | "{ foo" + id + " }" | | graphql.js:74:56:74:57 | id | semmle.label | id | | graphql.js:82:14:88:8 | `{\\n ... }` | semmle.label | `{\\n ... }` | | graphql.js:86:13:86:14 | id | semmle.label | id | -| graphql.js:117:11:117:28 | id | semmle.label | id | +| graphql.js:117:11:117:12 | id | semmle.label | id | | graphql.js:117:16:117:28 | req.params.id | semmle.label | req.params.id | | graphql.js:118:38:118:48 | `foo ${id}` | semmle.label | `foo ${id}` | | graphql.js:118:45:118:46 | id | semmle.label | id | -| hana.js:9:13:9:42 | maliciousInput | semmle.label | maliciousInput | +| hana.js:9:13:9:26 | maliciousInput | semmle.label | maliciousInput | | hana.js:9:30:9:37 | req.body | semmle.label | req.body | -| hana.js:10:15:10:80 | query | semmle.label | query | +| hana.js:10:15:10:19 | query | semmle.label | query | | hana.js:10:64:10:77 | maliciousInput | semmle.label | maliciousInput | | hana.js:11:19:11:23 | query | semmle.label | query | -| hana.js:16:15:16:44 | maliciousInput | semmle.label | maliciousInput | +| hana.js:16:15:16:28 | maliciousInput | semmle.label | maliciousInput | | hana.js:16:32:16:39 | req.body | semmle.label | req.body | | hana.js:17:35:17:100 | `SELECT ... usInput | semmle.label | `SELECT ... usInput | | hana.js:17:87:17:100 | maliciousInput | semmle.label | maliciousInput | -| hana.js:23:15:23:44 | maliciousInput | semmle.label | maliciousInput | +| hana.js:23:15:23:28 | maliciousInput | semmle.label | maliciousInput | | hana.js:23:32:23:39 | req.body | semmle.label | req.body | | hana.js:24:33:24:96 | `INSERT ... usInput | semmle.label | `INSERT ... usInput | | hana.js:24:83:24:96 | maliciousInput | semmle.label | maliciousInput | -| hana.js:30:13:30:42 | maliciousInput | semmle.label | maliciousInput | +| hana.js:30:13:30:26 | maliciousInput | semmle.label | maliciousInput | | hana.js:30:30:30:37 | req.body | semmle.label | req.body | | hana.js:31:31:31:97 | "SELECT ... usInput | semmle.label | "SELECT ... usInput | | hana.js:31:84:31:97 | maliciousInput | semmle.label | maliciousInput | -| hana.js:47:7:47:36 | maliciousInput | semmle.label | maliciousInput | +| hana.js:47:7:47:20 | maliciousInput | semmle.label | maliciousInput | | hana.js:47:24:47:31 | req.body | semmle.label | req.body | | hana.js:48:15:48:52 | 'SELECT ... usInput | semmle.label | 'SELECT ... usInput | | hana.js:48:39:48:52 | maliciousInput | semmle.label | maliciousInput | @@ -577,7 +577,7 @@ nodes | hana.js:50:76:50:89 | maliciousInput | semmle.label | maliciousInput | | hana.js:54:38:54:66 | 'PROC_D ... usInput | semmle.label | 'PROC_D ... usInput | | hana.js:54:53:54:66 | maliciousInput | semmle.label | maliciousInput | -| hana.js:68:7:68:36 | maliciousInput | semmle.label | maliciousInput | +| hana.js:68:7:68:20 | maliciousInput | semmle.label | maliciousInput | | hana.js:68:24:68:31 | req.body | semmle.label | req.body | | hana.js:71:44:71:99 | "INSERT ... usInput | semmle.label | "INSERT ... usInput | | hana.js:71:86:71:99 | maliciousInput | semmle.label | maliciousInput | @@ -592,23 +592,23 @@ nodes | hana.js:84:20:84:78 | 'select ... usInput | semmle.label | 'select ... usInput | | hana.js:84:65:84:78 | maliciousInput | semmle.label | maliciousInput | | html-sanitizer.js:13:39:13:44 | param1 | semmle.label | param1 | -| html-sanitizer.js:14:5:14:24 | param1 | semmle.label | param1 | +| html-sanitizer.js:14:5:14:10 | param1 | semmle.label | param1 | | html-sanitizer.js:14:14:14:24 | xss(param1) | semmle.label | xss(param1) | | html-sanitizer.js:14:18:14:23 | param1 | semmle.label | param1 | | html-sanitizer.js:16:9:16:59 | `SELECT ... param1 | semmle.label | `SELECT ... param1 | | html-sanitizer.js:16:54:16:59 | param1 | semmle.label | param1 | -| json-schema-validator.js:25:15:25:48 | query | semmle.label | query | +| json-schema-validator.js:25:15:25:19 | query | semmle.label | query | | json-schema-validator.js:25:23:25:48 | JSON.pa ... y.data) | semmle.label | JSON.pa ... y.data) | | json-schema-validator.js:25:34:25:47 | req.query.data | semmle.label | req.query.data | | json-schema-validator.js:33:22:33:26 | query | semmle.label | query | | json-schema-validator.js:35:18:35:22 | query | semmle.label | query | -| json-schema-validator.js:50:15:50:48 | query | semmle.label | query | +| json-schema-validator.js:50:15:50:19 | query | semmle.label | query | | json-schema-validator.js:50:23:50:48 | JSON.pa ... y.data) | semmle.label | JSON.pa ... y.data) | | json-schema-validator.js:50:34:50:47 | req.query.data | semmle.label | req.query.data | | json-schema-validator.js:55:22:55:26 | query | semmle.label | query | | json-schema-validator.js:59:22:59:26 | query | semmle.label | query | | json-schema-validator.js:61:22:61:26 | query | semmle.label | query | -| koarouter.js:5:11:5:33 | version | semmle.label | version | +| koarouter.js:5:13:5:19 | version | semmle.label | version | | koarouter.js:5:13:5:19 | version | semmle.label | version | | koarouter.js:14:9:14:18 | [post update] conditions [ArrayElement] | semmle.label | [post update] conditions [ArrayElement] | | koarouter.js:14:25:14:46 | `versio ... rsion}` | semmle.label | `versio ... rsion}` | @@ -616,10 +616,10 @@ nodes | koarouter.js:17:27:17:77 | `SELECT ... nd ')}` | semmle.label | `SELECT ... nd ')}` | | koarouter.js:17:52:17:61 | conditions [ArrayElement] | semmle.label | conditions [ArrayElement] | | koarouter.js:17:52:17:75 | conditi ... and ') | semmle.label | conditi ... and ') | -| ldap.js:20:7:20:34 | q | semmle.label | q | +| ldap.js:20:7:20:7 | q | semmle.label | q | | ldap.js:20:11:20:34 | url.par ... , true) | semmle.label | url.par ... , true) | | ldap.js:20:21:20:27 | req.url | semmle.label | req.url | -| ldap.js:22:7:22:33 | username | semmle.label | username | +| ldap.js:22:7:22:14 | username | semmle.label | username | | ldap.js:22:18:22:18 | q | semmle.label | q | | ldap.js:25:13:25:57 | `(\|(nam ... ame}))` | semmle.label | `(\|(nam ... ame}))` | | ldap.js:25:24:25:31 | username | semmle.label | username | @@ -629,7 +629,7 @@ nodes | ldap.js:32:15:32:59 | `(\|(nam ... ame}))` | semmle.label | `(\|(nam ... ame}))` | | ldap.js:32:26:32:33 | username | semmle.label | username | | ldap.js:32:48:32:55 | username | semmle.label | username | -| ldap.js:63:9:65:3 | parsedFilter | semmle.label | parsedFilter | +| ldap.js:63:9:63:20 | parsedFilter | semmle.label | parsedFilter | | ldap.js:63:24:65:3 | ldap.pa ... ))`\\n ) | semmle.label | ldap.pa ... ))`\\n ) | | ldap.js:64:5:64:49 | `(\|(nam ... ame}))` | semmle.label | `(\|(nam ... ame}))` | | ldap.js:64:16:64:23 | username | semmle.label | username | @@ -638,60 +638,60 @@ nodes | ldap.js:66:40:66:51 | parsedFilter | semmle.label | parsedFilter | | ldap.js:68:27:68:42 | `cn=${username}` | semmle.label | `cn=${username}` | | ldap.js:68:33:68:40 | username | semmle.label | username | -| marsdb-flow-to.js:10:9:10:18 | query | semmle.label | query | +| marsdb-flow-to.js:10:9:10:13 | query | semmle.label | query | | marsdb-flow-to.js:10:17:10:18 | {} | semmle.label | {} | | marsdb-flow-to.js:11:17:11:24 | req.body | semmle.label | req.body | | marsdb-flow-to.js:11:17:11:30 | req.body.title | semmle.label | req.body.title | | marsdb-flow-to.js:13:17:13:21 | query | semmle.label | query | -| marsdb.js:12:9:12:18 | query | semmle.label | query | +| marsdb.js:12:9:12:13 | query | semmle.label | query | | marsdb.js:12:17:12:18 | {} | semmle.label | {} | | marsdb.js:13:17:13:24 | req.body | semmle.label | req.body | | marsdb.js:13:17:13:30 | req.body.title | semmle.label | req.body.title | | marsdb.js:15:12:15:16 | query | semmle.label | query | -| minimongo.js:14:9:14:18 | query | semmle.label | query | +| minimongo.js:14:9:14:13 | query | semmle.label | query | | minimongo.js:14:17:14:18 | {} | semmle.label | {} | | minimongo.js:15:17:15:24 | req.body | semmle.label | req.body | | minimongo.js:15:17:15:30 | req.body.title | semmle.label | req.body.title | | minimongo.js:17:12:17:16 | query | semmle.label | query | -| mongodb.js:12:11:12:20 | query | semmle.label | query | +| mongodb.js:12:11:12:15 | query | semmle.label | query | | mongodb.js:12:19:12:20 | {} | semmle.label | {} | | mongodb.js:13:5:13:9 | query | semmle.label | query | | mongodb.js:13:19:13:26 | req.body | semmle.label | req.body | | mongodb.js:13:19:13:32 | req.body.title | semmle.label | req.body.title | | mongodb.js:17:16:17:20 | query | semmle.label | query | -| mongodb.js:25:11:25:32 | title | semmle.label | title | +| mongodb.js:25:11:25:15 | title | semmle.label | title | | mongodb.js:25:19:25:26 | req.body | semmle.label | req.body | | mongodb.js:25:19:25:32 | req.body.title | semmle.label | req.body.title | | mongodb.js:30:18:30:45 | { title ... itle) } | semmle.label | { title ... itle) } | | mongodb.js:30:27:30:43 | JSON.parse(title) | semmle.label | JSON.parse(title) | | mongodb.js:30:38:30:42 | title | semmle.label | title | -| mongodb.js:46:11:46:20 | query | semmle.label | query | +| mongodb.js:46:11:46:15 | query | semmle.label | query | | mongodb.js:46:19:46:20 | {} | semmle.label | {} | | mongodb.js:47:5:47:9 | query | semmle.label | query | | mongodb.js:47:19:47:33 | req.query.title | semmle.label | req.query.title | | mongodb.js:51:16:51:20 | query | semmle.label | query | -| mongodb.js:56:8:56:17 | query | semmle.label | query | +| mongodb.js:56:8:56:12 | query | semmle.label | query | | mongodb.js:56:16:56:17 | {} | semmle.label | {} | | mongodb.js:57:2:57:6 | query | semmle.label | query | | mongodb.js:57:16:57:30 | req.query.title | semmle.label | req.query.title | | mongodb.js:61:12:61:16 | query | semmle.label | query | -| mongodb.js:66:7:66:25 | tag | semmle.label | tag | +| mongodb.js:66:7:66:9 | tag | semmle.label | tag | | mongodb.js:66:13:66:25 | req.query.tag | semmle.label | req.query.tag | | mongodb.js:72:14:72:26 | { tags: tag } | semmle.label | { tags: tag } | | mongodb.js:72:22:72:24 | tag | semmle.label | tag | | mongodb.js:79:12:79:24 | { tags: tag } | semmle.label | { tags: tag } | | mongodb.js:79:20:79:22 | tag | semmle.label | tag | -| mongodb.js:100:9:100:18 | query | semmle.label | query | +| mongodb.js:100:9:100:13 | query | semmle.label | query | | mongodb.js:100:17:100:18 | {} | semmle.label | {} | | mongodb.js:101:3:101:7 | query | semmle.label | query | | mongodb.js:101:17:101:29 | queries.title | semmle.label | queries.title | | mongodb.js:105:14:105:18 | query | semmle.label | query | -| mongodb_bodySafe.js:23:11:23:20 | query | semmle.label | query | +| mongodb_bodySafe.js:23:11:23:15 | query | semmle.label | query | | mongodb_bodySafe.js:23:19:23:20 | {} | semmle.label | {} | | mongodb_bodySafe.js:24:5:24:9 | query | semmle.label | query | | mongodb_bodySafe.js:24:19:24:33 | req.query.title | semmle.label | req.query.title | | mongodb_bodySafe.js:28:16:28:20 | query | semmle.label | query | -| mongoose.js:20:8:20:17 | query | semmle.label | query | +| mongoose.js:20:8:20:12 | query | semmle.label | query | | mongoose.js:20:16:20:17 | {} | semmle.label | {} | | mongoose.js:21:2:21:6 | query | semmle.label | query | | mongoose.js:21:16:21:23 | req.body | semmle.label | req.body | @@ -733,9 +733,9 @@ nodes | mongoose.js:90:21:90:25 | query | semmle.label | query | | mongoose.js:97:14:97:18 | query | semmle.label | query | | mongoose.js:99:31:99:35 | query | semmle.label | query | -| mongoose.js:101:6:101:22 | id | semmle.label | id | +| mongoose.js:101:6:101:7 | id | semmle.label | id | | mongoose.js:101:11:101:22 | req.query.id | semmle.label | req.query.id | -| mongoose.js:101:25:101:45 | cond | semmle.label | cond | +| mongoose.js:101:25:101:28 | cond | semmle.label | cond | | mongoose.js:101:32:101:45 | req.query.cond | semmle.label | req.query.cond | | mongoose.js:102:22:102:25 | cond | semmle.label | cond | | mongoose.js:103:21:103:24 | cond | semmle.label | cond | @@ -755,13 +755,13 @@ nodes | mongoose.js:116:23:116:24 | id | semmle.label | id | | mongoose.js:119:38:119:42 | query | semmle.label | query | | mongoose.js:122:30:122:34 | query | semmle.label | query | -| mongooseJsonParse.js:19:11:19:20 | query | semmle.label | query | +| mongooseJsonParse.js:19:11:19:15 | query | semmle.label | query | | mongooseJsonParse.js:19:19:19:20 | {} | semmle.label | {} | | mongooseJsonParse.js:20:19:20:44 | JSON.pa ... y.data) | semmle.label | JSON.pa ... y.data) | | mongooseJsonParse.js:20:19:20:50 | JSON.pa ... ).title | semmle.label | JSON.pa ... ).title | | mongooseJsonParse.js:20:30:20:43 | req.query.data | semmle.label | req.query.data | | mongooseJsonParse.js:22:19:22:23 | query | semmle.label | query | -| mongooseModelClient.js:10:7:10:32 | v | semmle.label | v | +| mongooseModelClient.js:10:7:10:7 | v | semmle.label | v | | mongooseModelClient.js:10:11:10:32 | JSON.pa ... body.x) | semmle.label | JSON.pa ... body.x) | | mongooseModelClient.js:10:22:10:29 | req.body | semmle.label | req.body | | mongooseModelClient.js:10:22:10:31 | req.body.x | semmle.label | req.body.x | @@ -770,16 +770,16 @@ nodes | mongooseModelClient.js:12:16:12:34 | { id: req.body.id } | semmle.label | { id: req.body.id } | | mongooseModelClient.js:12:22:12:29 | req.body | semmle.label | req.body | | mongooseModelClient.js:12:22:12:32 | req.body.id | semmle.label | req.body.id | -| mysql.js:6:9:6:31 | temp | semmle.label | temp | +| mysql.js:6:9:6:12 | temp | semmle.label | temp | | mysql.js:6:16:6:31 | req.params.value | semmle.label | req.params.value | | mysql.js:15:18:15:65 | 'SELECT ... + temp | semmle.label | 'SELECT ... + temp | | mysql.js:15:62:15:65 | temp | semmle.label | temp | | mysql.js:19:26:19:73 | 'SELECT ... + temp | semmle.label | 'SELECT ... + temp | | mysql.js:19:70:19:73 | temp | semmle.label | temp | -| pg-promise-types.ts:7:9:7:28 | taint | semmle.label | taint | +| pg-promise-types.ts:7:9:7:13 | taint | semmle.label | taint | | pg-promise-types.ts:7:17:7:28 | req.params.x | semmle.label | req.params.x | | pg-promise-types.ts:8:17:8:21 | taint | semmle.label | taint | -| pg-promise.js:6:7:7:55 | query | semmle.label | query | +| pg-promise.js:6:7:6:11 | query | semmle.label | query | | pg-promise.js:7:16:7:34 | req.params.category | semmle.label | req.params.category | | pg-promise.js:9:10:9:14 | query | semmle.label | query | | pg-promise.js:10:11:10:15 | query | semmle.label | query | @@ -805,7 +805,7 @@ nodes | pg-promise.js:64:16:64:20 | query | semmle.label | query | | redis.js:10:16:10:23 | req.body | semmle.label | req.body | | redis.js:10:16:10:27 | req.body.key | semmle.label | req.body.key | -| redis.js:12:9:12:26 | key | semmle.label | key | +| redis.js:12:9:12:11 | key | semmle.label | key | | redis.js:12:15:12:22 | req.body | semmle.label | req.body | | redis.js:12:15:12:26 | req.body.key | semmle.label | req.body.key | | redis.js:13:16:13:18 | key | semmle.label | key | @@ -815,7 +815,7 @@ nodes | redis.js:26:14:26:16 | key | semmle.label | key | | redis.js:30:23:30:25 | key | semmle.label | key | | redis.js:32:28:32:30 | key | semmle.label | key | -| redis.js:38:11:38:28 | key | semmle.label | key | +| redis.js:38:11:38:13 | key | semmle.label | key | | redis.js:38:17:38:24 | req.body | semmle.label | req.body | | redis.js:38:17:38:28 | req.body.key | semmle.label | req.body.key | | redis.js:39:16:39:18 | key | semmle.label | key | @@ -826,7 +826,7 @@ nodes | socketio.js:11:46:11:51 | handle | semmle.label | handle | | tst2.js:8:27:8:84 | "select ... d + "'" | semmle.label | "select ... d + "'" | | tst2.js:8:66:8:78 | req.params.id | semmle.label | req.params.id | -| tst3.js:7:7:8:55 | query1 | semmle.label | query1 | +| tst3.js:7:7:7:12 | query1 | semmle.label | query1 | | tst3.js:8:16:8:34 | req.params.category | semmle.label | req.params.category | | tst3.js:9:14:9:19 | query1 | semmle.label | query1 | | tst4.js:8:10:8:66 | 'SELECT ... d + '"' | semmle.label | 'SELECT ... d + '"' | 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 412f0a5c5fa..8ddaba30fc8 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 @@ -105,45 +105,45 @@ edges | express.js:6:44:6:62 | req.param("wobble") | express.js:6:24:6:69 | "return ... + "];" | provenance | | | express.js:7:54:7:72 | req.param("wobble") | express.js:7:34:7:79 | "return ... + "];" | provenance | | | express.js:9:28:9:46 | req.param("wobble") | express.js:9:8:9:53 | "return ... + "];" | provenance | | -| express.js:19:9:19:35 | taint | express.js:20:34:20:38 | taint | provenance | | -| express.js:19:17:19:35 | req.param("wobble") | express.js:19:9:19:35 | taint | provenance | | -| express.js:27:9:27:35 | taint | express.js:36:15:36:19 | taint | provenance | | -| express.js:27:17:27:35 | req.param("wobble") | express.js:27:9:27:35 | taint | provenance | | +| express.js:19:9:19:13 | taint | express.js:20:34:20:38 | taint | provenance | | +| express.js:19:17:19:35 | req.param("wobble") | express.js:19:9:19:13 | taint | provenance | | +| express.js:27:9:27:13 | taint | express.js:36:15:36:19 | taint | provenance | | +| express.js:27:17:27:35 | req.param("wobble") | express.js:27:9:27:13 | taint | provenance | | | express.js:42:30:42:32 | msg | express.js:43:10:43:12 | msg | provenance | | -| fastify.js:4:9:4:43 | userInput | fastify.js:5:44:5:52 | userInput | provenance | | -| fastify.js:4:21:4:33 | request.query | fastify.js:4:9:4:43 | userInput | provenance | | -| fastify.js:4:21:4:43 | request ... Request | fastify.js:4:9:4:43 | userInput | provenance | | -| fastify.js:9:9:9:40 | userInput | fastify.js:10:44:10:52 | userInput | provenance | | -| fastify.js:9:21:9:33 | request.query | fastify.js:9:9:9:40 | userInput | provenance | | -| fastify.js:9:21:9:40 | request.query.onSend | fastify.js:9:9:9:40 | userInput | provenance | | -| fastify.js:15:9:15:44 | userInput | fastify.js:16:44:16:52 | userInput | provenance | | -| fastify.js:15:21:15:33 | request.query | fastify.js:15:9:15:44 | userInput | provenance | | -| fastify.js:15:21:15:44 | request ... Parsing | fastify.js:15:9:15:44 | userInput | provenance | | -| fastify.js:21:9:21:47 | userInput | fastify.js:22:44:22:52 | userInput | provenance | | -| fastify.js:21:21:21:33 | request.query | fastify.js:21:9:21:47 | userInput | provenance | | -| fastify.js:21:21:21:47 | request ... idation | fastify.js:21:9:21:47 | userInput | provenance | | -| fastify.js:26:9:26:44 | userInput | fastify.js:27:44:27:52 | userInput | provenance | | -| fastify.js:26:21:26:33 | request.query | fastify.js:26:9:26:44 | userInput | provenance | | -| fastify.js:26:21:26:44 | request ... Handler | fastify.js:26:9:26:44 | userInput | provenance | | -| fastify.js:31:9:31:50 | userInput | fastify.js:32:44:32:52 | userInput | provenance | | -| fastify.js:31:21:31:33 | request.query | fastify.js:31:9:31:50 | userInput | provenance | | -| fastify.js:31:21:31:50 | request ... ization | fastify.js:31:9:31:50 | userInput | provenance | | -| fastify.js:37:9:37:44 | userInput | fastify.js:38:44:38:52 | userInput | provenance | | -| fastify.js:37:21:37:33 | request.query | fastify.js:37:9:37:44 | userInput | provenance | | -| fastify.js:37:21:37:44 | request ... esponse | fastify.js:37:9:37:44 | userInput | provenance | | -| fastify.js:42:9:42:41 | userInput | fastify.js:43:44:43:52 | userInput | provenance | | -| fastify.js:42:21:42:33 | request.query | fastify.js:42:9:42:41 | userInput | provenance | | -| fastify.js:42:21:42:41 | request ... onError | fastify.js:42:9:42:41 | userInput | provenance | | -| fastify.js:47:9:47:43 | userInput | fastify.js:48:44:48:52 | userInput | provenance | | -| fastify.js:47:21:47:33 | request.query | fastify.js:47:9:47:43 | userInput | provenance | | -| fastify.js:47:21:47:43 | request ... Timeout | fastify.js:47:9:47:43 | userInput | provenance | | -| fastify.js:52:11:52:50 | userInput | fastify.js:53:46:53:54 | userInput | provenance | | -| fastify.js:52:23:52:35 | request.query | fastify.js:52:11:52:50 | userInput | provenance | | -| fastify.js:52:23:52:50 | request ... stAbort | fastify.js:52:11:52:50 | userInput | provenance | | -| fastify.js:57:9:57:39 | userInput | fastify.js:58:44:58:52 | userInput | provenance | | -| fastify.js:57:9:57:39 | userInput | fastify.js:59:23:59:31 | userInput | provenance | | -| fastify.js:57:21:57:33 | request.query | fastify.js:57:9:57:39 | userInput | provenance | | -| fastify.js:57:21:57:39 | request.query.input | fastify.js:57:9:57:39 | userInput | provenance | | +| fastify.js:4:9:4:17 | userInput | fastify.js:5:44:5:52 | userInput | provenance | | +| fastify.js:4:21:4:33 | request.query | fastify.js:4:9:4:17 | userInput | provenance | | +| fastify.js:4:21:4:43 | request ... Request | fastify.js:4:9:4:17 | userInput | provenance | | +| fastify.js:9:9:9:17 | userInput | fastify.js:10:44:10:52 | userInput | provenance | | +| fastify.js:9:21:9:33 | request.query | fastify.js:9:9:9:17 | userInput | provenance | | +| fastify.js:9:21:9:40 | request.query.onSend | fastify.js:9:9:9:17 | userInput | provenance | | +| fastify.js:15:9:15:17 | userInput | fastify.js:16:44:16:52 | userInput | provenance | | +| fastify.js:15:21:15:33 | request.query | fastify.js:15:9:15:17 | userInput | provenance | | +| fastify.js:15:21:15:44 | request ... Parsing | fastify.js:15:9:15:17 | userInput | provenance | | +| fastify.js:21:9:21:17 | userInput | fastify.js:22:44:22:52 | userInput | provenance | | +| fastify.js:21:21:21:33 | request.query | fastify.js:21:9:21:17 | userInput | provenance | | +| fastify.js:21:21:21:47 | request ... idation | fastify.js:21:9:21:17 | userInput | provenance | | +| fastify.js:26:9:26:17 | userInput | fastify.js:27:44:27:52 | userInput | provenance | | +| fastify.js:26:21:26:33 | request.query | fastify.js:26:9:26:17 | userInput | provenance | | +| fastify.js:26:21:26:44 | request ... Handler | fastify.js:26:9:26:17 | userInput | provenance | | +| fastify.js:31:9:31:17 | userInput | fastify.js:32:44:32:52 | userInput | provenance | | +| fastify.js:31:21:31:33 | request.query | fastify.js:31:9:31:17 | userInput | provenance | | +| fastify.js:31:21:31:50 | request ... ization | fastify.js:31:9:31:17 | userInput | provenance | | +| fastify.js:37:9:37:17 | userInput | fastify.js:38:44:38:52 | userInput | provenance | | +| fastify.js:37:21:37:33 | request.query | fastify.js:37:9:37:17 | userInput | provenance | | +| fastify.js:37:21:37:44 | request ... esponse | fastify.js:37:9:37:17 | userInput | provenance | | +| fastify.js:42:9:42:17 | userInput | fastify.js:43:44:43:52 | userInput | provenance | | +| fastify.js:42:21:42:33 | request.query | fastify.js:42:9:42:17 | userInput | provenance | | +| fastify.js:42:21:42:41 | request ... onError | fastify.js:42:9:42:17 | userInput | provenance | | +| fastify.js:47:9:47:17 | userInput | fastify.js:48:44:48:52 | userInput | provenance | | +| fastify.js:47:21:47:33 | request.query | fastify.js:47:9:47:17 | userInput | provenance | | +| fastify.js:47:21:47:43 | request ... Timeout | fastify.js:47:9:47:17 | userInput | provenance | | +| fastify.js:52:11:52:19 | userInput | fastify.js:53:46:53:54 | userInput | provenance | | +| fastify.js:52:23:52:35 | request.query | fastify.js:52:11:52:19 | userInput | provenance | | +| fastify.js:52:23:52:50 | request ... stAbort | fastify.js:52:11:52:19 | userInput | provenance | | +| fastify.js:57:9:57:17 | userInput | fastify.js:58:44:58:52 | userInput | provenance | | +| fastify.js:57:9:57:17 | userInput | fastify.js:59:23:59:31 | userInput | provenance | | +| fastify.js:57:21:57:33 | request.query | fastify.js:57:9:57:17 | userInput | provenance | | +| fastify.js:57:21:57:39 | request.query.input | fastify.js:57:9:57:17 | userInput | provenance | | | fastify.js:66:24:66:36 | request.query | fastify.js:66:24:66:47 | request ... redCode | provenance | | | fastify.js:66:24:66:47 | request ... redCode | fastify.js:71:34:71:51 | request.storedCode | provenance | | | fastify.js:79:20:79:32 | request.query | fastify.js:79:20:79:42 | request ... plyCode | provenance | | @@ -151,44 +151,44 @@ edges | fastify.js:94:29:94:41 | request.query | fastify.js:94:29:94:51 | request ... plyCode | provenance | | | fastify.js:94:29:94:51 | request ... plyCode | fastify.js:99:30:99:52 | reply.l ... tedCode | provenance | | | fastify.js:94:29:94:51 | request ... plyCode | fastify.js:108:28:108:50 | reply.l ... tedCode | provenance | | -| fastify.js:106:9:106:38 | userInput | fastify.js:107:23:107:31 | userInput | provenance | | -| fastify.js:106:21:106:33 | request.query | fastify.js:106:9:106:38 | userInput | provenance | | -| fastify.js:106:21:106:38 | request.query.code | fastify.js:106:9:106:38 | userInput | provenance | | -| 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 | | +| fastify.js:106:9:106:17 | userInput | fastify.js:107:23:107:31 | userInput | provenance | | +| fastify.js:106:21:106:33 | request.query | fastify.js:106:9:106:17 | userInput | provenance | | +| fastify.js:106:21:106:38 | request.query.code | fastify.js:106:9:106:17 | userInput | provenance | | +| react-native.js:7:7:7:13 | tainted | react-native.js:8:32:8:38 | tainted | provenance | | +| react-native.js:7:7:7:13 | 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:13 | 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:9:24:12 | data | react.js:25:8:25:11 | data | provenance | | +| react.js:24:16:24:45 | use(ech ... alue")) | react.js:24:9:24:12 | 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 | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:23:17:23:23 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:24:18:24:24 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:25:16:25:22 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:26:27:26:33 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:27:21:27:27 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:28:17:28:23 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:29:24:29:30 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:30:21:30:27 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:31:19:31:25 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:32:16:32:22 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:33:17:33:23 | tainted | provenance | | -| template-sinks.js:18:19:18:31 | req.query.foo | template-sinks.js:18:9:18:31 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:20:17:20:23 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:21:16:21:22 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:22:18:22:24 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:23:17:23:23 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:24:18:24:24 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:25:16:25:22 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:26:27:26:33 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:27:21:27:27 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:28:17:28:23 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:29:24:29:30 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:30:21:30:27 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:31:19:31:25 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:32:16:32:22 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:33:17:33:23 | tainted | provenance | | +| template-sinks.js:18:19:18:31 | req.query.foo | template-sinks.js:18:9:18:15 | tainted | provenance | | | tst.js:1:6:1:27 | documen ... on.href | tst.js:1:6:1:83 | documen ... t=")+8) | provenance | | | tst.js:11:10:11:33 | documen ... .search | tst.js:11:10:11:74 | documen ... , "$1") | provenance | | | tst.js:17:11:17:32 | documen ... on.hash | tst.js:17:11:17:45 | documen ... ring(1) | provenance | | | tst.js:17:11:17:45 | documen ... ring(1) | tst.js:17:6:17:46 | atob(do ... ing(1)) | provenance | | | tst.js:19:26:19:40 | location.search | tst.js:19:26:19:53 | locatio ... ring(1) | provenance | | -| tst.js:22:9:22:82 | source | tst.js:24:18:24:23 | source | provenance | | -| tst.js:22:9:22:82 | source | tst.js:26:14:26:19 | source | provenance | | -| tst.js:22:9:22:82 | source | tst.js:28:28:28:33 | source | provenance | | -| tst.js:22:9:22:82 | source | tst.js:30:33:30:38 | source | provenance | | +| tst.js:22:9:22:14 | source | tst.js:24:18:24:23 | source | provenance | | +| tst.js:22:9:22:14 | source | tst.js:26:14:26:19 | source | provenance | | +| tst.js:22:9:22:14 | source | tst.js:28:28:28:33 | source | provenance | | +| tst.js:22:9:22:14 | source | tst.js:30:33:30:38 | source | provenance | | | tst.js:22:18:22:41 | documen ... .search | tst.js:22:18:22:82 | documen ... , "$1") | provenance | | -| tst.js:22:18:22:82 | documen ... , "$1") | tst.js:22:9:22:82 | source | provenance | | +| tst.js:22:18:22:82 | documen ... , "$1") | tst.js:22:9:22:14 | source | provenance | | nodes | NoSQLCodeInjection.js:18:24:18:31 | req.body | semmle.label | req.body | | NoSQLCodeInjection.js:18:24:18:37 | req.body.query | semmle.label | req.body.query | @@ -221,55 +221,55 @@ nodes | express.js:12:30:12:53 | req.par ... cript") | semmle.label | req.par ... cript") | | express.js:13:37:13:70 | req.par ... odule") | semmle.label | req.par ... odule") | | express.js:14:19:14:48 | req.par ... ntext") | semmle.label | req.par ... ntext") | -| express.js:19:9:19:35 | taint | semmle.label | taint | +| express.js:19:9:19:13 | taint | semmle.label | taint | | express.js:19:17:19:35 | req.param("wobble") | semmle.label | req.param("wobble") | | express.js:20:34:20:38 | taint | semmle.label | taint | -| express.js:27:9:27:35 | taint | semmle.label | taint | +| express.js:27:9:27:13 | taint | semmle.label | taint | | express.js:27:17:27:35 | req.param("wobble") | semmle.label | req.param("wobble") | | express.js:36:15:36:19 | taint | semmle.label | taint | | express.js:42:30:42:32 | msg | semmle.label | msg | | express.js:43:10:43:12 | msg | semmle.label | msg | -| fastify.js:4:9:4:43 | userInput | semmle.label | userInput | +| fastify.js:4:9:4:17 | userInput | semmle.label | userInput | | fastify.js:4:21:4:33 | request.query | semmle.label | request.query | | fastify.js:4:21:4:43 | request ... Request | semmle.label | request ... Request | | fastify.js:5:44:5:52 | userInput | semmle.label | userInput | -| fastify.js:9:9:9:40 | userInput | semmle.label | userInput | +| fastify.js:9:9:9:17 | userInput | semmle.label | userInput | | fastify.js:9:21:9:33 | request.query | semmle.label | request.query | | fastify.js:9:21:9:40 | request.query.onSend | semmle.label | request.query.onSend | | fastify.js:10:44:10:52 | userInput | semmle.label | userInput | -| fastify.js:15:9:15:44 | userInput | semmle.label | userInput | +| fastify.js:15:9:15:17 | userInput | semmle.label | userInput | | fastify.js:15:21:15:33 | request.query | semmle.label | request.query | | fastify.js:15:21:15:44 | request ... Parsing | semmle.label | request ... Parsing | | fastify.js:16:44:16:52 | userInput | semmle.label | userInput | -| fastify.js:21:9:21:47 | userInput | semmle.label | userInput | +| fastify.js:21:9:21:17 | userInput | semmle.label | userInput | | fastify.js:21:21:21:33 | request.query | semmle.label | request.query | | fastify.js:21:21:21:47 | request ... idation | semmle.label | request ... idation | | fastify.js:22:44:22:52 | userInput | semmle.label | userInput | -| fastify.js:26:9:26:44 | userInput | semmle.label | userInput | +| fastify.js:26:9:26:17 | userInput | semmle.label | userInput | | fastify.js:26:21:26:33 | request.query | semmle.label | request.query | | fastify.js:26:21:26:44 | request ... Handler | semmle.label | request ... Handler | | fastify.js:27:44:27:52 | userInput | semmle.label | userInput | -| fastify.js:31:9:31:50 | userInput | semmle.label | userInput | +| fastify.js:31:9:31:17 | userInput | semmle.label | userInput | | fastify.js:31:21:31:33 | request.query | semmle.label | request.query | | fastify.js:31:21:31:50 | request ... ization | semmle.label | request ... ization | | fastify.js:32:44:32:52 | userInput | semmle.label | userInput | -| fastify.js:37:9:37:44 | userInput | semmle.label | userInput | +| fastify.js:37:9:37:17 | userInput | semmle.label | userInput | | fastify.js:37:21:37:33 | request.query | semmle.label | request.query | | fastify.js:37:21:37:44 | request ... esponse | semmle.label | request ... esponse | | fastify.js:38:44:38:52 | userInput | semmle.label | userInput | -| fastify.js:42:9:42:41 | userInput | semmle.label | userInput | +| fastify.js:42:9:42:17 | userInput | semmle.label | userInput | | fastify.js:42:21:42:33 | request.query | semmle.label | request.query | | fastify.js:42:21:42:41 | request ... onError | semmle.label | request ... onError | | fastify.js:43:44:43:52 | userInput | semmle.label | userInput | -| fastify.js:47:9:47:43 | userInput | semmle.label | userInput | +| fastify.js:47:9:47:17 | userInput | semmle.label | userInput | | fastify.js:47:21:47:33 | request.query | semmle.label | request.query | | fastify.js:47:21:47:43 | request ... Timeout | semmle.label | request ... Timeout | | fastify.js:48:44:48:52 | userInput | semmle.label | userInput | -| fastify.js:52:11:52:50 | userInput | semmle.label | userInput | +| fastify.js:52:11:52:19 | userInput | semmle.label | userInput | | fastify.js:52:23:52:35 | request.query | semmle.label | request.query | | fastify.js:52:23:52:50 | request ... stAbort | semmle.label | request ... stAbort | | fastify.js:53:46:53:54 | userInput | semmle.label | userInput | -| fastify.js:57:9:57:39 | userInput | semmle.label | userInput | +| fastify.js:57:9:57:17 | userInput | semmle.label | userInput | | fastify.js:57:21:57:33 | request.query | semmle.label | request.query | | fastify.js:57:21:57:39 | request.query.input | semmle.label | request.query.input | | fastify.js:58:44:58:52 | userInput | semmle.label | userInput | @@ -283,14 +283,14 @@ nodes | fastify.js:94:29:94:41 | request.query | semmle.label | request.query | | fastify.js:94:29:94:51 | request ... plyCode | semmle.label | request ... plyCode | | fastify.js:99:30:99:52 | reply.l ... tedCode | semmle.label | reply.l ... tedCode | -| fastify.js:106:9:106:38 | userInput | semmle.label | userInput | +| fastify.js:106:9:106:17 | userInput | semmle.label | userInput | | fastify.js:106:21:106:33 | request.query | semmle.label | request.query | | fastify.js:106:21:106:38 | request.query.code | semmle.label | request.query.code | | fastify.js:107:23:107:31 | userInput | semmle.label | userInput | | fastify.js:108:28:108:50 | reply.l ... tedCode | semmle.label | reply.l ... tedCode | | module.js:9:16:9:29 | req.query.code | semmle.label | req.query.code | | module.js:11:17:11:30 | req.query.code | semmle.label | req.query.code | -| react-native.js:7:7:7:33 | tainted | semmle.label | tainted | +| react-native.js:7:7:7:13 | tainted | semmle.label | tainted | | 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 | @@ -298,11 +298,11 @@ nodes | 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:9:24:12 | 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 | -| template-sinks.js:18:9:18:31 | tainted | semmle.label | tainted | +| template-sinks.js:18:9:18:15 | 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 | | template-sinks.js:21:16:21:22 | tainted | semmle.label | tainted | @@ -330,7 +330,7 @@ nodes | tst.js:17:11:17:45 | documen ... ring(1) | semmle.label | documen ... ring(1) | | tst.js:19:26:19:40 | location.search | semmle.label | location.search | | tst.js:19:26:19:53 | locatio ... ring(1) | semmle.label | locatio ... ring(1) | -| tst.js:22:9:22:82 | source | semmle.label | source | +| tst.js:22:9:22:14 | source | semmle.label | source | | tst.js:22:18:22:41 | documen ... .search | semmle.label | documen ... .search | | tst.js:22:18:22:82 | documen ... , "$1") | semmle.label | documen ... , "$1") | | tst.js:24:18:24:23 | source | semmle.label | source | 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 5a249b086b9..db39855c5e5 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 @@ -6,45 +6,45 @@ edges | express.js:6:44:6:62 | req.param("wobble") | express.js:6:24:6:69 | "return ... + "];" | provenance | | | express.js:7:54:7:72 | req.param("wobble") | express.js:7:34:7:79 | "return ... + "];" | provenance | | | express.js:9:28:9:46 | req.param("wobble") | express.js:9:8:9:53 | "return ... + "];" | provenance | | -| express.js:19:9:19:35 | taint | express.js:20:34:20:38 | taint | provenance | | -| express.js:19:17:19:35 | req.param("wobble") | express.js:19:9:19:35 | taint | provenance | | -| express.js:27:9:27:35 | taint | express.js:36:15:36:19 | taint | provenance | | -| express.js:27:17:27:35 | req.param("wobble") | express.js:27:9:27:35 | taint | provenance | | +| express.js:19:9:19:13 | taint | express.js:20:34:20:38 | taint | provenance | | +| express.js:19:17:19:35 | req.param("wobble") | express.js:19:9:19:13 | taint | provenance | | +| express.js:27:9:27:13 | taint | express.js:36:15:36:19 | taint | provenance | | +| express.js:27:17:27:35 | req.param("wobble") | express.js:27:9:27:13 | taint | provenance | | | express.js:42:30:42:32 | msg | express.js:43:10:43:12 | msg | provenance | | -| fastify.js:4:9:4:43 | userInput | fastify.js:5:44:5:52 | userInput | provenance | | -| fastify.js:4:21:4:33 | request.query | fastify.js:4:9:4:43 | userInput | provenance | | -| fastify.js:4:21:4:43 | request ... Request | fastify.js:4:9:4:43 | userInput | provenance | | -| fastify.js:9:9:9:40 | userInput | fastify.js:10:44:10:52 | userInput | provenance | | -| fastify.js:9:21:9:33 | request.query | fastify.js:9:9:9:40 | userInput | provenance | | -| fastify.js:9:21:9:40 | request.query.onSend | fastify.js:9:9:9:40 | userInput | provenance | | -| fastify.js:15:9:15:44 | userInput | fastify.js:16:44:16:52 | userInput | provenance | | -| fastify.js:15:21:15:33 | request.query | fastify.js:15:9:15:44 | userInput | provenance | | -| fastify.js:15:21:15:44 | request ... Parsing | fastify.js:15:9:15:44 | userInput | provenance | | -| fastify.js:21:9:21:47 | userInput | fastify.js:22:44:22:52 | userInput | provenance | | -| fastify.js:21:21:21:33 | request.query | fastify.js:21:9:21:47 | userInput | provenance | | -| fastify.js:21:21:21:47 | request ... idation | fastify.js:21:9:21:47 | userInput | provenance | | -| fastify.js:26:9:26:44 | userInput | fastify.js:27:44:27:52 | userInput | provenance | | -| fastify.js:26:21:26:33 | request.query | fastify.js:26:9:26:44 | userInput | provenance | | -| fastify.js:26:21:26:44 | request ... Handler | fastify.js:26:9:26:44 | userInput | provenance | | -| fastify.js:31:9:31:50 | userInput | fastify.js:32:44:32:52 | userInput | provenance | | -| fastify.js:31:21:31:33 | request.query | fastify.js:31:9:31:50 | userInput | provenance | | -| fastify.js:31:21:31:50 | request ... ization | fastify.js:31:9:31:50 | userInput | provenance | | -| fastify.js:37:9:37:44 | userInput | fastify.js:38:44:38:52 | userInput | provenance | | -| fastify.js:37:21:37:33 | request.query | fastify.js:37:9:37:44 | userInput | provenance | | -| fastify.js:37:21:37:44 | request ... esponse | fastify.js:37:9:37:44 | userInput | provenance | | -| fastify.js:42:9:42:41 | userInput | fastify.js:43:44:43:52 | userInput | provenance | | -| fastify.js:42:21:42:33 | request.query | fastify.js:42:9:42:41 | userInput | provenance | | -| fastify.js:42:21:42:41 | request ... onError | fastify.js:42:9:42:41 | userInput | provenance | | -| fastify.js:47:9:47:43 | userInput | fastify.js:48:44:48:52 | userInput | provenance | | -| fastify.js:47:21:47:33 | request.query | fastify.js:47:9:47:43 | userInput | provenance | | -| fastify.js:47:21:47:43 | request ... Timeout | fastify.js:47:9:47:43 | userInput | provenance | | -| fastify.js:52:11:52:50 | userInput | fastify.js:53:46:53:54 | userInput | provenance | | -| fastify.js:52:23:52:35 | request.query | fastify.js:52:11:52:50 | userInput | provenance | | -| fastify.js:52:23:52:50 | request ... stAbort | fastify.js:52:11:52:50 | userInput | provenance | | -| fastify.js:57:9:57:39 | userInput | fastify.js:58:44:58:52 | userInput | provenance | | -| fastify.js:57:9:57:39 | userInput | fastify.js:59:23:59:31 | userInput | provenance | | -| fastify.js:57:21:57:33 | request.query | fastify.js:57:9:57:39 | userInput | provenance | | -| fastify.js:57:21:57:39 | request.query.input | fastify.js:57:9:57:39 | userInput | provenance | | +| fastify.js:4:9:4:17 | userInput | fastify.js:5:44:5:52 | userInput | provenance | | +| fastify.js:4:21:4:33 | request.query | fastify.js:4:9:4:17 | userInput | provenance | | +| fastify.js:4:21:4:43 | request ... Request | fastify.js:4:9:4:17 | userInput | provenance | | +| fastify.js:9:9:9:17 | userInput | fastify.js:10:44:10:52 | userInput | provenance | | +| fastify.js:9:21:9:33 | request.query | fastify.js:9:9:9:17 | userInput | provenance | | +| fastify.js:9:21:9:40 | request.query.onSend | fastify.js:9:9:9:17 | userInput | provenance | | +| fastify.js:15:9:15:17 | userInput | fastify.js:16:44:16:52 | userInput | provenance | | +| fastify.js:15:21:15:33 | request.query | fastify.js:15:9:15:17 | userInput | provenance | | +| fastify.js:15:21:15:44 | request ... Parsing | fastify.js:15:9:15:17 | userInput | provenance | | +| fastify.js:21:9:21:17 | userInput | fastify.js:22:44:22:52 | userInput | provenance | | +| fastify.js:21:21:21:33 | request.query | fastify.js:21:9:21:17 | userInput | provenance | | +| fastify.js:21:21:21:47 | request ... idation | fastify.js:21:9:21:17 | userInput | provenance | | +| fastify.js:26:9:26:17 | userInput | fastify.js:27:44:27:52 | userInput | provenance | | +| fastify.js:26:21:26:33 | request.query | fastify.js:26:9:26:17 | userInput | provenance | | +| fastify.js:26:21:26:44 | request ... Handler | fastify.js:26:9:26:17 | userInput | provenance | | +| fastify.js:31:9:31:17 | userInput | fastify.js:32:44:32:52 | userInput | provenance | | +| fastify.js:31:21:31:33 | request.query | fastify.js:31:9:31:17 | userInput | provenance | | +| fastify.js:31:21:31:50 | request ... ization | fastify.js:31:9:31:17 | userInput | provenance | | +| fastify.js:37:9:37:17 | userInput | fastify.js:38:44:38:52 | userInput | provenance | | +| fastify.js:37:21:37:33 | request.query | fastify.js:37:9:37:17 | userInput | provenance | | +| fastify.js:37:21:37:44 | request ... esponse | fastify.js:37:9:37:17 | userInput | provenance | | +| fastify.js:42:9:42:17 | userInput | fastify.js:43:44:43:52 | userInput | provenance | | +| fastify.js:42:21:42:33 | request.query | fastify.js:42:9:42:17 | userInput | provenance | | +| fastify.js:42:21:42:41 | request ... onError | fastify.js:42:9:42:17 | userInput | provenance | | +| fastify.js:47:9:47:17 | userInput | fastify.js:48:44:48:52 | userInput | provenance | | +| fastify.js:47:21:47:33 | request.query | fastify.js:47:9:47:17 | userInput | provenance | | +| fastify.js:47:21:47:43 | request ... Timeout | fastify.js:47:9:47:17 | userInput | provenance | | +| fastify.js:52:11:52:19 | userInput | fastify.js:53:46:53:54 | userInput | provenance | | +| fastify.js:52:23:52:35 | request.query | fastify.js:52:11:52:19 | userInput | provenance | | +| fastify.js:52:23:52:50 | request ... stAbort | fastify.js:52:11:52:19 | userInput | provenance | | +| fastify.js:57:9:57:17 | userInput | fastify.js:58:44:58:52 | userInput | provenance | | +| fastify.js:57:9:57:17 | userInput | fastify.js:59:23:59:31 | userInput | provenance | | +| fastify.js:57:21:57:33 | request.query | fastify.js:57:9:57:17 | userInput | provenance | | +| fastify.js:57:21:57:39 | request.query.input | fastify.js:57:9:57:17 | userInput | provenance | | | fastify.js:66:24:66:36 | request.query | fastify.js:66:24:66:47 | request ... redCode | provenance | | | fastify.js:66:24:66:47 | request ... redCode | fastify.js:71:34:71:51 | request.storedCode | provenance | | | fastify.js:79:20:79:32 | request.query | fastify.js:79:20:79:42 | request ... plyCode | provenance | | @@ -52,44 +52,44 @@ edges | fastify.js:94:29:94:41 | request.query | fastify.js:94:29:94:51 | request ... plyCode | provenance | | | fastify.js:94:29:94:51 | request ... plyCode | fastify.js:99:30:99:52 | reply.l ... tedCode | provenance | | | fastify.js:94:29:94:51 | request ... plyCode | fastify.js:108:28:108:50 | reply.l ... tedCode | provenance | | -| fastify.js:106:9:106:38 | userInput | fastify.js:107:23:107:31 | userInput | provenance | | -| fastify.js:106:21:106:33 | request.query | fastify.js:106:9:106:38 | userInput | provenance | | -| fastify.js:106:21:106:38 | request.query.code | fastify.js:106:9:106:38 | userInput | provenance | | -| 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 | | +| fastify.js:106:9:106:17 | userInput | fastify.js:107:23:107:31 | userInput | provenance | | +| fastify.js:106:21:106:33 | request.query | fastify.js:106:9:106:17 | userInput | provenance | | +| fastify.js:106:21:106:38 | request.query.code | fastify.js:106:9:106:17 | userInput | provenance | | +| react-native.js:7:7:7:13 | tainted | react-native.js:8:32:8:38 | tainted | provenance | | +| react-native.js:7:7:7:13 | 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:13 | 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:9:24:12 | data | react.js:25:8:25:11 | data | provenance | | +| react.js:24:16:24:45 | use(ech ... alue")) | react.js:24:9:24:12 | 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 | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:23:17:23:23 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:24:18:24:24 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:25:16:25:22 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:26:27:26:33 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:27:21:27:27 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:28:17:28:23 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:29:24:29:30 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:30:21:30:27 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:31:19:31:25 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:32:16:32:22 | tainted | provenance | | -| template-sinks.js:18:9:18:31 | tainted | template-sinks.js:33:17:33:23 | tainted | provenance | | -| template-sinks.js:18:19:18:31 | req.query.foo | template-sinks.js:18:9:18:31 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:20:17:20:23 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:21:16:21:22 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:22:18:22:24 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:23:17:23:23 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:24:18:24:24 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:25:16:25:22 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:26:27:26:33 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:27:21:27:27 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:28:17:28:23 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:29:24:29:30 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:30:21:30:27 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:31:19:31:25 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:32:16:32:22 | tainted | provenance | | +| template-sinks.js:18:9:18:15 | tainted | template-sinks.js:33:17:33:23 | tainted | provenance | | +| template-sinks.js:18:19:18:31 | req.query.foo | template-sinks.js:18:9:18:15 | tainted | provenance | | | tst.js:1:6:1:27 | documen ... on.href | tst.js:1:6:1:83 | documen ... t=")+8) | provenance | | | tst.js:11:10:11:33 | documen ... .search | tst.js:11:10:11:74 | documen ... , "$1") | provenance | | | tst.js:17:11:17:32 | documen ... on.hash | tst.js:17:11:17:45 | documen ... ring(1) | provenance | | | tst.js:17:11:17:45 | documen ... ring(1) | tst.js:17:6:17:46 | atob(do ... ing(1)) | provenance | | | tst.js:19:26:19:40 | location.search | tst.js:19:26:19:53 | locatio ... ring(1) | provenance | | -| tst.js:22:9:22:82 | source | tst.js:24:18:24:23 | source | provenance | | -| tst.js:22:9:22:82 | source | tst.js:26:14:26:19 | source | provenance | | -| tst.js:22:9:22:82 | source | tst.js:28:28:28:33 | source | provenance | | -| tst.js:22:9:22:82 | source | tst.js:30:33:30:38 | source | provenance | | +| tst.js:22:9:22:14 | source | tst.js:24:18:24:23 | source | provenance | | +| tst.js:22:9:22:14 | source | tst.js:26:14:26:19 | source | provenance | | +| tst.js:22:9:22:14 | source | tst.js:28:28:28:33 | source | provenance | | +| tst.js:22:9:22:14 | source | tst.js:30:33:30:38 | source | provenance | | | tst.js:22:18:22:41 | documen ... .search | tst.js:22:18:22:82 | documen ... , "$1") | provenance | | -| tst.js:22:18:22:82 | documen ... , "$1") | tst.js:22:9:22:82 | source | provenance | | +| tst.js:22:18:22:82 | documen ... , "$1") | tst.js:22:9:22:14 | source | provenance | | nodes | NoSQLCodeInjection.js:18:24:18:31 | req.body | semmle.label | req.body | | NoSQLCodeInjection.js:18:24:18:37 | req.body.query | semmle.label | req.body.query | @@ -124,55 +124,55 @@ nodes | express.js:12:30:12:53 | req.par ... cript") | semmle.label | req.par ... cript") | | express.js:13:37:13:70 | req.par ... odule") | semmle.label | req.par ... odule") | | express.js:14:19:14:48 | req.par ... ntext") | semmle.label | req.par ... ntext") | -| express.js:19:9:19:35 | taint | semmle.label | taint | +| express.js:19:9:19:13 | taint | semmle.label | taint | | express.js:19:17:19:35 | req.param("wobble") | semmle.label | req.param("wobble") | | express.js:20:34:20:38 | taint | semmle.label | taint | -| express.js:27:9:27:35 | taint | semmle.label | taint | +| express.js:27:9:27:13 | taint | semmle.label | taint | | express.js:27:17:27:35 | req.param("wobble") | semmle.label | req.param("wobble") | | express.js:36:15:36:19 | taint | semmle.label | taint | | express.js:42:30:42:32 | msg | semmle.label | msg | | express.js:43:10:43:12 | msg | semmle.label | msg | -| fastify.js:4:9:4:43 | userInput | semmle.label | userInput | +| fastify.js:4:9:4:17 | userInput | semmle.label | userInput | | fastify.js:4:21:4:33 | request.query | semmle.label | request.query | | fastify.js:4:21:4:43 | request ... Request | semmle.label | request ... Request | | fastify.js:5:44:5:52 | userInput | semmle.label | userInput | -| fastify.js:9:9:9:40 | userInput | semmle.label | userInput | +| fastify.js:9:9:9:17 | userInput | semmle.label | userInput | | fastify.js:9:21:9:33 | request.query | semmle.label | request.query | | fastify.js:9:21:9:40 | request.query.onSend | semmle.label | request.query.onSend | | fastify.js:10:44:10:52 | userInput | semmle.label | userInput | -| fastify.js:15:9:15:44 | userInput | semmle.label | userInput | +| fastify.js:15:9:15:17 | userInput | semmle.label | userInput | | fastify.js:15:21:15:33 | request.query | semmle.label | request.query | | fastify.js:15:21:15:44 | request ... Parsing | semmle.label | request ... Parsing | | fastify.js:16:44:16:52 | userInput | semmle.label | userInput | -| fastify.js:21:9:21:47 | userInput | semmle.label | userInput | +| fastify.js:21:9:21:17 | userInput | semmle.label | userInput | | fastify.js:21:21:21:33 | request.query | semmle.label | request.query | | fastify.js:21:21:21:47 | request ... idation | semmle.label | request ... idation | | fastify.js:22:44:22:52 | userInput | semmle.label | userInput | -| fastify.js:26:9:26:44 | userInput | semmle.label | userInput | +| fastify.js:26:9:26:17 | userInput | semmle.label | userInput | | fastify.js:26:21:26:33 | request.query | semmle.label | request.query | | fastify.js:26:21:26:44 | request ... Handler | semmle.label | request ... Handler | | fastify.js:27:44:27:52 | userInput | semmle.label | userInput | -| fastify.js:31:9:31:50 | userInput | semmle.label | userInput | +| fastify.js:31:9:31:17 | userInput | semmle.label | userInput | | fastify.js:31:21:31:33 | request.query | semmle.label | request.query | | fastify.js:31:21:31:50 | request ... ization | semmle.label | request ... ization | | fastify.js:32:44:32:52 | userInput | semmle.label | userInput | -| fastify.js:37:9:37:44 | userInput | semmle.label | userInput | +| fastify.js:37:9:37:17 | userInput | semmle.label | userInput | | fastify.js:37:21:37:33 | request.query | semmle.label | request.query | | fastify.js:37:21:37:44 | request ... esponse | semmle.label | request ... esponse | | fastify.js:38:44:38:52 | userInput | semmle.label | userInput | -| fastify.js:42:9:42:41 | userInput | semmle.label | userInput | +| fastify.js:42:9:42:17 | userInput | semmle.label | userInput | | fastify.js:42:21:42:33 | request.query | semmle.label | request.query | | fastify.js:42:21:42:41 | request ... onError | semmle.label | request ... onError | | fastify.js:43:44:43:52 | userInput | semmle.label | userInput | -| fastify.js:47:9:47:43 | userInput | semmle.label | userInput | +| fastify.js:47:9:47:17 | userInput | semmle.label | userInput | | fastify.js:47:21:47:33 | request.query | semmle.label | request.query | | fastify.js:47:21:47:43 | request ... Timeout | semmle.label | request ... Timeout | | fastify.js:48:44:48:52 | userInput | semmle.label | userInput | -| fastify.js:52:11:52:50 | userInput | semmle.label | userInput | +| fastify.js:52:11:52:19 | userInput | semmle.label | userInput | | fastify.js:52:23:52:35 | request.query | semmle.label | request.query | | fastify.js:52:23:52:50 | request ... stAbort | semmle.label | request ... stAbort | | fastify.js:53:46:53:54 | userInput | semmle.label | userInput | -| fastify.js:57:9:57:39 | userInput | semmle.label | userInput | +| fastify.js:57:9:57:17 | userInput | semmle.label | userInput | | fastify.js:57:21:57:33 | request.query | semmle.label | request.query | | fastify.js:57:21:57:39 | request.query.input | semmle.label | request.query.input | | fastify.js:58:44:58:52 | userInput | semmle.label | userInput | @@ -186,14 +186,14 @@ nodes | fastify.js:94:29:94:41 | request.query | semmle.label | request.query | | fastify.js:94:29:94:51 | request ... plyCode | semmle.label | request ... plyCode | | fastify.js:99:30:99:52 | reply.l ... tedCode | semmle.label | reply.l ... tedCode | -| fastify.js:106:9:106:38 | userInput | semmle.label | userInput | +| fastify.js:106:9:106:17 | userInput | semmle.label | userInput | | fastify.js:106:21:106:33 | request.query | semmle.label | request.query | | fastify.js:106:21:106:38 | request.query.code | semmle.label | request.query.code | | fastify.js:107:23:107:31 | userInput | semmle.label | userInput | | fastify.js:108:28:108:50 | reply.l ... tedCode | semmle.label | reply.l ... tedCode | | module.js:9:16:9:29 | req.query.code | semmle.label | req.query.code | | module.js:11:17:11:30 | req.query.code | semmle.label | req.query.code | -| react-native.js:7:7:7:33 | tainted | semmle.label | tainted | +| react-native.js:7:7:7:13 | tainted | semmle.label | tainted | | 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 | @@ -201,11 +201,11 @@ nodes | 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:9:24:12 | 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 | -| template-sinks.js:18:9:18:31 | tainted | semmle.label | tainted | +| template-sinks.js:18:9:18:15 | 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 | | template-sinks.js:21:16:21:22 | tainted | semmle.label | tainted | @@ -233,7 +233,7 @@ nodes | tst.js:17:11:17:45 | documen ... ring(1) | semmle.label | documen ... ring(1) | | tst.js:19:26:19:40 | location.search | semmle.label | location.search | | tst.js:19:26:19:53 | locatio ... ring(1) | semmle.label | locatio ... ring(1) | -| tst.js:22:9:22:82 | source | semmle.label | source | +| tst.js:22:9:22:14 | source | semmle.label | source | | tst.js:22:18:22:41 | documen ... .search | semmle.label | documen ... .search | | tst.js:22:18:22:82 | documen ... , "$1") | semmle.label | documen ... , "$1") | | tst.js:24:18:24:23 | source | semmle.label | source | diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/ImproperCodeSanitization.expected b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/ImproperCodeSanitization.expected index 84c50efddc9..ff58ba1fedc 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/ImproperCodeSanitization.expected +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/ImproperCodeSanitization.expected @@ -14,8 +14,8 @@ edges | bad-code-sanitization.js:7:21:7:70 | `${name ... key])}` | bad-code-sanitization.js:7:5:7:14 | [post update] statements [ArrayElement] | provenance | | | bad-code-sanitization.js:7:31:7:43 | safeProp(key) | bad-code-sanitization.js:7:21:7:70 | `${name ... key])}` | provenance | | | bad-code-sanitization.js:8:27:8:36 | statements [ArrayElement] | bad-code-sanitization.js:8:27:8:46 | statements.join(';') | provenance | | -| bad-code-sanitization.js:63:11:63:55 | assignment | bad-code-sanitization.js:64:27:64:36 | assignment | provenance | | -| bad-code-sanitization.js:63:31:63:49 | JSON.stringify(key) | bad-code-sanitization.js:63:11:63:55 | assignment | provenance | | +| bad-code-sanitization.js:63:11:63:20 | assignment | bad-code-sanitization.js:64:27:64:36 | assignment | provenance | | +| bad-code-sanitization.js:63:31:63:49 | JSON.stringify(key) | bad-code-sanitization.js:63:11:63:20 | assignment | provenance | | nodes | bad-code-sanitization.js:2:12:2:90 | /^[_$a- ... key)}]` | semmle.label | /^[_$a- ... key)}]` | | bad-code-sanitization.js:2:69:2:87 | JSON.stringify(key) | semmle.label | JSON.stringify(key) | @@ -32,7 +32,7 @@ nodes | bad-code-sanitization.js:52:28:52:62 | JSON.st ... bble")) | semmle.label | JSON.st ... bble")) | | bad-code-sanitization.js:54:29:54:63 | JSON.st ... bble")) | semmle.label | JSON.st ... bble")) | | bad-code-sanitization.js:58:29:58:49 | JSON.st ... (taint) | semmle.label | JSON.st ... (taint) | -| bad-code-sanitization.js:63:11:63:55 | assignment | semmle.label | assignment | +| bad-code-sanitization.js:63:11:63:20 | assignment | semmle.label | assignment | | bad-code-sanitization.js:63:31:63:49 | JSON.stringify(key) | semmle.label | JSON.stringify(key) | | bad-code-sanitization.js:64:27:64:36 | assignment | semmle.label | assignment | subpaths diff --git a/javascript/ql/test/query-tests/Security/CWE-094/UnsafeDynamicMethodAccess/UnsafeDynamicMethodAccess.expected b/javascript/ql/test/query-tests/Security/CWE-094/UnsafeDynamicMethodAccess/UnsafeDynamicMethodAccess.expected index bddb2845709..f6a518629d2 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/UnsafeDynamicMethodAccess/UnsafeDynamicMethodAccess.expected +++ b/javascript/ql/test/query-tests/Security/CWE-094/UnsafeDynamicMethodAccess/UnsafeDynamicMethodAccess.expected @@ -7,19 +7,19 @@ | tst.js:21:5:21:29 | window[ ... e.name] | tst.js:3:37:3:38 | ev | tst.js:21:5:21:29 | window[ ... e.name] | This method is invoked using a $@, which may allow remote code execution. | tst.js:3:37:3:38 | ev | user-controlled value | edges | example.js:9:37:9:38 | ev | example.js:10:30:10:31 | ev | provenance | | -| example.js:10:9:10:37 | message | example.js:13:12:13:18 | message | provenance | | -| example.js:10:19:10:37 | JSON.parse(ev.data) | example.js:10:9:10:37 | message | provenance | | +| example.js:10:9:10:15 | message | example.js:13:12:13:18 | message | provenance | | +| example.js:10:19:10:37 | JSON.parse(ev.data) | example.js:10:9:10:15 | message | provenance | | | example.js:10:30:10:31 | ev | example.js:10:30:10:36 | ev.data | provenance | Config | | example.js:10:30:10:36 | ev.data | example.js:10:19:10:37 | JSON.parse(ev.data) | provenance | Config | | example.js:13:12:13:18 | message | example.js:13:12:13:23 | message.name | provenance | Config | | example.js:13:12:13:23 | message.name | example.js:13:5:13:24 | window[message.name] | provenance | Config | | tst.js:3:37:3:38 | ev | tst.js:4:30:4:31 | ev | provenance | | | tst.js:3:37:3:38 | ev | tst.js:15:12:15:13 | ev | provenance | | -| tst.js:4:9:4:37 | message | tst.js:5:12:5:18 | message | provenance | | -| tst.js:4:9:4:37 | message | tst.js:6:16:6:22 | message | provenance | | -| tst.js:4:9:4:37 | message | tst.js:11:7:11:13 | message | provenance | | -| tst.js:4:9:4:37 | message | tst.js:21:17:21:23 | message | provenance | | -| tst.js:4:19:4:37 | JSON.parse(ev.data) | tst.js:4:9:4:37 | message | provenance | | +| tst.js:4:9:4:15 | message | tst.js:5:12:5:18 | message | provenance | | +| tst.js:4:9:4:15 | message | tst.js:6:16:6:22 | message | provenance | | +| tst.js:4:9:4:15 | message | tst.js:11:7:11:13 | message | provenance | | +| tst.js:4:9:4:15 | message | tst.js:21:17:21:23 | message | provenance | | +| tst.js:4:19:4:37 | JSON.parse(ev.data) | tst.js:4:9:4:15 | message | provenance | | | tst.js:4:30:4:31 | ev | tst.js:4:30:4:36 | ev.data | provenance | Config | | tst.js:4:30:4:36 | ev.data | tst.js:4:19:4:37 | JSON.parse(ev.data) | provenance | Config | | tst.js:5:12:5:18 | message | tst.js:5:12:5:23 | message.name | provenance | Config | @@ -34,7 +34,7 @@ edges | tst.js:21:17:21:28 | message.name | tst.js:21:12:21:28 | '' + message.name | provenance | Config | nodes | example.js:9:37:9:38 | ev | semmle.label | ev | -| example.js:10:9:10:37 | message | semmle.label | message | +| example.js:10:9:10:15 | message | semmle.label | message | | example.js:10:19:10:37 | JSON.parse(ev.data) | semmle.label | JSON.parse(ev.data) | | example.js:10:30:10:31 | ev | semmle.label | ev | | example.js:10:30:10:36 | ev.data | semmle.label | ev.data | @@ -42,7 +42,7 @@ nodes | example.js:13:12:13:18 | message | semmle.label | message | | example.js:13:12:13:23 | message.name | semmle.label | message.name | | tst.js:3:37:3:38 | ev | semmle.label | ev | -| tst.js:4:9:4:37 | message | semmle.label | message | +| tst.js:4:9:4:15 | message | semmle.label | message | | tst.js:4:19:4:37 | JSON.parse(ev.data) | semmle.label | JSON.parse(ev.data) | | tst.js:4:30:4:31 | ev | semmle.label | ev | | tst.js:4:30:4:36 | ev.data | semmle.label | ev.data | diff --git a/javascript/ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteHtmlAttributeSanitization.expected b/javascript/ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteHtmlAttributeSanitization.expected index 162ff1c0599..3f1ac1685d7 100644 --- a/javascript/ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteHtmlAttributeSanitization.expected +++ b/javascript/ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteHtmlAttributeSanitization.expected @@ -13,8 +13,8 @@ | tst.js:303:10:303:34 | s().rep ... /g, '') | tst.js:303:10:303:34 | s().rep ... /g, '') | tst.js:303:10:303:34 | s().rep ... /g, '') | Cross-site scripting vulnerability as the output of $@ may contain single quotes when it reaches this attribute definition. | tst.js:303:10:303:34 | s().rep ... /g, '') | this final HTML sanitizer step | | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | Cross-site scripting vulnerability as the output of $@ may contain single quotes when it reaches this attribute definition. | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | this final HTML sanitizer step | edges -| tst.js:274:6:274:94 | arr | tst.js:275:9:275:11 | arr | provenance | | -| tst.js:274:12:274:94 | s().val ... g , '') | tst.js:274:6:274:94 | arr | provenance | | +| tst.js:274:6:274:8 | arr | tst.js:275:9:275:11 | arr | provenance | | +| tst.js:274:12:274:94 | s().val ... g , '') | tst.js:274:6:274:8 | arr | provenance | | | tst.js:275:9:275:11 | arr | tst.js:275:9:275:21 | arr.join(" ") | provenance | | nodes | tst.js:243:9:243:31 | s().rep ... ]/g,'') | semmle.label | s().rep ... ]/g,'') | @@ -24,7 +24,7 @@ nodes | tst.js:253:21:253:45 | s().rep ... /g, '') | semmle.label | s().rep ... /g, '') | | tst.js:254:32:254:56 | s().rep ... /g, '') | semmle.label | s().rep ... /g, '') | | tst.js:270:61:270:85 | s().rep ... /g, '') | semmle.label | s().rep ... /g, '') | -| tst.js:274:6:274:94 | arr | semmle.label | arr | +| tst.js:274:6:274:8 | arr | semmle.label | arr | | tst.js:274:12:274:94 | s().val ... g , '') | semmle.label | s().val ... g , '') | | tst.js:275:9:275:11 | arr | semmle.label | arr | | tst.js:275:9:275:21 | arr.join(" ") | semmle.label | arr.join(" ") | diff --git a/javascript/ql/test/query-tests/Security/CWE-117/LogInjection.expected b/javascript/ql/test/query-tests/Security/CWE-117/LogInjection.expected index 42417a6ac8d..6b192117593 100644 --- a/javascript/ql/test/query-tests/Security/CWE-117/LogInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-117/LogInjection.expected @@ -24,35 +24,35 @@ | logInjectionBad.js:129:42:129:50 | RegExp.$1 | logInjectionBad.js:128:30:128:36 | req.url | logInjectionBad.js:129:42:129:50 | RegExp.$1 | Log entry depends on a $@. | logInjectionBad.js:128:30:128:36 | req.url | user-provided value | edges | logInjectionBad.js:7:25:7:32 | username | logInjectionBad.js:8:38:8:45 | username | provenance | | -| logInjectionBad.js:19:9:19:36 | q | logInjectionBad.js:20:20:20:20 | q | provenance | | -| logInjectionBad.js:19:13:19:36 | url.par ... , true) | logInjectionBad.js:19:9:19:36 | q | provenance | | +| logInjectionBad.js:19:9:19:9 | q | logInjectionBad.js:20:20:20:20 | q | provenance | | +| logInjectionBad.js:19:13:19:36 | url.par ... , true) | logInjectionBad.js:19:9:19:9 | q | provenance | | | logInjectionBad.js:19:23:19:29 | req.url | logInjectionBad.js:19:13:19:36 | url.par ... , true) | provenance | | -| logInjectionBad.js:20:9:20:35 | username | logInjectionBad.js:22:34:22:41 | username | provenance | | -| logInjectionBad.js:20:9:20:35 | username | logInjectionBad.js:23:37:23:44 | username | provenance | | -| logInjectionBad.js:20:9:20:35 | username | logInjectionBad.js:24:35:24:42 | username | provenance | | -| logInjectionBad.js:20:9:20:35 | username | logInjectionBad.js:25:36:25:43 | username | provenance | | -| logInjectionBad.js:20:9:20:35 | username | logInjectionBad.js:28:24:28:31 | username | provenance | | -| logInjectionBad.js:20:20:20:20 | q | logInjectionBad.js:20:9:20:35 | username | provenance | | +| logInjectionBad.js:20:9:20:16 | username | logInjectionBad.js:22:34:22:41 | username | provenance | | +| logInjectionBad.js:20:9:20:16 | username | logInjectionBad.js:23:37:23:44 | username | provenance | | +| logInjectionBad.js:20:9:20:16 | username | logInjectionBad.js:24:35:24:42 | username | provenance | | +| logInjectionBad.js:20:9:20:16 | username | logInjectionBad.js:25:36:25:43 | username | provenance | | +| logInjectionBad.js:20:9:20:16 | username | logInjectionBad.js:28:24:28:31 | username | provenance | | +| logInjectionBad.js:20:20:20:20 | q | logInjectionBad.js:20:9:20:16 | username | provenance | | | logInjectionBad.js:22:34:22:41 | username | logInjectionBad.js:22:18:22:43 | `[INFO] ... rname}` | provenance | | | logInjectionBad.js:28:9:28:32 | exceptional return of check_u ... ername) | logInjectionBad.js:29:14:29:18 | error | provenance | | | logInjectionBad.js:28:24:28:31 | username | logInjectionBad.js:7:25:7:32 | username | provenance | | | logInjectionBad.js:28:24:28:31 | username | logInjectionBad.js:28:9:28:32 | exceptional return of check_u ... ername) | provenance | | | logInjectionBad.js:29:14:29:18 | error | logInjectionBad.js:30:42:30:46 | error | provenance | | | logInjectionBad.js:30:42:30:46 | error | logInjectionBad.js:30:23:30:49 | `[ERROR ... rror}"` | provenance | | -| logInjectionBad.js:46:9:46:36 | q | logInjectionBad.js:47:20:47:20 | q | provenance | | -| logInjectionBad.js:46:13:46:36 | url.par ... , true) | logInjectionBad.js:46:9:46:36 | q | provenance | | +| logInjectionBad.js:46:9:46:9 | q | logInjectionBad.js:47:20:47:20 | q | provenance | | +| logInjectionBad.js:46:13:46:36 | url.par ... , true) | logInjectionBad.js:46:9:46:9 | q | provenance | | | logInjectionBad.js:46:23:46:29 | req.url | logInjectionBad.js:46:13:46:36 | url.par ... , true) | provenance | | -| logInjectionBad.js:47:9:47:35 | username | logInjectionBad.js:49:46:49:53 | username | provenance | | -| logInjectionBad.js:47:9:47:35 | username | logInjectionBad.js:50:39:50:46 | username | provenance | | -| logInjectionBad.js:47:9:47:35 | username | logInjectionBad.js:51:48:51:55 | username | provenance | | -| logInjectionBad.js:47:9:47:35 | username | logInjectionBad.js:52:37:52:44 | username | provenance | | -| logInjectionBad.js:47:9:47:35 | username | logInjectionBad.js:53:27:53:34 | username | provenance | | -| logInjectionBad.js:47:9:47:35 | username | logInjectionBad.js:54:43:54:50 | username | provenance | | -| logInjectionBad.js:47:9:47:35 | username | logInjectionBad.js:55:48:55:55 | username | provenance | | -| logInjectionBad.js:47:9:47:35 | username | logInjectionBad.js:56:47:56:54 | username | provenance | | -| logInjectionBad.js:47:9:47:35 | username | logInjectionBad.js:57:40:57:47 | username | provenance | | -| logInjectionBad.js:47:9:47:35 | username | logInjectionBad.js:58:50:58:57 | username | provenance | | -| logInjectionBad.js:47:20:47:20 | q | logInjectionBad.js:47:9:47:35 | username | provenance | | +| logInjectionBad.js:47:9:47:16 | username | logInjectionBad.js:49:46:49:53 | username | provenance | | +| logInjectionBad.js:47:9:47:16 | username | logInjectionBad.js:50:39:50:46 | username | provenance | | +| logInjectionBad.js:47:9:47:16 | username | logInjectionBad.js:51:48:51:55 | username | provenance | | +| logInjectionBad.js:47:9:47:16 | username | logInjectionBad.js:52:37:52:44 | username | provenance | | +| logInjectionBad.js:47:9:47:16 | username | logInjectionBad.js:53:27:53:34 | username | provenance | | +| logInjectionBad.js:47:9:47:16 | username | logInjectionBad.js:54:43:54:50 | username | provenance | | +| logInjectionBad.js:47:9:47:16 | username | logInjectionBad.js:55:48:55:55 | username | provenance | | +| logInjectionBad.js:47:9:47:16 | username | logInjectionBad.js:56:47:56:54 | username | provenance | | +| logInjectionBad.js:47:9:47:16 | username | logInjectionBad.js:57:40:57:47 | username | provenance | | +| logInjectionBad.js:47:9:47:16 | username | logInjectionBad.js:58:50:58:57 | username | provenance | | +| logInjectionBad.js:47:20:47:20 | q | logInjectionBad.js:47:9:47:16 | username | provenance | | | logInjectionBad.js:49:46:49:53 | username | logInjectionBad.js:49:18:49:54 | ansiCol ... ername) | provenance | | | logInjectionBad.js:50:39:50:46 | username | logInjectionBad.js:50:18:50:47 | colors. ... ername) | provenance | | | logInjectionBad.js:51:27:51:56 | colors. ... ername) | logInjectionBad.js:51:18:51:61 | wrapAns ... e), 20) | provenance | | @@ -68,18 +68,18 @@ edges | logInjectionBad.js:57:40:57:47 | username | logInjectionBad.js:57:17:57:48 | chalk.u ... ername) | provenance | | | logInjectionBad.js:58:27:58:58 | chalk.u ... ername) | logInjectionBad.js:58:17:58:59 | stripAn ... rname)) | provenance | | | logInjectionBad.js:58:50:58:57 | username | logInjectionBad.js:58:27:58:58 | chalk.u ... ername) | provenance | | -| logInjectionBad.js:63:9:63:36 | q | logInjectionBad.js:64:20:64:20 | q | provenance | | -| logInjectionBad.js:63:13:63:36 | url.par ... , true) | logInjectionBad.js:63:9:63:36 | q | provenance | | +| logInjectionBad.js:63:9:63:9 | q | logInjectionBad.js:64:20:64:20 | q | provenance | | +| logInjectionBad.js:63:13:63:36 | url.par ... , true) | logInjectionBad.js:63:9:63:9 | q | provenance | | | logInjectionBad.js:63:23:63:29 | req.url | logInjectionBad.js:63:13:63:36 | url.par ... , true) | provenance | | -| logInjectionBad.js:64:9:64:35 | username | logInjectionBad.js:66:35:66:42 | username | provenance | | -| logInjectionBad.js:64:20:64:20 | q | logInjectionBad.js:64:9:64:35 | username | provenance | | +| logInjectionBad.js:64:9:64:16 | username | logInjectionBad.js:66:35:66:42 | username | provenance | | +| logInjectionBad.js:64:20:64:20 | q | logInjectionBad.js:64:9:64:16 | username | provenance | | | logInjectionBad.js:66:35:66:42 | username | logInjectionBad.js:66:17:66:43 | prettyj ... ername) | provenance | | -| logInjectionBad.js:72:9:72:36 | q | logInjectionBad.js:73:20:73:20 | q | provenance | | -| logInjectionBad.js:72:13:72:36 | url.par ... , true) | logInjectionBad.js:72:9:72:36 | q | provenance | | +| logInjectionBad.js:72:9:72:9 | q | logInjectionBad.js:73:20:73:20 | q | provenance | | +| logInjectionBad.js:72:13:72:36 | url.par ... , true) | logInjectionBad.js:72:9:72:9 | q | provenance | | | logInjectionBad.js:72:23:72:29 | req.url | logInjectionBad.js:72:13:72:36 | url.par ... , true) | provenance | | -| logInjectionBad.js:73:9:73:35 | username | logInjectionBad.js:75:15:75:22 | username | provenance | | -| logInjectionBad.js:73:9:73:35 | username | logInjectionBad.js:75:15:75:22 | username | provenance | | -| logInjectionBad.js:73:20:73:20 | q | logInjectionBad.js:73:9:73:35 | username | provenance | | +| logInjectionBad.js:73:9:73:16 | username | logInjectionBad.js:75:15:75:22 | username | provenance | | +| logInjectionBad.js:73:9:73:16 | username | logInjectionBad.js:75:15:75:22 | username | provenance | | +| logInjectionBad.js:73:20:73:20 | q | logInjectionBad.js:73:9:73:16 | username | provenance | | | logInjectionBad.js:75:15:75:22 | username | logInjectionBad.js:77:5:85:5 | functio ... ;\\n } [username] | provenance | | | logInjectionBad.js:75:15:75:22 | username | logInjectionBad.js:87:5:94:5 | functio ... ;\\n } [username] | provenance | | | logInjectionBad.js:75:15:75:22 | username | logInjectionBad.js:96:5:103:5 | functio ... ;\\n } [username] | provenance | | @@ -88,21 +88,21 @@ edges | logInjectionBad.js:87:5:94:5 | functio ... ;\\n } [username] | logInjectionBad.js:91:26:91:33 | username | provenance | | | logInjectionBad.js:96:5:103:5 | functio ... ;\\n } [username] | logInjectionBad.js:99:26:99:33 | username | provenance | | | logInjectionBad.js:105:5:118:5 | functio ... ;\\n } [username] | logInjectionBad.js:113:37:113:44 | username | provenance | | -| logInjectionBad.js:122:9:122:58 | username | logInjectionBad.js:123:20:123:27 | username | provenance | | -| logInjectionBad.js:122:20:122:43 | url.par ... , true) | logInjectionBad.js:122:9:122:58 | username | provenance | | +| logInjectionBad.js:122:9:122:16 | username | logInjectionBad.js:123:20:123:27 | username | provenance | | +| logInjectionBad.js:122:20:122:43 | url.par ... , true) | logInjectionBad.js:122:9:122:16 | username | provenance | | | logInjectionBad.js:122:30:122:36 | req.url | logInjectionBad.js:122:20:122:43 | url.par ... , true) | provenance | | -| logInjectionBad.js:123:9:123:46 | otherStr | logInjectionBad.js:124:17:124:24 | otherStr | provenance | | +| logInjectionBad.js:123:9:123:16 | otherStr | logInjectionBad.js:124:17:124:24 | otherStr | provenance | | | logInjectionBad.js:123:20:123:27 | username | logInjectionBad.js:123:20:123:43 | usernam ... (/.*/g) | provenance | | -| logInjectionBad.js:123:20:123:43 | usernam ... (/.*/g) | logInjectionBad.js:123:9:123:46 | otherStr | provenance | | +| logInjectionBad.js:123:20:123:43 | usernam ... (/.*/g) | logInjectionBad.js:123:9:123:16 | otherStr | provenance | | | logInjectionBad.js:128:20:128:43 | url.par ... , true) | logInjectionBad.js:129:42:129:50 | RegExp.$1 | provenance | | | logInjectionBad.js:128:30:128:36 | req.url | logInjectionBad.js:128:20:128:43 | url.par ... , true) | provenance | | nodes | logInjectionBad.js:7:25:7:32 | username | semmle.label | username | | logInjectionBad.js:8:38:8:45 | username | semmle.label | username | -| logInjectionBad.js:19:9:19:36 | q | semmle.label | q | +| logInjectionBad.js:19:9:19:9 | q | semmle.label | q | | logInjectionBad.js:19:13:19:36 | url.par ... , true) | semmle.label | url.par ... , true) | | logInjectionBad.js:19:23:19:29 | req.url | semmle.label | req.url | -| logInjectionBad.js:20:9:20:35 | username | semmle.label | username | +| logInjectionBad.js:20:9:20:16 | username | semmle.label | username | | logInjectionBad.js:20:20:20:20 | q | semmle.label | q | | logInjectionBad.js:22:18:22:43 | `[INFO] ... rname}` | semmle.label | `[INFO] ... rname}` | | logInjectionBad.js:22:34:22:41 | username | semmle.label | username | @@ -114,10 +114,10 @@ nodes | logInjectionBad.js:29:14:29:18 | error | semmle.label | error | | logInjectionBad.js:30:23:30:49 | `[ERROR ... rror}"` | semmle.label | `[ERROR ... rror}"` | | logInjectionBad.js:30:42:30:46 | error | semmle.label | error | -| logInjectionBad.js:46:9:46:36 | q | semmle.label | q | +| logInjectionBad.js:46:9:46:9 | q | semmle.label | q | | logInjectionBad.js:46:13:46:36 | url.par ... , true) | semmle.label | url.par ... , true) | | logInjectionBad.js:46:23:46:29 | req.url | semmle.label | req.url | -| logInjectionBad.js:47:9:47:35 | username | semmle.label | username | +| logInjectionBad.js:47:9:47:16 | username | semmle.label | username | | logInjectionBad.js:47:20:47:20 | q | semmle.label | q | | logInjectionBad.js:49:18:49:54 | ansiCol ... ername) | semmle.label | ansiCol ... ername) | | logInjectionBad.js:49:46:49:53 | username | semmle.label | username | @@ -144,17 +144,17 @@ nodes | logInjectionBad.js:58:17:58:59 | stripAn ... rname)) | semmle.label | stripAn ... rname)) | | logInjectionBad.js:58:27:58:58 | chalk.u ... ername) | semmle.label | chalk.u ... ername) | | logInjectionBad.js:58:50:58:57 | username | semmle.label | username | -| logInjectionBad.js:63:9:63:36 | q | semmle.label | q | +| logInjectionBad.js:63:9:63:9 | q | semmle.label | q | | logInjectionBad.js:63:13:63:36 | url.par ... , true) | semmle.label | url.par ... , true) | | logInjectionBad.js:63:23:63:29 | req.url | semmle.label | req.url | -| logInjectionBad.js:64:9:64:35 | username | semmle.label | username | +| logInjectionBad.js:64:9:64:16 | username | semmle.label | username | | logInjectionBad.js:64:20:64:20 | q | semmle.label | q | | logInjectionBad.js:66:17:66:43 | prettyj ... ername) | semmle.label | prettyj ... ername) | | logInjectionBad.js:66:35:66:42 | username | semmle.label | username | -| logInjectionBad.js:72:9:72:36 | q | semmle.label | q | +| logInjectionBad.js:72:9:72:9 | q | semmle.label | q | | logInjectionBad.js:72:13:72:36 | url.par ... , true) | semmle.label | url.par ... , true) | | logInjectionBad.js:72:23:72:29 | req.url | semmle.label | req.url | -| logInjectionBad.js:73:9:73:35 | username | semmle.label | username | +| logInjectionBad.js:73:9:73:16 | username | semmle.label | username | | logInjectionBad.js:73:20:73:20 | q | semmle.label | q | | logInjectionBad.js:75:15:75:22 | username | semmle.label | username | | logInjectionBad.js:75:15:75:22 | username | semmle.label | username | @@ -166,10 +166,10 @@ nodes | logInjectionBad.js:99:26:99:33 | username | semmle.label | username | | logInjectionBad.js:105:5:118:5 | functio ... ;\\n } [username] | semmle.label | functio ... ;\\n } [username] | | logInjectionBad.js:113:37:113:44 | username | semmle.label | username | -| logInjectionBad.js:122:9:122:58 | username | semmle.label | username | +| logInjectionBad.js:122:9:122:16 | username | semmle.label | username | | logInjectionBad.js:122:20:122:43 | url.par ... , true) | semmle.label | url.par ... , true) | | logInjectionBad.js:122:30:122:36 | req.url | semmle.label | req.url | -| logInjectionBad.js:123:9:123:46 | otherStr | semmle.label | otherStr | +| logInjectionBad.js:123:9:123:16 | otherStr | semmle.label | otherStr | | logInjectionBad.js:123:20:123:27 | username | semmle.label | username | | logInjectionBad.js:123:20:123:43 | usernam ... (/.*/g) | semmle.label | usernam ... (/.*/g) | | logInjectionBad.js:124:17:124:24 | otherStr | semmle.label | otherStr | diff --git a/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.expected b/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.expected index bde27032d4f..74324c0ebcf 100644 --- a/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.expected +++ b/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.expected @@ -13,28 +13,28 @@ | sentAsHeaders.js:14:20:19:9 | {\\n ... } | sentAsHeaders.js:10:79:10:84 | buffer | sentAsHeaders.js:14:20:19:9 | {\\n ... } | Outbound network request depends on $@. | sentAsHeaders.js:10:79:10:84 | buffer | file data | | sentAsHeaders.js:20:20:25:9 | {\\n ... } | sentAsHeaders.js:10:79:10:84 | buffer | sentAsHeaders.js:20:20:25:9 | {\\n ... } | Outbound network request depends on $@. | sentAsHeaders.js:10:79:10:84 | buffer | file data | edges -| FileAccessToHttp.js:4:5:4:47 | content | FileAccessToHttp.js:9:23:9:29 | content | provenance | | -| FileAccessToHttp.js:4:15:4:47 | fs.read ... "utf8") | FileAccessToHttp.js:4:5:4:47 | content | provenance | | +| FileAccessToHttp.js:4:5:4:11 | content | FileAccessToHttp.js:9:23:9:29 | content | provenance | | +| FileAccessToHttp.js:4:15:4:47 | fs.read ... "utf8") | FileAccessToHttp.js:4:5:4:11 | content | provenance | | | FileAccessToHttp.js:9:12:9:31 | { Referer: content } [Referer] | FileAccessToHttp.js:5:11:10:1 | {\\n hos ... ent }\\n} | provenance | | | FileAccessToHttp.js:9:23:9:29 | content | FileAccessToHttp.js:9:12:9:31 | { Referer: content } [Referer] | provenance | | -| FileAccessToHttp.js:16:11:16:56 | content | FileAccessToHttp.js:22:27:22:33 | content | provenance | | -| FileAccessToHttp.js:16:21:16:56 | await f ... "utf8") | FileAccessToHttp.js:16:11:16:56 | content | provenance | | +| FileAccessToHttp.js:16:11:16:17 | content | FileAccessToHttp.js:22:27:22:33 | content | provenance | | +| FileAccessToHttp.js:16:21:16:56 | await f ... "utf8") | FileAccessToHttp.js:16:11:16:17 | content | provenance | | | FileAccessToHttp.js:22:16:22:35 | { Referer: content } [Referer] | FileAccessToHttp.js:18:15:23:5 | {\\n ... }\\n } | provenance | | | FileAccessToHttp.js:22:27:22:33 | content | FileAccessToHttp.js:22:16:22:35 | { Referer: content } [Referer] | provenance | | -| FileAccessToHttp.js:34:9:34:57 | buffer | FileAccessToHttp.js:40:25:40:30 | buffer | provenance | | -| FileAccessToHttp.js:34:18:34:57 | [Buffer ... (1024)] | FileAccessToHttp.js:34:9:34:57 | buffer | provenance | | +| FileAccessToHttp.js:34:9:34:14 | buffer | FileAccessToHttp.js:40:25:40:30 | buffer | provenance | | +| FileAccessToHttp.js:34:18:34:57 | [Buffer ... (1024)] | FileAccessToHttp.js:34:9:34:14 | buffer | provenance | | | FileAccessToHttp.js:40:14:40:32 | { Referer: buffer } [Referer] | FileAccessToHttp.js:36:13:41:3 | {\\n h ... r }\\n } | provenance | | | FileAccessToHttp.js:40:25:40:30 | buffer | FileAccessToHttp.js:40:14:40:32 | { Referer: buffer } [Referer] | provenance | | -| FileAccessToHttp.js:43:9:43:36 | buffer1 | FileAccessToHttp.js:49:25:49:31 | buffer1 | provenance | | -| FileAccessToHttp.js:43:19:43:36 | Buffer.alloc(1024) | FileAccessToHttp.js:43:9:43:36 | buffer1 | provenance | | +| FileAccessToHttp.js:43:9:43:15 | buffer1 | FileAccessToHttp.js:49:25:49:31 | buffer1 | provenance | | +| FileAccessToHttp.js:43:19:43:36 | Buffer.alloc(1024) | FileAccessToHttp.js:43:9:43:15 | buffer1 | provenance | | | FileAccessToHttp.js:49:14:49:65 | { Refer ... ing() } [Referer] | FileAccessToHttp.js:45:13:50:3 | {\\n h ... ) }\\n } | provenance | | | FileAccessToHttp.js:49:25:49:31 | buffer1 | FileAccessToHttp.js:49:25:49:52 | buffer1 ... sRead1) | provenance | | | FileAccessToHttp.js:49:25:49:31 | buffer1 | FileAccessToHttp.js:49:25:49:52 | buffer1 ... sRead1) [ArrayElement] | provenance | | | FileAccessToHttp.js:49:25:49:52 | buffer1 ... sRead1) | FileAccessToHttp.js:49:25:49:63 | buffer1 ... tring() | provenance | | | FileAccessToHttp.js:49:25:49:52 | buffer1 ... sRead1) [ArrayElement] | FileAccessToHttp.js:49:25:49:63 | buffer1 ... tring() | provenance | | | FileAccessToHttp.js:49:25:49:63 | buffer1 ... tring() | FileAccessToHttp.js:49:14:49:65 | { Refer ... ing() } [Referer] | provenance | | -| FileAccessToHttp.js:52:9:52:36 | buffer2 | FileAccessToHttp.js:53:17:53:23 | buffer2 | provenance | | -| FileAccessToHttp.js:52:19:52:36 | Buffer.alloc(1024) | FileAccessToHttp.js:52:9:52:36 | buffer2 | provenance | | +| FileAccessToHttp.js:52:9:52:15 | buffer2 | FileAccessToHttp.js:53:17:53:23 | buffer2 | provenance | | +| FileAccessToHttp.js:52:19:52:36 | Buffer.alloc(1024) | FileAccessToHttp.js:52:9:52:15 | buffer2 | provenance | | | FileAccessToHttp.js:53:17:53:23 | buffer2 | FileAccessToHttp.js:58:27:58:33 | buffer2 | provenance | | | FileAccessToHttp.js:58:16:58:67 | { Refer ... ing() } [Referer] | FileAccessToHttp.js:54:15:59:5 | {\\n ... }\\n } | provenance | | | FileAccessToHttp.js:58:27:58:33 | buffer2 | FileAccessToHttp.js:58:27:58:54 | buffer2 ... sRead2) | provenance | | @@ -42,28 +42,28 @@ edges | FileAccessToHttp.js:58:27:58:54 | buffer2 ... sRead2) | FileAccessToHttp.js:58:27:58:65 | buffer2 ... tring() | provenance | | | FileAccessToHttp.js:58:27:58:54 | buffer2 ... sRead2) [ArrayElement] | FileAccessToHttp.js:58:27:58:65 | buffer2 ... tring() | provenance | | | FileAccessToHttp.js:58:27:58:65 | buffer2 ... tring() | FileAccessToHttp.js:58:16:58:67 | { Refer ... ing() } [Referer] | provenance | | -| bufferRead.js:12:13:12:43 | buffer | bufferRead.js:13:21:13:26 | buffer | provenance | | -| bufferRead.js:12:13:12:43 | buffer | bufferRead.js:13:32:13:37 | buffer | provenance | | -| bufferRead.js:12:22:12:43 | new Buf ... s.size) | bufferRead.js:12:13:12:43 | buffer | provenance | | +| bufferRead.js:12:13:12:18 | buffer | bufferRead.js:13:21:13:26 | buffer | provenance | | +| bufferRead.js:12:13:12:18 | buffer | bufferRead.js:13:32:13:37 | buffer | provenance | | +| bufferRead.js:12:22:12:43 | new Buf ... s.size) | bufferRead.js:12:13:12:18 | buffer | provenance | | | bufferRead.js:13:21:13:26 | buffer | bufferRead.js:13:32:13:37 | buffer | provenance | | | bufferRead.js:13:32:13:37 | buffer | bufferRead.js:15:26:15:31 | buffer | provenance | | -| bufferRead.js:15:15:15:62 | postData | bufferRead.js:32:21:32:28 | postData | provenance | | +| bufferRead.js:15:15:15:22 | postData | bufferRead.js:32:21:32:28 | postData | provenance | | | bufferRead.js:15:26:15:31 | buffer | bufferRead.js:15:26:15:62 | buffer. ... esRead) | provenance | | -| bufferRead.js:15:26:15:62 | buffer. ... esRead) | bufferRead.js:15:15:15:62 | postData | provenance | | +| bufferRead.js:15:26:15:62 | buffer. ... esRead) | bufferRead.js:15:15:15:22 | postData | provenance | | | googlecompiler.js:7:19:7:28 | codestring | googlecompiler.js:14:21:14:30 | codestring | provenance | | -| googlecompiler.js:9:7:15:4 | post_data | googlecompiler.js:37:18:37:26 | post_data | provenance | | -| googlecompiler.js:9:19:15:4 | queryst ... dy\\n }) | googlecompiler.js:9:7:15:4 | post_data | provenance | | +| googlecompiler.js:9:7:9:15 | post_data | googlecompiler.js:37:18:37:26 | post_data | provenance | | +| googlecompiler.js:9:19:15:4 | queryst ... dy\\n }) | googlecompiler.js:9:7:9:15 | post_data | provenance | | | googlecompiler.js:9:41:15:3 | {\\n ... ody\\n } [js_code] | googlecompiler.js:9:19:15:4 | queryst ... dy\\n }) | provenance | | | googlecompiler.js:14:21:14:30 | codestring | googlecompiler.js:9:41:15:3 | {\\n ... ody\\n } [js_code] | provenance | | | googlecompiler.js:43:54:43:57 | data | googlecompiler.js:55:14:55:17 | data | provenance | | | googlecompiler.js:55:14:55:17 | data | googlecompiler.js:7:19:7:28 | codestring | provenance | | -| readFileSync.js:5:5:5:39 | data | readFileSync.js:7:11:7:14 | data | provenance | | -| readFileSync.js:5:12:5:39 | fs.read ... t.txt") | readFileSync.js:5:5:5:39 | data | provenance | | -| readFileSync.js:7:7:7:25 | s | readFileSync.js:25:18:25:18 | s | provenance | | +| readFileSync.js:5:5:5:8 | data | readFileSync.js:7:11:7:14 | data | provenance | | +| readFileSync.js:5:12:5:39 | fs.read ... t.txt") | readFileSync.js:5:5:5:8 | data | provenance | | +| readFileSync.js:7:7:7:7 | s | readFileSync.js:25:18:25:18 | s | provenance | | | readFileSync.js:7:11:7:14 | data | readFileSync.js:7:11:7:25 | data.toString() | provenance | | -| readFileSync.js:7:11:7:25 | data.toString() | readFileSync.js:7:7:7:25 | s | provenance | | -| readStreamRead.js:13:13:13:35 | chunk | readStreamRead.js:29:19:29:23 | chunk | provenance | | -| readStreamRead.js:13:21:13:35 | readable.read() | readStreamRead.js:13:13:13:35 | chunk | provenance | | +| readFileSync.js:7:11:7:25 | data.toString() | readFileSync.js:7:7:7:7 | s | provenance | | +| readStreamRead.js:13:13:13:17 | chunk | readStreamRead.js:29:19:29:23 | chunk | provenance | | +| readStreamRead.js:13:21:13:35 | readable.read() | readStreamRead.js:13:13:13:17 | chunk | provenance | | | request.js:6:19:6:26 | jsonData | request.js:8:12:8:19 | jsonData | provenance | | | request.js:8:12:8:19 | jsonData | request.js:8:11:8:20 | {jsonData} | provenance | | | request.js:13:18:13:24 | xmlData | request.js:22:11:22:17 | xmlData | provenance | | @@ -73,14 +73,14 @@ edges | request.js:43:51:43:54 | data | request.js:50:13:50:16 | data | provenance | | | request.js:50:13:50:16 | data | request.js:13:18:13:24 | xmlData | provenance | | | sentAsHeaders.js:10:79:10:84 | buffer | sentAsHeaders.js:11:23:11:28 | buffer | provenance | | -| sentAsHeaders.js:11:13:11:59 | content | sentAsHeaders.js:12:19:12:25 | content | provenance | | +| sentAsHeaders.js:11:13:11:19 | content | sentAsHeaders.js:12:19:12:25 | content | provenance | | | sentAsHeaders.js:11:23:11:28 | buffer | sentAsHeaders.js:11:23:11:59 | buffer. ... esRead) | provenance | | -| sentAsHeaders.js:11:23:11:59 | buffer. ... esRead) | sentAsHeaders.js:11:13:11:59 | content | provenance | | -| sentAsHeaders.js:12:9:12:81 | content | sentAsHeaders.js:18:47:18:53 | content | provenance | | -| sentAsHeaders.js:12:9:12:81 | content | sentAsHeaders.js:24:47:24:53 | content | provenance | | +| sentAsHeaders.js:11:23:11:59 | buffer. ... esRead) | sentAsHeaders.js:11:13:11:19 | content | provenance | | +| sentAsHeaders.js:12:9:12:15 | content | sentAsHeaders.js:18:47:18:53 | content | provenance | | +| sentAsHeaders.js:12:9:12:15 | content | sentAsHeaders.js:24:47:24:53 | content | provenance | | | sentAsHeaders.js:12:19:12:25 | content | sentAsHeaders.js:12:19:12:74 | content ... =", "") | provenance | | | sentAsHeaders.js:12:19:12:74 | content ... =", "") | sentAsHeaders.js:12:19:12:81 | content ... .trim() | provenance | | -| sentAsHeaders.js:12:19:12:81 | content ... .trim() | sentAsHeaders.js:12:9:12:81 | content | provenance | | +| sentAsHeaders.js:12:19:12:81 | content ... .trim() | sentAsHeaders.js:12:9:12:15 | content | provenance | | | sentAsHeaders.js:18:20:18:55 | { Refer ... ntent } [Referer] | sentAsHeaders.js:14:20:19:9 | {\\n ... } | provenance | | | sentAsHeaders.js:18:31:18:53 | "http:/ ... content | sentAsHeaders.js:18:20:18:55 | { Refer ... ntent } [Referer] | provenance | | | sentAsHeaders.js:18:47:18:53 | content | sentAsHeaders.js:18:31:18:53 | "http:/ ... content | provenance | | @@ -88,22 +88,22 @@ edges | sentAsHeaders.js:24:31:24:53 | "http:/ ... content | sentAsHeaders.js:24:20:24:55 | { Refer ... ntent } [Referer] | provenance | | | sentAsHeaders.js:24:47:24:53 | content | sentAsHeaders.js:24:31:24:53 | "http:/ ... content | provenance | | nodes -| FileAccessToHttp.js:4:5:4:47 | content | semmle.label | content | +| FileAccessToHttp.js:4:5:4:11 | content | semmle.label | content | | FileAccessToHttp.js:4:15:4:47 | fs.read ... "utf8") | semmle.label | fs.read ... "utf8") | | FileAccessToHttp.js:5:11:10:1 | {\\n hos ... ent }\\n} | semmle.label | {\\n hos ... ent }\\n} | | FileAccessToHttp.js:9:12:9:31 | { Referer: content } [Referer] | semmle.label | { Referer: content } [Referer] | | FileAccessToHttp.js:9:23:9:29 | content | semmle.label | content | -| FileAccessToHttp.js:16:11:16:56 | content | semmle.label | content | +| FileAccessToHttp.js:16:11:16:17 | content | semmle.label | content | | FileAccessToHttp.js:16:21:16:56 | await f ... "utf8") | semmle.label | await f ... "utf8") | | FileAccessToHttp.js:18:15:23:5 | {\\n ... }\\n } | semmle.label | {\\n ... }\\n } | | FileAccessToHttp.js:22:16:22:35 | { Referer: content } [Referer] | semmle.label | { Referer: content } [Referer] | | FileAccessToHttp.js:22:27:22:33 | content | semmle.label | content | -| FileAccessToHttp.js:34:9:34:57 | buffer | semmle.label | buffer | +| FileAccessToHttp.js:34:9:34:14 | buffer | semmle.label | buffer | | FileAccessToHttp.js:34:18:34:57 | [Buffer ... (1024)] | semmle.label | [Buffer ... (1024)] | | FileAccessToHttp.js:36:13:41:3 | {\\n h ... r }\\n } | semmle.label | {\\n h ... r }\\n } | | FileAccessToHttp.js:40:14:40:32 | { Referer: buffer } [Referer] | semmle.label | { Referer: buffer } [Referer] | | FileAccessToHttp.js:40:25:40:30 | buffer | semmle.label | buffer | -| FileAccessToHttp.js:43:9:43:36 | buffer1 | semmle.label | buffer1 | +| FileAccessToHttp.js:43:9:43:15 | buffer1 | semmle.label | buffer1 | | FileAccessToHttp.js:43:19:43:36 | Buffer.alloc(1024) | semmle.label | Buffer.alloc(1024) | | FileAccessToHttp.js:45:13:50:3 | {\\n h ... ) }\\n } | semmle.label | {\\n h ... ) }\\n } | | FileAccessToHttp.js:49:14:49:65 | { Refer ... ing() } [Referer] | semmle.label | { Refer ... ing() } [Referer] | @@ -111,7 +111,7 @@ nodes | FileAccessToHttp.js:49:25:49:52 | buffer1 ... sRead1) | semmle.label | buffer1 ... sRead1) | | FileAccessToHttp.js:49:25:49:52 | buffer1 ... sRead1) [ArrayElement] | semmle.label | buffer1 ... sRead1) [ArrayElement] | | FileAccessToHttp.js:49:25:49:63 | buffer1 ... tring() | semmle.label | buffer1 ... tring() | -| FileAccessToHttp.js:52:9:52:36 | buffer2 | semmle.label | buffer2 | +| FileAccessToHttp.js:52:9:52:15 | buffer2 | semmle.label | buffer2 | | FileAccessToHttp.js:52:19:52:36 | Buffer.alloc(1024) | semmle.label | Buffer.alloc(1024) | | FileAccessToHttp.js:53:17:53:23 | buffer2 | semmle.label | buffer2 | | FileAccessToHttp.js:54:15:59:5 | {\\n ... }\\n } | semmle.label | {\\n ... }\\n } | @@ -120,29 +120,29 @@ nodes | FileAccessToHttp.js:58:27:58:54 | buffer2 ... sRead2) | semmle.label | buffer2 ... sRead2) | | FileAccessToHttp.js:58:27:58:54 | buffer2 ... sRead2) [ArrayElement] | semmle.label | buffer2 ... sRead2) [ArrayElement] | | FileAccessToHttp.js:58:27:58:65 | buffer2 ... tring() | semmle.label | buffer2 ... tring() | -| bufferRead.js:12:13:12:43 | buffer | semmle.label | buffer | +| bufferRead.js:12:13:12:18 | buffer | semmle.label | buffer | | bufferRead.js:12:22:12:43 | new Buf ... s.size) | semmle.label | new Buf ... s.size) | | bufferRead.js:13:21:13:26 | buffer | semmle.label | buffer | | bufferRead.js:13:32:13:37 | buffer | semmle.label | buffer | -| bufferRead.js:15:15:15:62 | postData | semmle.label | postData | +| bufferRead.js:15:15:15:22 | postData | semmle.label | postData | | bufferRead.js:15:26:15:31 | buffer | semmle.label | buffer | | bufferRead.js:15:26:15:62 | buffer. ... esRead) | semmle.label | buffer. ... esRead) | | bufferRead.js:32:21:32:28 | postData | semmle.label | postData | | googlecompiler.js:7:19:7:28 | codestring | semmle.label | codestring | -| googlecompiler.js:9:7:15:4 | post_data | semmle.label | post_data | +| googlecompiler.js:9:7:9:15 | post_data | semmle.label | post_data | | googlecompiler.js:9:19:15:4 | queryst ... dy\\n }) | semmle.label | queryst ... dy\\n }) | | googlecompiler.js:9:41:15:3 | {\\n ... ody\\n } [js_code] | semmle.label | {\\n ... ody\\n } [js_code] | | googlecompiler.js:14:21:14:30 | codestring | semmle.label | codestring | | googlecompiler.js:37:18:37:26 | post_data | semmle.label | post_data | | googlecompiler.js:43:54:43:57 | data | semmle.label | data | | googlecompiler.js:55:14:55:17 | data | semmle.label | data | -| readFileSync.js:5:5:5:39 | data | semmle.label | data | +| readFileSync.js:5:5:5:8 | data | semmle.label | data | | readFileSync.js:5:12:5:39 | fs.read ... t.txt") | semmle.label | fs.read ... t.txt") | -| readFileSync.js:7:7:7:25 | s | semmle.label | s | +| readFileSync.js:7:7:7:7 | s | semmle.label | s | | readFileSync.js:7:11:7:14 | data | semmle.label | data | | readFileSync.js:7:11:7:25 | data.toString() | semmle.label | data.toString() | | readFileSync.js:25:18:25:18 | s | semmle.label | s | -| readStreamRead.js:13:13:13:35 | chunk | semmle.label | chunk | +| readStreamRead.js:13:13:13:17 | chunk | semmle.label | chunk | | readStreamRead.js:13:21:13:35 | readable.read() | semmle.label | readable.read() | | readStreamRead.js:29:19:29:23 | chunk | semmle.label | chunk | | request.js:6:19:6:26 | jsonData | semmle.label | jsonData | @@ -156,10 +156,10 @@ nodes | request.js:43:51:43:54 | data | semmle.label | data | | request.js:50:13:50:16 | data | semmle.label | data | | sentAsHeaders.js:10:79:10:84 | buffer | semmle.label | buffer | -| sentAsHeaders.js:11:13:11:59 | content | semmle.label | content | +| sentAsHeaders.js:11:13:11:19 | content | semmle.label | content | | sentAsHeaders.js:11:23:11:28 | buffer | semmle.label | buffer | | sentAsHeaders.js:11:23:11:59 | buffer. ... esRead) | semmle.label | buffer. ... esRead) | -| sentAsHeaders.js:12:9:12:81 | content | semmle.label | content | +| sentAsHeaders.js:12:9:12:15 | content | semmle.label | content | | sentAsHeaders.js:12:19:12:25 | content | semmle.label | content | | sentAsHeaders.js:12:19:12:74 | content ... =", "") | semmle.label | content ... =", "") | | sentAsHeaders.js:12:19:12:81 | content ... .trim() | semmle.label | content ... .trim() | diff --git a/javascript/ql/test/query-tests/Security/CWE-312/BuildArtifactLeak.expected b/javascript/ql/test/query-tests/Security/CWE-312/BuildArtifactLeak.expected index 37c0773b697..2e8c7462e2d 100644 --- a/javascript/ql/test/query-tests/Security/CWE-312/BuildArtifactLeak.expected +++ b/javascript/ql/test/query-tests/Security/CWE-312/BuildArtifactLeak.expected @@ -1,14 +1,14 @@ edges | build-leaks.js:5:20:5:46 | JSON.st ... ss.env) | build-leaks.js:4:39:6:1 | {\\n " ... leak]\\n} | provenance | | | build-leaks.js:5:35:5:45 | process.env | build-leaks.js:5:20:5:46 | JSON.st ... ss.env) | provenance | | -| build-leaks.js:13:11:19:10 | raw | build-leaks.js:22:36:22:38 | raw | provenance | | -| build-leaks.js:13:17:19:10 | Object. ... }) | build-leaks.js:13:11:19:10 | raw | provenance | | +| build-leaks.js:13:11:13:13 | raw | build-leaks.js:22:36:22:38 | raw | provenance | | +| build-leaks.js:13:17:19:10 | Object. ... }) | build-leaks.js:13:11:13:13 | raw | provenance | | | build-leaks.js:15:13:15:15 | [post update] env | build-leaks.js:16:20:16:22 | env | provenance | | | build-leaks.js:15:24:15:34 | process.env | build-leaks.js:15:13:15:15 | [post update] env | provenance | Config | | build-leaks.js:16:20:16:22 | env | build-leaks.js:13:17:19:10 | Object. ... }) | provenance | | | build-leaks.js:16:20:16:22 | env | build-leaks.js:22:49:22:51 | env | provenance | | -| build-leaks.js:21:11:26:5 | stringifed [process.env] | build-leaks.js:30:22:30:31 | stringifed [process.env] | provenance | | -| build-leaks.js:21:24:26:5 | {\\n ... )\\n } [process.env] | build-leaks.js:21:11:26:5 | stringifed [process.env] | provenance | | +| build-leaks.js:21:11:21:20 | stringifed [process.env] | build-leaks.js:30:22:30:31 | stringifed [process.env] | provenance | | +| build-leaks.js:21:24:26:5 | {\\n ... )\\n } [process.env] | build-leaks.js:21:11:21:20 | stringifed [process.env] | provenance | | | build-leaks.js:22:24:25:14 | Object. ... }, {}) | build-leaks.js:21:24:26:5 | {\\n ... )\\n } [process.env] | provenance | | | build-leaks.js:22:36:22:38 | raw | build-leaks.js:22:24:25:14 | Object. ... }, {}) | provenance | Config | | build-leaks.js:22:36:22:38 | raw | build-leaks.js:22:49:22:51 | env | provenance | Config | @@ -19,20 +19,20 @@ edges | build-leaks.js:28:12:31:5 | {\\n ... d\\n } [stringified, process.env] | build-leaks.js:34:26:34:45 | getEnv('production') [stringified, process.env] | provenance | | | build-leaks.js:30:22:30:31 | stringifed [process.env] | build-leaks.js:28:12:31:5 | {\\n ... d\\n } [stringified, process.env] | provenance | | | build-leaks.js:34:26:34:45 | getEnv('production') [stringified, process.env] | build-leaks.js:34:26:34:57 | getEnv( ... ngified | provenance | | -| build-leaks.js:40:9:40:60 | pw | build-leaks.js:41:82:41:83 | pw | provenance | | -| build-leaks.js:40:14:40:60 | url.par ... assword | build-leaks.js:40:9:40:60 | pw | provenance | | +| build-leaks.js:40:9:40:10 | pw | build-leaks.js:41:82:41:83 | pw | provenance | | +| build-leaks.js:40:14:40:60 | url.par ... assword | build-leaks.js:40:9:40:10 | pw | provenance | | | build-leaks.js:41:67:41:84 | JSON.stringify(pw) | build-leaks.js:41:43:41:86 | { "proc ... y(pw) } | provenance | | | build-leaks.js:41:82:41:83 | pw | build-leaks.js:41:67:41:84 | JSON.stringify(pw) | provenance | | nodes | build-leaks.js:4:39:6:1 | {\\n " ... leak]\\n} | semmle.label | {\\n " ... leak]\\n} | | build-leaks.js:5:20:5:46 | JSON.st ... ss.env) | semmle.label | JSON.st ... ss.env) | | build-leaks.js:5:35:5:45 | process.env | semmle.label | process.env | -| build-leaks.js:13:11:19:10 | raw | semmle.label | raw | +| build-leaks.js:13:11:13:13 | raw | semmle.label | raw | | build-leaks.js:13:17:19:10 | Object. ... }) | semmle.label | Object. ... }) | | build-leaks.js:15:13:15:15 | [post update] env | semmle.label | [post update] env | | build-leaks.js:15:24:15:34 | process.env | semmle.label | process.env | | build-leaks.js:16:20:16:22 | env | semmle.label | env | -| build-leaks.js:21:11:26:5 | stringifed [process.env] | semmle.label | stringifed [process.env] | +| build-leaks.js:21:11:21:20 | stringifed [process.env] | semmle.label | stringifed [process.env] | | build-leaks.js:21:24:26:5 | {\\n ... )\\n } [process.env] | semmle.label | {\\n ... )\\n } [process.env] | | build-leaks.js:22:24:25:14 | Object. ... }, {}) | semmle.label | Object. ... }, {}) | | build-leaks.js:22:36:22:38 | raw | semmle.label | raw | @@ -45,7 +45,7 @@ nodes | build-leaks.js:30:22:30:31 | stringifed [process.env] | semmle.label | stringifed [process.env] | | build-leaks.js:34:26:34:45 | getEnv('production') [stringified, process.env] | semmle.label | getEnv('production') [stringified, process.env] | | build-leaks.js:34:26:34:57 | getEnv( ... ngified | semmle.label | getEnv( ... ngified | -| build-leaks.js:40:9:40:60 | pw | semmle.label | pw | +| build-leaks.js:40:9:40:10 | pw | semmle.label | pw | | build-leaks.js:40:14:40:60 | url.par ... assword | semmle.label | url.par ... assword | | build-leaks.js:41:43:41:86 | { "proc ... y(pw) } | semmle.label | { "proc ... y(pw) } | | build-leaks.js:41:67:41:84 | JSON.stringify(pw) | semmle.label | JSON.stringify(pw) | diff --git a/javascript/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected b/javascript/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected index 491c4359fe7..af9e0f485c2 100644 --- a/javascript/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected +++ b/javascript/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected @@ -46,18 +46,18 @@ edges | passwords.js:10:11:10:18 | password | passwords.js:7:20:7:20 | x | provenance | | | passwords.js:14:31:14:38 | password | passwords.js:14:17:14:38 | name + ... assword | provenance | | | passwords.js:16:29:16:36 | password | passwords.js:16:17:16:38 | `${name ... sword}` | provenance | | -| passwords.js:18:9:20:5 | obj1 [password] | passwords.js:21:17:21:20 | obj1 | provenance | | -| passwords.js:18:16:20:5 | {\\n ... ]\\n } [password] | passwords.js:18:9:20:5 | obj1 [password] | provenance | | +| passwords.js:18:9:18:12 | obj1 [password] | passwords.js:21:17:21:20 | obj1 | provenance | | +| passwords.js:18:16:20:5 | {\\n ... ]\\n } [password] | passwords.js:18:9:18:12 | obj1 [password] | provenance | | | passwords.js:19:19:19:19 | x | passwords.js:18:16:20:5 | {\\n ... ]\\n } [password] | provenance | | -| passwords.js:23:9:25:5 | obj2 [x] | passwords.js:26:17:26:20 | obj2 | provenance | | -| passwords.js:23:16:25:5 | {\\n ... ]\\n } [x] | passwords.js:23:9:25:5 | obj2 [x] | provenance | | +| passwords.js:23:9:23:12 | obj2 [x] | passwords.js:26:17:26:20 | obj2 | provenance | | +| passwords.js:23:16:25:5 | {\\n ... ]\\n } [x] | passwords.js:23:9:23:12 | obj2 [x] | provenance | | | passwords.js:24:12:24:19 | password | passwords.js:23:16:25:5 | {\\n ... ]\\n } [x] | provenance | | -| passwords.js:77:9:77:55 | temp [encryptedPassword] | passwords.js:78:17:78:20 | temp [encryptedPassword] | provenance | | -| passwords.js:77:16:77:55 | { encry ... sword } [encryptedPassword] | passwords.js:77:9:77:55 | temp [encryptedPassword] | provenance | | +| passwords.js:77:9:77:12 | temp [encryptedPassword] | passwords.js:78:17:78:20 | temp [encryptedPassword] | provenance | | +| passwords.js:77:16:77:55 | { encry ... sword } [encryptedPassword] | passwords.js:77:9:77:12 | temp [encryptedPassword] | provenance | | | passwords.js:77:37:77:53 | req.body.password | passwords.js:77:16:77:55 | { encry ... sword } [encryptedPassword] | provenance | | | passwords.js:78:17:78:20 | temp [encryptedPassword] | passwords.js:78:17:78:38 | temp.en ... assword | provenance | | -| passwords.js:80:9:80:25 | secret | passwords.js:81:24:81:29 | secret | provenance | | -| passwords.js:80:18:80:25 | password | passwords.js:80:9:80:25 | secret | provenance | | +| passwords.js:80:9:80:14 | secret | passwords.js:81:24:81:29 | secret | provenance | | +| passwords.js:80:18:80:25 | password | passwords.js:80:9:80:14 | secret | provenance | | | passwords.js:81:24:81:29 | secret | passwords.js:81:17:81:31 | `pw: ${secret}` | provenance | | | passwords.js:93:39:93:46 | password | passwords.js:93:21:93:46 | "Passwo ... assword | provenance | | | passwords.js:98:39:98:46 | password | passwords.js:98:21:98:46 | "Passwo ... assword | provenance | | @@ -69,14 +69,14 @@ edges | passwords.js:122:31:122:49 | password.toString() | passwords.js:122:17:122:49 | name + ... tring() | provenance | | | passwords.js:123:31:123:38 | password | passwords.js:123:31:123:48 | password.valueOf() | provenance | | | passwords.js:123:31:123:48 | password.valueOf() | passwords.js:123:17:123:48 | name + ... lueOf() | provenance | | -| passwords.js:127:9:132:5 | config [password] | passwords.js:135:17:135:22 | config | provenance | | -| passwords.js:127:9:132:5 | config [x] | passwords.js:135:17:135:22 | config | provenance | | -| passwords.js:127:9:132:5 | config [x] | passwords.js:136:17:136:22 | config [x] | provenance | | -| passwords.js:127:9:132:5 | config [y] | passwords.js:135:17:135:22 | config | provenance | | -| passwords.js:127:9:132:5 | config [y] | passwords.js:137:17:137:22 | config [y] | provenance | | -| passwords.js:127:18:132:5 | {\\n ... ]\\n } [password] | passwords.js:127:9:132:5 | config [password] | provenance | | -| passwords.js:127:18:132:5 | {\\n ... ]\\n } [x] | passwords.js:127:9:132:5 | config [x] | provenance | | -| passwords.js:127:18:132:5 | {\\n ... ]\\n } [y] | passwords.js:127:9:132:5 | config [y] | provenance | | +| passwords.js:127:9:127:14 | config [password] | passwords.js:135:17:135:22 | config | provenance | | +| passwords.js:127:9:127:14 | config [x] | passwords.js:135:17:135:22 | config | provenance | | +| passwords.js:127:9:127:14 | config [x] | passwords.js:136:17:136:22 | config [x] | provenance | | +| passwords.js:127:9:127:14 | config [y] | passwords.js:135:17:135:22 | config | provenance | | +| passwords.js:127:9:127:14 | config [y] | passwords.js:137:17:137:22 | config [y] | provenance | | +| passwords.js:127:18:132:5 | {\\n ... ]\\n } [password] | passwords.js:127:9:127:14 | config [password] | provenance | | +| passwords.js:127:18:132:5 | {\\n ... ]\\n } [x] | passwords.js:127:9:127:14 | config [x] | provenance | | +| passwords.js:127:18:132:5 | {\\n ... ]\\n } [y] | passwords.js:127:9:127:14 | config [y] | provenance | | | passwords.js:128:19:128:19 | x | passwords.js:127:18:132:5 | {\\n ... ]\\n } [password] | provenance | | | passwords.js:130:12:130:19 | password | passwords.js:127:18:132:5 | {\\n ... ]\\n } [x] | provenance | | | passwords.js:131:12:131:24 | getPassword() | passwords.js:127:18:132:5 | {\\n ... ]\\n } [y] | provenance | | @@ -90,8 +90,8 @@ edges | passwords.js:142:26:142:34 | arguments [0] | passwords.js:142:26:142:34 | [apply call taint node] | provenance | | | passwords.js:142:26:142:34 | arguments [ArrayElement] | passwords.js:142:26:142:34 | [apply call taint node] | provenance | | | passwords.js:142:26:142:34 | arguments [ArrayElement] | passwords.js:142:26:142:34 | [apply call taint node] | provenance | | -| passwords.js:146:9:148:5 | config [x] | passwords.js:149:21:149:26 | config [x] | provenance | | -| passwords.js:146:18:148:5 | {\\n ... ]\\n } [x] | passwords.js:146:9:148:5 | config [x] | provenance | | +| passwords.js:146:9:146:14 | config [x] | passwords.js:149:21:149:26 | config [x] | provenance | | +| passwords.js:146:18:148:5 | {\\n ... ]\\n } [x] | passwords.js:146:9:146:14 | config [x] | provenance | | | passwords.js:147:12:147:19 | password | passwords.js:146:18:148:5 | {\\n ... ]\\n } [x] | provenance | | | passwords.js:149:21:149:26 | config [x] | passwords.js:149:21:149:28 | config.x | provenance | | | passwords.js:149:21:149:28 | config.x | passwords.js:142:26:142:34 | arguments | provenance | | @@ -102,9 +102,9 @@ edges | passwords.js:150:21:150:31 | process.env | passwords.js:142:26:142:34 | arguments | provenance | Config | | passwords.js:150:21:150:31 | process.env | passwords.js:142:26:142:34 | arguments | provenance | Config | | passwords.js:150:21:150:31 | process.env | passwords.js:142:26:142:34 | arguments [0] | provenance | | -| passwords.js:152:9:152:63 | procdesc | passwords.js:154:21:154:28 | procdesc | provenance | | +| passwords.js:152:9:152:16 | procdesc | passwords.js:154:21:154:28 | procdesc | provenance | | | passwords.js:152:20:152:44 | Util.in ... ss.env) | passwords.js:152:20:152:63 | Util.in ... /g, '') | provenance | | -| passwords.js:152:20:152:63 | Util.in ... /g, '') | passwords.js:152:9:152:63 | procdesc | provenance | | +| passwords.js:152:20:152:63 | Util.in ... /g, '') | passwords.js:152:9:152:16 | procdesc | provenance | | | passwords.js:152:33:152:43 | process.env | passwords.js:152:20:152:44 | Util.in ... ss.env) | provenance | | | passwords.js:154:21:154:28 | procdesc | passwords.js:142:26:142:34 | arguments | provenance | | | passwords.js:154:21:154:28 | procdesc | passwords.js:142:26:142:34 | arguments | provenance | Config | @@ -131,20 +131,20 @@ nodes | passwords.js:14:31:14:38 | password | semmle.label | password | | passwords.js:16:17:16:38 | `${name ... sword}` | semmle.label | `${name ... sword}` | | passwords.js:16:29:16:36 | password | semmle.label | password | -| passwords.js:18:9:20:5 | obj1 [password] | semmle.label | obj1 [password] | +| passwords.js:18:9:18:12 | obj1 [password] | semmle.label | obj1 [password] | | passwords.js:18:16:20:5 | {\\n ... ]\\n } [password] | semmle.label | {\\n ... ]\\n } [password] | | passwords.js:19:19:19:19 | x | semmle.label | x | | passwords.js:21:17:21:20 | obj1 | semmle.label | obj1 | -| passwords.js:23:9:25:5 | obj2 [x] | semmle.label | obj2 [x] | +| passwords.js:23:9:23:12 | obj2 [x] | semmle.label | obj2 [x] | | passwords.js:23:16:25:5 | {\\n ... ]\\n } [x] | semmle.label | {\\n ... ]\\n } [x] | | passwords.js:24:12:24:19 | password | semmle.label | password | | passwords.js:26:17:26:20 | obj2 | semmle.label | obj2 | -| passwords.js:77:9:77:55 | temp [encryptedPassword] | semmle.label | temp [encryptedPassword] | +| passwords.js:77:9:77:12 | temp [encryptedPassword] | semmle.label | temp [encryptedPassword] | | passwords.js:77:16:77:55 | { encry ... sword } [encryptedPassword] | semmle.label | { encry ... sword } [encryptedPassword] | | passwords.js:77:37:77:53 | req.body.password | semmle.label | req.body.password | | passwords.js:78:17:78:20 | temp [encryptedPassword] | semmle.label | temp [encryptedPassword] | | passwords.js:78:17:78:38 | temp.en ... assword | semmle.label | temp.en ... assword | -| passwords.js:80:9:80:25 | secret | semmle.label | secret | +| passwords.js:80:9:80:14 | secret | semmle.label | secret | | passwords.js:80:18:80:25 | password | semmle.label | password | | passwords.js:81:17:81:31 | `pw: ${secret}` | semmle.label | `pw: ${secret}` | | passwords.js:81:24:81:29 | secret | semmle.label | secret | @@ -166,9 +166,9 @@ nodes | passwords.js:123:17:123:48 | name + ... lueOf() | semmle.label | name + ... lueOf() | | passwords.js:123:31:123:38 | password | semmle.label | password | | passwords.js:123:31:123:48 | password.valueOf() | semmle.label | password.valueOf() | -| passwords.js:127:9:132:5 | config [password] | semmle.label | config [password] | -| passwords.js:127:9:132:5 | config [x] | semmle.label | config [x] | -| passwords.js:127:9:132:5 | config [y] | semmle.label | config [y] | +| passwords.js:127:9:127:14 | config [password] | semmle.label | config [password] | +| passwords.js:127:9:127:14 | config [x] | semmle.label | config [x] | +| passwords.js:127:9:127:14 | config [y] | semmle.label | config [y] | | passwords.js:127:18:132:5 | {\\n ... ]\\n } [password] | semmle.label | {\\n ... ]\\n } [password] | | passwords.js:127:18:132:5 | {\\n ... ]\\n } [x] | semmle.label | {\\n ... ]\\n } [x] | | passwords.js:127:18:132:5 | {\\n ... ]\\n } [y] | semmle.label | {\\n ... ]\\n } [y] | @@ -187,13 +187,13 @@ nodes | passwords.js:142:26:142:34 | arguments [0] | semmle.label | arguments [0] | | passwords.js:142:26:142:34 | arguments [ArrayElement] | semmle.label | arguments [ArrayElement] | | passwords.js:142:26:142:34 | arguments [ArrayElement] | semmle.label | arguments [ArrayElement] | -| passwords.js:146:9:148:5 | config [x] | semmle.label | config [x] | +| passwords.js:146:9:146:14 | config [x] | semmle.label | config [x] | | passwords.js:146:18:148:5 | {\\n ... ]\\n } [x] | semmle.label | {\\n ... ]\\n } [x] | | passwords.js:147:12:147:19 | password | semmle.label | password | | passwords.js:149:21:149:26 | config [x] | semmle.label | config [x] | | passwords.js:149:21:149:28 | config.x | semmle.label | config.x | | passwords.js:150:21:150:31 | process.env | semmle.label | process.env | -| passwords.js:152:9:152:63 | procdesc | semmle.label | procdesc | +| passwords.js:152:9:152:16 | procdesc | semmle.label | procdesc | | passwords.js:152:20:152:44 | Util.in ... ss.env) | semmle.label | Util.in ... ss.env) | | passwords.js:152:20:152:63 | Util.in ... /g, '') | semmle.label | Util.in ... /g, '') | | passwords.js:152:33:152:43 | process.env | semmle.label | process.env | diff --git a/javascript/ql/test/query-tests/Security/CWE-312/CleartextStorage.expected b/javascript/ql/test/query-tests/Security/CWE-312/CleartextStorage.expected index fcb6c03d006..035ea1cae57 100644 --- a/javascript/ql/test/query-tests/Security/CWE-312/CleartextStorage.expected +++ b/javascript/ql/test/query-tests/Security/CWE-312/CleartextStorage.expected @@ -10,17 +10,17 @@ | tst-webstorage.js:3:20:3:32 | data.password | tst-webstorage.js:3:20:3:32 | data.password | tst-webstorage.js:3:20:3:32 | data.password | This stores sensitive data returned by $@ as clear text. | tst-webstorage.js:3:20:3:32 | data.password | an access to password | | tst-webstorage.js:4:29:4:41 | data.password | tst-webstorage.js:4:29:4:41 | data.password | tst-webstorage.js:4:29:4:41 | data.password | This stores sensitive data returned by $@ as clear text. | tst-webstorage.js:4:29:4:41 | data.password | an access to password | edges -| CleartextStorage2.js:5:7:5:58 | pw | CleartextStorage2.js:7:33:7:34 | pw | provenance | | -| CleartextStorage2.js:5:12:5:58 | url.par ... assword | CleartextStorage2.js:5:7:5:58 | pw | provenance | | +| CleartextStorage2.js:5:7:5:8 | pw | CleartextStorage2.js:7:33:7:34 | pw | provenance | | +| CleartextStorage2.js:5:12:5:58 | url.par ... assword | CleartextStorage2.js:5:7:5:8 | pw | provenance | | | CleartextStorage2.js:7:33:7:34 | pw | CleartextStorage2.js:7:19:7:34 | 'password=' + pw | provenance | | -| CleartextStorage.js:5:7:5:40 | pw | CleartextStorage.js:6:26:6:27 | pw | provenance | | -| CleartextStorage.js:5:12:5:40 | req.par ... sword") | CleartextStorage.js:5:7:5:40 | pw | provenance | | +| CleartextStorage.js:5:7:5:8 | pw | CleartextStorage.js:6:26:6:27 | pw | provenance | | +| CleartextStorage.js:5:12:5:40 | req.par ... sword") | CleartextStorage.js:5:7:5:8 | pw | provenance | | nodes -| CleartextStorage2.js:5:7:5:58 | pw | semmle.label | pw | +| CleartextStorage2.js:5:7:5:8 | pw | semmle.label | pw | | CleartextStorage2.js:5:12:5:58 | url.par ... assword | semmle.label | url.par ... assword | | CleartextStorage2.js:7:19:7:34 | 'password=' + pw | semmle.label | 'password=' + pw | | CleartextStorage2.js:7:33:7:34 | pw | semmle.label | pw | -| CleartextStorage.js:5:7:5:40 | pw | semmle.label | pw | +| CleartextStorage.js:5:7:5:8 | pw | semmle.label | pw | | CleartextStorage.js:5:12:5:40 | req.par ... sword") | semmle.label | req.par ... sword") | | CleartextStorage.js:6:26:6:27 | pw | semmle.label | pw | | tst-angularjs.js:3:32:3:45 | data1.password | semmle.label | data1.password | diff --git a/javascript/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected b/javascript/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected index 660a49e6bb2..f7e3f04dbb0 100644 --- a/javascript/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected +++ b/javascript/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected @@ -5,11 +5,11 @@ | tst.js:22:21:22:30 | secretText | tst.js:3:18:3:24 | trusted | tst.js:22:21:22:30 | secretText | $@ depends on $@. | tst.js:21:22:21:60 | crypto. ... ', key) | A broken or weak cryptographic algorithm | tst.js:3:18:3:24 | trusted | sensitive data from an access to trusted | | tst.js:22:21:22:30 | secretText | tst.js:22:21:22:30 | secretText | tst.js:22:21:22:30 | secretText | $@ depends on $@. | tst.js:21:22:21:60 | crypto. ... ', key) | A broken or weak cryptographic algorithm | tst.js:22:21:22:30 | secretText | sensitive data from an access to secretText | edges -| tst.js:3:5:3:24 | secretText | tst.js:11:17:11:26 | secretText | provenance | | -| tst.js:3:5:3:24 | secretText | tst.js:22:21:22:30 | secretText | provenance | | -| tst.js:3:18:3:24 | trusted | tst.js:3:5:3:24 | secretText | provenance | | +| tst.js:3:5:3:14 | secretText | tst.js:11:17:11:26 | secretText | provenance | | +| tst.js:3:5:3:14 | secretText | tst.js:22:21:22:30 | secretText | provenance | | +| tst.js:3:18:3:24 | trusted | tst.js:3:5:3:14 | secretText | provenance | | nodes -| tst.js:3:5:3:24 | secretText | semmle.label | secretText | +| tst.js:3:5:3:14 | secretText | semmle.label | secretText | | tst.js:3:18:3:24 | trusted | semmle.label | trusted | | tst.js:11:17:11:26 | secretText | semmle.label | secretText | | tst.js:17:17:17:25 | o.trusted | semmle.label | o.trusted | diff --git a/javascript/ql/test/query-tests/Security/CWE-338/InsecureRandomness.expected b/javascript/ql/test/query-tests/Security/CWE-338/InsecureRandomness.expected index fb24179ae56..cce22e3eee7 100644 --- a/javascript/ql/test/query-tests/Security/CWE-338/InsecureRandomness.expected +++ b/javascript/ql/test/query-tests/Security/CWE-338/InsecureRandomness.expected @@ -21,24 +21,24 @@ | tst.js:118:23:118:63 | Math.fl ... 00_000) | tst.js:118:34:118:46 | Math.random() | tst.js:118:23:118:63 | Math.fl ... 00_000) | This uses a cryptographically insecure random number generated at $@ in a security context. | tst.js:118:34:118:46 | Math.random() | Math.random() | | tst.js:120:16:120:28 | Math.random() | tst.js:120:16:120:28 | Math.random() | tst.js:120:16:120:28 | Math.random() | This uses a cryptographically insecure random number generated at $@ in a security context. | tst.js:120:16:120:28 | Math.random() | Math.random() | | tst.js:121:18:121:30 | Math.random() | tst.js:121:18:121:30 | Math.random() | tst.js:121:18:121:30 | Math.random() | This uses a cryptographically insecure random number generated at $@ in a security context. | tst.js:121:18:121:30 | Math.random() | Math.random() | -| tst.js:136:9:136:67 | password | tst.js:136:38:136:50 | Math.random() | tst.js:136:9:136:67 | password | This uses a cryptographically insecure random number generated at $@ in a security context. | tst.js:136:38:136:50 | Math.random() | Math.random() | +| tst.js:136:9:136:16 | password | tst.js:136:38:136:50 | Math.random() | tst.js:136:9:136:16 | password | This uses a cryptographically insecure random number generated at $@ in a security context. | tst.js:136:38:136:50 | Math.random() | Math.random() | edges | tst.js:6:31:6:43 | Math.random() | tst.js:6:20:6:43 | "prefix ... andom() | provenance | Config | -| tst.js:19:9:19:36 | suffix | tst.js:20:31:20:36 | suffix | provenance | | +| tst.js:19:9:19:14 | suffix | tst.js:20:31:20:36 | suffix | provenance | | | tst.js:19:18:19:30 | Math.random() | tst.js:19:18:19:36 | Math.random() % 255 | provenance | Config | -| tst.js:19:18:19:36 | Math.random() % 255 | tst.js:19:9:19:36 | suffix | provenance | | +| tst.js:19:18:19:36 | Math.random() % 255 | tst.js:19:9:19:14 | suffix | provenance | | | tst.js:20:31:20:36 | suffix | tst.js:20:20:20:36 | "prefix" + suffix | provenance | Config | -| tst.js:28:9:28:26 | pw | tst.js:29:20:29:21 | pw | provenance | | -| tst.js:28:14:28:26 | Math.random() | tst.js:28:9:28:26 | pw | provenance | | +| tst.js:28:9:28:10 | pw | tst.js:29:20:29:21 | pw | provenance | | +| tst.js:28:14:28:26 | Math.random() | tst.js:28:9:28:10 | pw | provenance | | | tst.js:41:21:41:33 | Math.random() | tst.js:41:20:41:33 | !Math.random() | provenance | Config | | tst.js:61:22:61:34 | Math.random() | tst.js:61:17:61:34 | '' + Math.random() | provenance | Config | | tst.js:66:29:66:41 | Math.random() | tst.js:66:18:66:42 | Math.fl ... ndom()) | provenance | Config | -| tst.js:71:9:71:48 | rand | tst.js:72:34:72:37 | rand | provenance | | -| tst.js:71:16:71:48 | Math.fl ... 999999) | tst.js:71:9:71:48 | rand | provenance | | +| tst.js:71:9:71:12 | rand | tst.js:72:34:72:37 | rand | provenance | | +| tst.js:71:16:71:48 | Math.fl ... 999999) | tst.js:71:9:71:12 | rand | provenance | | | tst.js:71:27:71:39 | Math.random() | tst.js:71:27:71:47 | Math.ra ... 9999999 | provenance | Config | | tst.js:71:27:71:47 | Math.ra ... 9999999 | tst.js:71:16:71:48 | Math.fl ... 999999) | provenance | Config | -| tst.js:72:9:72:48 | concat | tst.js:73:23:73:28 | concat | provenance | | -| tst.js:72:18:72:48 | ts.toSt ... tring() | tst.js:72:9:72:48 | concat | provenance | | +| tst.js:72:9:72:14 | concat | tst.js:73:23:73:28 | concat | provenance | | +| tst.js:72:18:72:48 | ts.toSt ... tring() | tst.js:72:9:72:14 | concat | provenance | | | tst.js:72:34:72:37 | rand | tst.js:72:34:72:48 | rand.toString() | provenance | Config | | tst.js:72:34:72:48 | rand.toString() | tst.js:72:18:72:48 | ts.toSt ... tring() | provenance | Config | | tst.js:77:16:77:21 | secret | tst.js:77:16:77:21 | secret | provenance | | @@ -51,7 +51,7 @@ edges | tst.js:117:26:117:54 | Math.ra ... 000_000 | tst.js:117:15:117:55 | Math.fl ... 00_000) | provenance | Config | | tst.js:118:34:118:46 | Math.random() | tst.js:118:34:118:62 | Math.ra ... 000_000 | provenance | Config | | tst.js:118:34:118:62 | Math.ra ... 000_000 | tst.js:118:23:118:63 | Math.fl ... 00_000) | provenance | Config | -| tst.js:136:21:136:67 | chars[M ... ength)] | tst.js:136:9:136:67 | password | provenance | Config | +| tst.js:136:21:136:67 | chars[M ... ength)] | tst.js:136:9:136:16 | password | provenance | Config | | tst.js:136:27:136:66 | Math.fl ... length) | tst.js:136:21:136:67 | chars[M ... ength)] | provenance | Config | | tst.js:136:38:136:50 | Math.random() | tst.js:136:38:136:65 | Math.ra ... .length | provenance | Config | | tst.js:136:38:136:65 | Math.ra ... .length | tst.js:136:27:136:66 | Math.fl ... length) | provenance | Config | @@ -60,12 +60,12 @@ nodes | tst.js:6:20:6:43 | "prefix ... andom() | semmle.label | "prefix ... andom() | | tst.js:6:31:6:43 | Math.random() | semmle.label | Math.random() | | tst.js:10:20:10:32 | Math.random() | semmle.label | Math.random() | -| tst.js:19:9:19:36 | suffix | semmle.label | suffix | +| tst.js:19:9:19:14 | suffix | semmle.label | suffix | | tst.js:19:18:19:30 | Math.random() | semmle.label | Math.random() | | tst.js:19:18:19:36 | Math.random() % 255 | semmle.label | Math.random() % 255 | | tst.js:20:20:20:36 | "prefix" + suffix | semmle.label | "prefix" + suffix | | tst.js:20:31:20:36 | suffix | semmle.label | suffix | -| tst.js:28:9:28:26 | pw | semmle.label | pw | +| tst.js:28:9:28:10 | pw | semmle.label | pw | | tst.js:28:14:28:26 | Math.random() | semmle.label | Math.random() | | tst.js:29:20:29:21 | pw | semmle.label | pw | | tst.js:41:20:41:33 | !Math.random() | semmle.label | !Math.random() | @@ -77,11 +77,11 @@ nodes | tst.js:61:22:61:34 | Math.random() | semmle.label | Math.random() | | tst.js:66:18:66:42 | Math.fl ... ndom()) | semmle.label | Math.fl ... ndom()) | | tst.js:66:29:66:41 | Math.random() | semmle.label | Math.random() | -| tst.js:71:9:71:48 | rand | semmle.label | rand | +| tst.js:71:9:71:12 | rand | semmle.label | rand | | tst.js:71:16:71:48 | Math.fl ... 999999) | semmle.label | Math.fl ... 999999) | | tst.js:71:27:71:39 | Math.random() | semmle.label | Math.random() | | tst.js:71:27:71:47 | Math.ra ... 9999999 | semmle.label | Math.ra ... 9999999 | -| tst.js:72:9:72:48 | concat | semmle.label | concat | +| tst.js:72:9:72:14 | concat | semmle.label | concat | | tst.js:72:18:72:48 | ts.toSt ... tring() | semmle.label | ts.toSt ... tring() | | tst.js:72:34:72:37 | rand | semmle.label | rand | | tst.js:72:34:72:48 | rand.toString() | semmle.label | rand.toString() | @@ -106,7 +106,7 @@ nodes | tst.js:118:34:118:62 | Math.ra ... 000_000 | semmle.label | Math.ra ... 000_000 | | tst.js:120:16:120:28 | Math.random() | semmle.label | Math.random() | | tst.js:121:18:121:30 | Math.random() | semmle.label | Math.random() | -| tst.js:136:9:136:67 | password | semmle.label | password | +| tst.js:136:9:136:16 | password | semmle.label | password | | tst.js:136:21:136:67 | chars[M ... ength)] | semmle.label | chars[M ... ength)] | | tst.js:136:27:136:66 | Math.fl ... length) | semmle.label | Math.fl ... length) | | tst.js:136:38:136:50 | Math.random() | semmle.label | Math.random() | diff --git a/javascript/ql/test/query-tests/Security/CWE-346/CorsMisconfigurationForCredentials.expected b/javascript/ql/test/query-tests/Security/CWE-346/CorsMisconfigurationForCredentials.expected index 34b731a12d1..f879a9c865b 100644 --- a/javascript/ql/test/query-tests/Security/CWE-346/CorsMisconfigurationForCredentials.expected +++ b/javascript/ql/test/query-tests/Security/CWE-346/CorsMisconfigurationForCredentials.expected @@ -3,11 +3,11 @@ | tst.js:18:50:18:53 | null | tst.js:18:50:18:53 | null | tst.js:18:50:18:53 | null | $@ leak vulnerability due to a $@. | tst.js:19:5:19:59 | res.set ... , true) | Credential | tst.js:18:50:18:53 | null | misconfigured CORS header value | | tst.js:23:50:23:55 | "null" | tst.js:23:50:23:55 | "null" | tst.js:23:50:23:55 | "null" | $@ leak vulnerability due to a $@. | tst.js:24:5:24:59 | res.set ... , true) | Credential | tst.js:23:50:23:55 | "null" | misconfigured CORS header value | edges -| tst.js:12:9:12:54 | origin | tst.js:13:50:13:55 | origin | provenance | | -| tst.js:12:18:12:41 | url.par ... , true) | tst.js:12:9:12:54 | origin | provenance | | +| tst.js:12:9:12:14 | origin | tst.js:13:50:13:55 | origin | provenance | | +| tst.js:12:18:12:41 | url.par ... , true) | tst.js:12:9:12:14 | origin | provenance | | | tst.js:12:28:12:34 | req.url | tst.js:12:18:12:41 | url.par ... , true) | provenance | | nodes -| tst.js:12:9:12:54 | origin | semmle.label | origin | +| tst.js:12:9:12:14 | origin | semmle.label | origin | | tst.js:12:18:12:41 | url.par ... , true) | semmle.label | url.par ... , true) | | tst.js:12:28:12:34 | req.url | semmle.label | req.url | | tst.js:13:50:13:55 | origin | semmle.label | origin | diff --git a/javascript/ql/test/query-tests/Security/CWE-377/InsecureTemporaryFile.expected b/javascript/ql/test/query-tests/Security/CWE-377/InsecureTemporaryFile.expected index 29e82a60956..adc9540b630 100644 --- a/javascript/ql/test/query-tests/Security/CWE-377/InsecureTemporaryFile.expected +++ b/javascript/ql/test/query-tests/Security/CWE-377/InsecureTemporaryFile.expected @@ -5,30 +5,30 @@ | insecure-temporary-file.js:26:22:26:29 | tmpPath2 | insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | insecure-temporary-file.js:26:22:26:29 | tmpPath2 | Insecure creation of file in $@. | insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | the os temp dir | | insecure-temporary-file.js:28:17:28:24 | tmpPath2 | insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | insecure-temporary-file.js:28:17:28:24 | tmpPath2 | Insecure creation of file in $@. | insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | the os temp dir | edges -| insecure-temporary-file.js:7:9:11:5 | tmpLocation | insecure-temporary-file.js:13:22:13:32 | tmpLocation | provenance | | -| insecure-temporary-file.js:7:23:11:5 | path.jo ... )\\n ) | insecure-temporary-file.js:7:9:11:5 | tmpLocation | provenance | | +| insecure-temporary-file.js:7:9:7:19 | tmpLocation | insecure-temporary-file.js:13:22:13:32 | tmpLocation | provenance | | +| insecure-temporary-file.js:7:23:11:5 | path.jo ... )\\n ) | insecure-temporary-file.js:7:9:7:19 | tmpLocation | provenance | | | insecure-temporary-file.js:8:21:8:31 | os.tmpdir() | insecure-temporary-file.js:7:23:11:5 | path.jo ... )\\n ) | provenance | | -| insecure-temporary-file.js:15:9:15:34 | tmpPath | insecure-temporary-file.js:17:32:17:38 | tmpPath | provenance | | -| insecure-temporary-file.js:15:9:15:34 | tmpPath | insecure-temporary-file.js:23:32:23:38 | tmpPath | provenance | | -| insecure-temporary-file.js:15:19:15:34 | "/tmp/something" | insecure-temporary-file.js:15:9:15:34 | tmpPath | provenance | | +| insecure-temporary-file.js:15:9:15:15 | tmpPath | insecure-temporary-file.js:17:32:17:38 | tmpPath | provenance | | +| insecure-temporary-file.js:15:9:15:15 | tmpPath | insecure-temporary-file.js:23:32:23:38 | tmpPath | provenance | | +| insecure-temporary-file.js:15:19:15:34 | "/tmp/something" | insecure-temporary-file.js:15:9:15:15 | tmpPath | provenance | | | insecure-temporary-file.js:17:32:17:38 | tmpPath | insecure-temporary-file.js:17:22:17:49 | path.jo ... /foo/") | provenance | | | insecure-temporary-file.js:23:32:23:38 | tmpPath | insecure-temporary-file.js:23:22:23:49 | path.jo ... /foo/") | provenance | | -| insecure-temporary-file.js:25:11:25:92 | tmpPath2 | insecure-temporary-file.js:26:22:26:29 | tmpPath2 | provenance | | -| insecure-temporary-file.js:25:11:25:92 | tmpPath2 | insecure-temporary-file.js:28:17:28:24 | tmpPath2 | provenance | | -| insecure-temporary-file.js:25:22:25:92 | path.jo ... )}.md`) | insecure-temporary-file.js:25:11:25:92 | tmpPath2 | provenance | | +| insecure-temporary-file.js:25:11:25:18 | tmpPath2 | insecure-temporary-file.js:26:22:26:29 | tmpPath2 | provenance | | +| insecure-temporary-file.js:25:11:25:18 | tmpPath2 | insecure-temporary-file.js:28:17:28:24 | tmpPath2 | provenance | | +| insecure-temporary-file.js:25:22:25:92 | path.jo ... )}.md`) | insecure-temporary-file.js:25:11:25:18 | tmpPath2 | provenance | | | insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | insecure-temporary-file.js:25:22:25:92 | path.jo ... )}.md`) | provenance | | nodes -| insecure-temporary-file.js:7:9:11:5 | tmpLocation | semmle.label | tmpLocation | +| insecure-temporary-file.js:7:9:7:19 | tmpLocation | semmle.label | tmpLocation | | insecure-temporary-file.js:7:23:11:5 | path.jo ... )\\n ) | semmle.label | path.jo ... )\\n ) | | insecure-temporary-file.js:8:21:8:31 | os.tmpdir() | semmle.label | os.tmpdir() | | insecure-temporary-file.js:13:22:13:32 | tmpLocation | semmle.label | tmpLocation | -| insecure-temporary-file.js:15:9:15:34 | tmpPath | semmle.label | tmpPath | +| insecure-temporary-file.js:15:9:15:15 | tmpPath | semmle.label | tmpPath | | insecure-temporary-file.js:15:19:15:34 | "/tmp/something" | semmle.label | "/tmp/something" | | insecure-temporary-file.js:17:22:17:49 | path.jo ... /foo/") | semmle.label | path.jo ... /foo/") | | insecure-temporary-file.js:17:32:17:38 | tmpPath | semmle.label | tmpPath | | insecure-temporary-file.js:23:22:23:49 | path.jo ... /foo/") | semmle.label | path.jo ... /foo/") | | insecure-temporary-file.js:23:32:23:38 | tmpPath | semmle.label | tmpPath | -| insecure-temporary-file.js:25:11:25:92 | tmpPath2 | semmle.label | tmpPath2 | +| insecure-temporary-file.js:25:11:25:18 | tmpPath2 | semmle.label | tmpPath2 | | insecure-temporary-file.js:25:22:25:92 | path.jo ... )}.md`) | semmle.label | path.jo ... )}.md`) | | insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | semmle.label | os.tmpdir() | | insecure-temporary-file.js:26:22:26:29 | tmpPath2 | semmle.label | tmpPath2 | diff --git a/javascript/ql/test/query-tests/Security/CWE-400/ReDoS/PolynomialReDoS.expected b/javascript/ql/test/query-tests/Security/CWE-400/ReDoS/PolynomialReDoS.expected index 7484e72c3f0..d2de005f42a 100644 --- a/javascript/ql/test/query-tests/Security/CWE-400/ReDoS/PolynomialReDoS.expected +++ b/javascript/ql/test/query-tests/Security/CWE-400/ReDoS/PolynomialReDoS.expected @@ -111,9 +111,9 @@ edges | lib/lib.js:35:28:35:31 | name | lib/lib.js:36:13:36:16 | name | provenance | | | lib/lib.js:41:32:41:35 | name | lib/lib.js:42:17:42:20 | name | provenance | | | lib/lib.js:41:32:41:35 | name | lib/lib.js:44:12:44:15 | name | provenance | | -| lib/lib.js:44:5:44:25 | name | lib/lib.js:45:17:45:20 | name | provenance | | +| lib/lib.js:44:5:44:8 | name | lib/lib.js:45:17:45:20 | name | provenance | | | lib/lib.js:44:12:44:15 | name | lib/lib.js:44:12:44:25 | name.substr(1) | provenance | | -| lib/lib.js:44:12:44:25 | name.substr(1) | lib/lib.js:44:5:44:25 | name | provenance | | +| lib/lib.js:44:12:44:25 | name.substr(1) | lib/lib.js:44:5:44:8 | name | provenance | | | lib/lib.js:52:22:52:25 | name | lib/lib.js:53:16:53:19 | name | provenance | | | lib/moduleLib/moduleLib.js:1:28:1:31 | name | lib/moduleLib/moduleLib.js:2:13:2:16 | name | provenance | | | lib/otherLib/js/src/index.js:1:28:1:31 | name | lib/otherLib/js/src/index.js:2:13:2:16 | name | provenance | | @@ -131,160 +131,160 @@ edges | lib/subLib5/subclass.js:4:10:4:13 | name | lib/subLib5/subclass.js:5:16:5:19 | name | provenance | | | lib/subLib6/index.js:1:32:1:35 | name | lib/subLib6/index.js:2:14:2:17 | name | provenance | | | lib/sublib/factory.js:12:26:12:29 | name | lib/sublib/factory.js:13:24:13:27 | name | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:7:2:7:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:7:2:7:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:8:2:8:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:8:2:8:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:9:2:9:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:9:2:9:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:10:2:10:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:11:2:11:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:11:2:11:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:12:2:12:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:12:2:12:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:13:2:13:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:14:2:14:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:15:2:15:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:15:2:15:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:16:2:16:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:16:2:16:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:17:23:17:29 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:17:23:17:29 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:18:2:18:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:18:2:18:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:19:2:19:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:19:2:19:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:20:2:20:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:20:2:20:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:21:6:21:12 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:25:2:25:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:25:2:25:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:26:2:26:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:27:77:27:83 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:28:76:28:82 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:30:2:30:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:30:2:30:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:31:2:31:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:32:2:32:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:33:2:33:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:33:2:33:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:34:2:34:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:36:2:36:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:36:2:36:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:37:2:37:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:37:2:37:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:38:2:38:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:38:2:38:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:40:2:40:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:40:2:40:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:41:2:41:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:43:2:43:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:43:2:43:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:44:2:44:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:46:9:46:15 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:47:2:47:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:48:2:48:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:48:2:48:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:50:14:50:20 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:50:14:50:20 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:51:26:51:32 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:51:26:51:32 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:52:22:52:28 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:52:22:52:28 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:53:21:53:27 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:53:21:53:27 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:54:22:54:28 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:54:22:54:28 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:55:23:55:29 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:55:23:55:29 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:56:22:56:28 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:56:22:56:28 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:57:25:57:31 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:57:25:57:31 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:58:21:58:27 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:58:21:58:27 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:59:23:59:29 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:59:23:59:29 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:60:17:60:23 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:61:18:61:24 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:62:17:62:23 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:62:17:62:23 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:63:21:63:27 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:63:21:63:27 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:64:24:64:30 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:64:24:64:30 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:65:24:65:30 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:65:24:65:30 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:66:19:66:25 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:66:19:66:25 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:67:18:67:24 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:67:18:67:24 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:71:2:71:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:71:2:71:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:73:2:73:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:73:2:73:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:75:2:75:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:75:2:75:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:77:2:77:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:77:2:77:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:80:2:80:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:80:2:80:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:81:2:81:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:81:2:81:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:82:2:82:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:83:2:83:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:84:2:84:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:86:2:86:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:86:2:86:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:88:2:88:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:88:2:88:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:89:2:89:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:89:2:89:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:90:2:90:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:90:2:90:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:91:2:91:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:92:2:92:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:94:2:94:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:94:2:94:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:95:2:95:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:95:2:95:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:96:2:96:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:96:2:96:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:98:2:98:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:98:2:98:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:100:2:100:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:100:2:100:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:101:2:101:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:101:2:101:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:102:2:102:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:102:2:102:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:103:2:103:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:103:2:103:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:104:2:104:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:104:2:104:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:105:2:105:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:107:2:107:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:107:2:107:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:108:2:108:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:108:2:108:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:109:2:109:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:109:2:109:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:111:2:111:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:111:2:111:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:112:2:112:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:112:2:112:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:114:2:114:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:114:2:114:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:116:2:116:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:116:2:116:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:118:2:118:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:118:2:118:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:127:2:127:8 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:129:17:129:23 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:132:18:132:24 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:135:21:135:27 | tainted | provenance | | -| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:138:5:138:11 | tainted | provenance | | -| polynomial-redos.js:5:16:5:32 | req.query.tainted | polynomial-redos.js:5:6:5:32 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:7:2:7:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:7:2:7:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:8:2:8:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:8:2:8:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:9:2:9:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:9:2:9:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:10:2:10:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:11:2:11:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:11:2:11:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:12:2:12:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:12:2:12:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:13:2:13:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:14:2:14:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:15:2:15:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:15:2:15:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:16:2:16:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:16:2:16:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:17:23:17:29 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:17:23:17:29 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:18:2:18:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:18:2:18:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:19:2:19:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:19:2:19:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:20:2:20:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:20:2:20:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:21:6:21:12 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:25:2:25:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:25:2:25:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:26:2:26:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:27:77:27:83 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:28:76:28:82 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:30:2:30:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:30:2:30:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:31:2:31:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:32:2:32:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:33:2:33:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:33:2:33:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:34:2:34:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:36:2:36:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:36:2:36:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:37:2:37:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:37:2:37:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:38:2:38:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:38:2:38:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:40:2:40:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:40:2:40:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:41:2:41:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:43:2:43:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:43:2:43:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:44:2:44:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:46:9:46:15 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:47:2:47:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:48:2:48:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:48:2:48:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:50:14:50:20 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:50:14:50:20 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:51:26:51:32 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:51:26:51:32 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:52:22:52:28 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:52:22:52:28 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:53:21:53:27 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:53:21:53:27 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:54:22:54:28 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:54:22:54:28 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:55:23:55:29 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:55:23:55:29 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:56:22:56:28 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:56:22:56:28 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:57:25:57:31 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:57:25:57:31 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:58:21:58:27 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:58:21:58:27 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:59:23:59:29 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:59:23:59:29 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:60:17:60:23 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:61:18:61:24 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:62:17:62:23 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:62:17:62:23 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:63:21:63:27 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:63:21:63:27 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:64:24:64:30 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:64:24:64:30 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:65:24:65:30 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:65:24:65:30 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:66:19:66:25 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:66:19:66:25 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:67:18:67:24 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:67:18:67:24 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:71:2:71:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:71:2:71:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:73:2:73:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:73:2:73:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:75:2:75:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:75:2:75:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:77:2:77:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:77:2:77:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:80:2:80:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:80:2:80:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:81:2:81:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:81:2:81:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:82:2:82:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:83:2:83:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:84:2:84:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:86:2:86:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:86:2:86:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:88:2:88:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:88:2:88:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:89:2:89:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:89:2:89:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:90:2:90:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:90:2:90:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:91:2:91:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:92:2:92:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:94:2:94:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:94:2:94:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:95:2:95:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:95:2:95:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:96:2:96:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:96:2:96:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:98:2:98:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:98:2:98:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:100:2:100:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:100:2:100:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:101:2:101:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:101:2:101:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:102:2:102:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:102:2:102:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:103:2:103:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:103:2:103:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:104:2:104:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:104:2:104:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:105:2:105:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:107:2:107:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:107:2:107:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:108:2:108:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:108:2:108:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:109:2:109:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:109:2:109:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:111:2:111:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:111:2:111:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:112:2:112:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:112:2:112:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:114:2:114:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:114:2:114:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:116:2:116:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:116:2:116:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:118:2:118:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:118:2:118:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:127:2:127:8 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:129:17:129:23 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:132:18:132:24 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:135:21:135:27 | tainted | provenance | | +| polynomial-redos.js:5:6:5:12 | tainted | polynomial-redos.js:138:5:138:11 | tainted | provenance | | +| polynomial-redos.js:5:16:5:32 | req.query.tainted | polynomial-redos.js:5:6:5:12 | tainted | provenance | | | polynomial-redos.js:7:2:7:8 | tainted | polynomial-redos.js:8:2:8:8 | tainted | provenance | | | polynomial-redos.js:7:2:7:8 | tainted | polynomial-redos.js:8:2:8:8 | tainted | provenance | | | polynomial-redos.js:8:2:8:8 | tainted | polynomial-redos.js:9:2:9:8 | tainted | provenance | | @@ -435,27 +435,27 @@ edges | polynomial-redos.js:118:2:118:8 | tainted | polynomial-redos.js:121:18:121:24 | tainted | provenance | | | polynomial-redos.js:118:2:118:8 | tainted | polynomial-redos.js:127:2:127:8 | tainted | provenance | | | polynomial-redos.js:120:2:125:3 | (functi ... os]\\n\\t}) [tainted] | polynomial-redos.js:121:18:121:24 | tainted | provenance | | -| polynomial-redos.js:121:7:121:55 | replaced | polynomial-redos.js:123:13:123:20 | replaced | provenance | | +| polynomial-redos.js:121:7:121:14 | replaced | polynomial-redos.js:123:13:123:20 | replaced | provenance | | | polynomial-redos.js:121:18:121:24 | tainted | polynomial-redos.js:121:18:121:55 | tainted ... /g, '') | provenance | | -| polynomial-redos.js:121:18:121:55 | tainted ... /g, '') | polynomial-redos.js:121:7:121:55 | replaced | provenance | | -| polynomial-redos.js:123:3:123:20 | result | polynomial-redos.js:124:12:124:17 | result | provenance | | -| polynomial-redos.js:123:13:123:20 | replaced | polynomial-redos.js:123:3:123:20 | result | provenance | | +| polynomial-redos.js:121:18:121:55 | tainted ... /g, '') | polynomial-redos.js:121:7:121:14 | replaced | provenance | | +| polynomial-redos.js:123:3:123:8 | result | polynomial-redos.js:124:12:124:17 | result | provenance | | +| polynomial-redos.js:123:13:123:20 | replaced | polynomial-redos.js:123:3:123:8 | result | provenance | | | polynomial-redos.js:127:2:127:8 | tainted | polynomial-redos.js:129:17:129:23 | tainted | provenance | | -| polynomial-redos.js:129:6:129:42 | modified | polynomial-redos.js:130:2:130:9 | modified | provenance | | +| polynomial-redos.js:129:6:129:13 | modified | polynomial-redos.js:130:2:130:9 | modified | provenance | | | polynomial-redos.js:129:17:129:23 | tainted | polynomial-redos.js:129:17:129:42 | tainted ... g, "b") | provenance | | | polynomial-redos.js:129:17:129:23 | tainted | polynomial-redos.js:132:18:132:24 | tainted | provenance | | -| polynomial-redos.js:129:17:129:42 | tainted ... g, "b") | polynomial-redos.js:129:6:129:42 | modified | provenance | | -| polynomial-redos.js:132:6:132:50 | modified2 | polynomial-redos.js:133:2:133:10 | modified2 | provenance | | +| polynomial-redos.js:129:17:129:42 | tainted ... g, "b") | polynomial-redos.js:129:6:129:13 | modified | provenance | | +| polynomial-redos.js:132:6:132:14 | modified2 | polynomial-redos.js:133:2:133:10 | modified2 | provenance | | | polynomial-redos.js:132:18:132:24 | tainted | polynomial-redos.js:132:18:132:50 | tainted ... g, "e") | provenance | | | polynomial-redos.js:132:18:132:24 | tainted | polynomial-redos.js:135:21:135:27 | tainted | provenance | | -| polynomial-redos.js:132:18:132:50 | tainted ... g, "e") | polynomial-redos.js:132:6:132:50 | modified2 | provenance | | -| polynomial-redos.js:135:9:135:47 | modified3 | polynomial-redos.js:136:5:136:13 | modified3 | provenance | | -| polynomial-redos.js:135:9:135:47 | modified3 | polynomial-redos.js:140:2:140:10 | modified3 | provenance | | -| polynomial-redos.js:135:9:135:47 | modified3 | polynomial-redos.js:141:2:141:10 | modified3 | provenance | | -| polynomial-redos.js:135:9:135:47 | modified3 | polynomial-redos.js:142:2:142:10 | modified3 | provenance | | +| polynomial-redos.js:132:18:132:50 | tainted ... g, "e") | polynomial-redos.js:132:6:132:14 | modified2 | provenance | | +| polynomial-redos.js:135:9:135:17 | modified3 | polynomial-redos.js:136:5:136:13 | modified3 | provenance | | +| polynomial-redos.js:135:9:135:17 | modified3 | polynomial-redos.js:140:2:140:10 | modified3 | provenance | | +| polynomial-redos.js:135:9:135:17 | modified3 | polynomial-redos.js:141:2:141:10 | modified3 | provenance | | +| polynomial-redos.js:135:9:135:17 | modified3 | polynomial-redos.js:142:2:142:10 | modified3 | provenance | | | polynomial-redos.js:135:21:135:27 | tainted | polynomial-redos.js:135:21:135:47 | tainted ... /g, "") | provenance | | | polynomial-redos.js:135:21:135:27 | tainted | polynomial-redos.js:138:5:138:11 | tainted | provenance | | -| polynomial-redos.js:135:21:135:47 | tainted ... /g, "") | polynomial-redos.js:135:9:135:47 | modified3 | provenance | | +| polynomial-redos.js:135:21:135:47 | tainted ... /g, "") | polynomial-redos.js:135:9:135:17 | modified3 | provenance | | nodes | lib/closure.js:3:21:3:21 | x | semmle.label | x | | lib/closure.js:4:16:4:16 | x | semmle.label | x | @@ -472,7 +472,7 @@ nodes | lib/lib.js:36:13:36:16 | name | semmle.label | name | | lib/lib.js:41:32:41:35 | name | semmle.label | name | | lib/lib.js:42:17:42:20 | name | semmle.label | name | -| lib/lib.js:44:5:44:25 | name | semmle.label | name | +| lib/lib.js:44:5:44:8 | name | semmle.label | name | | lib/lib.js:44:12:44:15 | name | semmle.label | name | | lib/lib.js:44:12:44:25 | name.substr(1) | semmle.label | name.substr(1) | | lib/lib.js:45:17:45:20 | name | semmle.label | name | @@ -505,7 +505,7 @@ nodes | lib/subLib6/index.js:2:14:2:17 | name | semmle.label | name | | lib/sublib/factory.js:12:26:12:29 | name | semmle.label | name | | lib/sublib/factory.js:13:24:13:27 | name | semmle.label | name | -| polynomial-redos.js:5:6:5:32 | tainted | semmle.label | tainted | +| polynomial-redos.js:5:6:5:12 | tainted | semmle.label | tainted | | polynomial-redos.js:5:16:5:32 | req.query.tainted | semmle.label | req.query.tainted | | polynomial-redos.js:7:2:7:8 | tainted | semmle.label | tainted | | polynomial-redos.js:7:2:7:8 | tainted | semmle.label | tainted | @@ -658,22 +658,22 @@ nodes | polynomial-redos.js:118:2:118:8 | tainted | semmle.label | tainted | | polynomial-redos.js:118:2:118:8 | tainted | semmle.label | tainted | | polynomial-redos.js:120:2:125:3 | (functi ... os]\\n\\t}) [tainted] | semmle.label | (functi ... os]\\n\\t}) [tainted] | -| polynomial-redos.js:121:7:121:55 | replaced | semmle.label | replaced | +| polynomial-redos.js:121:7:121:14 | replaced | semmle.label | replaced | | polynomial-redos.js:121:18:121:24 | tainted | semmle.label | tainted | | polynomial-redos.js:121:18:121:55 | tainted ... /g, '') | semmle.label | tainted ... /g, '') | -| polynomial-redos.js:123:3:123:20 | result | semmle.label | result | +| polynomial-redos.js:123:3:123:8 | result | semmle.label | result | | polynomial-redos.js:123:13:123:20 | replaced | semmle.label | replaced | | polynomial-redos.js:124:12:124:17 | result | semmle.label | result | | polynomial-redos.js:127:2:127:8 | tainted | semmle.label | tainted | -| polynomial-redos.js:129:6:129:42 | modified | semmle.label | modified | +| polynomial-redos.js:129:6:129:13 | modified | semmle.label | modified | | polynomial-redos.js:129:17:129:23 | tainted | semmle.label | tainted | | polynomial-redos.js:129:17:129:42 | tainted ... g, "b") | semmle.label | tainted ... g, "b") | | polynomial-redos.js:130:2:130:9 | modified | semmle.label | modified | -| polynomial-redos.js:132:6:132:50 | modified2 | semmle.label | modified2 | +| polynomial-redos.js:132:6:132:14 | modified2 | semmle.label | modified2 | | polynomial-redos.js:132:18:132:24 | tainted | semmle.label | tainted | | polynomial-redos.js:132:18:132:50 | tainted ... g, "e") | semmle.label | tainted ... g, "e") | | polynomial-redos.js:133:2:133:10 | modified2 | semmle.label | modified2 | -| polynomial-redos.js:135:9:135:47 | modified3 | semmle.label | modified3 | +| polynomial-redos.js:135:9:135:17 | modified3 | semmle.label | modified3 | | polynomial-redos.js:135:21:135:27 | tainted | semmle.label | tainted | | polynomial-redos.js:135:21:135:47 | tainted ... /g, "") | semmle.label | tainted ... /g, "") | | polynomial-redos.js:136:5:136:13 | modified3 | semmle.label | modified3 | diff --git a/javascript/ql/test/query-tests/Security/CWE-400/RemovePropertyInjection/RemotePropertyInjection.expected b/javascript/ql/test/query-tests/Security/CWE-400/RemotePropertyInjection/RemotePropertyInjection.expected similarity index 50% rename from javascript/ql/test/query-tests/Security/CWE-400/RemovePropertyInjection/RemotePropertyInjection.expected rename to javascript/ql/test/query-tests/Security/CWE-400/RemotePropertyInjection/RemotePropertyInjection.expected index 9b486b59333..8096bea00f9 100644 --- a/javascript/ql/test/query-tests/Security/CWE-400/RemovePropertyInjection/RemotePropertyInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-400/RemotePropertyInjection/RemotePropertyInjection.expected @@ -3,36 +3,42 @@ | tst.js:13:15:13:18 | prop | tst.js:8:28:8:51 | req.que ... trolled | tst.js:13:15:13:18 | prop | A property name to write to depends on a $@. | tst.js:8:28:8:51 | req.que ... trolled | user-provided value | | tst.js:14:31:14:34 | prop | tst.js:8:28:8:51 | req.que ... trolled | tst.js:14:31:14:34 | prop | A property name to write to depends on a $@. | tst.js:8:28:8:51 | req.que ... trolled | user-provided value | | tst.js:16:10:16:13 | prop | tst.js:8:28:8:51 | req.que ... trolled | tst.js:16:10:16:13 | prop | A property name to write to depends on a $@. | tst.js:8:28:8:51 | req.que ... trolled | user-provided value | +| tst.js:22:10:22:12 | key | tst.js:20:14:20:21 | req.body | tst.js:22:10:22:12 | key | A property name to write to depends on a $@. | tst.js:20:14:20:21 | req.body | user-provided value | | tstNonExpr.js:8:17:8:23 | userVal | tstNonExpr.js:5:17:5:23 | req.url | tstNonExpr.js:8:17:8:23 | userVal | A header name depends on a $@. | tstNonExpr.js:5:17:5:23 | req.url | user-provided value | edges -| tst.js:8:6:8:52 | prop | tst.js:9:8:9:11 | prop | provenance | | -| tst.js:8:6:8:52 | prop | tst.js:13:15:13:18 | prop | provenance | | -| tst.js:8:6:8:52 | prop | tst.js:14:31:14:34 | prop | provenance | | -| tst.js:8:6:8:52 | prop | tst.js:16:10:16:13 | prop | provenance | | -| tst.js:8:13:8:52 | myCoolL ... rolled) | tst.js:8:6:8:52 | prop | provenance | | +| tst.js:8:6:8:9 | prop | tst.js:9:8:9:11 | prop | provenance | | +| tst.js:8:6:8:9 | prop | tst.js:13:15:13:18 | prop | provenance | | +| tst.js:8:6:8:9 | prop | tst.js:14:31:14:34 | prop | provenance | | +| tst.js:8:6:8:9 | prop | tst.js:16:10:16:13 | prop | provenance | | +| tst.js:8:13:8:52 | myCoolL ... rolled) | tst.js:8:6:8:9 | prop | provenance | | | tst.js:8:28:8:51 | req.que ... trolled | tst.js:8:13:8:52 | myCoolL ... rolled) | provenance | | -| tst.js:8:28:8:51 | req.que ... trolled | tst.js:21:25:21:25 | x | provenance | | -| tst.js:21:25:21:25 | x | tst.js:22:15:22:15 | x | provenance | | -| tst.js:22:6:22:15 | result | tst.js:23:9:23:14 | result | provenance | | -| tst.js:22:15:22:15 | x | tst.js:22:6:22:15 | result | provenance | | -| tst.js:23:9:23:14 | result | tst.js:23:9:23:42 | result. ... length) | provenance | | -| tstNonExpr.js:5:7:5:23 | userVal | tstNonExpr.js:8:17:8:23 | userVal | provenance | | -| tstNonExpr.js:5:17:5:23 | req.url | tstNonExpr.js:5:7:5:23 | userVal | provenance | | +| tst.js:8:28:8:51 | req.que ... trolled | tst.js:27:25:27:25 | x | provenance | | +| tst.js:20:14:20:21 | req.body | tst.js:21:3:21:5 | key | provenance | Config | +| tst.js:21:3:21:5 | key | tst.js:22:10:22:12 | key | provenance | | +| tst.js:27:25:27:25 | x | tst.js:28:15:28:15 | x | provenance | | +| tst.js:28:6:28:11 | result | tst.js:29:9:29:14 | result | provenance | | +| tst.js:28:15:28:15 | x | tst.js:28:6:28:11 | result | provenance | | +| tst.js:29:9:29:14 | result | tst.js:29:9:29:42 | result. ... length) | provenance | | +| tstNonExpr.js:5:7:5:13 | userVal | tstNonExpr.js:8:17:8:23 | userVal | provenance | | +| tstNonExpr.js:5:17:5:23 | req.url | tstNonExpr.js:5:7:5:13 | userVal | provenance | | nodes -| tst.js:8:6:8:52 | prop | semmle.label | prop | +| tst.js:8:6:8:9 | prop | semmle.label | prop | | tst.js:8:13:8:52 | myCoolL ... rolled) | semmle.label | myCoolL ... rolled) | | tst.js:8:28:8:51 | req.que ... trolled | semmle.label | req.que ... trolled | | tst.js:9:8:9:11 | prop | semmle.label | prop | | tst.js:13:15:13:18 | prop | semmle.label | prop | | tst.js:14:31:14:34 | prop | semmle.label | prop | | tst.js:16:10:16:13 | prop | semmle.label | prop | -| tst.js:21:25:21:25 | x | semmle.label | x | -| tst.js:22:6:22:15 | result | semmle.label | result | -| tst.js:22:15:22:15 | x | semmle.label | x | -| tst.js:23:9:23:14 | result | semmle.label | result | -| tst.js:23:9:23:42 | result. ... length) | semmle.label | result. ... length) | -| tstNonExpr.js:5:7:5:23 | userVal | semmle.label | userVal | +| tst.js:20:14:20:21 | req.body | semmle.label | req.body | +| tst.js:21:3:21:5 | key | semmle.label | key | +| tst.js:22:10:22:12 | key | semmle.label | key | +| tst.js:27:25:27:25 | x | semmle.label | x | +| tst.js:28:6:28:11 | result | semmle.label | result | +| tst.js:28:15:28:15 | x | semmle.label | x | +| tst.js:29:9:29:14 | result | semmle.label | result | +| tst.js:29:9:29:42 | result. ... length) | semmle.label | result. ... length) | +| tstNonExpr.js:5:7:5:13 | userVal | semmle.label | userVal | | tstNonExpr.js:5:17:5:23 | req.url | semmle.label | req.url | | tstNonExpr.js:8:17:8:23 | userVal | semmle.label | userVal | subpaths -| tst.js:8:28:8:51 | req.que ... trolled | tst.js:21:25:21:25 | x | tst.js:23:9:23:42 | result. ... length) | tst.js:8:13:8:52 | myCoolL ... rolled) | +| tst.js:8:28:8:51 | req.que ... trolled | tst.js:27:25:27:25 | x | tst.js:29:9:29:42 | result. ... length) | tst.js:8:13:8:52 | myCoolL ... rolled) | diff --git a/javascript/ql/test/query-tests/Security/CWE-400/RemovePropertyInjection/RemotePropertyInjection.qlref b/javascript/ql/test/query-tests/Security/CWE-400/RemotePropertyInjection/RemotePropertyInjection.qlref similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-400/RemovePropertyInjection/RemotePropertyInjection.qlref rename to javascript/ql/test/query-tests/Security/CWE-400/RemotePropertyInjection/RemotePropertyInjection.qlref diff --git a/javascript/ql/test/query-tests/Security/CWE-400/RemovePropertyInjection/tst.js b/javascript/ql/test/query-tests/Security/CWE-400/RemotePropertyInjection/tst.js similarity index 87% rename from javascript/ql/test/query-tests/Security/CWE-400/RemovePropertyInjection/tst.js rename to javascript/ql/test/query-tests/Security/CWE-400/RemotePropertyInjection/tst.js index 301b7b80881..ebdb07a758b 100644 --- a/javascript/ql/test/query-tests/Security/CWE-400/RemovePropertyInjection/tst.js +++ b/javascript/ql/test/query-tests/Security/CWE-400/RemotePropertyInjection/tst.js @@ -16,10 +16,15 @@ app.get('/user/:id', function(req, res) { headers[prop] = 42; // $ Alert res.set(headers); myCoolLocalFct[req.query.x](); // OK - flagged by method name injection + + Object.keys(req.body).forEach( // $ Source + key => { + myObj[key] = 42; // $ Alert + } + ); }); function myCoolLocalFct(x) { var result = x; return result.substring(0, result.length); - -} \ No newline at end of file +} diff --git a/javascript/ql/test/query-tests/Security/CWE-400/RemovePropertyInjection/tstNonExpr.js b/javascript/ql/test/query-tests/Security/CWE-400/RemotePropertyInjection/tstNonExpr.js similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-400/RemovePropertyInjection/tstNonExpr.js rename to javascript/ql/test/query-tests/Security/CWE-400/RemotePropertyInjection/tstNonExpr.js diff --git a/javascript/ql/test/query-tests/Security/CWE-506/HardcodedDataInterpretedAsCode.expected b/javascript/ql/test/query-tests/Security/CWE-506/HardcodedDataInterpretedAsCode.expected index 85c44d00905..ffbc8cb2482 100644 --- a/javascript/ql/test/query-tests/Security/CWE-506/HardcodedDataInterpretedAsCode.expected +++ b/javascript/ql/test/query-tests/Security/CWE-506/HardcodedDataInterpretedAsCode.expected @@ -14,12 +14,12 @@ edges | event-stream.js:6:22:6:22 | r | event-stream.js:6:10:6:30 | Buffer. ... "hex") | provenance | Config | | event-stream.js:9:13:9:36 | "2e2f74 ... 617461" | event-stream.js:5:12:5:12 | r | provenance | | | event-stream.js:9:13:9:36 | "2e2f74 ... 617461" | event-stream.js:9:11:9:37 | e("2e2f ... 17461") | provenance | Config | -| tst.js:1:5:1:88 | totallyHarmlessString | tst.js:2:18:2:38 | totally ... sString | provenance | | -| tst.js:1:29:1:88 | '636f6e ... 6e2729' | tst.js:1:5:1:88 | totallyHarmlessString | provenance | | +| tst.js:1:5:1:25 | totallyHarmlessString | tst.js:2:18:2:38 | totally ... sString | provenance | | +| tst.js:1:29:1:88 | '636f6e ... 6e2729' | tst.js:1:5:1:25 | totallyHarmlessString | provenance | | | tst.js:2:6:2:46 | Buffer. ... 'hex') | tst.js:2:6:2:57 | Buffer. ... tring() | provenance | Config | | tst.js:2:18:2:38 | totally ... sString | tst.js:2:6:2:46 | Buffer. ... 'hex') | provenance | Config | -| tst.js:5:5:5:23 | test | tst.js:7:8:7:11 | test | provenance | | -| tst.js:5:12:5:23 | "0123456789" | tst.js:5:5:5:23 | test | provenance | | +| tst.js:5:5:5:8 | test | tst.js:7:8:7:11 | test | provenance | | +| tst.js:5:12:5:23 | "0123456789" | tst.js:5:5:5:8 | test | provenance | | | tst.js:7:8:7:11 | test | tst.js:7:8:7:15 | test+"n" | provenance | Config | nodes | event-stream-orig.js:93:16:93:16 | r | semmle.label | r | @@ -34,12 +34,12 @@ nodes | event-stream.js:6:22:6:22 | r | semmle.label | r | | event-stream.js:9:11:9:37 | e("2e2f ... 17461") | semmle.label | e("2e2f ... 17461") | | event-stream.js:9:13:9:36 | "2e2f74 ... 617461" | semmle.label | "2e2f74 ... 617461" | -| tst.js:1:5:1:88 | totallyHarmlessString | semmle.label | totallyHarmlessString | +| tst.js:1:5:1:25 | totallyHarmlessString | semmle.label | totallyHarmlessString | | tst.js:1:29:1:88 | '636f6e ... 6e2729' | semmle.label | '636f6e ... 6e2729' | | tst.js:2:6:2:46 | Buffer. ... 'hex') | semmle.label | Buffer. ... 'hex') | | tst.js:2:6:2:57 | Buffer. ... tring() | semmle.label | Buffer. ... tring() | | tst.js:2:18:2:38 | totally ... sString | semmle.label | totally ... sString | -| tst.js:5:5:5:23 | test | semmle.label | test | +| tst.js:5:5:5:8 | test | semmle.label | test | | tst.js:5:12:5:23 | "0123456789" | semmle.label | "0123456789" | | tst.js:7:8:7:11 | test | semmle.label | test | | tst.js:7:8:7:15 | test+"n" | semmle.label | test+"n" | diff --git a/javascript/ql/test/query-tests/Security/CWE-522-DecompressionBombs/DecompressionBombs.expected b/javascript/ql/test/query-tests/Security/CWE-522-DecompressionBombs/DecompressionBombs.expected index 11c63c257e8..43fa4f8c6a8 100644 --- a/javascript/ql/test/query-tests/Security/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/javascript/ql/test/query-tests/Security/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -74,16 +74,16 @@ edges | pako.js:13:14:13:22 | req.files | pako.js:13:14:13:39 | req.fil ... le.data | provenance | | | pako.js:13:14:13:39 | req.fil ... le.data | pako.js:28:19:28:25 | zipFile | provenance | | | pako.js:17:19:17:25 | zipFile | pako.js:18:48:18:54 | zipFile | provenance | | -| pako.js:18:11:18:68 | myArray | pako.js:21:31:21:37 | myArray | provenance | | -| pako.js:18:21:18:68 | Buffer. ... uffer)) | pako.js:18:11:18:68 | myArray | provenance | | +| pako.js:18:11:18:17 | myArray | pako.js:21:31:21:37 | myArray | provenance | | +| pako.js:18:21:18:68 | Buffer. ... uffer)) | pako.js:18:11:18:17 | myArray | provenance | | | pako.js:18:33:18:67 | new Uin ... buffer) | pako.js:18:21:18:68 | Buffer. ... uffer)) | provenance | | | pako.js:18:48:18:54 | zipFile | pako.js:18:48:18:66 | zipFile.data.buffer | provenance | | | pako.js:18:48:18:66 | zipFile.data.buffer | pako.js:18:33:18:67 | new Uin ... buffer) | provenance | Config | | pako.js:28:19:28:25 | zipFile | pako.js:29:36:29:42 | zipFile | provenance | | -| pako.js:29:11:29:62 | myArray | pako.js:32:31:32:37 | myArray | provenance | | -| pako.js:29:11:29:62 | myArray [ArrayElement] | pako.js:32:31:32:37 | myArray | provenance | | -| pako.js:29:21:29:55 | new Uin ... buffer) | pako.js:29:11:29:62 | myArray | provenance | | -| pako.js:29:21:29:55 | new Uin ... buffer) [ArrayElement] | pako.js:29:11:29:62 | myArray [ArrayElement] | provenance | | +| pako.js:29:11:29:17 | myArray | pako.js:32:31:32:37 | myArray | provenance | | +| pako.js:29:11:29:17 | myArray [ArrayElement] | pako.js:32:31:32:37 | myArray | provenance | | +| pako.js:29:21:29:55 | new Uin ... buffer) | pako.js:29:11:29:17 | myArray | provenance | | +| pako.js:29:21:29:55 | new Uin ... buffer) [ArrayElement] | pako.js:29:11:29:17 | myArray [ArrayElement] | provenance | | | pako.js:29:36:29:42 | zipFile | pako.js:29:36:29:54 | zipFile.data.buffer | provenance | | | pako.js:29:36:29:54 | zipFile.data.buffer | pako.js:29:21:29:55 | new Uin ... buffer) | provenance | Config | | pako.js:29:36:29:54 | zipFile.data.buffer | pako.js:29:21:29:55 | new Uin ... buffer) [ArrayElement] | provenance | | @@ -132,8 +132,8 @@ edges | zlib.js:75:39:75:45 | zipFile | zlib.js:75:39:75:50 | zipFile.data | provenance | | | zlib.js:75:39:75:50 | zipFile.data | zlib.js:75:25:75:51 | Readabl ... e.data) | provenance | Config | | zlib.js:82:43:82:49 | zipFile | zlib.js:83:39:83:45 | zipFile | provenance | | -| zlib.js:83:11:83:51 | inputStream | zlib.js:86:9:86:19 | inputStream | provenance | | -| zlib.js:83:25:83:51 | Readabl ... e.data) | zlib.js:83:11:83:51 | inputStream | provenance | | +| zlib.js:83:11:83:21 | inputStream | zlib.js:86:9:86:19 | inputStream | provenance | | +| zlib.js:83:25:83:51 | Readabl ... e.data) | zlib.js:83:11:83:21 | inputStream | provenance | | | zlib.js:83:39:83:45 | zipFile | zlib.js:83:39:83:50 | zipFile.data | provenance | | | zlib.js:83:39:83:50 | zipFile.data | zlib.js:83:25:83:51 | Readabl ... e.data) | provenance | Config | | zlib.js:86:9:86:19 | inputStream | zlib.js:87:9:87:27 | zlib.createGunzip() | provenance | Config | @@ -178,15 +178,15 @@ nodes | pako.js:13:14:13:22 | req.files | semmle.label | req.files | | pako.js:13:14:13:39 | req.fil ... le.data | semmle.label | req.fil ... le.data | | pako.js:17:19:17:25 | zipFile | semmle.label | zipFile | -| pako.js:18:11:18:68 | myArray | semmle.label | myArray | +| pako.js:18:11:18:17 | myArray | semmle.label | myArray | | pako.js:18:21:18:68 | Buffer. ... uffer)) | semmle.label | Buffer. ... uffer)) | | pako.js:18:33:18:67 | new Uin ... buffer) | semmle.label | new Uin ... buffer) | | pako.js:18:48:18:54 | zipFile | semmle.label | zipFile | | pako.js:18:48:18:66 | zipFile.data.buffer | semmle.label | zipFile.data.buffer | | pako.js:21:31:21:37 | myArray | semmle.label | myArray | | pako.js:28:19:28:25 | zipFile | semmle.label | zipFile | -| pako.js:29:11:29:62 | myArray | semmle.label | myArray | -| pako.js:29:11:29:62 | myArray [ArrayElement] | semmle.label | myArray [ArrayElement] | +| pako.js:29:11:29:17 | myArray | semmle.label | myArray | +| pako.js:29:11:29:17 | myArray [ArrayElement] | semmle.label | myArray [ArrayElement] | | pako.js:29:21:29:55 | new Uin ... buffer) | semmle.label | new Uin ... buffer) | | pako.js:29:21:29:55 | new Uin ... buffer) [ArrayElement] | semmle.label | new Uin ... buffer) [ArrayElement] | | pako.js:29:36:29:42 | zipFile | semmle.label | zipFile | @@ -246,7 +246,7 @@ nodes | zlib.js:78:22:78:39 | zlib.createUnzip() | semmle.label | zlib.createUnzip() | | zlib.js:79:22:79:50 | zlib.cr ... press() | semmle.label | zlib.cr ... press() | | zlib.js:82:43:82:49 | zipFile | semmle.label | zipFile | -| zlib.js:83:11:83:51 | inputStream | semmle.label | inputStream | +| zlib.js:83:11:83:21 | inputStream | semmle.label | inputStream | | zlib.js:83:25:83:51 | Readabl ... e.data) | semmle.label | Readabl ... e.data) | | zlib.js:83:39:83:45 | zipFile | semmle.label | zipFile | | zlib.js:83:39:83:50 | zipFile.data | semmle.label | zipFile.data | diff --git a/javascript/ql/test/query-tests/Security/CWE-601/ClientSideUrlRedirect/ClientSideUrlRedirect.expected b/javascript/ql/test/query-tests/Security/CWE-601/ClientSideUrlRedirect/ClientSideUrlRedirect.expected index 243d4b25dfd..d4617441802 100644 --- a/javascript/ql/test/query-tests/Security/CWE-601/ClientSideUrlRedirect/ClientSideUrlRedirect.expected +++ b/javascript/ql/test/query-tests/Security/CWE-601/ClientSideUrlRedirect/ClientSideUrlRedirect.expected @@ -79,41 +79,41 @@ edges | react.js:31:43:31:64 | documen ... on.hash | react.js:31:43:31:74 | documen ... bstr(1) | provenance | Config | | react.js:37:43:37:64 | documen ... on.hash | react.js:37:43:37:74 | documen ... bstr(1) | provenance | Config | | react.js:43:19:43:40 | documen ... on.hash | react.js:43:19:43:50 | documen ... bstr(1) | provenance | Config | -| regexp-exec.js:4:11:4:20 | [, group1] | regexp-exec.js:4:11:4:57 | group1 | provenance | | -| regexp-exec.js:4:11:4:57 | group1 | regexp-exec.js:5:28:5:33 | group1 | provenance | | +| regexp-exec.js:4:11:4:20 | [, group1] | regexp-exec.js:4:14:4:19 | group1 | provenance | | +| regexp-exec.js:4:14:4:19 | group1 | regexp-exec.js:5:28:5:33 | group1 | provenance | | | regexp-exec.js:4:24:4:57 | /#(.*)/ ... n.href) | regexp-exec.js:4:11:4:20 | [, group1] | provenance | | | regexp-exec.js:4:37:4:56 | window.location.href | regexp-exec.js:4:24:4:57 | /#(.*)/ ... n.href) | provenance | Config | -| regexp-exec.js:9:11:9:20 | [, group1] | regexp-exec.js:9:11:9:58 | group1 | provenance | | -| regexp-exec.js:9:11:9:58 | group1 | regexp-exec.js:10:28:10:33 | group1 | provenance | | +| regexp-exec.js:9:11:9:20 | [, group1] | regexp-exec.js:9:14:9:19 | group1 | provenance | | +| regexp-exec.js:9:14:9:19 | group1 | regexp-exec.js:10:28:10:33 | group1 | provenance | | | regexp-exec.js:9:24:9:58 | /\\?(.*) ... n.href) | regexp-exec.js:9:11:9:20 | [, group1] | provenance | | | regexp-exec.js:9:38:9:57 | window.location.href | regexp-exec.js:9:24:9:58 | /\\?(.*) ... n.href) | provenance | Config | -| regexp-exec.js:29:11:29:20 | [, group1] | regexp-exec.js:29:11:29:58 | group1 | provenance | | -| regexp-exec.js:29:11:29:58 | group1 | regexp-exec.js:30:28:30:33 | group1 | provenance | | +| regexp-exec.js:29:11:29:20 | [, group1] | regexp-exec.js:29:14:29:19 | group1 | provenance | | +| regexp-exec.js:29:14:29:19 | group1 | regexp-exec.js:30:28:30:33 | group1 | provenance | | | regexp-exec.js:29:24:29:43 | window.location.href | regexp-exec.js:29:24:29:58 | window. ... #(.*)/) | provenance | Config | | regexp-exec.js:29:24:29:58 | window. ... #(.*)/) | regexp-exec.js:29:11:29:20 | [, group1] | provenance | | -| regexp-exec.js:34:11:34:20 | [, group1] | regexp-exec.js:34:11:34:64 | group1 | provenance | | -| regexp-exec.js:34:11:34:64 | group1 | regexp-exec.js:35:28:35:33 | group1 | provenance | | +| regexp-exec.js:34:11:34:20 | [, group1] | regexp-exec.js:34:14:34:19 | group1 | provenance | | +| regexp-exec.js:34:14:34:19 | group1 | regexp-exec.js:35:28:35:33 | group1 | provenance | | | regexp-exec.js:34:24:34:43 | window.location.href | regexp-exec.js:34:24:34:61 | window. ... #(.*)/) | provenance | Config | | regexp-exec.js:34:24:34:61 | window. ... #(.*)/) | regexp-exec.js:34:11:34:20 | [, group1] | provenance | | -| regexp-exec.js:39:11:39:20 | [, group1] | regexp-exec.js:39:11:39:71 | group1 | provenance | | -| regexp-exec.js:39:11:39:71 | group1 | regexp-exec.js:40:28:40:33 | group1 | provenance | | +| regexp-exec.js:39:11:39:20 | [, group1] | regexp-exec.js:39:14:39:19 | group1 | provenance | | +| regexp-exec.js:39:14:39:19 | group1 | regexp-exec.js:40:28:40:33 | group1 | provenance | | | regexp-exec.js:39:24:39:71 | new Reg ... n.href) | regexp-exec.js:39:11:39:20 | [, group1] | provenance | | | regexp-exec.js:39:51:39:70 | window.location.href | regexp-exec.js:39:24:39:71 | new Reg ... n.href) | provenance | Config | -| sanitizer.js:2:9:2:25 | url | sanitizer.js:4:27:4:29 | url | provenance | | -| sanitizer.js:2:9:2:25 | url | sanitizer.js:16:27:16:29 | url | provenance | | -| sanitizer.js:2:9:2:25 | url | sanitizer.js:19:27:19:29 | url | provenance | | -| sanitizer.js:2:9:2:25 | url | sanitizer.js:22:27:22:29 | url | provenance | | -| sanitizer.js:2:9:2:25 | url | sanitizer.js:25:27:25:29 | url | provenance | | -| sanitizer.js:2:9:2:25 | url | sanitizer.js:28:27:28:29 | url | provenance | | -| sanitizer.js:2:9:2:25 | url | sanitizer.js:31:27:31:29 | url | provenance | | -| sanitizer.js:2:9:2:25 | url | sanitizer.js:37:27:37:29 | url | provenance | | -| sanitizer.js:2:15:2:25 | window.name | sanitizer.js:2:9:2:25 | url | provenance | | -| tst2.js:2:7:2:33 | href | tst2.js:3:21:3:24 | href | provenance | | -| tst2.js:2:14:2:33 | window.location.href | tst2.js:2:7:2:33 | href | provenance | | +| sanitizer.js:2:9:2:11 | url | sanitizer.js:4:27:4:29 | url | provenance | | +| sanitizer.js:2:9:2:11 | url | sanitizer.js:16:27:16:29 | url | provenance | | +| sanitizer.js:2:9:2:11 | url | sanitizer.js:19:27:19:29 | url | provenance | | +| sanitizer.js:2:9:2:11 | url | sanitizer.js:22:27:22:29 | url | provenance | | +| sanitizer.js:2:9:2:11 | url | sanitizer.js:25:27:25:29 | url | provenance | | +| sanitizer.js:2:9:2:11 | url | sanitizer.js:28:27:28:29 | url | provenance | | +| sanitizer.js:2:9:2:11 | url | sanitizer.js:31:27:31:29 | url | provenance | | +| sanitizer.js:2:9:2:11 | url | sanitizer.js:37:27:37:29 | url | provenance | | +| sanitizer.js:2:15:2:25 | window.name | sanitizer.js:2:9:2:11 | url | provenance | | +| tst2.js:2:7:2:10 | href | tst2.js:3:21:3:24 | href | provenance | | +| tst2.js:2:14:2:33 | window.location.href | tst2.js:2:7:2:10 | href | provenance | | | tst2.js:3:21:3:24 | href | tst2.js:3:21:3:55 | href.su ... '?')+1) | provenance | Config | -| tst6.js:2:7:2:45 | redirect | tst6.js:3:21:3:28 | redirect | provenance | | -| tst6.js:2:7:2:45 | redirect | tst6.js:4:17:4:24 | redirect | provenance | | -| tst6.js:2:18:2:45 | $locati ... irect') | tst6.js:2:7:2:45 | redirect | provenance | | +| tst6.js:2:7:2:14 | redirect | tst6.js:3:21:3:28 | redirect | provenance | | +| tst6.js:2:7:2:14 | redirect | tst6.js:4:17:4:24 | redirect | provenance | | +| tst6.js:2:18:2:45 | $locati ... irect') | tst6.js:2:7:2:14 | redirect | provenance | | | tst6.js:5:21:5:48 | $locati ... irect') | tst6.js:5:21:5:56 | $locati ... + "foo" | provenance | | | tst7.js:1:12:1:35 | documen ... .search | tst7.js:1:12:1:48 | documen ... ring(1) | provenance | Config | | tst7.js:3:27:3:50 | documen ... .search | tst7.js:3:27:3:63 | documen ... ring(1) | provenance | Config | @@ -126,63 +126,63 @@ edges | tst10.js:8:27:8:63 | documen ... ring(1) | tst10.js:8:17:8:63 | '//foo' ... ring(1) | provenance | | | tst10.js:10:33:10:56 | documen ... .search | tst10.js:10:33:10:69 | documen ... ring(1) | provenance | Config | | tst10.js:10:33:10:69 | documen ... ring(1) | tst10.js:10:17:10:69 | 'https: ... ring(1) | provenance | | -| tst13.js:2:9:2:52 | payload | tst13.js:4:15:4:21 | payload | provenance | | -| tst13.js:2:9:2:52 | payload | tst13.js:8:21:8:27 | payload | provenance | | -| tst13.js:2:9:2:52 | payload | tst13.js:12:14:12:20 | payload | provenance | | -| tst13.js:2:9:2:52 | payload | tst13.js:16:17:16:23 | payload | provenance | | -| tst13.js:2:9:2:52 | payload | tst13.js:20:14:20:20 | payload | provenance | | -| tst13.js:2:9:2:52 | payload | tst13.js:24:14:24:20 | payload | provenance | | -| tst13.js:2:9:2:52 | payload | tst13.js:28:21:28:27 | payload | provenance | | -| tst13.js:2:9:2:52 | payload | tst13.js:32:17:32:23 | payload | provenance | | -| tst13.js:2:9:2:52 | payload | tst13.js:36:21:36:27 | payload | provenance | | -| tst13.js:2:9:2:52 | payload | tst13.js:40:15:40:21 | payload | provenance | | -| tst13.js:2:9:2:52 | payload | tst13.js:44:14:44:20 | payload | provenance | | +| tst13.js:2:9:2:15 | payload | tst13.js:4:15:4:21 | payload | provenance | | +| tst13.js:2:9:2:15 | payload | tst13.js:8:21:8:27 | payload | provenance | | +| tst13.js:2:9:2:15 | payload | tst13.js:12:14:12:20 | payload | provenance | | +| tst13.js:2:9:2:15 | payload | tst13.js:16:17:16:23 | payload | provenance | | +| tst13.js:2:9:2:15 | payload | tst13.js:20:14:20:20 | payload | provenance | | +| tst13.js:2:9:2:15 | payload | tst13.js:24:14:24:20 | payload | provenance | | +| tst13.js:2:9:2:15 | payload | tst13.js:28:21:28:27 | payload | provenance | | +| tst13.js:2:9:2:15 | payload | tst13.js:32:17:32:23 | payload | provenance | | +| tst13.js:2:9:2:15 | payload | tst13.js:36:21:36:27 | payload | provenance | | +| tst13.js:2:9:2:15 | payload | tst13.js:40:15:40:21 | payload | provenance | | +| tst13.js:2:9:2:15 | payload | tst13.js:44:14:44:20 | payload | provenance | | | tst13.js:2:19:2:42 | documen ... .search | tst13.js:2:19:2:52 | documen ... bstr(1) | provenance | Config | -| tst13.js:2:19:2:52 | documen ... bstr(1) | tst13.js:2:9:2:52 | payload | provenance | | +| tst13.js:2:19:2:52 | documen ... bstr(1) | tst13.js:2:9:2:15 | payload | provenance | | | tst13.js:49:32:49:32 | e | tst13.js:50:23:50:23 | e | provenance | | | tst13.js:52:34:52:34 | e | tst13.js:53:28:53:28 | e | provenance | | -| tst13.js:59:9:59:52 | payload | tst13.js:61:18:61:24 | payload | provenance | | +| tst13.js:59:9:59:15 | payload | tst13.js:61:18:61:24 | payload | provenance | | | tst13.js:59:19:59:42 | documen ... .search | tst13.js:59:19:59:52 | documen ... bstr(1) | provenance | Config | -| tst13.js:59:19:59:52 | documen ... bstr(1) | tst13.js:59:9:59:52 | payload | provenance | | -| tst13.js:65:9:65:49 | payload | tst13.js:67:21:67:27 | payload | provenance | | +| tst13.js:59:19:59:52 | documen ... bstr(1) | tst13.js:59:9:59:15 | payload | provenance | | +| tst13.js:65:9:65:15 | payload | tst13.js:67:21:67:27 | payload | provenance | | | tst13.js:65:19:65:39 | history ... on.hash | tst13.js:65:19:65:49 | history ... bstr(1) | provenance | | -| tst13.js:65:19:65:49 | history ... bstr(1) | tst13.js:65:9:65:49 | payload | provenance | | -| tst13.js:72:9:72:49 | payload | tst13.js:74:21:74:27 | payload | provenance | | +| tst13.js:65:19:65:49 | history ... bstr(1) | tst13.js:65:9:65:15 | payload | provenance | | +| tst13.js:72:9:72:15 | payload | tst13.js:74:21:74:27 | payload | provenance | | | tst13.js:72:19:72:39 | history ... on.hash | tst13.js:72:19:72:49 | history ... bstr(1) | provenance | | -| tst13.js:72:19:72:49 | history ... bstr(1) | tst13.js:72:9:72:49 | payload | provenance | | -| tst13.js:78:9:78:48 | url | tst13.js:80:21:80:23 | url | provenance | | -| tst13.js:78:9:78:48 | url | tst13.js:81:28:81:30 | url | provenance | | -| tst13.js:78:9:78:48 | url | tst13.js:82:27:82:29 | url | provenance | | -| tst13.js:78:9:78:48 | url | tst13.js:83:22:83:24 | url | provenance | | +| tst13.js:72:19:72:49 | history ... bstr(1) | tst13.js:72:9:72:15 | payload | provenance | | +| tst13.js:78:9:78:11 | url | tst13.js:80:21:80:23 | url | provenance | | +| tst13.js:78:9:78:11 | url | tst13.js:81:28:81:30 | url | provenance | | +| tst13.js:78:9:78:11 | url | tst13.js:82:27:82:29 | url | provenance | | +| tst13.js:78:9:78:11 | url | tst13.js:83:22:83:24 | url | provenance | | | tst13.js:78:15:78:38 | documen ... .search | tst13.js:78:15:78:48 | documen ... bstr(1) | provenance | Config | -| tst13.js:78:15:78:48 | documen ... bstr(1) | tst13.js:78:9:78:48 | url | provenance | | -| tst15.js:2:9:2:42 | url | tst15.js:3:23:3:25 | url | provenance | | -| tst15.js:2:9:2:42 | url | tst15.js:4:23:4:25 | url | provenance | | -| tst15.js:2:9:2:42 | url | tst15.js:5:23:5:25 | url | provenance | | +| tst13.js:78:15:78:48 | documen ... bstr(1) | tst13.js:78:9:78:11 | url | provenance | | +| tst15.js:2:9:2:11 | url | tst15.js:3:23:3:25 | url | provenance | | +| tst15.js:2:9:2:11 | url | tst15.js:4:23:4:25 | url | provenance | | +| tst15.js:2:9:2:11 | url | tst15.js:5:23:5:25 | url | provenance | | | tst15.js:2:15:2:31 | document.location | tst15.js:2:15:2:42 | documen ... tring() | provenance | | -| tst15.js:2:15:2:42 | documen ... tring() | tst15.js:2:9:2:42 | url | provenance | | +| tst15.js:2:15:2:42 | documen ... tring() | tst15.js:2:9:2:11 | url | provenance | | | tst15.js:3:23:3:25 | url | tst15.js:3:23:3:38 | url.substring(0) | provenance | | | tst15.js:3:23:3:38 | url.substring(0) | tst15.js:3:23:3:51 | url.sub ... ring(1) | provenance | Config | | tst15.js:4:23:4:25 | url | tst15.js:4:23:4:42 | url.substring(0, 10) | provenance | | | tst15.js:4:23:4:42 | url.substring(0, 10) | tst15.js:4:23:4:55 | url.sub ... ring(1) | provenance | Config | | tst15.js:5:23:5:25 | url | tst15.js:5:23:5:60 | url.sub ... ', 10)) | provenance | | | tst15.js:5:23:5:60 | url.sub ... ', 10)) | tst15.js:5:23:5:73 | url.sub ... ring(1) | provenance | Config | -| tst15.js:7:9:7:43 | url2 | tst15.js:8:23:8:26 | url2 | provenance | | -| tst15.js:7:9:7:43 | url2 | tst15.js:9:23:9:26 | url2 | provenance | | -| tst15.js:7:9:7:43 | url2 | tst15.js:10:23:10:26 | url2 | provenance | | +| tst15.js:7:9:7:12 | url2 | tst15.js:8:23:8:26 | url2 | provenance | | +| tst15.js:7:9:7:12 | url2 | tst15.js:9:23:9:26 | url2 | provenance | | +| tst15.js:7:9:7:12 | url2 | tst15.js:10:23:10:26 | url2 | provenance | | | tst15.js:7:16:7:32 | document.location | tst15.js:7:16:7:43 | documen ... tring() | provenance | | -| tst15.js:7:16:7:43 | documen ... tring() | tst15.js:7:9:7:43 | url2 | provenance | | +| tst15.js:7:16:7:43 | documen ... tring() | tst15.js:7:9:7:12 | url2 | provenance | | | tst15.js:8:23:8:26 | url2 | tst15.js:8:23:8:39 | url2.substring(0) | provenance | | | tst15.js:8:23:8:39 | url2.substring(0) | tst15.js:8:23:8:60 | url2.su ... nown()) | provenance | Config | | tst15.js:9:23:9:26 | url2 | tst15.js:9:23:9:43 | url2.su ... (0, 10) | provenance | | | tst15.js:9:23:9:43 | url2.su ... (0, 10) | tst15.js:9:23:9:64 | url2.su ... nown()) | provenance | Config | | tst15.js:10:23:10:26 | url2 | tst15.js:10:23:10:62 | url2.su ... ', 10)) | provenance | | | tst15.js:10:23:10:62 | url2.su ... ', 10)) | tst15.js:10:23:10:83 | url2.su ... nown()) | provenance | Config | -| tst15.js:12:9:12:52 | search | tst15.js:13:23:13:28 | search | provenance | | -| tst15.js:12:9:12:52 | search | tst15.js:14:23:14:28 | search | provenance | | -| tst15.js:12:9:12:52 | search | tst15.js:15:23:15:28 | search | provenance | | +| tst15.js:12:9:12:14 | search | tst15.js:13:23:13:28 | search | provenance | | +| tst15.js:12:9:12:14 | search | tst15.js:14:23:14:28 | search | provenance | | +| tst15.js:12:9:12:14 | search | tst15.js:15:23:15:28 | search | provenance | | | tst15.js:12:18:12:41 | documen ... .search | tst15.js:12:18:12:52 | documen ... tring() | provenance | | -| tst15.js:12:18:12:52 | documen ... tring() | tst15.js:12:9:12:52 | search | provenance | | +| tst15.js:12:18:12:52 | documen ... tring() | tst15.js:12:9:12:14 | search | provenance | | | tst15.js:13:23:13:28 | search | tst15.js:13:23:13:41 | search.substring(0) | provenance | | | tst15.js:13:23:13:41 | search.substring(0) | tst15.js:13:23:13:54 | search. ... ring(1) | provenance | Config | | tst15.js:14:23:14:28 | search | tst15.js:14:23:14:45 | search. ... (0, 10) | provenance | | @@ -208,9 +208,9 @@ edges | tst.js:19:34:19:55 | documen ... on.href | tst.js:19:20:19:56 | indirec ... n.href) | provenance | Config | | tst.js:23:22:23:79 | new Reg ... n.href) | tst.js:23:22:23:82 | new Reg ... ref)[1] | provenance | | | tst.js:23:62:23:78 | win.location.href | tst.js:23:22:23:79 | new Reg ... n.href) | provenance | Config | -| typed.ts:4:13:4:49 | params | typed.ts:5:25:5:30 | params | provenance | | +| typed.ts:4:13:4:18 | params | typed.ts:5:25:5:30 | params | provenance | | | typed.ts:4:22:4:36 | location.search | typed.ts:4:22:4:49 | locatio ... ring(1) | provenance | Config | -| typed.ts:4:22:4:49 | locatio ... ring(1) | typed.ts:4:13:4:49 | params | provenance | | +| typed.ts:4:22:4:49 | locatio ... ring(1) | typed.ts:4:13:4:18 | params | provenance | | | typed.ts:5:25:5:30 | params | typed.ts:7:24:7:34 | redirectUri | provenance | | | typed.ts:7:24:7:34 | redirectUri | typed.ts:8:33:8:43 | redirectUri | provenance | | | typed.ts:25:25:25:34 | loc.search | typed.ts:25:25:25:47 | loc.sea ... ring(1) | provenance | Config | @@ -236,31 +236,31 @@ nodes | react.js:43:19:43:40 | documen ... on.hash | semmle.label | documen ... on.hash | | react.js:43:19:43:50 | documen ... bstr(1) | semmle.label | documen ... bstr(1) | | regexp-exec.js:4:11:4:20 | [, group1] | semmle.label | [, group1] | -| regexp-exec.js:4:11:4:57 | group1 | semmle.label | group1 | +| regexp-exec.js:4:14:4:19 | group1 | semmle.label | group1 | | regexp-exec.js:4:24:4:57 | /#(.*)/ ... n.href) | semmle.label | /#(.*)/ ... n.href) | | regexp-exec.js:4:37:4:56 | window.location.href | semmle.label | window.location.href | | regexp-exec.js:5:28:5:33 | group1 | semmle.label | group1 | | regexp-exec.js:9:11:9:20 | [, group1] | semmle.label | [, group1] | -| regexp-exec.js:9:11:9:58 | group1 | semmle.label | group1 | +| regexp-exec.js:9:14:9:19 | group1 | semmle.label | group1 | | regexp-exec.js:9:24:9:58 | /\\?(.*) ... n.href) | semmle.label | /\\?(.*) ... n.href) | | regexp-exec.js:9:38:9:57 | window.location.href | semmle.label | window.location.href | | regexp-exec.js:10:28:10:33 | group1 | semmle.label | group1 | | regexp-exec.js:29:11:29:20 | [, group1] | semmle.label | [, group1] | -| regexp-exec.js:29:11:29:58 | group1 | semmle.label | group1 | +| regexp-exec.js:29:14:29:19 | group1 | semmle.label | group1 | | regexp-exec.js:29:24:29:43 | window.location.href | semmle.label | window.location.href | | regexp-exec.js:29:24:29:58 | window. ... #(.*)/) | semmle.label | window. ... #(.*)/) | | regexp-exec.js:30:28:30:33 | group1 | semmle.label | group1 | | regexp-exec.js:34:11:34:20 | [, group1] | semmle.label | [, group1] | -| regexp-exec.js:34:11:34:64 | group1 | semmle.label | group1 | +| regexp-exec.js:34:14:34:19 | group1 | semmle.label | group1 | | regexp-exec.js:34:24:34:43 | window.location.href | semmle.label | window.location.href | | regexp-exec.js:34:24:34:61 | window. ... #(.*)/) | semmle.label | window. ... #(.*)/) | | regexp-exec.js:35:28:35:33 | group1 | semmle.label | group1 | | regexp-exec.js:39:11:39:20 | [, group1] | semmle.label | [, group1] | -| regexp-exec.js:39:11:39:71 | group1 | semmle.label | group1 | +| regexp-exec.js:39:14:39:19 | group1 | semmle.label | group1 | | regexp-exec.js:39:24:39:71 | new Reg ... n.href) | semmle.label | new Reg ... n.href) | | regexp-exec.js:39:51:39:70 | window.location.href | semmle.label | window.location.href | | regexp-exec.js:40:28:40:33 | group1 | semmle.label | group1 | -| sanitizer.js:2:9:2:25 | url | semmle.label | url | +| sanitizer.js:2:9:2:11 | url | semmle.label | url | | sanitizer.js:2:15:2:25 | window.name | semmle.label | window.name | | sanitizer.js:4:27:4:29 | url | semmle.label | url | | sanitizer.js:16:27:16:29 | url | semmle.label | url | @@ -270,11 +270,11 @@ nodes | sanitizer.js:28:27:28:29 | url | semmle.label | url | | sanitizer.js:31:27:31:29 | url | semmle.label | url | | sanitizer.js:37:27:37:29 | url | semmle.label | url | -| tst2.js:2:7:2:33 | href | semmle.label | href | +| tst2.js:2:7:2:10 | href | semmle.label | href | | tst2.js:2:14:2:33 | window.location.href | semmle.label | window.location.href | | tst2.js:3:21:3:24 | href | semmle.label | href | | tst2.js:3:21:3:55 | href.su ... '?')+1) | semmle.label | href.su ... '?')+1) | -| tst6.js:2:7:2:45 | redirect | semmle.label | redirect | +| tst6.js:2:7:2:14 | redirect | semmle.label | redirect | | tst6.js:2:18:2:45 | $locati ... irect') | semmle.label | $locati ... irect') | | tst6.js:3:21:3:28 | redirect | semmle.label | redirect | | tst6.js:4:17:4:24 | redirect | semmle.label | redirect | @@ -298,7 +298,7 @@ nodes | tst10.js:10:17:10:69 | 'https: ... ring(1) | semmle.label | 'https: ... ring(1) | | tst10.js:10:33:10:56 | documen ... .search | semmle.label | documen ... .search | | tst10.js:10:33:10:69 | documen ... ring(1) | semmle.label | documen ... ring(1) | -| tst13.js:2:9:2:52 | payload | semmle.label | payload | +| tst13.js:2:9:2:15 | payload | semmle.label | payload | | tst13.js:2:19:2:42 | documen ... .search | semmle.label | documen ... .search | | tst13.js:2:19:2:52 | documen ... bstr(1) | semmle.label | documen ... bstr(1) | | tst13.js:4:15:4:21 | payload | semmle.label | payload | @@ -316,26 +316,26 @@ nodes | tst13.js:50:23:50:23 | e | semmle.label | e | | tst13.js:52:34:52:34 | e | semmle.label | e | | tst13.js:53:28:53:28 | e | semmle.label | e | -| tst13.js:59:9:59:52 | payload | semmle.label | payload | +| tst13.js:59:9:59:15 | payload | semmle.label | payload | | tst13.js:59:19:59:42 | documen ... .search | semmle.label | documen ... .search | | tst13.js:59:19:59:52 | documen ... bstr(1) | semmle.label | documen ... bstr(1) | | tst13.js:61:18:61:24 | payload | semmle.label | payload | -| tst13.js:65:9:65:49 | payload | semmle.label | payload | +| tst13.js:65:9:65:15 | payload | semmle.label | payload | | tst13.js:65:19:65:39 | history ... on.hash | semmle.label | history ... on.hash | | tst13.js:65:19:65:49 | history ... bstr(1) | semmle.label | history ... bstr(1) | | tst13.js:67:21:67:27 | payload | semmle.label | payload | -| tst13.js:72:9:72:49 | payload | semmle.label | payload | +| tst13.js:72:9:72:15 | payload | semmle.label | payload | | tst13.js:72:19:72:39 | history ... on.hash | semmle.label | history ... on.hash | | tst13.js:72:19:72:49 | history ... bstr(1) | semmle.label | history ... bstr(1) | | tst13.js:74:21:74:27 | payload | semmle.label | payload | -| tst13.js:78:9:78:48 | url | semmle.label | url | +| tst13.js:78:9:78:11 | url | semmle.label | url | | tst13.js:78:15:78:38 | documen ... .search | semmle.label | documen ... .search | | tst13.js:78:15:78:48 | documen ... bstr(1) | semmle.label | documen ... bstr(1) | | tst13.js:80:21:80:23 | url | semmle.label | url | | tst13.js:81:28:81:30 | url | semmle.label | url | | tst13.js:82:27:82:29 | url | semmle.label | url | | tst13.js:83:22:83:24 | url | semmle.label | url | -| tst15.js:2:9:2:42 | url | semmle.label | url | +| tst15.js:2:9:2:11 | url | semmle.label | url | | tst15.js:2:15:2:31 | document.location | semmle.label | document.location | | tst15.js:2:15:2:42 | documen ... tring() | semmle.label | documen ... tring() | | tst15.js:3:23:3:25 | url | semmle.label | url | @@ -347,7 +347,7 @@ nodes | tst15.js:5:23:5:25 | url | semmle.label | url | | tst15.js:5:23:5:60 | url.sub ... ', 10)) | semmle.label | url.sub ... ', 10)) | | tst15.js:5:23:5:73 | url.sub ... ring(1) | semmle.label | url.sub ... ring(1) | -| tst15.js:7:9:7:43 | url2 | semmle.label | url2 | +| tst15.js:7:9:7:12 | url2 | semmle.label | url2 | | tst15.js:7:16:7:32 | document.location | semmle.label | document.location | | tst15.js:7:16:7:43 | documen ... tring() | semmle.label | documen ... tring() | | tst15.js:8:23:8:26 | url2 | semmle.label | url2 | @@ -359,7 +359,7 @@ nodes | tst15.js:10:23:10:26 | url2 | semmle.label | url2 | | tst15.js:10:23:10:62 | url2.su ... ', 10)) | semmle.label | url2.su ... ', 10)) | | tst15.js:10:23:10:83 | url2.su ... nown()) | semmle.label | url2.su ... nown()) | -| tst15.js:12:9:12:52 | search | semmle.label | search | +| tst15.js:12:9:12:14 | search | semmle.label | search | | tst15.js:12:18:12:41 | documen ... .search | semmle.label | documen ... .search | | tst15.js:12:18:12:52 | documen ... tring() | semmle.label | documen ... tring() | | tst15.js:13:23:13:28 | search | semmle.label | search | @@ -400,7 +400,7 @@ nodes | tst.js:23:22:23:79 | new Reg ... n.href) | semmle.label | new Reg ... n.href) | | tst.js:23:22:23:82 | new Reg ... ref)[1] | semmle.label | new Reg ... ref)[1] | | tst.js:23:62:23:78 | win.location.href | semmle.label | win.location.href | -| typed.ts:4:13:4:49 | params | semmle.label | params | +| typed.ts:4:13:4:18 | params | semmle.label | params | | typed.ts:4:22:4:36 | location.search | semmle.label | location.search | | typed.ts:4:22:4:49 | locatio ... ring(1) | semmle.label | locatio ... ring(1) | | typed.ts:5:25:5:30 | params | semmle.label | params | diff --git a/javascript/ql/test/query-tests/Security/CWE-601/ServerSideUrlRedirect/ServerSideUrlRedirect.expected b/javascript/ql/test/query-tests/Security/CWE-601/ServerSideUrlRedirect/ServerSideUrlRedirect.expected index 34c12408de3..c8466a9560d 100644 --- a/javascript/ql/test/query-tests/Security/CWE-601/ServerSideUrlRedirect/ServerSideUrlRedirect.expected +++ b/javascript/ql/test/query-tests/Security/CWE-601/ServerSideUrlRedirect/ServerSideUrlRedirect.expected @@ -30,16 +30,16 @@ | react-native.js:8:17:8:23 | tainted | react-native.js:7:17:7:33 | req.param("code") | react-native.js:8:17:8:23 | tainted | Untrusted URL redirection depends on a $@. | react-native.js:7:17:7:33 | req.param("code") | user-provided value | | react-native.js:9:26:9:32 | tainted | react-native.js:7:17:7:33 | req.param("code") | react-native.js:9:26:9:32 | tainted | Untrusted URL redirection depends on a $@. | react-native.js:7:17:7:33 | req.param("code") | user-provided value | edges -| ServerSideUrlRedirectGood2.js:16:7:16:34 | target | ServerSideUrlRedirectGood2.js:18:18:18:23 | target | provenance | | -| ServerSideUrlRedirectGood2.js:16:16:16:34 | req.query["target"] | ServerSideUrlRedirectGood2.js:16:7:16:34 | target | provenance | | -| express.js:25:7:25:34 | target | express.js:30:18:30:23 | target | provenance | | -| express.js:25:7:25:34 | target | express.js:31:16:31:21 | target | provenance | | -| express.js:25:16:25:34 | req.param("target") | express.js:25:7:25:34 | target | provenance | | +| ServerSideUrlRedirectGood2.js:16:7:16:12 | target | ServerSideUrlRedirectGood2.js:18:18:18:23 | target | provenance | | +| ServerSideUrlRedirectGood2.js:16:16:16:34 | req.query["target"] | ServerSideUrlRedirectGood2.js:16:7:16:12 | target | provenance | | +| express.js:25:7:25:12 | target | express.js:30:18:30:23 | target | provenance | | +| express.js:25:7:25:12 | target | express.js:31:16:31:21 | target | provenance | | +| express.js:25:16:25:34 | req.param("target") | express.js:25:7:25:12 | target | provenance | | | express.js:35:69:35:87 | req.param('action') | express.js:35:16:35:108 | (req.pa ... ntacts" | provenance | | | express.js:68:19:68:37 | req.param("target") | express.js:68:16:68:43 | `${req. ... )}/foo` | provenance | | -| express.js:77:7:77:34 | target | express.js:83:18:83:23 | target | provenance | | -| express.js:77:7:77:34 | target | express.js:89:16:89:21 | target | provenance | | -| express.js:77:16:77:34 | req.param("target") | express.js:77:7:77:34 | target | provenance | | +| express.js:77:7:77:12 | target | express.js:83:18:83:23 | target | provenance | | +| express.js:77:7:77:12 | target | express.js:89:16:89:21 | target | provenance | | +| express.js:77:16:77:34 | req.param("target") | express.js:77:7:77:12 | target | provenance | | | express.js:109:16:109:63 | [req.qu ... ection] | express.js:109:16:109:72 | [req.qu ... oin('') | provenance | | | express.js:109:16:109:63 | [req.qu ... ection] [0] | express.js:109:16:109:72 | [req.qu ... oin('') | provenance | | | express.js:109:17:109:30 | req.query.page | express.js:109:16:109:63 | [req.qu ... ection] | provenance | | @@ -50,45 +50,45 @@ edges | express.js:124:22:124:36 | req.params.user | express.js:124:16:124:36 | '/' + r ... ms.user | provenance | | | express.js:125:23:125:37 | req.params.user | express.js:125:16:125:37 | '//' + ... ms.user | provenance | | | express.js:126:22:126:36 | req.params.user | express.js:126:16:126:36 | 'u' + r ... ms.user | provenance | | -| express.js:140:7:140:34 | target | express.js:145:18:145:23 | target | provenance | | -| express.js:140:7:140:34 | target | express.js:150:18:150:23 | target | provenance | | -| express.js:140:16:140:34 | req.param("target") | express.js:140:7:140:34 | target | provenance | | -| express.js:154:7:154:54 | myThing | express.js:155:16:155:22 | myThing | provenance | | -| express.js:154:7:154:54 | myThing [ArrayElement] | express.js:155:16:155:22 | myThing | provenance | | +| express.js:140:7:140:12 | target | express.js:145:18:145:23 | target | provenance | | +| express.js:140:7:140:12 | target | express.js:150:18:150:23 | target | provenance | | +| express.js:140:16:140:34 | req.param("target") | express.js:140:7:140:12 | target | provenance | | +| express.js:154:7:154:13 | myThing | express.js:155:16:155:22 | myThing | provenance | | +| express.js:154:7:154:13 | myThing [ArrayElement] | express.js:155:16:155:22 | myThing | provenance | | | express.js:154:17:154:41 | JSON.st ... .query) | express.js:154:17:154:54 | JSON.st ... (1, -1) | provenance | | | express.js:154:17:154:41 | JSON.st ... .query) | express.js:154:17:154:54 | JSON.st ... (1, -1) [ArrayElement] | provenance | | -| express.js:154:17:154:54 | JSON.st ... (1, -1) | express.js:154:7:154:54 | myThing | provenance | | -| express.js:154:17:154:54 | JSON.st ... (1, -1) [ArrayElement] | express.js:154:7:154:54 | myThing [ArrayElement] | provenance | | +| express.js:154:17:154:54 | JSON.st ... (1, -1) | express.js:154:7:154:13 | myThing | provenance | | +| express.js:154:17:154:54 | JSON.st ... (1, -1) [ArrayElement] | express.js:154:7:154:13 | myThing [ArrayElement] | provenance | | | express.js:154:32:154:40 | req.query | express.js:154:17:154:41 | JSON.st ... .query) | provenance | | -| koa.js:6:6:6:27 | url | koa.js:7:15:7:17 | url | provenance | | -| koa.js:6:6:6:27 | url | koa.js:8:18:8:20 | url | provenance | | -| koa.js:6:6:6:27 | url | koa.js:14:16:14:18 | url | provenance | | -| koa.js:6:6:6:27 | url | koa.js:20:16:20:18 | url | provenance | | -| koa.js:6:12:6:27 | ctx.query.target | koa.js:6:6:6:27 | url | provenance | | +| koa.js:6:6:6:8 | url | koa.js:7:15:7:17 | url | provenance | | +| koa.js:6:6:6:8 | url | koa.js:8:18:8:20 | url | provenance | | +| koa.js:6:6:6:8 | url | koa.js:14:16:14:18 | url | provenance | | +| koa.js:6:6:6:8 | url | koa.js:20:16:20:18 | url | provenance | | +| koa.js:6:12:6:27 | ctx.query.target | koa.js:6:6:6:8 | url | provenance | | | koa.js:8:18:8:20 | url | koa.js:8:15:8:26 | `${url}${x}` | provenance | | | next.ts:11:31:11:38 | req.body | next.ts:11:31:11:50 | req.body.callbackUrl | provenance | | -| node.js:5:7:5:52 | target | node.js:6:34:6:39 | target | provenance | | -| node.js:5:16:5:39 | url.par ... , true) | node.js:5:7:5:52 | target | provenance | | +| node.js:5:7:5:12 | target | node.js:6:34:6:39 | target | provenance | | +| node.js:5:16:5:39 | url.par ... , true) | node.js:5:7:5:12 | target | provenance | | | node.js:5:26:5:32 | req.url | node.js:5:16:5:39 | url.par ... , true) | provenance | | -| node.js:10:7:10:52 | target | node.js:13:40:13:45 | target | provenance | | -| node.js:10:16:10:39 | url.par ... , true) | node.js:10:7:10:52 | target | provenance | | +| node.js:10:7:10:12 | target | node.js:13:40:13:45 | target | provenance | | +| node.js:10:16:10:39 | url.par ... , true) | node.js:10:7:10:12 | target | provenance | | | node.js:10:26:10:32 | req.url | node.js:10:16:10:39 | url.par ... , true) | provenance | | | node.js:13:40:13:45 | target | node.js:13:34:13:45 | '/' + target | provenance | | -| node.js:27:7:27:52 | target | node.js:29:34:29:39 | target | provenance | | -| node.js:27:16:27:39 | url.par ... , true) | node.js:27:7:27:52 | target | provenance | | +| node.js:27:7:27:12 | target | node.js:29:34:29:39 | target | provenance | | +| node.js:27:16:27:39 | url.par ... , true) | node.js:27:7:27:12 | target | provenance | | | node.js:27:26:27:32 | req.url | node.js:27:16:27:39 | url.par ... , true) | provenance | | | node.js:29:34:29:39 | target | node.js:29:34:29:55 | target ... =" + me | provenance | | -| react-native.js:7:7:7:33 | tainted | react-native.js:8:17:8:23 | tainted | provenance | | -| react-native.js:7:7:7:33 | tainted | react-native.js:9:26:9:32 | tainted | provenance | | -| react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:33 | tainted | provenance | | +| react-native.js:7:7:7:13 | tainted | react-native.js:8:17:8:23 | tainted | provenance | | +| react-native.js:7:7:7:13 | tainted | react-native.js:9:26:9:32 | tainted | provenance | | +| react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:13 | tainted | provenance | | nodes | ServerSideUrlRedirect.js:4:16:4:34 | req.query["target"] | semmle.label | req.query["target"] | -| ServerSideUrlRedirectGood2.js:16:7:16:34 | target | semmle.label | target | +| ServerSideUrlRedirectGood2.js:16:7:16:12 | target | semmle.label | target | | ServerSideUrlRedirectGood2.js:16:16:16:34 | req.query["target"] | semmle.label | req.query["target"] | | ServerSideUrlRedirectGood2.js:18:18:18:23 | target | semmle.label | target | | express.js:6:16:6:34 | req.param("target") | semmle.label | req.param("target") | | express.js:10:26:10:44 | req.param("target") | semmle.label | req.param("target") | -| express.js:25:7:25:34 | target | semmle.label | target | +| express.js:25:7:25:12 | target | semmle.label | target | | express.js:25:16:25:34 | req.param("target") | semmle.label | req.param("target") | | express.js:30:18:30:23 | target | semmle.label | target | | express.js:31:16:31:21 | target | semmle.label | target | @@ -96,7 +96,7 @@ nodes | express.js:35:69:35:87 | req.param('action') | semmle.label | req.param('action') | | express.js:68:16:68:43 | `${req. ... )}/foo` | semmle.label | `${req. ... )}/foo` | | express.js:68:19:68:37 | req.param("target") | semmle.label | req.param("target") | -| express.js:77:7:77:34 | target | semmle.label | target | +| express.js:77:7:77:12 | target | semmle.label | target | | express.js:77:16:77:34 | req.param("target") | semmle.label | req.param("target") | | express.js:83:18:83:23 | target | semmle.label | target | | express.js:89:16:89:21 | target | semmle.label | target | @@ -115,18 +115,18 @@ nodes | express.js:126:22:126:36 | req.params.user | semmle.label | req.params.user | | express.js:133:16:133:28 | req.query.foo | semmle.label | req.query.foo | | express.js:136:16:136:24 | query.foo | semmle.label | query.foo | -| express.js:140:7:140:34 | target | semmle.label | target | +| express.js:140:7:140:12 | target | semmle.label | target | | express.js:140:16:140:34 | req.param("target") | semmle.label | req.param("target") | | express.js:145:18:145:23 | target | semmle.label | target | | express.js:150:18:150:23 | target | semmle.label | target | -| express.js:154:7:154:54 | myThing | semmle.label | myThing | -| express.js:154:7:154:54 | myThing [ArrayElement] | semmle.label | myThing [ArrayElement] | +| express.js:154:7:154:13 | myThing | semmle.label | myThing | +| express.js:154:7:154:13 | myThing [ArrayElement] | semmle.label | myThing [ArrayElement] | | express.js:154:17:154:41 | JSON.st ... .query) | semmle.label | JSON.st ... .query) | | express.js:154:17:154:54 | JSON.st ... (1, -1) | semmle.label | JSON.st ... (1, -1) | | express.js:154:17:154:54 | JSON.st ... (1, -1) [ArrayElement] | semmle.label | JSON.st ... (1, -1) [ArrayElement] | | express.js:154:32:154:40 | req.query | semmle.label | req.query | | express.js:155:16:155:22 | myThing | semmle.label | myThing | -| koa.js:6:6:6:27 | url | semmle.label | url | +| koa.js:6:6:6:8 | url | semmle.label | url | | koa.js:6:12:6:27 | ctx.query.target | semmle.label | ctx.query.target | | koa.js:7:15:7:17 | url | semmle.label | url | | koa.js:8:15:8:26 | `${url}${x}` | semmle.label | `${url}${x}` | @@ -135,21 +135,21 @@ nodes | koa.js:20:16:20:18 | url | semmle.label | url | | next.ts:11:31:11:38 | req.body | semmle.label | req.body | | next.ts:11:31:11:50 | req.body.callbackUrl | semmle.label | req.body.callbackUrl | -| node.js:5:7:5:52 | target | semmle.label | target | +| node.js:5:7:5:12 | target | semmle.label | target | | node.js:5:16:5:39 | url.par ... , true) | semmle.label | url.par ... , true) | | node.js:5:26:5:32 | req.url | semmle.label | req.url | | node.js:6:34:6:39 | target | semmle.label | target | -| node.js:10:7:10:52 | target | semmle.label | target | +| node.js:10:7:10:12 | target | semmle.label | target | | node.js:10:16:10:39 | url.par ... , true) | semmle.label | url.par ... , true) | | node.js:10:26:10:32 | req.url | semmle.label | req.url | | node.js:13:34:13:45 | '/' + target | semmle.label | '/' + target | | node.js:13:40:13:45 | target | semmle.label | target | -| node.js:27:7:27:52 | target | semmle.label | target | +| node.js:27:7:27:12 | target | semmle.label | target | | node.js:27:16:27:39 | url.par ... , true) | semmle.label | url.par ... , true) | | node.js:27:26:27:32 | req.url | semmle.label | req.url | | node.js:29:34:29:39 | target | semmle.label | target | | node.js:29:34:29:55 | target ... =" + me | semmle.label | target ... =" + me | -| react-native.js:7:7:7:33 | tainted | semmle.label | tainted | +| react-native.js:7:7:7:13 | tainted | semmle.label | tainted | | react-native.js:7:17:7:33 | req.param("code") | semmle.label | req.param("code") | | react-native.js:8:17:8:23 | tainted | semmle.label | tainted | | react-native.js:9:26:9:32 | tainted | semmle.label | tainted | diff --git a/javascript/ql/test/query-tests/Security/CWE-611/Xxe.expected b/javascript/ql/test/query-tests/Security/CWE-611/Xxe.expected index 4b946c92042..07b6acfc361 100644 --- a/javascript/ql/test/query-tests/Security/CWE-611/Xxe.expected +++ b/javascript/ql/test/query-tests/Security/CWE-611/Xxe.expected @@ -8,12 +8,12 @@ | libxml.sax.js:6:22:6:42 | req.par ... e-xml") | libxml.sax.js:6:22:6:42 | req.par ... e-xml") | libxml.sax.js:6:22:6:42 | req.par ... e-xml") | XML parsing depends on a $@ without guarding against external entity expansion. | libxml.sax.js:6:22:6:42 | req.par ... e-xml") | user-provided value | | libxml.saxpush.js:6:15:6:35 | req.par ... e-xml") | libxml.saxpush.js:6:15:6:35 | req.par ... e-xml") | libxml.saxpush.js:6:15:6:35 | req.par ... e-xml") | XML parsing depends on a $@ without guarding against external entity expansion. | libxml.saxpush.js:6:15:6:35 | req.par ... e-xml") | user-provided value | edges -| domparser.js:2:7:2:36 | src | domparser.js:10:55:10:57 | src | provenance | | -| domparser.js:2:7:2:36 | src | domparser.js:12:57:12:59 | src | provenance | | -| domparser.js:2:13:2:36 | documen ... .search | domparser.js:2:7:2:36 | src | provenance | | +| domparser.js:2:7:2:9 | src | domparser.js:10:55:10:57 | src | provenance | | +| domparser.js:2:7:2:9 | src | domparser.js:12:57:12:59 | src | provenance | | +| domparser.js:2:13:2:36 | documen ... .search | domparser.js:2:7:2:9 | src | provenance | | | libxml.noent.js:12:27:12:35 | req.files | libxml.noent.js:12:27:12:66 | req.fil ... 'utf8') | provenance | | nodes -| domparser.js:2:7:2:36 | src | semmle.label | src | +| domparser.js:2:7:2:9 | src | semmle.label | src | | domparser.js:2:13:2:36 | documen ... .search | semmle.label | documen ... .search | | domparser.js:10:55:10:57 | src | semmle.label | src | | domparser.js:12:57:12:59 | src | semmle.label | src | diff --git a/javascript/ql/test/query-tests/Security/CWE-643/XpathInjection.expected b/javascript/ql/test/query-tests/Security/CWE-643/XpathInjection.expected index 4ad42bcdc03..e1db31c6f7b 100644 --- a/javascript/ql/test/query-tests/Security/CWE-643/XpathInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-643/XpathInjection.expected @@ -7,19 +7,19 @@ | tst.js:9:17:9:23 | tainted | tst.js:6:17:6:37 | req.par ... rName") | tst.js:9:17:9:23 | tainted | XPath expression depends on a $@. | tst.js:6:17:6:37 | req.par ... rName") | user-provided value | | tst.js:11:8:11:14 | tainted | tst.js:6:17:6:37 | req.par ... rName") | tst.js:11:8:11:14 | tainted | XPath expression depends on a $@. | tst.js:6:17:6:37 | req.par ... rName") | user-provided value | edges -| XpathInjectionBad.js:6:7:6:38 | userName | XpathInjectionBad.js:8:66:8:73 | userName | provenance | | -| XpathInjectionBad.js:6:18:6:38 | req.par ... rName") | XpathInjectionBad.js:6:7:6:38 | userName | provenance | | +| XpathInjectionBad.js:6:7:6:14 | userName | XpathInjectionBad.js:8:66:8:73 | userName | provenance | | +| XpathInjectionBad.js:6:18:6:38 | req.par ... rName") | XpathInjectionBad.js:6:7:6:14 | userName | provenance | | | XpathInjectionBad.js:8:66:8:73 | userName | XpathInjectionBad.js:8:34:8:96 | "//user ... text()" | provenance | | | tst2.js:1:13:1:34 | documen ... on.hash | tst2.js:1:13:1:47 | documen ... ring(1) | provenance | | | tst2.js:1:13:1:47 | documen ... ring(1) | tst2.js:2:27:2:31 | query | provenance | | | tst2.js:1:13:1:47 | documen ... ring(1) | tst2.js:3:19:3:23 | query | provenance | | -| tst.js:6:7:6:37 | tainted | tst.js:7:15:7:21 | tainted | provenance | | -| tst.js:6:7:6:37 | tainted | tst.js:8:16:8:22 | tainted | provenance | | -| tst.js:6:7:6:37 | tainted | tst.js:9:17:9:23 | tainted | provenance | | -| tst.js:6:7:6:37 | tainted | tst.js:11:8:11:14 | tainted | provenance | | -| tst.js:6:17:6:37 | req.par ... rName") | tst.js:6:7:6:37 | tainted | provenance | | +| tst.js:6:7:6:13 | tainted | tst.js:7:15:7:21 | tainted | provenance | | +| tst.js:6:7:6:13 | tainted | tst.js:8:16:8:22 | tainted | provenance | | +| tst.js:6:7:6:13 | tainted | tst.js:9:17:9:23 | tainted | provenance | | +| tst.js:6:7:6:13 | tainted | tst.js:11:8:11:14 | tainted | provenance | | +| tst.js:6:17:6:37 | req.par ... rName") | tst.js:6:7:6:13 | tainted | provenance | | nodes -| XpathInjectionBad.js:6:7:6:38 | userName | semmle.label | userName | +| XpathInjectionBad.js:6:7:6:14 | userName | semmle.label | userName | | XpathInjectionBad.js:6:18:6:38 | req.par ... rName") | semmle.label | req.par ... rName") | | XpathInjectionBad.js:8:34:8:96 | "//user ... text()" | semmle.label | "//user ... text()" | | XpathInjectionBad.js:8:66:8:73 | userName | semmle.label | userName | @@ -27,7 +27,7 @@ nodes | tst2.js:1:13:1:47 | documen ... ring(1) | semmle.label | documen ... ring(1) | | tst2.js:2:27:2:31 | query | semmle.label | query | | tst2.js:3:19:3:23 | query | semmle.label | query | -| tst.js:6:7:6:37 | tainted | semmle.label | tainted | +| tst.js:6:7:6:13 | tainted | semmle.label | tainted | | tst.js:6:17:6:37 | req.par ... rName") | semmle.label | req.par ... rName") | | tst.js:7:15:7:21 | tainted | semmle.label | tainted | | tst.js:8:16:8:22 | tainted | semmle.label | tainted | diff --git a/javascript/ql/test/query-tests/Security/CWE-730/Threat-models-disabled/RegExpInjection.expected b/javascript/ql/test/query-tests/Security/CWE-730/Threat-models-disabled/RegExpInjection.expected index 07225ec763e..bdc3775dbb7 100644 --- a/javascript/ql/test/query-tests/Security/CWE-730/Threat-models-disabled/RegExpInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-730/Threat-models-disabled/RegExpInjection.expected @@ -18,19 +18,19 @@ | RegExpInjection.js:95:14:95:22 | sanitized | RegExpInjection.js:92:15:92:32 | req.param("input") | RegExpInjection.js:95:14:95:22 | sanitized | This regular expression is constructed from a $@. | RegExpInjection.js:92:15:92:32 | req.param("input") | user-provided value | | tst.js:6:16:6:35 | "^"+ data.name + "$" | tst.js:5:16:5:29 | req.query.data | tst.js:6:16:6:35 | "^"+ data.name + "$" | This regular expression is constructed from a $@. | tst.js:5:16:5:29 | req.query.data | user-provided value | edges -| RegExpInjection.js:5:7:5:28 | key | RegExpInjection.js:7:31:7:33 | key | provenance | | -| RegExpInjection.js:5:7:5:28 | key | RegExpInjection.js:17:19:17:21 | key | provenance | | -| RegExpInjection.js:5:7:5:28 | key | RegExpInjection.js:18:19:18:21 | key | provenance | | -| RegExpInjection.js:5:7:5:28 | key | RegExpInjection.js:28:12:28:14 | key | provenance | | -| RegExpInjection.js:5:7:5:28 | key | RegExpInjection.js:49:14:49:16 | key | provenance | | -| RegExpInjection.js:5:13:5:28 | req.param("key") | RegExpInjection.js:5:7:5:28 | key | provenance | | -| RegExpInjection.js:5:31:5:56 | input | RegExpInjection.js:35:23:35:27 | input | provenance | | -| RegExpInjection.js:5:31:5:56 | input | RegExpInjection.js:36:26:36:30 | input | provenance | | -| RegExpInjection.js:5:31:5:56 | input | RegExpInjection.js:37:25:37:29 | input | provenance | | -| RegExpInjection.js:5:31:5:56 | input | RegExpInjection.js:40:24:40:28 | input | provenance | | -| RegExpInjection.js:5:31:5:56 | input | RegExpInjection.js:41:27:41:31 | input | provenance | | -| RegExpInjection.js:5:31:5:56 | input | RegExpInjection.js:42:26:42:30 | input | provenance | | -| RegExpInjection.js:5:39:5:56 | req.param("input") | RegExpInjection.js:5:31:5:56 | input | provenance | | +| RegExpInjection.js:5:7:5:9 | key | RegExpInjection.js:7:31:7:33 | key | provenance | | +| RegExpInjection.js:5:7:5:9 | key | RegExpInjection.js:17:19:17:21 | key | provenance | | +| RegExpInjection.js:5:7:5:9 | key | RegExpInjection.js:18:19:18:21 | key | provenance | | +| RegExpInjection.js:5:7:5:9 | key | RegExpInjection.js:28:12:28:14 | key | provenance | | +| RegExpInjection.js:5:7:5:9 | key | RegExpInjection.js:49:14:49:16 | key | provenance | | +| RegExpInjection.js:5:13:5:28 | req.param("key") | RegExpInjection.js:5:7:5:9 | key | provenance | | +| RegExpInjection.js:5:31:5:35 | input | RegExpInjection.js:35:23:35:27 | input | provenance | | +| RegExpInjection.js:5:31:5:35 | input | RegExpInjection.js:36:26:36:30 | input | provenance | | +| RegExpInjection.js:5:31:5:35 | input | RegExpInjection.js:37:25:37:29 | input | provenance | | +| RegExpInjection.js:5:31:5:35 | input | RegExpInjection.js:40:24:40:28 | input | provenance | | +| RegExpInjection.js:5:31:5:35 | input | RegExpInjection.js:41:27:41:31 | input | provenance | | +| RegExpInjection.js:5:31:5:35 | input | RegExpInjection.js:42:26:42:30 | input | provenance | | +| RegExpInjection.js:5:39:5:56 | req.param("input") | RegExpInjection.js:5:31:5:35 | input | provenance | | | RegExpInjection.js:7:31:7:33 | key | RegExpInjection.js:7:23:7:45 | "\\\\b" + ... (.*)\\n" | provenance | | | RegExpInjection.js:9:17:9:17 | s | RegExpInjection.js:10:26:10:26 | s | provenance | | | RegExpInjection.js:10:20:10:27 | wrap2(s) | RegExpInjection.js:10:12:10:27 | "\\\\b" + wrap2(s) | provenance | | @@ -50,25 +50,25 @@ edges | RegExpInjection.js:49:14:49:16 | key | RegExpInjection.js:49:14:49:27 | key.split(".") [ArrayElement] | provenance | | | RegExpInjection.js:49:14:49:27 | key.split(".") [ArrayElement] | RegExpInjection.js:49:14:49:42 | key.spl ... x => x) [ArrayElement] | provenance | | | RegExpInjection.js:49:14:49:42 | key.spl ... x => x) [ArrayElement] | RegExpInjection.js:49:14:49:52 | key.spl ... in("-") | provenance | | -| RegExpInjection.js:55:31:55:56 | input | RegExpInjection.js:59:14:59:18 | input | provenance | | -| RegExpInjection.js:55:39:55:56 | req.param("input") | RegExpInjection.js:55:31:55:56 | input | provenance | | -| RegExpInjection.js:77:7:77:32 | input | RegExpInjection.js:82:25:82:29 | input | provenance | | -| RegExpInjection.js:77:15:77:32 | req.param("input") | RegExpInjection.js:77:7:77:32 | input | provenance | | +| RegExpInjection.js:55:31:55:35 | input | RegExpInjection.js:59:14:59:18 | input | provenance | | +| RegExpInjection.js:55:39:55:56 | req.param("input") | RegExpInjection.js:55:31:55:35 | input | provenance | | +| RegExpInjection.js:77:7:77:11 | input | RegExpInjection.js:82:25:82:29 | input | provenance | | +| RegExpInjection.js:77:15:77:32 | req.param("input") | RegExpInjection.js:77:7:77:11 | input | provenance | | | RegExpInjection.js:82:25:82:29 | input | RegExpInjection.js:82:25:82:48 | input.r ... g, "\|") | provenance | | | RegExpInjection.js:82:25:82:48 | input.r ... g, "\|") | RegExpInjection.js:82:14:82:55 | "^.*\\.( ... + ")$" | provenance | | | RegExpInjection.js:88:20:88:31 | process.argv | RegExpInjection.js:88:16:88:49 | `^${pro ... r.app$` | provenance | | -| RegExpInjection.js:92:7:92:32 | input | RegExpInjection.js:94:19:94:23 | input | provenance | | -| RegExpInjection.js:92:15:92:32 | req.param("input") | RegExpInjection.js:92:7:92:32 | input | provenance | | -| RegExpInjection.js:94:7:94:106 | sanitized | RegExpInjection.js:95:14:95:22 | sanitized | provenance | | +| RegExpInjection.js:92:7:92:11 | input | RegExpInjection.js:94:19:94:23 | input | provenance | | +| RegExpInjection.js:92:15:92:32 | req.param("input") | RegExpInjection.js:92:7:92:11 | input | provenance | | +| RegExpInjection.js:94:7:94:15 | sanitized | RegExpInjection.js:95:14:95:22 | sanitized | provenance | | | RegExpInjection.js:94:19:94:23 | input | RegExpInjection.js:94:19:94:106 | input.r ... "\\\\$&") | provenance | | -| RegExpInjection.js:94:19:94:106 | input.r ... "\\\\$&") | RegExpInjection.js:94:7:94:106 | sanitized | provenance | | -| tst.js:5:9:5:29 | data | tst.js:6:21:6:24 | data | provenance | | -| tst.js:5:16:5:29 | req.query.data | tst.js:5:9:5:29 | data | provenance | | +| RegExpInjection.js:94:19:94:106 | input.r ... "\\\\$&") | RegExpInjection.js:94:7:94:15 | sanitized | provenance | | +| tst.js:5:9:5:12 | data | tst.js:6:21:6:24 | data | provenance | | +| tst.js:5:16:5:29 | req.query.data | tst.js:5:9:5:12 | data | provenance | | | tst.js:6:21:6:24 | data | tst.js:6:16:6:35 | "^"+ data.name + "$" | provenance | | nodes -| RegExpInjection.js:5:7:5:28 | key | semmle.label | key | +| RegExpInjection.js:5:7:5:9 | key | semmle.label | key | | RegExpInjection.js:5:13:5:28 | req.param("key") | semmle.label | req.param("key") | -| RegExpInjection.js:5:31:5:56 | input | semmle.label | input | +| RegExpInjection.js:5:31:5:35 | input | semmle.label | input | | RegExpInjection.js:5:39:5:56 | req.param("input") | semmle.label | req.param("input") | | RegExpInjection.js:7:23:7:45 | "\\\\b" + ... (.*)\\n" | semmle.label | "\\\\b" + ... (.*)\\n" | | RegExpInjection.js:7:31:7:33 | key | semmle.label | key | @@ -99,23 +99,23 @@ nodes | RegExpInjection.js:49:14:49:27 | key.split(".") [ArrayElement] | semmle.label | key.split(".") [ArrayElement] | | RegExpInjection.js:49:14:49:42 | key.spl ... x => x) [ArrayElement] | semmle.label | key.spl ... x => x) [ArrayElement] | | RegExpInjection.js:49:14:49:52 | key.spl ... in("-") | semmle.label | key.spl ... in("-") | -| RegExpInjection.js:55:31:55:56 | input | semmle.label | input | +| RegExpInjection.js:55:31:55:35 | input | semmle.label | input | | RegExpInjection.js:55:39:55:56 | req.param("input") | semmle.label | req.param("input") | | RegExpInjection.js:59:14:59:18 | input | semmle.label | input | -| RegExpInjection.js:77:7:77:32 | input | semmle.label | input | +| RegExpInjection.js:77:7:77:11 | input | semmle.label | input | | RegExpInjection.js:77:15:77:32 | req.param("input") | semmle.label | req.param("input") | | RegExpInjection.js:82:14:82:55 | "^.*\\.( ... + ")$" | semmle.label | "^.*\\.( ... + ")$" | | RegExpInjection.js:82:25:82:29 | input | semmle.label | input | | RegExpInjection.js:82:25:82:48 | input.r ... g, "\|") | semmle.label | input.r ... g, "\|") | | RegExpInjection.js:88:16:88:49 | `^${pro ... r.app$` | semmle.label | `^${pro ... r.app$` | | RegExpInjection.js:88:20:88:31 | process.argv | semmle.label | process.argv | -| RegExpInjection.js:92:7:92:32 | input | semmle.label | input | +| RegExpInjection.js:92:7:92:11 | input | semmle.label | input | | RegExpInjection.js:92:15:92:32 | req.param("input") | semmle.label | req.param("input") | -| RegExpInjection.js:94:7:94:106 | sanitized | semmle.label | sanitized | +| RegExpInjection.js:94:7:94:15 | sanitized | semmle.label | sanitized | | RegExpInjection.js:94:19:94:23 | input | semmle.label | input | | RegExpInjection.js:94:19:94:106 | input.r ... "\\\\$&") | semmle.label | input.r ... "\\\\$&") | | RegExpInjection.js:95:14:95:22 | sanitized | semmle.label | sanitized | -| tst.js:5:9:5:29 | data | semmle.label | data | +| tst.js:5:9:5:12 | data | semmle.label | data | | tst.js:5:16:5:29 | req.query.data | semmle.label | req.query.data | | tst.js:6:16:6:35 | "^"+ data.name + "$" | semmle.label | "^"+ data.name + "$" | | tst.js:6:21:6:24 | data | semmle.label | data | diff --git a/javascript/ql/test/query-tests/Security/CWE-730/Threat-models-enabled/RegExpInjection.expected b/javascript/ql/test/query-tests/Security/CWE-730/Threat-models-enabled/RegExpInjection.expected index 95c1c0df9eb..ad2123f3d14 100644 --- a/javascript/ql/test/query-tests/Security/CWE-730/Threat-models-enabled/RegExpInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-730/Threat-models-enabled/RegExpInjection.expected @@ -8,27 +8,27 @@ edges | RegExpInjection.js:6:18:6:28 | process.env | RegExpInjection.js:6:14:6:48 | `^${pro ... r.app$` | provenance | | | RegExpInjection.js:8:18:8:28 | process.env | RegExpInjection.js:8:14:8:40 | `^${pro ... }/bin$` | provenance | | -| RegExpInjection.js:10:7:10:35 | envVar | RegExpInjection.js:11:14:11:19 | envVar | provenance | | -| RegExpInjection.js:10:16:10:26 | process.env | RegExpInjection.js:10:7:10:35 | envVar | provenance | | +| RegExpInjection.js:10:7:10:12 | envVar | RegExpInjection.js:11:14:11:19 | envVar | provenance | | +| RegExpInjection.js:10:16:10:26 | process.env | RegExpInjection.js:10:7:10:12 | envVar | provenance | | | RegExpInjection.js:14:18:14:29 | process.argv | RegExpInjection.js:14:14:14:47 | `^${pro ... r.app$` | provenance | | -| RegExpInjection.js:16:7:16:28 | argv | RegExpInjection.js:17:14:17:17 | argv | provenance | | -| RegExpInjection.js:16:14:16:25 | process.argv | RegExpInjection.js:16:7:16:28 | argv | provenance | | -| RegExpInjection.js:20:7:20:36 | userInput | RegExpInjection.js:21:14:21:22 | userInput | provenance | | -| RegExpInjection.js:20:19:20:36 | req.param("input") | RegExpInjection.js:20:7:20:36 | userInput | provenance | | +| RegExpInjection.js:16:7:16:10 | argv | RegExpInjection.js:17:14:17:17 | argv | provenance | | +| RegExpInjection.js:16:14:16:25 | process.argv | RegExpInjection.js:16:7:16:10 | argv | provenance | | +| RegExpInjection.js:20:7:20:15 | userInput | RegExpInjection.js:21:14:21:22 | userInput | provenance | | +| RegExpInjection.js:20:19:20:36 | req.param("input") | RegExpInjection.js:20:7:20:15 | userInput | provenance | | nodes | RegExpInjection.js:6:14:6:48 | `^${pro ... r.app$` | semmle.label | `^${pro ... r.app$` | | RegExpInjection.js:6:18:6:28 | process.env | semmle.label | process.env | | RegExpInjection.js:8:14:8:40 | `^${pro ... }/bin$` | semmle.label | `^${pro ... }/bin$` | | RegExpInjection.js:8:18:8:28 | process.env | semmle.label | process.env | -| RegExpInjection.js:10:7:10:35 | envVar | semmle.label | envVar | +| RegExpInjection.js:10:7:10:12 | envVar | semmle.label | envVar | | RegExpInjection.js:10:16:10:26 | process.env | semmle.label | process.env | | RegExpInjection.js:11:14:11:19 | envVar | semmle.label | envVar | | RegExpInjection.js:14:14:14:47 | `^${pro ... r.app$` | semmle.label | `^${pro ... r.app$` | | RegExpInjection.js:14:18:14:29 | process.argv | semmle.label | process.argv | -| RegExpInjection.js:16:7:16:28 | argv | semmle.label | argv | +| RegExpInjection.js:16:7:16:10 | argv | semmle.label | argv | | RegExpInjection.js:16:14:16:25 | process.argv | semmle.label | process.argv | | RegExpInjection.js:17:14:17:17 | argv | semmle.label | argv | -| RegExpInjection.js:20:7:20:36 | userInput | semmle.label | userInput | +| RegExpInjection.js:20:7:20:15 | userInput | semmle.label | userInput | | RegExpInjection.js:20:19:20:36 | req.param("input") | semmle.label | req.param("input") | | RegExpInjection.js:21:14:21:22 | userInput | semmle.label | userInput | subpaths diff --git a/javascript/ql/test/query-tests/Security/CWE-754/UnvalidatedDynamicMethodCall.expected b/javascript/ql/test/query-tests/Security/CWE-754/UnvalidatedDynamicMethodCall.expected index 74cb64bdb8d..11aaf95922c 100644 --- a/javascript/ql/test/query-tests/Security/CWE-754/UnvalidatedDynamicMethodCall.expected +++ b/javascript/ql/test/query-tests/Security/CWE-754/UnvalidatedDynamicMethodCall.expected @@ -16,82 +16,82 @@ | tst.js:50:5:50:6 | fn | tst.js:47:39:47:40 | ev | tst.js:50:5:50:6 | fn | Invocation of method with $@ name may dispatch to unexpected target and cause an exception. | tst.js:47:39:47:40 | ev | user-controlled | edges | UnsafeDynamicMethodAccess.js:5:37:5:38 | ev | UnsafeDynamicMethodAccess.js:6:30:6:31 | ev | provenance | | -| UnsafeDynamicMethodAccess.js:6:9:6:37 | message | UnsafeDynamicMethodAccess.js:15:9:15:15 | message | provenance | | -| UnsafeDynamicMethodAccess.js:6:19:6:37 | JSON.parse(ev.data) | UnsafeDynamicMethodAccess.js:6:9:6:37 | message | provenance | | +| UnsafeDynamicMethodAccess.js:6:9:6:15 | message | UnsafeDynamicMethodAccess.js:15:9:15:15 | message | provenance | | +| UnsafeDynamicMethodAccess.js:6:19:6:37 | JSON.parse(ev.data) | UnsafeDynamicMethodAccess.js:6:9:6:15 | message | provenance | | | UnsafeDynamicMethodAccess.js:6:30:6:31 | ev | UnsafeDynamicMethodAccess.js:6:30:6:36 | ev.data | provenance | Config | | UnsafeDynamicMethodAccess.js:6:30:6:36 | ev.data | UnsafeDynamicMethodAccess.js:6:19:6:37 | JSON.parse(ev.data) | provenance | Config | | UnsafeDynamicMethodAccess.js:15:9:15:15 | message | UnsafeDynamicMethodAccess.js:15:9:15:20 | message.name | provenance | Config | | UnsafeDynamicMethodAccess.js:15:9:15:20 | message.name | UnsafeDynamicMethodAccess.js:15:5:15:21 | obj[message.name] | provenance | Config | -| UnvalidatedDynamicMethodCall2.js:13:9:13:47 | action | UnvalidatedDynamicMethodCall2.js:14:13:14:18 | action | provenance | | -| UnvalidatedDynamicMethodCall2.js:13:18:13:47 | actions ... action) | UnvalidatedDynamicMethodCall2.js:13:9:13:47 | action | provenance | | +| UnvalidatedDynamicMethodCall2.js:13:9:13:14 | action | UnvalidatedDynamicMethodCall2.js:14:13:14:18 | action | provenance | | +| UnvalidatedDynamicMethodCall2.js:13:18:13:47 | actions ... action) | UnvalidatedDynamicMethodCall2.js:13:9:13:14 | action | provenance | | | UnvalidatedDynamicMethodCall2.js:13:30:13:46 | req.params.action | UnvalidatedDynamicMethodCall2.js:13:18:13:47 | actions ... action) | provenance | Config | -| UnvalidatedDynamicMethodCall.js:14:7:14:41 | action | UnvalidatedDynamicMethodCall.js:15:11:15:16 | action | provenance | | -| UnvalidatedDynamicMethodCall.js:14:16:14:41 | actions ... action] | UnvalidatedDynamicMethodCall.js:14:7:14:41 | action | provenance | | +| UnvalidatedDynamicMethodCall.js:14:7:14:12 | action | UnvalidatedDynamicMethodCall.js:15:11:15:16 | action | provenance | | +| UnvalidatedDynamicMethodCall.js:14:16:14:41 | actions ... action] | UnvalidatedDynamicMethodCall.js:14:7:14:12 | action | provenance | | | UnvalidatedDynamicMethodCall.js:14:24:14:40 | req.params.action | UnvalidatedDynamicMethodCall.js:14:16:14:41 | actions ... action] | provenance | Config | -| UnvalidatedDynamicMethodCallGood4.js:14:13:14:51 | action | UnvalidatedDynamicMethodCallGood4.js:15:17:15:22 | action | provenance | | -| UnvalidatedDynamicMethodCallGood4.js:14:22:14:51 | actions ... action) | UnvalidatedDynamicMethodCallGood4.js:14:13:14:51 | action | provenance | | +| UnvalidatedDynamicMethodCallGood4.js:14:13:14:18 | action | UnvalidatedDynamicMethodCallGood4.js:15:17:15:22 | action | provenance | | +| UnvalidatedDynamicMethodCallGood4.js:14:22:14:51 | actions ... action) | UnvalidatedDynamicMethodCallGood4.js:14:13:14:18 | action | provenance | | | UnvalidatedDynamicMethodCallGood4.js:14:34:14:50 | req.params.action | UnvalidatedDynamicMethodCallGood4.js:14:22:14:51 | actions ... action) | provenance | Config | | tst.js:6:39:6:40 | ev | tst.js:7:27:7:28 | ev | provenance | | | tst.js:6:39:6:40 | ev | tst.js:9:9:9:10 | ev | provenance | | -| tst.js:7:9:7:39 | name | tst.js:11:9:11:12 | name | provenance | | -| tst.js:7:9:7:39 | name | tst.js:17:18:17:21 | name | provenance | | -| tst.js:7:9:7:39 | name | tst.js:21:11:21:14 | name | provenance | | -| tst.js:7:9:7:39 | name | tst.js:26:11:26:14 | name | provenance | | -| tst.js:7:9:7:39 | name | tst.js:28:11:28:14 | name | provenance | | -| tst.js:7:9:7:39 | name | tst.js:34:21:34:24 | name | provenance | | +| tst.js:7:9:7:12 | name | tst.js:11:9:11:12 | name | provenance | | +| tst.js:7:9:7:12 | name | tst.js:17:18:17:21 | name | provenance | | +| tst.js:7:9:7:12 | name | tst.js:21:11:21:14 | name | provenance | | +| tst.js:7:9:7:12 | name | tst.js:26:11:26:14 | name | provenance | | +| tst.js:7:9:7:12 | name | tst.js:28:11:28:14 | name | provenance | | +| tst.js:7:9:7:12 | name | tst.js:34:21:34:24 | name | provenance | | | tst.js:7:16:7:34 | JSON.parse(ev.data) | tst.js:7:16:7:39 | JSON.pa ... a).name | provenance | Config | -| tst.js:7:16:7:39 | JSON.pa ... a).name | tst.js:7:9:7:39 | name | provenance | | +| tst.js:7:16:7:39 | JSON.pa ... a).name | tst.js:7:9:7:12 | name | provenance | | | tst.js:7:27:7:28 | ev | tst.js:7:27:7:33 | ev.data | provenance | Config | | tst.js:7:27:7:33 | ev.data | tst.js:7:16:7:34 | JSON.parse(ev.data) | provenance | Config | | tst.js:9:9:9:10 | ev | tst.js:9:9:9:15 | ev.data | provenance | Config | | tst.js:9:9:9:15 | ev.data | tst.js:9:5:9:16 | obj[ev.data] | provenance | Config | | tst.js:11:9:11:12 | name | tst.js:11:5:11:13 | obj[name] | provenance | Config | -| tst.js:17:9:17:22 | fn | tst.js:18:5:18:6 | fn | provenance | | -| tst.js:17:9:17:22 | fn | tst.js:20:7:20:8 | fn | provenance | | -| tst.js:17:9:17:22 | fn | tst.js:22:11:22:12 | fn | provenance | | -| tst.js:17:14:17:22 | obj[name] | tst.js:17:9:17:22 | fn | provenance | | +| tst.js:17:9:17:10 | fn | tst.js:18:5:18:6 | fn | provenance | | +| tst.js:17:9:17:10 | fn | tst.js:20:7:20:8 | fn | provenance | | +| tst.js:17:9:17:10 | fn | tst.js:22:11:22:12 | fn | provenance | | +| tst.js:17:14:17:22 | obj[name] | tst.js:17:9:17:10 | fn | provenance | | | tst.js:17:18:17:21 | name | tst.js:17:14:17:22 | obj[name] | provenance | Config | | tst.js:21:11:21:14 | name | tst.js:21:7:21:15 | obj[name] | provenance | Config | | tst.js:26:11:26:14 | name | tst.js:26:7:26:15 | obj[name] | provenance | Config | | tst.js:28:11:28:14 | name | tst.js:28:7:28:15 | obj[name] | provenance | Config | -| tst.js:34:9:34:24 | key | tst.js:35:9:35:11 | key | provenance | | -| tst.js:34:9:34:24 | key | tst.js:37:11:37:13 | key | provenance | | -| tst.js:34:15:34:24 | "$" + name | tst.js:34:9:34:24 | key | provenance | | +| tst.js:34:9:34:11 | key | tst.js:35:9:35:11 | key | provenance | | +| tst.js:34:9:34:11 | key | tst.js:37:11:37:13 | key | provenance | | +| tst.js:34:15:34:24 | "$" + name | tst.js:34:9:34:11 | key | provenance | | | tst.js:34:21:34:24 | name | tst.js:34:15:34:24 | "$" + name | provenance | Config | | tst.js:35:9:35:11 | key | tst.js:35:5:35:12 | obj[key] | provenance | Config | | tst.js:37:11:37:13 | key | tst.js:37:7:37:14 | obj[key] | provenance | Config | | tst.js:47:39:47:40 | ev | tst.js:48:27:48:28 | ev | provenance | | -| tst.js:48:9:48:39 | name | tst.js:49:19:49:22 | name | provenance | | +| tst.js:48:9:48:12 | name | tst.js:49:19:49:22 | name | provenance | | | tst.js:48:16:48:34 | JSON.parse(ev.data) | tst.js:48:16:48:39 | JSON.pa ... a).name | provenance | Config | -| tst.js:48:16:48:39 | JSON.pa ... a).name | tst.js:48:9:48:39 | name | provenance | | +| tst.js:48:16:48:39 | JSON.pa ... a).name | tst.js:48:9:48:12 | name | provenance | | | tst.js:48:27:48:28 | ev | tst.js:48:27:48:33 | ev.data | provenance | Config | | tst.js:48:27:48:33 | ev.data | tst.js:48:16:48:34 | JSON.parse(ev.data) | provenance | Config | -| tst.js:49:9:49:23 | fn | tst.js:50:5:50:6 | fn | provenance | | -| tst.js:49:14:49:23 | obj2[name] | tst.js:49:9:49:23 | fn | provenance | | +| tst.js:49:9:49:10 | fn | tst.js:50:5:50:6 | fn | provenance | | +| tst.js:49:14:49:23 | obj2[name] | tst.js:49:9:49:10 | fn | provenance | | | tst.js:49:19:49:22 | name | tst.js:49:14:49:23 | obj2[name] | provenance | Config | nodes | UnsafeDynamicMethodAccess.js:5:37:5:38 | ev | semmle.label | ev | -| UnsafeDynamicMethodAccess.js:6:9:6:37 | message | semmle.label | message | +| UnsafeDynamicMethodAccess.js:6:9:6:15 | message | semmle.label | message | | UnsafeDynamicMethodAccess.js:6:19:6:37 | JSON.parse(ev.data) | semmle.label | JSON.parse(ev.data) | | UnsafeDynamicMethodAccess.js:6:30:6:31 | ev | semmle.label | ev | | UnsafeDynamicMethodAccess.js:6:30:6:36 | ev.data | semmle.label | ev.data | | UnsafeDynamicMethodAccess.js:15:5:15:21 | obj[message.name] | semmle.label | obj[message.name] | | UnsafeDynamicMethodAccess.js:15:9:15:15 | message | semmle.label | message | | UnsafeDynamicMethodAccess.js:15:9:15:20 | message.name | semmle.label | message.name | -| UnvalidatedDynamicMethodCall2.js:13:9:13:47 | action | semmle.label | action | +| UnvalidatedDynamicMethodCall2.js:13:9:13:14 | action | semmle.label | action | | UnvalidatedDynamicMethodCall2.js:13:18:13:47 | actions ... action) | semmle.label | actions ... action) | | UnvalidatedDynamicMethodCall2.js:13:30:13:46 | req.params.action | semmle.label | req.params.action | | UnvalidatedDynamicMethodCall2.js:14:13:14:18 | action | semmle.label | action | -| UnvalidatedDynamicMethodCall.js:14:7:14:41 | action | semmle.label | action | +| UnvalidatedDynamicMethodCall.js:14:7:14:12 | action | semmle.label | action | | UnvalidatedDynamicMethodCall.js:14:16:14:41 | actions ... action] | semmle.label | actions ... action] | | UnvalidatedDynamicMethodCall.js:14:24:14:40 | req.params.action | semmle.label | req.params.action | | UnvalidatedDynamicMethodCall.js:15:11:15:16 | action | semmle.label | action | -| UnvalidatedDynamicMethodCallGood4.js:14:13:14:51 | action | semmle.label | action | +| UnvalidatedDynamicMethodCallGood4.js:14:13:14:18 | action | semmle.label | action | | UnvalidatedDynamicMethodCallGood4.js:14:22:14:51 | actions ... action) | semmle.label | actions ... action) | | UnvalidatedDynamicMethodCallGood4.js:14:34:14:50 | req.params.action | semmle.label | req.params.action | | UnvalidatedDynamicMethodCallGood4.js:15:17:15:22 | action | semmle.label | action | | tst.js:6:39:6:40 | ev | semmle.label | ev | -| tst.js:7:9:7:39 | name | semmle.label | name | +| tst.js:7:9:7:12 | name | semmle.label | name | | tst.js:7:16:7:34 | JSON.parse(ev.data) | semmle.label | JSON.parse(ev.data) | | tst.js:7:16:7:39 | JSON.pa ... a).name | semmle.label | JSON.pa ... a).name | | tst.js:7:27:7:28 | ev | semmle.label | ev | @@ -101,7 +101,7 @@ nodes | tst.js:9:9:9:15 | ev.data | semmle.label | ev.data | | tst.js:11:5:11:13 | obj[name] | semmle.label | obj[name] | | tst.js:11:9:11:12 | name | semmle.label | name | -| tst.js:17:9:17:22 | fn | semmle.label | fn | +| tst.js:17:9:17:10 | fn | semmle.label | fn | | tst.js:17:14:17:22 | obj[name] | semmle.label | obj[name] | | tst.js:17:18:17:21 | name | semmle.label | name | | tst.js:18:5:18:6 | fn | semmle.label | fn | @@ -113,7 +113,7 @@ nodes | tst.js:26:11:26:14 | name | semmle.label | name | | tst.js:28:7:28:15 | obj[name] | semmle.label | obj[name] | | tst.js:28:11:28:14 | name | semmle.label | name | -| tst.js:34:9:34:24 | key | semmle.label | key | +| tst.js:34:9:34:11 | key | semmle.label | key | | tst.js:34:15:34:24 | "$" + name | semmle.label | "$" + name | | tst.js:34:21:34:24 | name | semmle.label | name | | tst.js:35:5:35:12 | obj[key] | semmle.label | obj[key] | @@ -121,12 +121,12 @@ nodes | tst.js:37:7:37:14 | obj[key] | semmle.label | obj[key] | | tst.js:37:11:37:13 | key | semmle.label | key | | tst.js:47:39:47:40 | ev | semmle.label | ev | -| tst.js:48:9:48:39 | name | semmle.label | name | +| tst.js:48:9:48:12 | name | semmle.label | name | | tst.js:48:16:48:34 | JSON.parse(ev.data) | semmle.label | JSON.parse(ev.data) | | tst.js:48:16:48:39 | JSON.pa ... a).name | semmle.label | JSON.pa ... a).name | | tst.js:48:27:48:28 | ev | semmle.label | ev | | tst.js:48:27:48:33 | ev.data | semmle.label | ev.data | -| tst.js:49:9:49:23 | fn | semmle.label | fn | +| tst.js:49:9:49:10 | fn | semmle.label | fn | | tst.js:49:14:49:23 | obj2[name] | semmle.label | obj2[name] | | tst.js:49:19:49:22 | name | semmle.label | name | | tst.js:50:5:50:6 | fn | semmle.label | fn | diff --git a/javascript/ql/test/query-tests/Security/CWE-770/ResourceExhaustion/ResourceExhaustion.expected b/javascript/ql/test/query-tests/Security/CWE-770/ResourceExhaustion/ResourceExhaustion.expected index 0d90beb0669..886460544af 100644 --- a/javascript/ql/test/query-tests/Security/CWE-770/ResourceExhaustion/ResourceExhaustion.expected +++ b/javascript/ql/test/query-tests/Security/CWE-770/ResourceExhaustion/ResourceExhaustion.expected @@ -20,46 +20,46 @@ | resource-exhaustion.js:88:16:88:16 | n | resource-exhaustion.js:5:21:5:27 | req.url | resource-exhaustion.js:88:16:88:16 | n | This creates a buffer with a user-controlled size from a $@. | resource-exhaustion.js:5:21:5:27 | req.url | user-provided value | | resource-exhaustion.js:92:18:92:18 | n | resource-exhaustion.js:5:21:5:27 | req.url | resource-exhaustion.js:92:18:92:18 | n | This creates a buffer with a user-controlled size from a $@. | resource-exhaustion.js:5:21:5:27 | req.url | user-provided value | edges -| documentaion-examples/ResourceExhaustion_timeout.js:5:6:5:59 | delay | documentaion-examples/ResourceExhaustion_timeout.js:7:16:7:20 | delay | provenance | | -| documentaion-examples/ResourceExhaustion_timeout.js:5:14:5:59 | parseIn ... .delay) | documentaion-examples/ResourceExhaustion_timeout.js:5:6:5:59 | delay | provenance | | +| documentaion-examples/ResourceExhaustion_timeout.js:5:6:5:10 | delay | documentaion-examples/ResourceExhaustion_timeout.js:7:16:7:20 | delay | provenance | | +| documentaion-examples/ResourceExhaustion_timeout.js:5:14:5:59 | parseIn ... .delay) | documentaion-examples/ResourceExhaustion_timeout.js:5:6:5:10 | delay | provenance | | | documentaion-examples/ResourceExhaustion_timeout.js:5:23:5:46 | url.par ... , true) | documentaion-examples/ResourceExhaustion_timeout.js:5:23:5:58 | url.par ... y.delay | provenance | | | documentaion-examples/ResourceExhaustion_timeout.js:5:23:5:58 | url.par ... y.delay | documentaion-examples/ResourceExhaustion_timeout.js:5:14:5:59 | parseIn ... .delay) | provenance | Config | | documentaion-examples/ResourceExhaustion_timeout.js:5:33:5:39 | req.url | documentaion-examples/ResourceExhaustion_timeout.js:5:23:5:46 | url.par ... , true) | provenance | | -| resource-exhaustion.js:5:7:5:42 | s | resource-exhaustion.js:6:20:6:20 | s | provenance | | -| resource-exhaustion.js:5:7:5:42 | s | resource-exhaustion.js:35:12:35:12 | s | provenance | | -| resource-exhaustion.js:5:7:5:42 | s | resource-exhaustion.js:82:17:82:17 | s | provenance | | -| resource-exhaustion.js:5:7:5:42 | s | resource-exhaustion.js:84:18:84:18 | s | provenance | | -| resource-exhaustion.js:5:11:5:34 | url.par ... , true) | resource-exhaustion.js:5:7:5:42 | s | provenance | | +| resource-exhaustion.js:5:7:5:7 | s | resource-exhaustion.js:6:20:6:20 | s | provenance | | +| resource-exhaustion.js:5:7:5:7 | s | resource-exhaustion.js:35:12:35:12 | s | provenance | | +| resource-exhaustion.js:5:7:5:7 | s | resource-exhaustion.js:82:17:82:17 | s | provenance | | +| resource-exhaustion.js:5:7:5:7 | s | resource-exhaustion.js:84:18:84:18 | s | provenance | | +| resource-exhaustion.js:5:11:5:34 | url.par ... , true) | resource-exhaustion.js:5:7:5:7 | s | provenance | | | resource-exhaustion.js:5:21:5:27 | req.url | resource-exhaustion.js:5:11:5:34 | url.par ... , true) | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:14:16:14:16 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:15:22:15:22 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:16:26:16:26 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:20:20:20:20 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:22:18:22:18 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:27:9:27:9 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:28:13:28:13 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:29:9:29:9 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:30:9:30:9 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:31:9:31:9 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:32:9:32:9 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:34:12:34:12 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:81:17:81:17 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:83:18:83:18 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:88:16:88:16 | n | provenance | | -| resource-exhaustion.js:6:7:6:21 | n | resource-exhaustion.js:92:18:92:18 | n | provenance | | -| resource-exhaustion.js:6:11:6:21 | parseInt(s) | resource-exhaustion.js:6:7:6:21 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:14:16:14:16 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:15:22:15:22 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:16:26:16:26 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:20:20:20:20 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:22:18:22:18 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:27:9:27:9 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:28:13:28:13 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:29:9:29:9 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:30:9:30:9 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:31:9:31:9 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:32:9:32:9 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:34:12:34:12 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:81:17:81:17 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:83:18:83:18 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:88:16:88:16 | n | provenance | | +| resource-exhaustion.js:6:7:6:7 | n | resource-exhaustion.js:92:18:92:18 | n | provenance | | +| resource-exhaustion.js:6:11:6:21 | parseInt(s) | resource-exhaustion.js:6:7:6:7 | n | provenance | | | resource-exhaustion.js:6:20:6:20 | s | resource-exhaustion.js:6:11:6:21 | parseInt(s) | provenance | Config | nodes -| documentaion-examples/ResourceExhaustion_timeout.js:5:6:5:59 | delay | semmle.label | delay | +| documentaion-examples/ResourceExhaustion_timeout.js:5:6:5:10 | delay | semmle.label | delay | | documentaion-examples/ResourceExhaustion_timeout.js:5:14:5:59 | parseIn ... .delay) | semmle.label | parseIn ... .delay) | | documentaion-examples/ResourceExhaustion_timeout.js:5:23:5:46 | url.par ... , true) | semmle.label | url.par ... , true) | | documentaion-examples/ResourceExhaustion_timeout.js:5:23:5:58 | url.par ... y.delay | semmle.label | url.par ... y.delay | | documentaion-examples/ResourceExhaustion_timeout.js:5:33:5:39 | req.url | semmle.label | req.url | | documentaion-examples/ResourceExhaustion_timeout.js:7:16:7:20 | delay | semmle.label | delay | -| resource-exhaustion.js:5:7:5:42 | s | semmle.label | s | +| resource-exhaustion.js:5:7:5:7 | s | semmle.label | s | | resource-exhaustion.js:5:11:5:34 | url.par ... , true) | semmle.label | url.par ... , true) | | resource-exhaustion.js:5:21:5:27 | req.url | semmle.label | req.url | -| resource-exhaustion.js:6:7:6:21 | n | semmle.label | n | +| resource-exhaustion.js:6:7:6:7 | n | semmle.label | n | | resource-exhaustion.js:6:11:6:21 | parseInt(s) | semmle.label | parseInt(s) | | resource-exhaustion.js:6:20:6:20 | s | semmle.label | s | | resource-exhaustion.js:14:16:14:16 | n | semmle.label | n | diff --git a/javascript/ql/test/query-tests/Security/CWE-776/XmlBomb.expected b/javascript/ql/test/query-tests/Security/CWE-776/XmlBomb.expected index 6a5c2adfb7a..8bb8dd8d27d 100644 --- a/javascript/ql/test/query-tests/Security/CWE-776/XmlBomb.expected +++ b/javascript/ql/test/query-tests/Security/CWE-776/XmlBomb.expected @@ -6,25 +6,25 @@ | expat.js:6:16:6:36 | req.par ... e-xml") | expat.js:6:16:6:36 | req.par ... e-xml") | expat.js:6:16:6:36 | req.par ... e-xml") | XML parsing depends on a $@ without guarding against uncontrolled entity expansion. | expat.js:6:16:6:36 | req.par ... e-xml") | user-provided value | | jquery.js:4:14:4:16 | src | jquery.js:2:13:2:36 | documen ... .search | jquery.js:4:14:4:16 | src | XML parsing depends on a $@ without guarding against uncontrolled entity expansion. | jquery.js:2:13:2:36 | documen ... .search | user-provided value | edges -| closure.js:2:7:2:36 | src | closure.js:3:24:3:26 | src | provenance | | -| closure.js:2:13:2:36 | documen ... .search | closure.js:2:7:2:36 | src | provenance | | -| domparser.js:2:7:2:36 | src | domparser.js:5:37:5:39 | src | provenance | | -| domparser.js:2:7:2:36 | src | domparser.js:9:55:9:57 | src | provenance | | -| domparser.js:2:7:2:36 | src | domparser.js:11:57:11:59 | src | provenance | | -| domparser.js:2:13:2:36 | documen ... .search | domparser.js:2:7:2:36 | src | provenance | | -| jquery.js:2:7:2:36 | src | jquery.js:4:14:4:16 | src | provenance | | -| jquery.js:2:13:2:36 | documen ... .search | jquery.js:2:7:2:36 | src | provenance | | +| closure.js:2:7:2:9 | src | closure.js:3:24:3:26 | src | provenance | | +| closure.js:2:13:2:36 | documen ... .search | closure.js:2:7:2:9 | src | provenance | | +| domparser.js:2:7:2:9 | src | domparser.js:5:37:5:39 | src | provenance | | +| domparser.js:2:7:2:9 | src | domparser.js:9:55:9:57 | src | provenance | | +| domparser.js:2:7:2:9 | src | domparser.js:11:57:11:59 | src | provenance | | +| domparser.js:2:13:2:36 | documen ... .search | domparser.js:2:7:2:9 | src | provenance | | +| jquery.js:2:7:2:9 | src | jquery.js:4:14:4:16 | src | provenance | | +| jquery.js:2:13:2:36 | documen ... .search | jquery.js:2:7:2:9 | src | provenance | | nodes -| closure.js:2:7:2:36 | src | semmle.label | src | +| closure.js:2:7:2:9 | src | semmle.label | src | | closure.js:2:13:2:36 | documen ... .search | semmle.label | documen ... .search | | closure.js:3:24:3:26 | src | semmle.label | src | -| domparser.js:2:7:2:36 | src | semmle.label | src | +| domparser.js:2:7:2:9 | src | semmle.label | src | | domparser.js:2:13:2:36 | documen ... .search | semmle.label | documen ... .search | | domparser.js:5:37:5:39 | src | semmle.label | src | | domparser.js:9:55:9:57 | src | semmle.label | src | | domparser.js:11:57:11:59 | src | semmle.label | src | | expat.js:6:16:6:36 | req.par ... e-xml") | semmle.label | req.par ... e-xml") | -| jquery.js:2:7:2:36 | src | semmle.label | src | +| jquery.js:2:7:2:9 | src | semmle.label | src | | jquery.js:2:13:2:36 | documen ... .search | semmle.label | documen ... .search | | jquery.js:4:14:4:16 | src | semmle.label | src | subpaths diff --git a/javascript/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected b/javascript/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected index 22311127d54..965e4e51e45 100644 --- a/javascript/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected +++ b/javascript/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected @@ -172,15 +172,15 @@ | __tests__/HardcodedCredentialsDemo.js:8:19:8:28 | 'hgfedcba' | __tests__/HardcodedCredentialsDemo.js:8:19:8:28 | 'hgfedcba' | __tests__/HardcodedCredentialsDemo.js:8:19:8:28 | 'hgfedcba' | The hard-coded value "hgfedcba" is used as $@. | __tests__/HardcodedCredentialsDemo.js:8:19:8:28 | 'hgfedcba' | password | edges | HardcodedCredentials.js:18:16:18:30 | "user:hgfedcba" | HardcodedCredentials.js:20:36:20:51 | getCredentials() | provenance | | -| HardcodedCredentials.js:171:11:171:25 | USER | HardcodedCredentials.js:173:35:173:38 | USER | provenance | | -| HardcodedCredentials.js:171:18:171:25 | 'sdsdag' | HardcodedCredentials.js:171:11:171:25 | USER | provenance | | -| HardcodedCredentials.js:172:11:172:25 | PASS | HardcodedCredentials.js:173:43:173:46 | PASS | provenance | | -| HardcodedCredentials.js:172:18:172:25 | 'sdsdag' | HardcodedCredentials.js:172:11:172:25 | PASS | provenance | | -| HardcodedCredentials.js:173:11:173:49 | AUTH | HardcodedCredentials.js:178:39:178:42 | AUTH | provenance | | -| HardcodedCredentials.js:173:11:173:49 | AUTH | HardcodedCredentials.js:188:39:188:42 | AUTH | provenance | | -| HardcodedCredentials.js:173:11:173:49 | AUTH | HardcodedCredentials.js:195:46:195:49 | AUTH | provenance | | -| HardcodedCredentials.js:173:11:173:49 | AUTH | HardcodedCredentials.js:204:44:204:47 | AUTH | provenance | | -| HardcodedCredentials.js:173:18:173:49 | base64. ... PASS}`) | HardcodedCredentials.js:173:11:173:49 | AUTH | provenance | | +| HardcodedCredentials.js:171:11:171:14 | USER | HardcodedCredentials.js:173:35:173:38 | USER | provenance | | +| HardcodedCredentials.js:171:18:171:25 | 'sdsdag' | HardcodedCredentials.js:171:11:171:14 | USER | provenance | | +| HardcodedCredentials.js:172:11:172:14 | PASS | HardcodedCredentials.js:173:43:173:46 | PASS | provenance | | +| HardcodedCredentials.js:172:18:172:25 | 'sdsdag' | HardcodedCredentials.js:172:11:172:14 | PASS | provenance | | +| HardcodedCredentials.js:173:11:173:14 | AUTH | HardcodedCredentials.js:178:39:178:42 | AUTH | provenance | | +| HardcodedCredentials.js:173:11:173:14 | AUTH | HardcodedCredentials.js:188:39:188:42 | AUTH | provenance | | +| HardcodedCredentials.js:173:11:173:14 | AUTH | HardcodedCredentials.js:195:46:195:49 | AUTH | provenance | | +| HardcodedCredentials.js:173:11:173:14 | AUTH | HardcodedCredentials.js:204:44:204:47 | AUTH | provenance | | +| HardcodedCredentials.js:173:18:173:49 | base64. ... PASS}`) | HardcodedCredentials.js:173:11:173:14 | AUTH | provenance | | | HardcodedCredentials.js:173:32:173:48 | `${USER}:${PASS}` | HardcodedCredentials.js:173:18:173:49 | base64. ... PASS}`) | provenance | Config | | HardcodedCredentials.js:173:35:173:38 | USER | HardcodedCredentials.js:173:32:173:48 | `${USER}:${PASS}` | provenance | Config | | HardcodedCredentials.js:173:43:173:46 | PASS | HardcodedCredentials.js:173:32:173:48 | `${USER}:${PASS}` | provenance | Config | @@ -188,54 +188,54 @@ edges | HardcodedCredentials.js:188:39:188:42 | AUTH | HardcodedCredentials.js:188:30:188:44 | `Basic ${AUTH}` | provenance | Config | | HardcodedCredentials.js:195:46:195:49 | AUTH | HardcodedCredentials.js:195:37:195:51 | `Basic ${AUTH}` | provenance | Config | | HardcodedCredentials.js:204:44:204:47 | AUTH | HardcodedCredentials.js:204:35:204:49 | `Basic ${AUTH}` | provenance | Config | -| HardcodedCredentials.js:214:11:214:25 | USER | HardcodedCredentials.js:216:35:216:38 | USER | provenance | | -| HardcodedCredentials.js:214:18:214:25 | 'sdsdag' | HardcodedCredentials.js:214:11:214:25 | USER | provenance | | -| HardcodedCredentials.js:215:11:215:25 | PASS | HardcodedCredentials.js:216:43:216:46 | PASS | provenance | | -| HardcodedCredentials.js:215:18:215:25 | 'sdsdag' | HardcodedCredentials.js:215:11:215:25 | PASS | provenance | | -| HardcodedCredentials.js:216:11:216:49 | AUTH | HardcodedCredentials.js:221:46:221:49 | AUTH | provenance | | -| HardcodedCredentials.js:216:18:216:49 | base64. ... PASS}`) | HardcodedCredentials.js:216:11:216:49 | AUTH | provenance | | +| HardcodedCredentials.js:214:11:214:14 | USER | HardcodedCredentials.js:216:35:216:38 | USER | provenance | | +| HardcodedCredentials.js:214:18:214:25 | 'sdsdag' | HardcodedCredentials.js:214:11:214:14 | USER | provenance | | +| HardcodedCredentials.js:215:11:215:14 | PASS | HardcodedCredentials.js:216:43:216:46 | PASS | provenance | | +| HardcodedCredentials.js:215:18:215:25 | 'sdsdag' | HardcodedCredentials.js:215:11:215:14 | PASS | provenance | | +| HardcodedCredentials.js:216:11:216:14 | AUTH | HardcodedCredentials.js:221:46:221:49 | AUTH | provenance | | +| HardcodedCredentials.js:216:18:216:49 | base64. ... PASS}`) | HardcodedCredentials.js:216:11:216:14 | AUTH | provenance | | | HardcodedCredentials.js:216:32:216:48 | `${USER}:${PASS}` | HardcodedCredentials.js:216:18:216:49 | base64. ... PASS}`) | provenance | Config | | HardcodedCredentials.js:216:35:216:38 | USER | HardcodedCredentials.js:216:32:216:48 | `${USER}:${PASS}` | provenance | Config | | HardcodedCredentials.js:216:43:216:46 | PASS | HardcodedCredentials.js:216:32:216:48 | `${USER}:${PASS}` | provenance | Config | | HardcodedCredentials.js:221:46:221:49 | AUTH | HardcodedCredentials.js:221:37:221:51 | `Basic ${AUTH}` | provenance | Config | -| HardcodedCredentials.js:231:11:231:29 | username | HardcodedCredentials.js:237:47:237:54 | username | provenance | | -| HardcodedCredentials.js:231:22:231:29 | 'sdsdag' | HardcodedCredentials.js:231:11:231:29 | username | provenance | | +| HardcodedCredentials.js:231:11:231:18 | username | HardcodedCredentials.js:237:47:237:54 | username | provenance | | +| HardcodedCredentials.js:231:22:231:29 | 'sdsdag' | HardcodedCredentials.js:231:11:231:18 | username | provenance | | | HardcodedCredentials.js:237:35:237:72 | Buffer. ... ssword) | HardcodedCredentials.js:237:35:237:91 | Buffer. ... ase64') | provenance | Config | | HardcodedCredentials.js:237:35:237:91 | Buffer. ... ase64') | HardcodedCredentials.js:237:24:237:91 | 'Basic ... ase64') | provenance | Config | | HardcodedCredentials.js:237:47:237:54 | username | HardcodedCredentials.js:237:47:237:71 | usernam ... assword | provenance | Config | | HardcodedCredentials.js:237:47:237:71 | usernam ... assword | HardcodedCredentials.js:237:35:237:72 | Buffer. ... ssword) | provenance | Config | | HardcodedCredentials.js:237:47:237:71 | usernam ... assword | HardcodedCredentials.js:237:35:237:91 | Buffer. ... ase64') | provenance | Config | -| HardcodedCredentials.js:245:9:245:44 | privateKey | HardcodedCredentials.js:246:42:246:51 | privateKey | provenance | | -| HardcodedCredentials.js:245:22:245:44 | "myHard ... ateKey" | HardcodedCredentials.js:245:9:245:44 | privateKey | provenance | | -| HardcodedCredentials.js:248:9:248:42 | publicKey | HardcodedCredentials.js:249:23:249:31 | publicKey | provenance | | -| HardcodedCredentials.js:248:21:248:42 | "myHard ... licKey" | HardcodedCredentials.js:248:9:248:42 | publicKey | provenance | | +| HardcodedCredentials.js:245:9:245:18 | privateKey | HardcodedCredentials.js:246:42:246:51 | privateKey | provenance | | +| HardcodedCredentials.js:245:22:245:44 | "myHard ... ateKey" | HardcodedCredentials.js:245:9:245:18 | privateKey | provenance | | +| HardcodedCredentials.js:248:9:248:17 | publicKey | HardcodedCredentials.js:249:23:249:31 | publicKey | provenance | | +| HardcodedCredentials.js:248:21:248:42 | "myHard ... licKey" | HardcodedCredentials.js:248:9:248:17 | publicKey | provenance | | | HardcodedCredentials.js:268:33:268:56 | foo ? ' ... 'OAuth' | HardcodedCredentials.js:268:30:268:73 | `${foo ... Token}` | provenance | Config | | HardcodedCredentials.js:268:39:268:46 | 'Bearer' | HardcodedCredentials.js:268:33:268:56 | foo ? ' ... 'OAuth' | provenance | | | HardcodedCredentials.js:268:50:268:56 | 'OAuth' | HardcodedCredentials.js:268:33:268:56 | foo ? ' ... 'OAuth' | provenance | | -| HardcodedCredentials.js:308:9:308:44 | privateKey | HardcodedCredentials.js:309:34:309:43 | privateKey | provenance | | -| HardcodedCredentials.js:308:22:308:44 | "myHard ... ateKey" | HardcodedCredentials.js:308:9:308:44 | privateKey | provenance | | -| HardcodedCredentials.js:316:9:316:44 | privateKey | HardcodedCredentials.js:317:52:317:61 | privateKey | provenance | | -| HardcodedCredentials.js:316:22:316:44 | "myHard ... ateKey" | HardcodedCredentials.js:316:9:316:44 | privateKey | provenance | | +| HardcodedCredentials.js:308:9:308:18 | privateKey | HardcodedCredentials.js:309:34:309:43 | privateKey | provenance | | +| HardcodedCredentials.js:308:22:308:44 | "myHard ... ateKey" | HardcodedCredentials.js:308:9:308:18 | privateKey | provenance | | +| HardcodedCredentials.js:316:9:316:18 | privateKey | HardcodedCredentials.js:317:52:317:61 | privateKey | provenance | | +| HardcodedCredentials.js:316:22:316:44 | "myHard ... ateKey" | HardcodedCredentials.js:316:9:316:18 | privateKey | provenance | | | HardcodedCredentials.js:317:52:317:61 | privateKey | HardcodedCredentials.js:317:27:317:62 | new Tex ... ateKey) | provenance | Config | -| HardcodedCredentials.js:319:11:321:29 | spki | HardcodedCredentials.js:322:43:322:46 | spki | provenance | | -| HardcodedCredentials.js:319:18:321:29 | `-----B ... Y-----` | HardcodedCredentials.js:319:11:321:29 | spki | provenance | | -| HardcodedCredentials.js:322:9:322:56 | publicKey | HardcodedCredentials.js:323:27:323:35 | publicKey | provenance | | -| HardcodedCredentials.js:322:21:322:56 | await j ... RS256') | HardcodedCredentials.js:322:9:322:56 | publicKey | provenance | | +| HardcodedCredentials.js:319:11:319:14 | spki | HardcodedCredentials.js:322:43:322:46 | spki | provenance | | +| HardcodedCredentials.js:319:18:321:29 | `-----B ... Y-----` | HardcodedCredentials.js:319:11:319:14 | spki | provenance | | +| HardcodedCredentials.js:322:9:322:17 | publicKey | HardcodedCredentials.js:323:27:323:35 | publicKey | provenance | | +| HardcodedCredentials.js:322:21:322:56 | await j ... RS256') | HardcodedCredentials.js:322:9:322:17 | publicKey | provenance | | | HardcodedCredentials.js:322:43:322:46 | spki | HardcodedCredentials.js:322:21:322:56 | await j ... RS256') | provenance | Config | | HardcodedCredentials.js:328:12:328:55 | 'whYOFK ... -6f...' | HardcodedCredentials.js:331:17:331:46 | await j ... k, alg) | provenance | Config | -| HardcodedCredentials.js:331:5:331:46 | publicKey | HardcodedCredentials.js:335:31:335:39 | publicKey | provenance | | -| HardcodedCredentials.js:331:17:331:46 | await j ... k, alg) | HardcodedCredentials.js:331:5:331:46 | publicKey | provenance | | -| HardcodedCredentials.js:344:9:344:43 | secretKey | HardcodedCredentials.js:349:21:349:29 | secretKey | provenance | | -| HardcodedCredentials.js:344:9:344:43 | secretKey | HardcodedCredentials.js:360:33:360:41 | secretKey | provenance | | -| HardcodedCredentials.js:344:21:344:43 | "myHard ... ateKey" | HardcodedCredentials.js:344:9:344:43 | secretKey | provenance | | +| HardcodedCredentials.js:331:5:331:13 | publicKey | HardcodedCredentials.js:335:31:335:39 | publicKey | provenance | | +| HardcodedCredentials.js:331:17:331:46 | await j ... k, alg) | HardcodedCredentials.js:331:5:331:13 | publicKey | provenance | | +| HardcodedCredentials.js:344:9:344:17 | secretKey | HardcodedCredentials.js:349:21:349:29 | secretKey | provenance | | +| HardcodedCredentials.js:344:9:344:17 | secretKey | HardcodedCredentials.js:360:33:360:41 | secretKey | provenance | | +| HardcodedCredentials.js:344:21:344:43 | "myHard ... ateKey" | HardcodedCredentials.js:344:9:344:17 | secretKey | provenance | | | HardcodedCredentials.js:360:33:360:41 | secretKey | HardcodedCredentials.js:360:21:360:52 | Buffer. ... ase64") | provenance | Config | -| HardcodedCredentials.js:375:9:375:43 | secretKey | HardcodedCredentials.js:378:24:378:32 | secretKey | provenance | | -| HardcodedCredentials.js:375:9:375:43 | secretKey | HardcodedCredentials.js:385:31:385:39 | secretKey | provenance | | -| HardcodedCredentials.js:375:21:375:43 | "myHard ... ateKey" | HardcodedCredentials.js:375:9:375:43 | secretKey | provenance | | -| HardcodedCredentials.js:396:9:396:43 | secretKey | HardcodedCredentials.js:399:17:399:25 | secretKey | provenance | | -| HardcodedCredentials.js:396:21:396:43 | "myHard ... ateKey" | HardcodedCredentials.js:396:9:396:43 | secretKey | provenance | | -| HardcodedCredentials.js:414:9:414:43 | secretKey | HardcodedCredentials.js:416:27:416:35 | secretKey | provenance | | -| HardcodedCredentials.js:414:21:414:43 | "myHard ... ateKey" | HardcodedCredentials.js:414:9:414:43 | secretKey | provenance | | +| HardcodedCredentials.js:375:9:375:17 | secretKey | HardcodedCredentials.js:378:24:378:32 | secretKey | provenance | | +| HardcodedCredentials.js:375:9:375:17 | secretKey | HardcodedCredentials.js:385:31:385:39 | secretKey | provenance | | +| HardcodedCredentials.js:375:21:375:43 | "myHard ... ateKey" | HardcodedCredentials.js:375:9:375:17 | secretKey | provenance | | +| HardcodedCredentials.js:396:9:396:17 | secretKey | HardcodedCredentials.js:399:17:399:25 | secretKey | provenance | | +| HardcodedCredentials.js:396:21:396:43 | "myHard ... ateKey" | HardcodedCredentials.js:396:9:396:17 | secretKey | provenance | | +| HardcodedCredentials.js:414:9:414:17 | secretKey | HardcodedCredentials.js:416:27:416:35 | secretKey | provenance | | +| HardcodedCredentials.js:414:21:414:43 | "myHard ... ateKey" | HardcodedCredentials.js:414:9:414:17 | secretKey | provenance | | nodes | HardcodedCredentials.js:5:15:5:22 | 'dbuser' | semmle.label | 'dbuser' | | HardcodedCredentials.js:8:19:8:28 | 'hgfedcba' | semmle.label | 'hgfedcba' | @@ -292,11 +292,11 @@ nodes | HardcodedCredentials.js:160:38:160:56 | "oiuneawrgiyubaegr" | semmle.label | "oiuneawrgiyubaegr" | | HardcodedCredentials.js:161:41:161:59 | 'oiuneawrgiyubaegr' | semmle.label | 'oiuneawrgiyubaegr' | | HardcodedCredentials.js:164:35:164:45 | 'change_me' | semmle.label | 'change_me' | -| HardcodedCredentials.js:171:11:171:25 | USER | semmle.label | USER | +| HardcodedCredentials.js:171:11:171:14 | USER | semmle.label | USER | | HardcodedCredentials.js:171:18:171:25 | 'sdsdag' | semmle.label | 'sdsdag' | -| HardcodedCredentials.js:172:11:172:25 | PASS | semmle.label | PASS | +| HardcodedCredentials.js:172:11:172:14 | PASS | semmle.label | PASS | | HardcodedCredentials.js:172:18:172:25 | 'sdsdag' | semmle.label | 'sdsdag' | -| HardcodedCredentials.js:173:11:173:49 | AUTH | semmle.label | AUTH | +| HardcodedCredentials.js:173:11:173:14 | AUTH | semmle.label | AUTH | | HardcodedCredentials.js:173:18:173:49 | base64. ... PASS}`) | semmle.label | base64. ... PASS}`) | | HardcodedCredentials.js:173:32:173:48 | `${USER}:${PASS}` | semmle.label | `${USER}:${PASS}` | | HardcodedCredentials.js:173:35:173:38 | USER | semmle.label | USER | @@ -309,28 +309,28 @@ nodes | HardcodedCredentials.js:195:46:195:49 | AUTH | semmle.label | AUTH | | HardcodedCredentials.js:204:35:204:49 | `Basic ${AUTH}` | semmle.label | `Basic ${AUTH}` | | HardcodedCredentials.js:204:44:204:47 | AUTH | semmle.label | AUTH | -| HardcodedCredentials.js:214:11:214:25 | USER | semmle.label | USER | +| HardcodedCredentials.js:214:11:214:14 | USER | semmle.label | USER | | HardcodedCredentials.js:214:18:214:25 | 'sdsdag' | semmle.label | 'sdsdag' | -| HardcodedCredentials.js:215:11:215:25 | PASS | semmle.label | PASS | +| HardcodedCredentials.js:215:11:215:14 | PASS | semmle.label | PASS | | HardcodedCredentials.js:215:18:215:25 | 'sdsdag' | semmle.label | 'sdsdag' | -| HardcodedCredentials.js:216:11:216:49 | AUTH | semmle.label | AUTH | +| HardcodedCredentials.js:216:11:216:14 | AUTH | semmle.label | AUTH | | HardcodedCredentials.js:216:18:216:49 | base64. ... PASS}`) | semmle.label | base64. ... PASS}`) | | HardcodedCredentials.js:216:32:216:48 | `${USER}:${PASS}` | semmle.label | `${USER}:${PASS}` | | HardcodedCredentials.js:216:35:216:38 | USER | semmle.label | USER | | HardcodedCredentials.js:216:43:216:46 | PASS | semmle.label | PASS | | HardcodedCredentials.js:221:37:221:51 | `Basic ${AUTH}` | semmle.label | `Basic ${AUTH}` | | HardcodedCredentials.js:221:46:221:49 | AUTH | semmle.label | AUTH | -| HardcodedCredentials.js:231:11:231:29 | username | semmle.label | username | +| HardcodedCredentials.js:231:11:231:18 | username | semmle.label | username | | HardcodedCredentials.js:231:22:231:29 | 'sdsdag' | semmle.label | 'sdsdag' | | HardcodedCredentials.js:237:24:237:91 | 'Basic ... ase64') | semmle.label | 'Basic ... ase64') | | HardcodedCredentials.js:237:35:237:72 | Buffer. ... ssword) | semmle.label | Buffer. ... ssword) | | HardcodedCredentials.js:237:35:237:91 | Buffer. ... ase64') | semmle.label | Buffer. ... ase64') | | HardcodedCredentials.js:237:47:237:54 | username | semmle.label | username | | HardcodedCredentials.js:237:47:237:71 | usernam ... assword | semmle.label | usernam ... assword | -| HardcodedCredentials.js:245:9:245:44 | privateKey | semmle.label | privateKey | +| HardcodedCredentials.js:245:9:245:18 | privateKey | semmle.label | privateKey | | HardcodedCredentials.js:245:22:245:44 | "myHard ... ateKey" | semmle.label | "myHard ... ateKey" | | HardcodedCredentials.js:246:42:246:51 | privateKey | semmle.label | privateKey | -| HardcodedCredentials.js:248:9:248:42 | publicKey | semmle.label | publicKey | +| HardcodedCredentials.js:248:9:248:17 | publicKey | semmle.label | publicKey | | HardcodedCredentials.js:248:21:248:42 | "myHard ... licKey" | semmle.label | "myHard ... licKey" | | HardcodedCredentials.js:249:23:249:31 | publicKey | semmle.label | publicKey | | HardcodedCredentials.js:260:30:260:40 | `Basic foo` | semmle.label | `Basic foo` | @@ -358,36 +358,36 @@ nodes | HardcodedCredentials.js:300:44:300:56 | 'SampleToken' | semmle.label | 'SampleToken' | | HardcodedCredentials.js:301:44:301:55 | 'MyPassword' | semmle.label | 'MyPassword' | | HardcodedCredentials.js:302:44:302:69 | 'iubfew ... ybgera' | semmle.label | 'iubfew ... ybgera' | -| HardcodedCredentials.js:308:9:308:44 | privateKey | semmle.label | privateKey | +| HardcodedCredentials.js:308:9:308:18 | privateKey | semmle.label | privateKey | | HardcodedCredentials.js:308:22:308:44 | "myHard ... ateKey" | semmle.label | "myHard ... ateKey" | | HardcodedCredentials.js:309:34:309:43 | privateKey | semmle.label | privateKey | -| HardcodedCredentials.js:316:9:316:44 | privateKey | semmle.label | privateKey | +| HardcodedCredentials.js:316:9:316:18 | privateKey | semmle.label | privateKey | | HardcodedCredentials.js:316:22:316:44 | "myHard ... ateKey" | semmle.label | "myHard ... ateKey" | | HardcodedCredentials.js:317:27:317:62 | new Tex ... ateKey) | semmle.label | new Tex ... ateKey) | | HardcodedCredentials.js:317:52:317:61 | privateKey | semmle.label | privateKey | -| HardcodedCredentials.js:319:11:321:29 | spki | semmle.label | spki | +| HardcodedCredentials.js:319:11:319:14 | spki | semmle.label | spki | | HardcodedCredentials.js:319:18:321:29 | `-----B ... Y-----` | semmle.label | `-----B ... Y-----` | -| HardcodedCredentials.js:322:9:322:56 | publicKey | semmle.label | publicKey | +| HardcodedCredentials.js:322:9:322:17 | publicKey | semmle.label | publicKey | | HardcodedCredentials.js:322:21:322:56 | await j ... RS256') | semmle.label | await j ... RS256') | | HardcodedCredentials.js:322:43:322:46 | spki | semmle.label | spki | | HardcodedCredentials.js:323:27:323:35 | publicKey | semmle.label | publicKey | | HardcodedCredentials.js:328:12:328:55 | 'whYOFK ... -6f...' | semmle.label | 'whYOFK ... -6f...' | -| HardcodedCredentials.js:331:5:331:46 | publicKey | semmle.label | publicKey | +| HardcodedCredentials.js:331:5:331:13 | publicKey | semmle.label | publicKey | | HardcodedCredentials.js:331:17:331:46 | await j ... k, alg) | semmle.label | await j ... k, alg) | | HardcodedCredentials.js:335:31:335:39 | publicKey | semmle.label | publicKey | -| HardcodedCredentials.js:344:9:344:43 | secretKey | semmle.label | secretKey | +| HardcodedCredentials.js:344:9:344:17 | secretKey | semmle.label | secretKey | | HardcodedCredentials.js:344:21:344:43 | "myHard ... ateKey" | semmle.label | "myHard ... ateKey" | | HardcodedCredentials.js:349:21:349:29 | secretKey | semmle.label | secretKey | | HardcodedCredentials.js:360:21:360:52 | Buffer. ... ase64") | semmle.label | Buffer. ... ase64") | | HardcodedCredentials.js:360:33:360:41 | secretKey | semmle.label | secretKey | -| HardcodedCredentials.js:375:9:375:43 | secretKey | semmle.label | secretKey | +| HardcodedCredentials.js:375:9:375:17 | secretKey | semmle.label | secretKey | | HardcodedCredentials.js:375:21:375:43 | "myHard ... ateKey" | semmle.label | "myHard ... ateKey" | | HardcodedCredentials.js:378:24:378:32 | secretKey | semmle.label | secretKey | | HardcodedCredentials.js:385:31:385:39 | secretKey | semmle.label | secretKey | -| HardcodedCredentials.js:396:9:396:43 | secretKey | semmle.label | secretKey | +| HardcodedCredentials.js:396:9:396:17 | secretKey | semmle.label | secretKey | | HardcodedCredentials.js:396:21:396:43 | "myHard ... ateKey" | semmle.label | "myHard ... ateKey" | | HardcodedCredentials.js:399:17:399:25 | secretKey | semmle.label | secretKey | -| HardcodedCredentials.js:414:9:414:43 | secretKey | semmle.label | secretKey | +| HardcodedCredentials.js:414:9:414:17 | secretKey | semmle.label | secretKey | | HardcodedCredentials.js:414:21:414:43 | "myHard ... ateKey" | semmle.label | "myHard ... ateKey" | | HardcodedCredentials.js:416:27:416:35 | secretKey | semmle.label | secretKey | | HardcodedCredentials.js:423:43:423:53 | "AccessID1" | semmle.label | "AccessID1" | diff --git a/javascript/ql/test/query-tests/Security/CWE-807/ConditionalBypass.expected b/javascript/ql/test/query-tests/Security/CWE-807/ConditionalBypass.expected index 8743571bbbc..ea9f656fb51 100644 --- a/javascript/ql/test/query-tests/Security/CWE-807/ConditionalBypass.expected +++ b/javascript/ql/test/query-tests/Security/CWE-807/ConditionalBypass.expected @@ -13,8 +13,8 @@ edges | example_bypass.js:6:9:6:19 | req.cookies | example_bypass.js:6:9:6:34 | req.coo ... nUserId | provenance | | | tst.js:13:9:13:19 | req.cookies | tst.js:13:9:13:30 | req.coo ... inThing | provenance | | | tst.js:24:17:24:17 | v | tst.js:25:16:25:16 | v | provenance | | -| tst.js:27:9:27:37 | v3 | tst.js:28:9:28:10 | v3 | provenance | | -| tst.js:27:14:27:37 | id(req. ... okieId) | tst.js:27:9:27:37 | v3 | provenance | | +| tst.js:27:9:27:10 | v3 | tst.js:28:9:28:10 | v3 | provenance | | +| tst.js:27:14:27:37 | id(req. ... okieId) | tst.js:27:9:27:10 | v3 | provenance | | | tst.js:27:17:27:27 | req.cookies | tst.js:27:17:27:36 | req.cookies.cookieId | provenance | | | tst.js:27:17:27:36 | req.cookies.cookieId | tst.js:24:17:24:17 | v | provenance | | | tst.js:27:17:27:36 | req.cookies.cookieId | tst.js:27:14:27:37 | id(req. ... okieId) | provenance | | @@ -35,7 +35,7 @@ nodes | tst.js:13:9:13:30 | req.coo ... inThing | semmle.label | req.coo ... inThing | | tst.js:24:17:24:17 | v | semmle.label | v | | tst.js:25:16:25:16 | v | semmle.label | v | -| tst.js:27:9:27:37 | v3 | semmle.label | v3 | +| tst.js:27:9:27:10 | v3 | semmle.label | v3 | | tst.js:27:14:27:37 | id(req. ... okieId) | semmle.label | id(req. ... okieId) | | tst.js:27:17:27:27 | req.cookies | semmle.label | req.cookies | | tst.js:27:17:27:36 | req.cookies.cookieId | semmle.label | req.cookies.cookieId | diff --git a/javascript/ql/test/query-tests/Security/CWE-829/InsecureDownload.expected b/javascript/ql/test/query-tests/Security/CWE-829/InsecureDownload.expected index e430335b97b..5c9f10f5621 100644 --- a/javascript/ql/test/query-tests/Security/CWE-829/InsecureDownload.expected +++ b/javascript/ql/test/query-tests/Security/CWE-829/InsecureDownload.expected @@ -6,12 +6,12 @@ | insecure-download.js:48:12:48:38 | "http:/ ... unsafe" | insecure-download.js:48:12:48:38 | "http:/ ... unsafe" | insecure-download.js:48:12:48:38 | "http:/ ... unsafe" | $@ of sensitive file from $@. | insecure-download.js:48:5:48:71 | nugget( ... => { }) | Download | insecure-download.js:48:12:48:38 | "http:/ ... unsafe" | HTTP source | | insecure-download.js:52:11:52:45 | "http:/ ... nknown" | insecure-download.js:52:11:52:45 | "http:/ ... nknown" | insecure-download.js:52:11:52:45 | "http:/ ... nknown" | $@ of sensitive file from $@. | insecure-download.js:52:5:54:6 | $.get(" ... \\n }) | Download | insecure-download.js:52:11:52:45 | "http:/ ... nknown" | HTTP source | edges -| insecure-download.js:36:9:36:45 | url | insecure-download.js:37:23:37:25 | url | provenance | | -| insecure-download.js:36:9:36:45 | url | insecure-download.js:39:26:39:28 | url | provenance | | -| insecure-download.js:36:15:36:45 | "http:/ ... fe.APK" | insecure-download.js:36:9:36:45 | url | provenance | | +| insecure-download.js:36:9:36:11 | url | insecure-download.js:37:23:37:25 | url | provenance | | +| insecure-download.js:36:9:36:11 | url | insecure-download.js:39:26:39:28 | url | provenance | | +| insecure-download.js:36:15:36:45 | "http:/ ... fe.APK" | insecure-download.js:36:9:36:11 | url | provenance | | nodes | insecure-download.js:30:12:30:42 | "http:/ ... fe.APK" | semmle.label | "http:/ ... fe.APK" | -| insecure-download.js:36:9:36:45 | url | semmle.label | url | +| insecure-download.js:36:9:36:11 | url | semmle.label | url | | insecure-download.js:36:15:36:45 | "http:/ ... fe.APK" | semmle.label | "http:/ ... fe.APK" | | insecure-download.js:37:23:37:25 | url | semmle.label | url | | insecure-download.js:39:26:39:28 | url | semmle.label | url | diff --git a/javascript/ql/test/query-tests/Security/CWE-843/TypeConfusionThroughParameterTampering.expected b/javascript/ql/test/query-tests/Security/CWE-843/TypeConfusionThroughParameterTampering.expected index b07e1c194a4..39ef0ef3318 100644 --- a/javascript/ql/test/query-tests/Security/CWE-843/TypeConfusionThroughParameterTampering.expected +++ b/javascript/ql/test/query-tests/Security/CWE-843/TypeConfusionThroughParameterTampering.expected @@ -14,21 +14,21 @@ | tst.js:100:9:100:16 | data.foo | tst.js:100:9:100:16 | data.foo | tst.js:100:9:100:16 | data.foo | Potential type confusion as $@ may be either an array or a string. | tst.js:100:9:100:16 | data.foo | this HTTP request parameter | | tst.js:106:5:106:8 | data | tst.js:105:16:105:29 | req.query.data | tst.js:106:5:106:8 | data | Potential type confusion as $@ may be either an array or a string. | tst.js:105:16:105:29 | req.query.data | this HTTP request parameter | edges -| tst.js:5:9:5:27 | foo | tst.js:6:5:6:7 | foo | provenance | | -| tst.js:5:9:5:27 | foo | tst.js:6:5:6:7 | foo | provenance | | -| tst.js:5:9:5:27 | foo | tst.js:8:5:8:7 | foo | provenance | | -| tst.js:5:9:5:27 | foo | tst.js:8:5:8:7 | foo | provenance | | -| tst.js:5:9:5:27 | foo | tst.js:17:7:17:9 | foo | provenance | | -| tst.js:5:9:5:27 | foo | tst.js:21:5:21:7 | foo | provenance | | -| tst.js:5:9:5:27 | foo | tst.js:22:5:22:7 | foo | provenance | | -| tst.js:5:9:5:27 | foo | tst.js:23:5:23:7 | foo | provenance | | -| tst.js:5:9:5:27 | foo | tst.js:25:5:25:7 | foo | provenance | | -| tst.js:5:9:5:27 | foo | tst.js:27:5:27:7 | foo | provenance | | -| tst.js:5:9:5:27 | foo | tst.js:27:5:27:7 | foo | provenance | | -| tst.js:5:9:5:27 | foo | tst.js:28:5:28:7 | foo | provenance | | -| tst.js:5:9:5:27 | foo | tst.js:28:5:28:7 | foo | provenance | | -| tst.js:5:9:5:27 | foo | tst.js:30:5:30:7 | foo | provenance | | -| tst.js:5:15:5:27 | req.query.foo | tst.js:5:9:5:27 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:6:5:6:7 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:6:5:6:7 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:8:5:8:7 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:8:5:8:7 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:17:7:17:9 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:21:5:21:7 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:22:5:22:7 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:23:5:23:7 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:25:5:25:7 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:27:5:27:7 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:27:5:27:7 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:28:5:28:7 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:28:5:28:7 | foo | provenance | | +| tst.js:5:9:5:11 | foo | tst.js:30:5:30:7 | foo | provenance | | +| tst.js:5:15:5:27 | req.query.foo | tst.js:5:9:5:11 | foo | provenance | | | tst.js:6:5:6:7 | foo | tst.js:8:5:8:7 | foo | provenance | | | tst.js:6:5:6:7 | foo | tst.js:8:5:8:7 | foo | provenance | | | tst.js:8:5:8:7 | foo | tst.js:10:5:12:5 | functio ... t\\n } [foo] | provenance | | @@ -48,15 +48,15 @@ edges | tst.js:27:5:27:7 | foo | tst.js:28:5:28:7 | foo | provenance | | | tst.js:28:5:28:7 | foo | tst.js:30:5:30:7 | foo | provenance | | | tst.js:41:12:41:12 | f [foo] | tst.js:11:9:11:11 | foo | provenance | | -| tst.js:47:9:47:35 | foo | tst.js:48:5:48:7 | foo | provenance | | -| tst.js:47:15:47:35 | ctx.req ... ery.foo | tst.js:47:9:47:35 | foo | provenance | | +| tst.js:47:9:47:11 | foo | tst.js:48:5:48:7 | foo | provenance | | +| tst.js:47:15:47:35 | ctx.req ... ery.foo | tst.js:47:9:47:11 | foo | provenance | | | tst.js:79:25:79:38 | req.query.path | tst.js:82:23:82:23 | p | provenance | | | tst.js:82:23:82:23 | p | tst.js:83:9:83:9 | p | provenance | | | tst.js:82:23:82:23 | p | tst.js:84:9:84:9 | p | provenance | | -| tst.js:105:9:105:29 | data | tst.js:106:5:106:8 | data | provenance | | -| tst.js:105:16:105:29 | req.query.data | tst.js:105:9:105:29 | data | provenance | | +| tst.js:105:9:105:12 | data | tst.js:106:5:106:8 | data | provenance | | +| tst.js:105:16:105:29 | req.query.data | tst.js:105:9:105:12 | data | provenance | | nodes -| tst.js:5:9:5:27 | foo | semmle.label | foo | +| tst.js:5:9:5:11 | foo | semmle.label | foo | | tst.js:5:15:5:27 | req.query.foo | semmle.label | req.query.foo | | tst.js:6:5:6:7 | foo | semmle.label | foo | | tst.js:6:5:6:7 | foo | semmle.label | foo | @@ -78,7 +78,7 @@ nodes | tst.js:28:5:28:7 | foo | semmle.label | foo | | tst.js:30:5:30:7 | foo | semmle.label | foo | | tst.js:41:12:41:12 | f [foo] | semmle.label | f [foo] | -| tst.js:47:9:47:35 | foo | semmle.label | foo | +| tst.js:47:9:47:11 | foo | semmle.label | foo | | tst.js:47:15:47:35 | ctx.req ... ery.foo | semmle.label | ctx.req ... ery.foo | | tst.js:48:5:48:7 | foo | semmle.label | foo | | tst.js:79:25:79:38 | req.query.path | semmle.label | req.query.path | @@ -88,7 +88,7 @@ nodes | tst.js:92:5:92:12 | data.foo | semmle.label | data.foo | | tst.js:94:9:94:16 | data.foo | semmle.label | data.foo | | tst.js:100:9:100:16 | data.foo | semmle.label | data.foo | -| tst.js:105:9:105:29 | data | semmle.label | data | +| tst.js:105:9:105:12 | data | semmle.label | data | | tst.js:105:16:105:29 | req.query.data | semmle.label | req.query.data | | tst.js:106:5:106:8 | data | semmle.label | data | subpaths diff --git a/javascript/ql/test/query-tests/Security/CWE-915/PrototypePollutingAssignment/PrototypePollutingAssignment.expected b/javascript/ql/test/query-tests/Security/CWE-915/PrototypePollutingAssignment/PrototypePollutingAssignment.expected index 67aadb32c31..c2fddac0ce3 100644 --- a/javascript/ql/test/query-tests/Security/CWE-915/PrototypePollutingAssignment/PrototypePollutingAssignment.expected +++ b/javascript/ql/test/query-tests/Security/CWE-915/PrototypePollutingAssignment/PrototypePollutingAssignment.expected @@ -29,59 +29,59 @@ edges | lib.js:1:38:1:40 | obj | lib.js:6:7:6:9 | obj | provenance | | | lib.js:1:43:1:46 | path | lib.js:2:21:2:24 | path | provenance | | -| lib.js:2:7:2:27 | currentPath | lib.js:11:21:11:31 | currentPath | provenance | | +| lib.js:2:7:2:17 | currentPath | lib.js:11:21:11:31 | currentPath | provenance | | | lib.js:2:21:2:24 | path | lib.js:2:21:2:27 | path[0] | provenance | Config | -| lib.js:2:21:2:27 | path[0] | lib.js:2:7:2:27 | currentPath | provenance | | +| lib.js:2:21:2:27 | path[0] | lib.js:2:7:2:17 | currentPath | provenance | | | lib.js:11:17:11:32 | obj[currentPath] | lib.js:1:38:1:40 | obj | provenance | | | lib.js:11:21:11:31 | currentPath | lib.js:11:17:11:32 | obj[currentPath] | provenance | Config | | lib.js:14:38:14:41 | path | lib.js:15:7:15:10 | path | provenance | | | lib.js:15:7:15:10 | path | lib.js:15:7:15:13 | path[0] | provenance | Config | | lib.js:15:7:15:13 | path[0] | lib.js:15:3:15:14 | obj[path[0]] | provenance | Config | -| lib.js:20:7:20:25 | path | lib.js:22:7:22:10 | path | provenance | | +| lib.js:20:7:20:10 | path | lib.js:22:7:22:10 | path | provenance | | | lib.js:20:14:20:22 | arguments | lib.js:20:14:20:25 | arguments[1] | provenance | Config | -| lib.js:20:14:20:25 | arguments[1] | lib.js:20:7:20:25 | path | provenance | | +| lib.js:20:14:20:25 | arguments[1] | lib.js:20:7:20:10 | path | provenance | | | lib.js:22:7:22:10 | path | lib.js:22:7:22:13 | path[0] | provenance | Config | | lib.js:22:7:22:13 | path[0] | lib.js:22:3:22:14 | obj[path[0]] | provenance | Config | | lib.js:25:44:25:47 | path | lib.js:26:14:26:17 | path | provenance | | | lib.js:26:14:26:17 | path | lib.js:26:14:26:20 | path[0] | provenance | Config | | lib.js:26:14:26:20 | path[0] | lib.js:26:10:26:21 | obj[path[0]] | provenance | Config | -| lib.js:30:9:30:52 | args | lib.js:32:14:32:17 | args | provenance | | -| lib.js:30:9:30:52 | args [ArrayElement] | lib.js:32:14:32:17 | args [ArrayElement] | provenance | | -| lib.js:30:16:30:52 | Array.p ... uments) | lib.js:30:9:30:52 | args | provenance | | -| lib.js:30:16:30:52 | Array.p ... uments) [ArrayElement] | lib.js:30:9:30:52 | args [ArrayElement] | provenance | | +| lib.js:30:9:30:12 | args | lib.js:32:14:32:17 | args | provenance | | +| lib.js:30:9:30:12 | args [ArrayElement] | lib.js:32:14:32:17 | args [ArrayElement] | provenance | | +| lib.js:30:16:30:52 | Array.p ... uments) | lib.js:30:9:30:12 | args | provenance | | +| lib.js:30:16:30:52 | Array.p ... uments) [ArrayElement] | lib.js:30:9:30:12 | args [ArrayElement] | provenance | | | lib.js:30:16:30:52 | reflective call | lib.js:30:16:30:52 | Array.p ... uments) | provenance | | | lib.js:30:16:30:52 | reflective call [ArrayElement] | lib.js:30:16:30:52 | Array.p ... uments) [ArrayElement] | provenance | | | lib.js:30:43:30:51 | arguments | lib.js:30:16:30:52 | reflective call | provenance | Config | | lib.js:30:43:30:51 | arguments | lib.js:30:16:30:52 | reflective call [ArrayElement] | provenance | Config | -| lib.js:32:7:32:20 | path | lib.js:34:7:34:10 | path | provenance | | +| lib.js:32:7:32:10 | path | lib.js:34:7:34:10 | path | provenance | | | lib.js:32:14:32:17 | args | lib.js:32:14:32:20 | args[1] | provenance | Config | | lib.js:32:14:32:17 | args [ArrayElement] | lib.js:32:14:32:20 | args[1] | provenance | | -| lib.js:32:14:32:20 | args[1] | lib.js:32:7:32:20 | path | provenance | | +| lib.js:32:14:32:20 | args[1] | lib.js:32:7:32:10 | path | provenance | | | lib.js:34:7:34:10 | path | lib.js:34:7:34:13 | path[0] | provenance | Config | | lib.js:34:7:34:13 | path[0] | lib.js:34:3:34:14 | obj[path[0]] | provenance | Config | -| lib.js:38:9:38:36 | args | lib.js:40:14:40:17 | args | provenance | | -| lib.js:38:16:38:36 | Array.f ... uments) | lib.js:38:9:38:36 | args | provenance | | +| lib.js:38:9:38:12 | args | lib.js:40:14:40:17 | args | provenance | | +| lib.js:38:16:38:36 | Array.f ... uments) | lib.js:38:9:38:12 | args | provenance | | | lib.js:38:27:38:35 | arguments | lib.js:38:16:38:36 | Array.f ... uments) | provenance | Config | -| lib.js:40:7:40:20 | path | lib.js:42:7:42:10 | path | provenance | | +| lib.js:40:7:40:10 | path | lib.js:42:7:42:10 | path | provenance | | | lib.js:40:14:40:17 | args | lib.js:40:14:40:20 | args[1] | provenance | Config | -| lib.js:40:14:40:20 | args[1] | lib.js:40:7:40:20 | path | provenance | | +| lib.js:40:14:40:20 | args[1] | lib.js:40:7:40:10 | path | provenance | | | lib.js:42:7:42:10 | path | lib.js:42:7:42:13 | path[0] | provenance | Config | | lib.js:42:7:42:13 | path[0] | lib.js:42:3:42:14 | obj[path[0]] | provenance | Config | -| lib.js:83:7:83:25 | path | lib.js:86:19:86:22 | path | provenance | | +| lib.js:83:7:83:10 | path | lib.js:86:19:86:22 | path | provenance | | | lib.js:83:14:83:22 | arguments | lib.js:83:14:83:25 | arguments[1] | provenance | Config | -| lib.js:83:14:83:25 | arguments[1] | lib.js:83:7:83:25 | path | provenance | | -| lib.js:86:7:86:26 | proto | lib.js:87:10:87:14 | proto | provenance | | -| lib.js:86:15:86:26 | obj[path[0]] | lib.js:86:7:86:26 | proto | provenance | | +| lib.js:83:14:83:25 | arguments[1] | lib.js:83:7:83:10 | path | provenance | | +| lib.js:86:7:86:11 | proto | lib.js:87:10:87:14 | proto | provenance | | +| lib.js:86:15:86:26 | obj[path[0]] | lib.js:86:7:86:11 | proto | provenance | | | lib.js:86:19:86:22 | path | lib.js:86:19:86:25 | path[0] | provenance | Config | | lib.js:86:19:86:25 | path[0] | lib.js:86:15:86:26 | obj[path[0]] | provenance | Config | | lib.js:90:43:90:46 | path | lib.js:91:24:91:27 | path | provenance | | -| lib.js:91:7:91:28 | maybeProto | lib.js:92:3:92:12 | maybeProto | provenance | | -| lib.js:91:7:91:28 | maybeProto | lib.js:95:3:95:12 | maybeProto | provenance | | -| lib.js:91:20:91:28 | obj[path] | lib.js:91:7:91:28 | maybeProto | provenance | | +| lib.js:91:7:91:16 | maybeProto | lib.js:92:3:92:12 | maybeProto | provenance | | +| lib.js:91:7:91:16 | maybeProto | lib.js:95:3:95:12 | maybeProto | provenance | | +| lib.js:91:20:91:28 | obj[path] | lib.js:91:7:91:16 | maybeProto | provenance | | | lib.js:91:24:91:27 | path | lib.js:91:20:91:28 | obj[path] | provenance | Config | -| lib.js:104:7:104:24 | one | lib.js:108:7:108:9 | one | provenance | | +| lib.js:104:7:104:9 | one | lib.js:108:7:108:9 | one | provenance | | | lib.js:104:13:104:21 | arguments | lib.js:104:13:104:24 | arguments[1] | provenance | Config | -| lib.js:104:13:104:24 | arguments[1] | lib.js:104:7:104:24 | one | provenance | | +| lib.js:104:13:104:24 | arguments[1] | lib.js:104:7:104:9 | one | provenance | | | lib.js:108:7:108:9 | one | lib.js:108:3:108:10 | obj[one] | provenance | Config | | lib.js:118:29:118:32 | path | lib.js:119:17:119:20 | path | provenance | | | lib.js:119:17:119:20 | path | lib.js:119:17:119:23 | path[0] | provenance | Config | @@ -98,11 +98,11 @@ edges | sublib/sub.js:1:37:1:40 | path | sublib/sub.js:2:7:2:10 | path | provenance | | | sublib/sub.js:2:7:2:10 | path | sublib/sub.js:2:7:2:13 | path[0] | provenance | Config | | sublib/sub.js:2:7:2:13 | path[0] | sublib/sub.js:2:3:2:14 | obj[path[0]] | provenance | Config | -| tst.js:5:9:5:38 | taint | tst.js:8:12:8:16 | taint | provenance | | -| tst.js:5:9:5:38 | taint | tst.js:9:12:9:16 | taint | provenance | | -| tst.js:5:9:5:38 | taint | tst.js:12:25:12:29 | taint | provenance | | -| tst.js:5:9:5:38 | taint | tst.js:14:27:14:31 | taint | provenance | | -| tst.js:5:17:5:38 | String( ... y.data) | tst.js:5:9:5:38 | taint | provenance | | +| tst.js:5:9:5:13 | taint | tst.js:8:12:8:16 | taint | provenance | | +| tst.js:5:9:5:13 | taint | tst.js:9:12:9:16 | taint | provenance | | +| tst.js:5:9:5:13 | taint | tst.js:12:25:12:29 | taint | provenance | | +| tst.js:5:9:5:13 | taint | tst.js:14:27:14:31 | taint | provenance | | +| tst.js:5:17:5:38 | String( ... y.data) | tst.js:5:9:5:13 | taint | provenance | | | tst.js:5:24:5:37 | req.query.data | tst.js:5:17:5:38 | String( ... y.data) | provenance | Config | | tst.js:8:12:8:16 | taint | tst.js:8:5:8:17 | object[taint] | provenance | Config | | tst.js:9:12:9:16 | taint | tst.js:9:5:9:17 | object[taint] | provenance | Config | @@ -117,10 +117,10 @@ edges | tst.js:55:29:55:32 | prop | tst.js:56:22:56:25 | prop | provenance | | | tst.js:56:18:56:26 | obj[prop] | tst.js:56:12:56:33 | obj ? o ... : null | provenance | | | tst.js:56:22:56:25 | prop | tst.js:56:18:56:26 | obj[prop] | provenance | Config | -| tst.js:77:9:77:38 | taint | tst.js:80:12:80:16 | taint | provenance | | -| tst.js:77:9:77:38 | taint | tst.js:82:17:82:21 | taint | provenance | | -| tst.js:77:9:77:38 | taint | tst.js:87:16:87:20 | taint | provenance | | -| tst.js:77:17:77:38 | String( ... y.data) | tst.js:77:9:77:38 | taint | provenance | | +| tst.js:77:9:77:13 | taint | tst.js:80:12:80:16 | taint | provenance | | +| tst.js:77:9:77:13 | taint | tst.js:82:17:82:21 | taint | provenance | | +| tst.js:77:9:77:13 | taint | tst.js:87:16:87:20 | taint | provenance | | +| tst.js:77:17:77:38 | String( ... y.data) | tst.js:77:9:77:13 | taint | provenance | | | tst.js:77:24:77:37 | req.query.data | tst.js:77:17:77:38 | String( ... y.data) | provenance | Config | | tst.js:80:12:80:16 | taint | tst.js:80:5:80:17 | object[taint] | provenance | Config | | tst.js:82:12:82:21 | "" + taint | tst.js:82:5:82:22 | object["" + taint] | provenance | Config | @@ -130,8 +130,8 @@ edges | tst.js:94:9:94:36 | req.que ... _', '') | tst.js:94:5:94:37 | obj[req ... ', '')] | provenance | Config | | tst.js:97:9:97:19 | req.query.x | tst.js:97:9:97:45 | req.que ... /g, '') | provenance | Config | | tst.js:97:9:97:45 | req.que ... /g, '') | tst.js:97:5:97:46 | obj[req ... g, '')] | provenance | Config | -| tst.js:102:9:102:38 | taint | tst.js:105:12:105:16 | taint | provenance | | -| tst.js:102:17:102:38 | String( ... y.data) | tst.js:102:9:102:38 | taint | provenance | | +| tst.js:102:9:102:13 | taint | tst.js:105:12:105:16 | taint | provenance | | +| tst.js:102:17:102:38 | String( ... y.data) | tst.js:102:9:102:13 | taint | provenance | | | tst.js:102:24:102:37 | req.query.data | tst.js:102:17:102:38 | String( ... y.data) | provenance | Config | | tst.js:105:12:105:16 | taint | tst.js:105:5:105:17 | object[taint] | provenance | Config | | tst.js:130:9:130:19 | req.query.x | tst.js:130:9:130:52 | req.que ... '), '') | provenance | Config | @@ -139,7 +139,7 @@ edges nodes | lib.js:1:38:1:40 | obj | semmle.label | obj | | lib.js:1:43:1:46 | path | semmle.label | path | -| lib.js:2:7:2:27 | currentPath | semmle.label | currentPath | +| lib.js:2:7:2:17 | currentPath | semmle.label | currentPath | | lib.js:2:21:2:24 | path | semmle.label | path | | lib.js:2:21:2:27 | path[0] | semmle.label | path[0] | | lib.js:6:7:6:9 | obj | semmle.label | obj | @@ -149,7 +149,7 @@ nodes | lib.js:15:3:15:14 | obj[path[0]] | semmle.label | obj[path[0]] | | lib.js:15:7:15:10 | path | semmle.label | path | | lib.js:15:7:15:13 | path[0] | semmle.label | path[0] | -| lib.js:20:7:20:25 | path | semmle.label | path | +| lib.js:20:7:20:10 | path | semmle.label | path | | lib.js:20:14:20:22 | arguments | semmle.label | arguments | | lib.js:20:14:20:25 | arguments[1] | semmle.label | arguments[1] | | lib.js:22:3:22:14 | obj[path[0]] | semmle.label | obj[path[0]] | @@ -159,44 +159,44 @@ nodes | lib.js:26:10:26:21 | obj[path[0]] | semmle.label | obj[path[0]] | | lib.js:26:14:26:17 | path | semmle.label | path | | lib.js:26:14:26:20 | path[0] | semmle.label | path[0] | -| lib.js:30:9:30:52 | args | semmle.label | args | -| lib.js:30:9:30:52 | args [ArrayElement] | semmle.label | args [ArrayElement] | +| lib.js:30:9:30:12 | args | semmle.label | args | +| lib.js:30:9:30:12 | args [ArrayElement] | semmle.label | args [ArrayElement] | | lib.js:30:16:30:52 | Array.p ... uments) | semmle.label | Array.p ... uments) | | lib.js:30:16:30:52 | Array.p ... uments) [ArrayElement] | semmle.label | Array.p ... uments) [ArrayElement] | | lib.js:30:16:30:52 | reflective call | semmle.label | reflective call | | lib.js:30:16:30:52 | reflective call [ArrayElement] | semmle.label | reflective call [ArrayElement] | | lib.js:30:43:30:51 | arguments | semmle.label | arguments | -| lib.js:32:7:32:20 | path | semmle.label | path | +| lib.js:32:7:32:10 | path | semmle.label | path | | lib.js:32:14:32:17 | args | semmle.label | args | | lib.js:32:14:32:17 | args [ArrayElement] | semmle.label | args [ArrayElement] | | lib.js:32:14:32:20 | args[1] | semmle.label | args[1] | | lib.js:34:3:34:14 | obj[path[0]] | semmle.label | obj[path[0]] | | lib.js:34:7:34:10 | path | semmle.label | path | | lib.js:34:7:34:13 | path[0] | semmle.label | path[0] | -| lib.js:38:9:38:36 | args | semmle.label | args | +| lib.js:38:9:38:12 | args | semmle.label | args | | lib.js:38:16:38:36 | Array.f ... uments) | semmle.label | Array.f ... uments) | | lib.js:38:27:38:35 | arguments | semmle.label | arguments | -| lib.js:40:7:40:20 | path | semmle.label | path | +| lib.js:40:7:40:10 | path | semmle.label | path | | lib.js:40:14:40:17 | args | semmle.label | args | | lib.js:40:14:40:20 | args[1] | semmle.label | args[1] | | lib.js:42:3:42:14 | obj[path[0]] | semmle.label | obj[path[0]] | | lib.js:42:7:42:10 | path | semmle.label | path | | lib.js:42:7:42:13 | path[0] | semmle.label | path[0] | -| lib.js:83:7:83:25 | path | semmle.label | path | +| lib.js:83:7:83:10 | path | semmle.label | path | | lib.js:83:14:83:22 | arguments | semmle.label | arguments | | lib.js:83:14:83:25 | arguments[1] | semmle.label | arguments[1] | -| lib.js:86:7:86:26 | proto | semmle.label | proto | +| lib.js:86:7:86:11 | proto | semmle.label | proto | | lib.js:86:15:86:26 | obj[path[0]] | semmle.label | obj[path[0]] | | lib.js:86:19:86:22 | path | semmle.label | path | | lib.js:86:19:86:25 | path[0] | semmle.label | path[0] | | lib.js:87:10:87:14 | proto | semmle.label | proto | | lib.js:90:43:90:46 | path | semmle.label | path | -| lib.js:91:7:91:28 | maybeProto | semmle.label | maybeProto | +| lib.js:91:7:91:16 | maybeProto | semmle.label | maybeProto | | lib.js:91:20:91:28 | obj[path] | semmle.label | obj[path] | | lib.js:91:24:91:27 | path | semmle.label | path | | lib.js:92:3:92:12 | maybeProto | semmle.label | maybeProto | | lib.js:95:3:95:12 | maybeProto | semmle.label | maybeProto | -| lib.js:104:7:104:24 | one | semmle.label | one | +| lib.js:104:7:104:9 | one | semmle.label | one | | lib.js:104:13:104:21 | arguments | semmle.label | arguments | | lib.js:104:13:104:24 | arguments[1] | semmle.label | arguments[1] | | lib.js:108:3:108:10 | obj[one] | semmle.label | obj[one] | @@ -221,7 +221,7 @@ nodes | sublib/sub.js:2:3:2:14 | obj[path[0]] | semmle.label | obj[path[0]] | | sublib/sub.js:2:7:2:10 | path | semmle.label | path | | sublib/sub.js:2:7:2:13 | path[0] | semmle.label | path[0] | -| tst.js:5:9:5:38 | taint | semmle.label | taint | +| tst.js:5:9:5:13 | taint | semmle.label | taint | | tst.js:5:17:5:38 | String( ... y.data) | semmle.label | String( ... y.data) | | tst.js:5:24:5:37 | req.query.data | semmle.label | req.query.data | | tst.js:8:5:8:17 | object[taint] | semmle.label | object[taint] | @@ -241,7 +241,7 @@ nodes | tst.js:56:12:56:33 | obj ? o ... : null | semmle.label | obj ? o ... : null | | tst.js:56:18:56:26 | obj[prop] | semmle.label | obj[prop] | | tst.js:56:22:56:25 | prop | semmle.label | prop | -| tst.js:77:9:77:38 | taint | semmle.label | taint | +| tst.js:77:9:77:13 | taint | semmle.label | taint | | tst.js:77:17:77:38 | String( ... y.data) | semmle.label | String( ... y.data) | | tst.js:77:24:77:37 | req.query.data | semmle.label | req.query.data | | tst.js:80:5:80:17 | object[taint] | semmle.label | object[taint] | @@ -257,7 +257,7 @@ nodes | tst.js:97:5:97:46 | obj[req ... g, '')] | semmle.label | obj[req ... g, '')] | | tst.js:97:9:97:19 | req.query.x | semmle.label | req.query.x | | tst.js:97:9:97:45 | req.que ... /g, '') | semmle.label | req.que ... /g, '') | -| tst.js:102:9:102:38 | taint | semmle.label | taint | +| tst.js:102:9:102:13 | taint | semmle.label | taint | | tst.js:102:17:102:38 | String( ... y.data) | semmle.label | String( ... y.data) | | tst.js:102:24:102:37 | req.query.data | semmle.label | req.query.data | | tst.js:105:5:105:17 | object[taint] | semmle.label | object[taint] | diff --git a/javascript/ql/test/query-tests/Security/CWE-915/PrototypePollutingFunction/PrototypePollutingFunction.expected b/javascript/ql/test/query-tests/Security/CWE-915/PrototypePollutingFunction/PrototypePollutingFunction.expected index 4546ee4b6aa..7eb7c2fdf90 100644 --- a/javascript/ql/test/query-tests/Security/CWE-915/PrototypePollutingFunction/PrototypePollutingFunction.expected +++ b/javascript/ql/test/query-tests/Security/CWE-915/PrototypePollutingFunction/PrototypePollutingFunction.expected @@ -61,42 +61,42 @@ edges | examples/PrototypePollutingFunction_fixed.js:5:29:5:36 | src[key] | examples/PrototypePollutingFunction_fixed.js:1:21:1:23 | src | provenance | | | examples/PrototypePollutingFunction_fixed.js:7:24:7:26 | src | examples/PrototypePollutingFunction_fixed.js:7:24:7:31 | src[key] | provenance | Config | | examples/PrototypePollutingFunction_fixed.js:7:28:7:30 | key | examples/PrototypePollutingFunction_fixed.js:7:24:7:31 | src[key] | provenance | Config | -| path-assignment.js:8:13:8:25 | key | path-assignment.js:13:29:13:31 | key | provenance | | -| path-assignment.js:8:13:8:25 | key | path-assignment.js:15:20:15:22 | key | provenance | | -| path-assignment.js:8:19:8:25 | keys[i] | path-assignment.js:8:13:8:25 | key | provenance | | -| path-assignment.js:13:13:13:32 | target | path-assignment.js:13:22:13:27 | target | provenance | | -| path-assignment.js:13:13:13:32 | target | path-assignment.js:15:13:15:18 | target | provenance | | +| path-assignment.js:8:13:8:15 | key | path-assignment.js:13:29:13:31 | key | provenance | | +| path-assignment.js:8:13:8:15 | key | path-assignment.js:15:20:15:22 | key | provenance | | +| path-assignment.js:8:19:8:25 | keys[i] | path-assignment.js:8:13:8:15 | key | provenance | | +| path-assignment.js:13:13:13:18 | target | path-assignment.js:13:22:13:27 | target | provenance | | +| path-assignment.js:13:13:13:18 | target | path-assignment.js:15:13:15:18 | target | provenance | | | path-assignment.js:13:22:13:27 | target | path-assignment.js:13:22:13:32 | target[key] | provenance | Config | -| path-assignment.js:13:22:13:32 | target[key] | path-assignment.js:13:13:13:32 | target | provenance | | +| path-assignment.js:13:22:13:32 | target[key] | path-assignment.js:13:13:13:18 | target | provenance | | | path-assignment.js:13:29:13:31 | key | path-assignment.js:13:22:13:32 | target[key] | provenance | Config | -| path-assignment.js:41:13:41:25 | key | path-assignment.js:42:25:42:27 | key | provenance | | -| path-assignment.js:41:13:41:25 | key | path-assignment.js:42:39:42:41 | key | provenance | | -| path-assignment.js:41:19:41:25 | keys[i] | path-assignment.js:41:13:41:25 | key | provenance | | -| path-assignment.js:42:9:42:48 | target | path-assignment.js:42:18:42:23 | target | provenance | | -| path-assignment.js:42:9:42:48 | target | path-assignment.js:42:32:42:37 | target | provenance | | -| path-assignment.js:42:9:42:48 | target | path-assignment.js:44:5:44:10 | target | provenance | | +| path-assignment.js:41:13:41:15 | key | path-assignment.js:42:25:42:27 | key | provenance | | +| path-assignment.js:41:13:41:15 | key | path-assignment.js:42:39:42:41 | key | provenance | | +| path-assignment.js:41:19:41:25 | keys[i] | path-assignment.js:41:13:41:15 | key | provenance | | +| path-assignment.js:42:9:42:14 | target | path-assignment.js:42:18:42:23 | target | provenance | | +| path-assignment.js:42:9:42:14 | target | path-assignment.js:42:32:42:37 | target | provenance | | +| path-assignment.js:42:9:42:14 | target | path-assignment.js:44:5:44:10 | target | provenance | | | path-assignment.js:42:32:42:37 | target | path-assignment.js:42:32:42:42 | target[key] | provenance | Config | -| path-assignment.js:42:32:42:42 | target[key] | path-assignment.js:42:9:42:48 | target | provenance | | +| path-assignment.js:42:32:42:42 | target[key] | path-assignment.js:42:9:42:14 | target | provenance | | | path-assignment.js:42:32:42:42 | target[key] | path-assignment.js:42:32:42:48 | target[key] \|\| {} | provenance | | | path-assignment.js:42:39:42:41 | key | path-assignment.js:42:32:42:42 | target[key] | provenance | Config | -| path-assignment.js:58:13:58:25 | key | path-assignment.js:59:25:59:27 | key | provenance | | -| path-assignment.js:58:13:58:25 | key | path-assignment.js:59:39:59:41 | key | provenance | | -| path-assignment.js:58:19:58:25 | keys[i] | path-assignment.js:58:13:58:25 | key | provenance | | -| path-assignment.js:59:9:59:48 | target | path-assignment.js:59:18:59:23 | target | provenance | | -| path-assignment.js:59:9:59:48 | target | path-assignment.js:59:32:59:37 | target | provenance | | -| path-assignment.js:59:9:59:48 | target | path-assignment.js:61:5:61:10 | target | provenance | | +| path-assignment.js:58:13:58:15 | key | path-assignment.js:59:25:59:27 | key | provenance | | +| path-assignment.js:58:13:58:15 | key | path-assignment.js:59:39:59:41 | key | provenance | | +| path-assignment.js:58:19:58:25 | keys[i] | path-assignment.js:58:13:58:15 | key | provenance | | +| path-assignment.js:59:9:59:14 | target | path-assignment.js:59:18:59:23 | target | provenance | | +| path-assignment.js:59:9:59:14 | target | path-assignment.js:59:32:59:37 | target | provenance | | +| path-assignment.js:59:9:59:14 | target | path-assignment.js:61:5:61:10 | target | provenance | | | path-assignment.js:59:32:59:37 | target | path-assignment.js:59:32:59:42 | target[key] | provenance | Config | -| path-assignment.js:59:32:59:42 | target[key] | path-assignment.js:59:9:59:48 | target | provenance | | +| path-assignment.js:59:32:59:42 | target[key] | path-assignment.js:59:9:59:14 | target | provenance | | | path-assignment.js:59:32:59:42 | target[key] | path-assignment.js:59:32:59:48 | target[key] \|\| {} | provenance | | | path-assignment.js:59:39:59:41 | key | path-assignment.js:59:32:59:42 | target[key] | provenance | Config | -| path-assignment.js:68:13:68:25 | key | path-assignment.js:69:25:69:27 | key | provenance | | -| path-assignment.js:68:13:68:25 | key | path-assignment.js:69:39:69:41 | key | provenance | | -| path-assignment.js:68:19:68:25 | keys[i] | path-assignment.js:68:13:68:25 | key | provenance | | -| path-assignment.js:69:9:69:48 | target | path-assignment.js:69:18:69:23 | target | provenance | | -| path-assignment.js:69:9:69:48 | target | path-assignment.js:69:32:69:37 | target | provenance | | -| path-assignment.js:69:9:69:48 | target | path-assignment.js:71:5:71:10 | target | provenance | | +| path-assignment.js:68:13:68:15 | key | path-assignment.js:69:25:69:27 | key | provenance | | +| path-assignment.js:68:13:68:15 | key | path-assignment.js:69:39:69:41 | key | provenance | | +| path-assignment.js:68:19:68:25 | keys[i] | path-assignment.js:68:13:68:15 | key | provenance | | +| path-assignment.js:69:9:69:14 | target | path-assignment.js:69:18:69:23 | target | provenance | | +| path-assignment.js:69:9:69:14 | target | path-assignment.js:69:32:69:37 | target | provenance | | +| path-assignment.js:69:9:69:14 | target | path-assignment.js:71:5:71:10 | target | provenance | | | path-assignment.js:69:32:69:37 | target | path-assignment.js:69:32:69:42 | target[key] | provenance | Config | -| path-assignment.js:69:32:69:42 | target[key] | path-assignment.js:69:9:69:48 | target | provenance | | +| path-assignment.js:69:32:69:42 | target[key] | path-assignment.js:69:9:69:14 | target | provenance | | | path-assignment.js:69:32:69:42 | target[key] | path-assignment.js:69:32:69:48 | target[key] \|\| {} | provenance | | | path-assignment.js:69:39:69:41 | key | path-assignment.js:69:32:69:42 | target[key] | provenance | Config | | tests.js:3:25:3:27 | dst | tests.js:6:28:6:30 | dst | provenance | | @@ -149,9 +149,9 @@ edges | tests.js:31:27:31:31 | value | tests.js:36:20:36:24 | value | provenance | | | tests.js:31:34:31:36 | key | tests.js:32:24:32:26 | key | provenance | | | tests.js:31:34:31:36 | key | tests.js:36:13:36:15 | key | provenance | | -| tests.js:32:9:32:27 | dstValue | tests.js:34:18:34:25 | dstValue | provenance | | +| tests.js:32:9:32:16 | dstValue | tests.js:34:18:34:25 | dstValue | provenance | | | tests.js:32:20:32:22 | dst | tests.js:32:20:32:27 | dst[key] | provenance | Config | -| tests.js:32:20:32:27 | dst[key] | tests.js:32:9:32:27 | dstValue | provenance | | +| tests.js:32:20:32:27 | dst[key] | tests.js:32:9:32:16 | dstValue | provenance | | | tests.js:32:24:32:26 | key | tests.js:32:20:32:27 | dst[key] | provenance | Config | | tests.js:34:18:34:25 | dstValue | tests.js:23:19:23:21 | dst | provenance | | | tests.js:34:28:34:32 | value | tests.js:23:27:23:33 | sources [0] | provenance | | @@ -274,11 +274,11 @@ edges | tests.js:189:32:189:34 | dst | tests.js:196:13:196:15 | dst | provenance | | | tests.js:189:37:189:39 | src | tests.js:194:45:194:47 | src | provenance | | | tests.js:189:37:189:39 | src | tests.js:196:24:196:26 | src | provenance | | -| tests.js:192:13:192:25 | key | tests.js:194:39:194:41 | key | provenance | | -| tests.js:192:13:192:25 | key | tests.js:194:49:194:51 | key | provenance | | -| tests.js:192:13:192:25 | key | tests.js:196:17:196:19 | key | provenance | | -| tests.js:192:13:192:25 | key | tests.js:196:28:196:30 | key | provenance | | -| tests.js:192:19:192:25 | keys[i] | tests.js:192:13:192:25 | key | provenance | | +| tests.js:192:13:192:15 | key | tests.js:194:39:194:41 | key | provenance | | +| tests.js:192:13:192:15 | key | tests.js:194:49:194:51 | key | provenance | | +| tests.js:192:13:192:15 | key | tests.js:196:17:196:19 | key | provenance | | +| tests.js:192:13:192:15 | key | tests.js:196:28:196:30 | key | provenance | | +| tests.js:192:19:192:25 | keys[i] | tests.js:192:13:192:15 | key | provenance | | | tests.js:194:35:194:37 | dst | tests.js:194:35:194:42 | dst[key] | provenance | Config | | tests.js:194:35:194:42 | dst[key] | tests.js:189:32:189:34 | dst | provenance | | | tests.js:194:39:194:41 | key | tests.js:194:35:194:42 | dst[key] | provenance | Config | @@ -329,11 +329,11 @@ edges | tests.js:240:41:240:43 | key | tests.js:240:36:240:44 | data[key] | provenance | Config | | tests.js:263:27:263:29 | dst | tests.js:268:30:268:32 | dst | provenance | | | tests.js:263:27:263:29 | dst | tests.js:270:13:270:15 | dst | provenance | | -| tests.js:265:13:265:26 | key | tests.js:268:34:268:36 | key | provenance | | -| tests.js:265:13:265:26 | key | tests.js:270:17:270:19 | key | provenance | | -| tests.js:265:19:265:26 | entry[0] | tests.js:265:13:265:26 | key | provenance | | -| tests.js:266:13:266:28 | value | tests.js:270:24:270:28 | value | provenance | | -| tests.js:266:21:266:28 | entry[1] | tests.js:266:13:266:28 | value | provenance | | +| tests.js:265:13:265:15 | key | tests.js:268:34:268:36 | key | provenance | | +| tests.js:265:13:265:15 | key | tests.js:270:17:270:19 | key | provenance | | +| tests.js:265:19:265:26 | entry[0] | tests.js:265:13:265:15 | key | provenance | | +| tests.js:266:13:266:17 | value | tests.js:270:24:270:28 | value | provenance | | +| tests.js:266:21:266:28 | entry[1] | tests.js:266:13:266:17 | value | provenance | | | tests.js:268:30:268:32 | dst | tests.js:268:30:268:37 | dst[key] | provenance | Config | | tests.js:268:30:268:37 | dst[key] | tests.js:263:27:263:29 | dst | provenance | | | tests.js:268:34:268:36 | key | tests.js:268:30:268:37 | dst[key] | provenance | Config | @@ -360,15 +360,15 @@ edges | tests.js:302:14:302:16 | key | tests.js:304:29:304:31 | key | provenance | | | tests.js:302:14:302:16 | key | tests.js:306:38:306:40 | key | provenance | | | tests.js:302:14:302:16 | key | tests.js:308:21:308:23 | key | provenance | | -| tests.js:304:17:304:32 | value | tests.js:306:44:306:48 | value | provenance | | -| tests.js:304:17:304:32 | value | tests.js:306:44:306:48 | value | provenance | | -| tests.js:304:17:304:32 | value | tests.js:308:28:308:32 | value | provenance | | -| tests.js:304:17:304:32 | value | tests.js:308:28:308:32 | value | provenance | | -| tests.js:304:17:304:32 | value | tests.js:308:28:308:32 | value | provenance | | +| tests.js:304:17:304:21 | value | tests.js:306:44:306:48 | value | provenance | | +| tests.js:304:17:304:21 | value | tests.js:306:44:306:48 | value | provenance | | +| tests.js:304:17:304:21 | value | tests.js:308:28:308:32 | value | provenance | | +| tests.js:304:17:304:21 | value | tests.js:308:28:308:32 | value | provenance | | +| tests.js:304:17:304:21 | value | tests.js:308:28:308:32 | value | provenance | | | tests.js:304:25:304:27 | src | tests.js:304:25:304:32 | src[key] | provenance | Config | -| tests.js:304:25:304:32 | src[key] | tests.js:304:17:304:32 | value | provenance | | -| tests.js:304:25:304:32 | src[key] | tests.js:304:17:304:32 | value | provenance | | -| tests.js:304:25:304:32 | src[key] | tests.js:304:17:304:32 | value | provenance | | +| tests.js:304:25:304:32 | src[key] | tests.js:304:17:304:21 | value | provenance | | +| tests.js:304:25:304:32 | src[key] | tests.js:304:17:304:21 | value | provenance | | +| tests.js:304:25:304:32 | src[key] | tests.js:304:17:304:21 | value | provenance | | | tests.js:304:29:304:31 | key | tests.js:304:25:304:32 | src[key] | provenance | Config | | tests.js:304:29:304:31 | key | tests.js:304:25:304:32 | src[key] | provenance | Config | | tests.js:306:34:306:36 | dst | tests.js:306:34:306:41 | dst[key] | provenance | Config | @@ -381,15 +381,15 @@ edges | tests.js:315:14:315:16 | key | tests.js:318:29:318:31 | key | provenance | | | tests.js:315:14:315:16 | key | tests.js:320:42:320:44 | key | provenance | | | tests.js:315:14:315:16 | key | tests.js:322:21:322:23 | key | provenance | | -| tests.js:318:17:318:32 | value | tests.js:320:48:320:52 | value | provenance | | -| tests.js:318:17:318:32 | value | tests.js:320:48:320:52 | value | provenance | | -| tests.js:318:17:318:32 | value | tests.js:322:28:322:32 | value | provenance | | -| tests.js:318:17:318:32 | value | tests.js:322:28:322:32 | value | provenance | | -| tests.js:318:17:318:32 | value | tests.js:322:28:322:32 | value | provenance | | +| tests.js:318:17:318:21 | value | tests.js:320:48:320:52 | value | provenance | | +| tests.js:318:17:318:21 | value | tests.js:320:48:320:52 | value | provenance | | +| tests.js:318:17:318:21 | value | tests.js:322:28:322:32 | value | provenance | | +| tests.js:318:17:318:21 | value | tests.js:322:28:322:32 | value | provenance | | +| tests.js:318:17:318:21 | value | tests.js:322:28:322:32 | value | provenance | | | tests.js:318:25:318:27 | src | tests.js:318:25:318:32 | src[key] | provenance | Config | -| tests.js:318:25:318:32 | src[key] | tests.js:318:17:318:32 | value | provenance | | -| tests.js:318:25:318:32 | src[key] | tests.js:318:17:318:32 | value | provenance | | -| tests.js:318:25:318:32 | src[key] | tests.js:318:17:318:32 | value | provenance | | +| tests.js:318:25:318:32 | src[key] | tests.js:318:17:318:21 | value | provenance | | +| tests.js:318:25:318:32 | src[key] | tests.js:318:17:318:21 | value | provenance | | +| tests.js:318:25:318:32 | src[key] | tests.js:318:17:318:21 | value | provenance | | | tests.js:318:29:318:31 | key | tests.js:318:25:318:32 | src[key] | provenance | Config | | tests.js:318:29:318:31 | key | tests.js:318:25:318:32 | src[key] | provenance | Config | | tests.js:320:38:320:40 | dst | tests.js:320:38:320:45 | dst[key] | provenance | Config | @@ -526,15 +526,15 @@ edges | tests.js:413:14:413:16 | key | tests.js:414:38:414:40 | key | provenance | | | tests.js:413:14:413:16 | key | tests.js:415:39:415:41 | key | provenance | | | tests.js:413:14:413:16 | key | tests.js:419:17:419:19 | key | provenance | | -| tests.js:414:13:414:41 | value | tests.js:417:42:417:46 | value | provenance | | -| tests.js:414:13:414:41 | value | tests.js:419:24:419:28 | value | provenance | | -| tests.js:414:21:414:41 | wrapped ... c, key) | tests.js:414:13:414:41 | value | provenance | | +| tests.js:414:13:414:17 | value | tests.js:417:42:417:46 | value | provenance | | +| tests.js:414:13:414:17 | value | tests.js:419:24:419:28 | value | provenance | | +| tests.js:414:21:414:41 | wrapped ... c, key) | tests.js:414:13:414:17 | value | provenance | | | tests.js:414:33:414:35 | src | tests.js:408:22:408:24 | obj | provenance | | | tests.js:414:33:414:35 | src | tests.js:414:21:414:41 | wrapped ... c, key) | provenance | Config | | tests.js:414:38:414:40 | key | tests.js:408:27:408:29 | key | provenance | | | tests.js:414:38:414:40 | key | tests.js:414:21:414:41 | wrapped ... c, key) | provenance | Config | -| tests.js:415:13:415:42 | target | tests.js:417:34:417:39 | target | provenance | | -| tests.js:415:22:415:42 | wrapped ... t, key) | tests.js:415:13:415:42 | target | provenance | | +| tests.js:415:13:415:18 | target | tests.js:417:34:417:39 | target | provenance | | +| tests.js:415:22:415:42 | wrapped ... t, key) | tests.js:415:13:415:18 | target | provenance | | | tests.js:415:34:415:36 | dst | tests.js:408:22:408:24 | obj | provenance | | | tests.js:415:34:415:36 | dst | tests.js:415:22:415:42 | wrapped ... t, key) | provenance | Config | | tests.js:415:39:415:41 | key | tests.js:408:27:408:29 | key | provenance | | @@ -551,15 +551,15 @@ edges | tests.js:430:14:430:16 | key | tests.js:431:41:431:43 | key | provenance | | | tests.js:430:14:430:16 | key | tests.js:432:42:432:44 | key | provenance | | | tests.js:430:14:430:16 | key | tests.js:436:17:436:19 | key | provenance | | -| tests.js:431:13:431:44 | value | tests.js:434:45:434:49 | value | provenance | | -| tests.js:431:13:431:44 | value | tests.js:436:24:436:28 | value | provenance | | -| tests.js:431:21:431:44 | almostS ... c, key) | tests.js:431:13:431:44 | value | provenance | | +| tests.js:431:13:431:17 | value | tests.js:434:45:434:49 | value | provenance | | +| tests.js:431:13:431:17 | value | tests.js:436:24:436:28 | value | provenance | | +| tests.js:431:21:431:44 | almostS ... c, key) | tests.js:431:13:431:17 | value | provenance | | | tests.js:431:36:431:38 | src | tests.js:424:25:424:27 | obj | provenance | | | tests.js:431:36:431:38 | src | tests.js:431:21:431:44 | almostS ... c, key) | provenance | Config | | tests.js:431:41:431:43 | key | tests.js:424:30:424:32 | key | provenance | | | tests.js:431:41:431:43 | key | tests.js:431:21:431:44 | almostS ... c, key) | provenance | Config | -| tests.js:432:13:432:45 | target | tests.js:434:37:434:42 | target | provenance | | -| tests.js:432:22:432:45 | almostS ... t, key) | tests.js:432:13:432:45 | target | provenance | | +| tests.js:432:13:432:18 | target | tests.js:434:37:434:42 | target | provenance | | +| tests.js:432:22:432:45 | almostS ... t, key) | tests.js:432:13:432:18 | target | provenance | | | tests.js:432:37:432:39 | dst | tests.js:424:25:424:27 | obj | provenance | | | tests.js:432:37:432:39 | dst | tests.js:432:22:432:45 | almostS ... t, key) | provenance | Config | | tests.js:432:42:432:44 | key | tests.js:424:30:424:32 | key | provenance | | @@ -570,9 +570,9 @@ edges | tests.js:443:12:443:14 | obj | tests.js:443:12:443:19 | obj[key] | provenance | Config | | tests.js:446:33:446:35 | src | tests.js:448:30:448:32 | src | provenance | | | tests.js:447:14:447:16 | key | tests.js:453:17:453:19 | key | provenance | | -| tests.js:448:13:448:38 | value | tests.js:451:39:451:43 | value | provenance | | -| tests.js:448:13:448:38 | value | tests.js:453:24:453:28 | value | provenance | | -| tests.js:448:21:448:38 | safeRead(src, key) | tests.js:448:13:448:38 | value | provenance | | +| tests.js:448:13:448:17 | value | tests.js:451:39:451:43 | value | provenance | | +| tests.js:448:13:448:17 | value | tests.js:453:24:453:28 | value | provenance | | +| tests.js:448:21:448:38 | safeRead(src, key) | tests.js:448:13:448:17 | value | provenance | | | tests.js:448:30:448:32 | src | tests.js:441:19:441:21 | obj | provenance | | | tests.js:448:30:448:32 | src | tests.js:448:21:448:38 | safeRead(src, key) | provenance | Config | | tests.js:451:39:451:43 | value | tests.js:446:33:446:35 | src | provenance | | @@ -630,26 +630,26 @@ edges | tests.js:494:32:494:34 | src | tests.js:498:21:498:23 | src | provenance | | | tests.js:495:14:495:16 | key | tests.js:498:25:498:27 | key | provenance | | | tests.js:495:14:495:16 | key | tests.js:502:17:502:19 | key | provenance | | -| tests.js:498:13:498:28 | value | tests.js:500:38:500:42 | value | provenance | | -| tests.js:498:13:498:28 | value | tests.js:500:38:500:42 | value | provenance | | -| tests.js:498:13:498:28 | value | tests.js:502:24:502:28 | value | provenance | | -| tests.js:498:13:498:28 | value | tests.js:502:24:502:28 | value | provenance | | -| tests.js:498:13:498:28 | value | tests.js:502:24:502:28 | value | provenance | | +| tests.js:498:13:498:17 | value | tests.js:500:38:500:42 | value | provenance | | +| tests.js:498:13:498:17 | value | tests.js:500:38:500:42 | value | provenance | | +| tests.js:498:13:498:17 | value | tests.js:502:24:502:28 | value | provenance | | +| tests.js:498:13:498:17 | value | tests.js:502:24:502:28 | value | provenance | | +| tests.js:498:13:498:17 | value | tests.js:502:24:502:28 | value | provenance | | | tests.js:498:21:498:23 | src | tests.js:498:21:498:28 | src[key] | provenance | Config | -| tests.js:498:21:498:28 | src[key] | tests.js:498:13:498:28 | value | provenance | | -| tests.js:498:21:498:28 | src[key] | tests.js:498:13:498:28 | value | provenance | | -| tests.js:498:21:498:28 | src[key] | tests.js:498:13:498:28 | value | provenance | | +| tests.js:498:21:498:28 | src[key] | tests.js:498:13:498:17 | value | provenance | | +| tests.js:498:21:498:28 | src[key] | tests.js:498:13:498:17 | value | provenance | | +| tests.js:498:21:498:28 | src[key] | tests.js:498:13:498:17 | value | provenance | | | tests.js:498:25:498:27 | key | tests.js:498:21:498:28 | src[key] | provenance | Config | | tests.js:500:38:500:42 | value | tests.js:494:32:494:34 | src | provenance | | | tests.js:508:30:508:32 | dst | tests.js:513:33:513:35 | dst | provenance | | | tests.js:508:30:508:32 | dst | tests.js:517:35:517:37 | dst | provenance | | | tests.js:508:35:508:37 | src | tests.js:513:43:513:45 | src | provenance | | | tests.js:508:35:508:37 | src | tests.js:516:32:516:34 | src | provenance | | -| tests.js:511:13:511:25 | key | tests.js:513:37:513:39 | key | provenance | | -| tests.js:511:13:511:25 | key | tests.js:513:47:513:49 | key | provenance | | -| tests.js:511:13:511:25 | key | tests.js:516:36:516:38 | key | provenance | | -| tests.js:511:13:511:25 | key | tests.js:517:40:517:42 | key | provenance | | -| tests.js:511:19:511:25 | keys[i] | tests.js:511:13:511:25 | key | provenance | | +| tests.js:511:13:511:15 | key | tests.js:513:37:513:39 | key | provenance | | +| tests.js:511:13:511:15 | key | tests.js:513:47:513:49 | key | provenance | | +| tests.js:511:13:511:15 | key | tests.js:516:36:516:38 | key | provenance | | +| tests.js:511:13:511:15 | key | tests.js:517:40:517:42 | key | provenance | | +| tests.js:511:19:511:25 | keys[i] | tests.js:511:13:511:15 | key | provenance | | | tests.js:513:33:513:35 | dst | tests.js:513:33:513:40 | dst[key] | provenance | Config | | tests.js:513:33:513:40 | dst[key] | tests.js:508:30:508:32 | dst | provenance | | | tests.js:513:37:513:39 | key | tests.js:513:33:513:40 | dst[key] | provenance | Config | @@ -660,14 +660,14 @@ edges | tests.js:516:36:516:38 | key | tests.js:516:32:516:39 | src[key] | provenance | Config | | tests.js:522:35:522:38 | args [0] | tests.js:523:17:523:20 | args [0] | provenance | | | tests.js:522:35:522:38 | args [1] | tests.js:524:17:524:20 | args [1] | provenance | | -| tests.js:523:11:523:23 | dst | tests.js:527:35:527:37 | dst | provenance | | -| tests.js:523:11:523:23 | dst | tests.js:529:13:529:15 | dst | provenance | | +| tests.js:523:11:523:13 | dst | tests.js:527:35:527:37 | dst | provenance | | +| tests.js:523:11:523:13 | dst | tests.js:529:13:529:15 | dst | provenance | | | tests.js:523:17:523:20 | args [0] | tests.js:523:17:523:23 | args[0] | provenance | | -| tests.js:523:17:523:23 | args[0] | tests.js:523:11:523:23 | dst | provenance | | -| tests.js:524:11:524:23 | src | tests.js:527:45:527:47 | src | provenance | | -| tests.js:524:11:524:23 | src | tests.js:529:24:529:26 | src | provenance | | +| tests.js:523:17:523:23 | args[0] | tests.js:523:11:523:13 | dst | provenance | | +| tests.js:524:11:524:13 | src | tests.js:527:45:527:47 | src | provenance | | +| tests.js:524:11:524:13 | src | tests.js:529:24:529:26 | src | provenance | | | tests.js:524:17:524:20 | args [1] | tests.js:524:17:524:23 | args[1] | provenance | | -| tests.js:524:17:524:23 | args[1] | tests.js:524:11:524:23 | src | provenance | | +| tests.js:524:17:524:23 | args[1] | tests.js:524:11:524:13 | src | provenance | | | tests.js:525:14:525:16 | key | tests.js:527:39:527:41 | key | provenance | | | tests.js:525:14:525:16 | key | tests.js:527:49:527:51 | key | provenance | | | tests.js:525:14:525:16 | key | tests.js:529:17:529:19 | key | provenance | | @@ -776,17 +776,17 @@ nodes | examples/PrototypePollutingFunction_fixed.js:7:24:7:26 | src | semmle.label | src | | examples/PrototypePollutingFunction_fixed.js:7:24:7:31 | src[key] | semmle.label | src[key] | | examples/PrototypePollutingFunction_fixed.js:7:28:7:30 | key | semmle.label | key | -| path-assignment.js:8:13:8:25 | key | semmle.label | key | +| path-assignment.js:8:13:8:15 | key | semmle.label | key | | path-assignment.js:8:19:8:25 | keys[i] | semmle.label | keys[i] | -| path-assignment.js:13:13:13:32 | target | semmle.label | target | +| path-assignment.js:13:13:13:18 | target | semmle.label | target | | path-assignment.js:13:22:13:27 | target | semmle.label | target | | path-assignment.js:13:22:13:32 | target[key] | semmle.label | target[key] | | path-assignment.js:13:29:13:31 | key | semmle.label | key | | path-assignment.js:15:13:15:18 | target | semmle.label | target | | path-assignment.js:15:20:15:22 | key | semmle.label | key | -| path-assignment.js:41:13:41:25 | key | semmle.label | key | +| path-assignment.js:41:13:41:15 | key | semmle.label | key | | path-assignment.js:41:19:41:25 | keys[i] | semmle.label | keys[i] | -| path-assignment.js:42:9:42:48 | target | semmle.label | target | +| path-assignment.js:42:9:42:14 | target | semmle.label | target | | path-assignment.js:42:18:42:23 | target | semmle.label | target | | path-assignment.js:42:25:42:27 | key | semmle.label | key | | path-assignment.js:42:32:42:37 | target | semmle.label | target | @@ -795,9 +795,9 @@ nodes | path-assignment.js:42:39:42:41 | key | semmle.label | key | | path-assignment.js:44:5:44:10 | target | semmle.label | target | | path-assignment.js:44:12:44:18 | keys[i] | semmle.label | keys[i] | -| path-assignment.js:58:13:58:25 | key | semmle.label | key | +| path-assignment.js:58:13:58:15 | key | semmle.label | key | | path-assignment.js:58:19:58:25 | keys[i] | semmle.label | keys[i] | -| path-assignment.js:59:9:59:48 | target | semmle.label | target | +| path-assignment.js:59:9:59:14 | target | semmle.label | target | | path-assignment.js:59:18:59:23 | target | semmle.label | target | | path-assignment.js:59:25:59:27 | key | semmle.label | key | | path-assignment.js:59:32:59:37 | target | semmle.label | target | @@ -806,9 +806,9 @@ nodes | path-assignment.js:59:39:59:41 | key | semmle.label | key | | path-assignment.js:61:5:61:10 | target | semmle.label | target | | path-assignment.js:61:12:61:18 | keys[i] | semmle.label | keys[i] | -| path-assignment.js:68:13:68:25 | key | semmle.label | key | +| path-assignment.js:68:13:68:15 | key | semmle.label | key | | path-assignment.js:68:19:68:25 | keys[i] | semmle.label | keys[i] | -| path-assignment.js:69:9:69:48 | target | semmle.label | target | +| path-assignment.js:69:9:69:14 | target | semmle.label | target | | path-assignment.js:69:18:69:23 | target | semmle.label | target | | path-assignment.js:69:25:69:27 | key | semmle.label | key | | path-assignment.js:69:32:69:37 | target | semmle.label | target | @@ -859,7 +859,7 @@ nodes | tests.js:31:22:31:24 | dst | semmle.label | dst | | tests.js:31:27:31:31 | value | semmle.label | value | | tests.js:31:34:31:36 | key | semmle.label | key | -| tests.js:32:9:32:27 | dstValue | semmle.label | dstValue | +| tests.js:32:9:32:16 | dstValue | semmle.label | dstValue | | tests.js:32:20:32:22 | dst | semmle.label | dst | | tests.js:32:20:32:27 | dst[key] | semmle.label | dst[key] | | tests.js:32:24:32:26 | key | semmle.label | key | @@ -976,7 +976,7 @@ nodes | tests.js:184:24:184:31 | src[key] | semmle.label | src[key] | | tests.js:189:32:189:34 | dst | semmle.label | dst | | tests.js:189:37:189:39 | src | semmle.label | src | -| tests.js:192:13:192:25 | key | semmle.label | key | +| tests.js:192:13:192:15 | key | semmle.label | key | | tests.js:192:19:192:25 | keys[i] | semmle.label | keys[i] | | tests.js:194:35:194:37 | dst | semmle.label | dst | | tests.js:194:35:194:42 | dst[key] | semmle.label | dst[key] | @@ -1031,9 +1031,9 @@ nodes | tests.js:240:36:240:44 | data[key] | semmle.label | data[key] | | tests.js:240:41:240:43 | key | semmle.label | key | | tests.js:263:27:263:29 | dst | semmle.label | dst | -| tests.js:265:13:265:26 | key | semmle.label | key | +| tests.js:265:13:265:15 | key | semmle.label | key | | tests.js:265:19:265:26 | entry[0] | semmle.label | entry[0] | -| tests.js:266:13:266:28 | value | semmle.label | value | +| tests.js:266:13:266:17 | value | semmle.label | value | | tests.js:266:21:266:28 | entry[1] | semmle.label | entry[1] | | tests.js:268:30:268:32 | dst | semmle.label | dst | | tests.js:268:30:268:37 | dst[key] | semmle.label | dst[key] | @@ -1059,9 +1059,9 @@ nodes | tests.js:301:27:301:29 | dst | semmle.label | dst | | tests.js:301:32:301:34 | src | semmle.label | src | | tests.js:302:14:302:16 | key | semmle.label | key | -| tests.js:304:17:304:32 | value | semmle.label | value | -| tests.js:304:17:304:32 | value | semmle.label | value | -| tests.js:304:17:304:32 | value | semmle.label | value | +| tests.js:304:17:304:21 | value | semmle.label | value | +| tests.js:304:17:304:21 | value | semmle.label | value | +| tests.js:304:17:304:21 | value | semmle.label | value | | tests.js:304:25:304:27 | src | semmle.label | src | | tests.js:304:25:304:32 | src[key] | semmle.label | src[key] | | tests.js:304:25:304:32 | src[key] | semmle.label | src[key] | @@ -1077,9 +1077,9 @@ nodes | tests.js:314:31:314:33 | dst | semmle.label | dst | | tests.js:314:36:314:38 | src | semmle.label | src | | tests.js:315:14:315:16 | key | semmle.label | key | -| tests.js:318:17:318:32 | value | semmle.label | value | -| tests.js:318:17:318:32 | value | semmle.label | value | -| tests.js:318:17:318:32 | value | semmle.label | value | +| tests.js:318:17:318:21 | value | semmle.label | value | +| tests.js:318:17:318:21 | value | semmle.label | value | +| tests.js:318:17:318:21 | value | semmle.label | value | | tests.js:318:25:318:27 | src | semmle.label | src | | tests.js:318:25:318:32 | src[key] | semmle.label | src[key] | | tests.js:318:25:318:32 | src[key] | semmle.label | src[key] | @@ -1197,11 +1197,11 @@ nodes | tests.js:412:31:412:33 | dst | semmle.label | dst | | tests.js:412:36:412:38 | src | semmle.label | src | | tests.js:413:14:413:16 | key | semmle.label | key | -| tests.js:414:13:414:41 | value | semmle.label | value | +| tests.js:414:13:414:17 | value | semmle.label | value | | tests.js:414:21:414:41 | wrapped ... c, key) | semmle.label | wrapped ... c, key) | | tests.js:414:33:414:35 | src | semmle.label | src | | tests.js:414:38:414:40 | key | semmle.label | key | -| tests.js:415:13:415:42 | target | semmle.label | target | +| tests.js:415:13:415:18 | target | semmle.label | target | | tests.js:415:22:415:42 | wrapped ... t, key) | semmle.label | wrapped ... t, key) | | tests.js:415:34:415:36 | dst | semmle.label | dst | | tests.js:415:39:415:41 | key | semmle.label | key | @@ -1218,11 +1218,11 @@ nodes | tests.js:429:34:429:36 | dst | semmle.label | dst | | tests.js:429:39:429:41 | src | semmle.label | src | | tests.js:430:14:430:16 | key | semmle.label | key | -| tests.js:431:13:431:44 | value | semmle.label | value | +| tests.js:431:13:431:17 | value | semmle.label | value | | tests.js:431:21:431:44 | almostS ... c, key) | semmle.label | almostS ... c, key) | | tests.js:431:36:431:38 | src | semmle.label | src | | tests.js:431:41:431:43 | key | semmle.label | key | -| tests.js:432:13:432:45 | target | semmle.label | target | +| tests.js:432:13:432:18 | target | semmle.label | target | | tests.js:432:22:432:45 | almostS ... t, key) | semmle.label | almostS ... t, key) | | tests.js:432:37:432:39 | dst | semmle.label | dst | | tests.js:432:42:432:44 | key | semmle.label | key | @@ -1236,7 +1236,7 @@ nodes | tests.js:443:12:443:19 | obj[key] | semmle.label | obj[key] | | tests.js:446:33:446:35 | src | semmle.label | src | | tests.js:447:14:447:16 | key | semmle.label | key | -| tests.js:448:13:448:38 | value | semmle.label | value | +| tests.js:448:13:448:17 | value | semmle.label | value | | tests.js:448:21:448:38 | safeRead(src, key) | semmle.label | safeRead(src, key) | | tests.js:448:30:448:32 | src | semmle.label | src | | tests.js:451:39:451:43 | value | semmle.label | value | @@ -1293,9 +1293,9 @@ nodes | tests.js:489:28:489:30 | key | semmle.label | key | | tests.js:494:32:494:34 | src | semmle.label | src | | tests.js:495:14:495:16 | key | semmle.label | key | -| tests.js:498:13:498:28 | value | semmle.label | value | -| tests.js:498:13:498:28 | value | semmle.label | value | -| tests.js:498:13:498:28 | value | semmle.label | value | +| tests.js:498:13:498:17 | value | semmle.label | value | +| tests.js:498:13:498:17 | value | semmle.label | value | +| tests.js:498:13:498:17 | value | semmle.label | value | | tests.js:498:21:498:23 | src | semmle.label | src | | tests.js:498:21:498:28 | src[key] | semmle.label | src[key] | | tests.js:498:21:498:28 | src[key] | semmle.label | src[key] | @@ -1306,7 +1306,7 @@ nodes | tests.js:502:24:502:28 | value | semmle.label | value | | tests.js:508:30:508:32 | dst | semmle.label | dst | | tests.js:508:35:508:37 | src | semmle.label | src | -| tests.js:511:13:511:25 | key | semmle.label | key | +| tests.js:511:13:511:15 | key | semmle.label | key | | tests.js:511:19:511:25 | keys[i] | semmle.label | keys[i] | | tests.js:513:33:513:35 | dst | semmle.label | dst | | tests.js:513:33:513:40 | dst[key] | semmle.label | dst[key] | @@ -1321,10 +1321,10 @@ nodes | tests.js:517:40:517:42 | key | semmle.label | key | | tests.js:522:35:522:38 | args [0] | semmle.label | args [0] | | tests.js:522:35:522:38 | args [1] | semmle.label | args [1] | -| tests.js:523:11:523:23 | dst | semmle.label | dst | +| tests.js:523:11:523:13 | dst | semmle.label | dst | | tests.js:523:17:523:20 | args [0] | semmle.label | args [0] | | tests.js:523:17:523:23 | args[0] | semmle.label | args[0] | -| tests.js:524:11:524:23 | src | semmle.label | src | +| tests.js:524:11:524:13 | src | semmle.label | src | | tests.js:524:17:524:20 | args [1] | semmle.label | args [1] | | tests.js:524:17:524:23 | args[1] | semmle.label | args[1] | | tests.js:525:14:525:16 | key | semmle.label | key | diff --git a/javascript/ql/test/query-tests/Security/CWE-915/PrototypePollutingMergeCall/PrototypePollutingMergeCall.expected b/javascript/ql/test/query-tests/Security/CWE-915/PrototypePollutingMergeCall/PrototypePollutingMergeCall.expected index 8b08f2a20af..3bdb65ac450 100644 --- a/javascript/ql/test/query-tests/Security/CWE-915/PrototypePollutingMergeCall/PrototypePollutingMergeCall.expected +++ b/javascript/ql/test/query-tests/Security/CWE-915/PrototypePollutingMergeCall/PrototypePollutingMergeCall.expected @@ -12,8 +12,8 @@ edges | angularmerge.js:2:32:2:36 | event | angularmerge.js:2:32:2:41 | event.data | provenance | | | angularmerge.js:2:32:2:41 | event.data | angularmerge.js:2:21:2:42 | JSON.pa ... t.data) | provenance | Config | | src-vulnerable-lodash/tst.js:11:16:11:30 | req.query.value | src-vulnerable-lodash/tst.js:10:17:12:5 | {\\n ... e\\n } | provenance | | -| src-vulnerable-lodash/tst.js:14:9:16:5 | opts [thing] | src-vulnerable-lodash/tst.js:18:16:18:19 | opts [thing] | provenance | | -| src-vulnerable-lodash/tst.js:14:16:16:5 | {\\n ... e\\n } [thing] | src-vulnerable-lodash/tst.js:14:9:16:5 | opts [thing] | provenance | | +| src-vulnerable-lodash/tst.js:14:9:14:12 | opts [thing] | src-vulnerable-lodash/tst.js:18:16:18:19 | opts [thing] | provenance | | +| src-vulnerable-lodash/tst.js:14:16:16:5 | {\\n ... e\\n } [thing] | src-vulnerable-lodash/tst.js:14:9:14:12 | opts [thing] | provenance | | | src-vulnerable-lodash/tst.js:15:14:15:28 | req.query.value | src-vulnerable-lodash/tst.js:14:16:16:5 | {\\n ... e\\n } [thing] | provenance | | | src-vulnerable-lodash/tst.js:18:16:18:19 | opts [thing] | src-vulnerable-lodash/tst.js:18:16:18:25 | opts.thing | provenance | | | src-vulnerable-lodash/tst.js:18:16:18:25 | opts.thing | src-vulnerable-lodash/tst.js:17:17:19:5 | {\\n ... g\\n } | provenance | | @@ -37,7 +37,7 @@ nodes | src-vulnerable-lodash/tst.js:7:17:7:29 | req.query.foo | semmle.label | req.query.foo | | src-vulnerable-lodash/tst.js:10:17:12:5 | {\\n ... e\\n } | semmle.label | {\\n ... e\\n } | | src-vulnerable-lodash/tst.js:11:16:11:30 | req.query.value | semmle.label | req.query.value | -| src-vulnerable-lodash/tst.js:14:9:16:5 | opts [thing] | semmle.label | opts [thing] | +| src-vulnerable-lodash/tst.js:14:9:14:12 | opts [thing] | semmle.label | opts [thing] | | src-vulnerable-lodash/tst.js:14:16:16:5 | {\\n ... e\\n } [thing] | semmle.label | {\\n ... e\\n } [thing] | | src-vulnerable-lodash/tst.js:15:14:15:28 | req.query.value | semmle.label | req.query.value | | src-vulnerable-lodash/tst.js:17:17:19:5 | {\\n ... g\\n } | semmle.label | {\\n ... g\\n } | diff --git a/javascript/ql/test/query-tests/Security/CWE-918/ClientSideRequestForgery.expected b/javascript/ql/test/query-tests/Security/CWE-918/ClientSideRequestForgery.expected index 4a8f524f862..1d6b8781db7 100644 --- a/javascript/ql/test/query-tests/Security/CWE-918/ClientSideRequestForgery.expected +++ b/javascript/ql/test/query-tests/Security/CWE-918/ClientSideRequestForgery.expected @@ -4,32 +4,32 @@ | clientSide.js:17:5:17:58 | request ... '/id') | clientSide.js:16:22:16:41 | window.location.hash | clientSide.js:17:13:17:57 | 'https: ... + '/id' | The $@ of this request depends on a $@. | clientSide.js:17:13:17:57 | 'https: ... + '/id' | URL | clientSide.js:16:22:16:41 | window.location.hash | user-provided value | | clientSide.js:21:5:21:54 | request ... '/id') | clientSide.js:20:18:20:28 | window.name | clientSide.js:21:13:21:53 | 'https: ... + '/id' | The $@ of this request depends on a $@. | clientSide.js:21:13:21:53 | 'https: ... + '/id' | URL | clientSide.js:20:18:20:28 | window.name | user-provided value | edges -| clientSide.js:11:11:11:53 | query | clientSide.js:12:42:12:46 | query | provenance | | +| clientSide.js:11:11:11:15 | query | clientSide.js:12:42:12:46 | query | provenance | | | clientSide.js:11:19:11:40 | window. ... .search | clientSide.js:11:19:11:53 | window. ... ring(1) | provenance | | -| clientSide.js:11:19:11:53 | window. ... ring(1) | clientSide.js:11:11:11:53 | query | provenance | | +| clientSide.js:11:19:11:53 | window. ... ring(1) | clientSide.js:11:11:11:15 | query | provenance | | | clientSide.js:12:42:12:46 | query | clientSide.js:12:13:12:54 | 'https: ... + '/id' | provenance | | | clientSide.js:14:42:14:63 | window. ... .search | clientSide.js:14:13:14:63 | 'https: ... .search | provenance | | -| clientSide.js:16:11:16:54 | fragment | clientSide.js:17:42:17:49 | fragment | provenance | | +| clientSide.js:16:11:16:18 | fragment | clientSide.js:17:42:17:49 | fragment | provenance | | | clientSide.js:16:22:16:41 | window.location.hash | clientSide.js:16:22:16:54 | window. ... ring(1) | provenance | | -| clientSide.js:16:22:16:54 | window. ... ring(1) | clientSide.js:16:11:16:54 | fragment | provenance | | +| clientSide.js:16:22:16:54 | window. ... ring(1) | clientSide.js:16:11:16:18 | fragment | provenance | | | clientSide.js:17:42:17:49 | fragment | clientSide.js:17:13:17:57 | 'https: ... + '/id' | provenance | | -| clientSide.js:20:11:20:28 | name | clientSide.js:21:42:21:45 | name | provenance | | -| clientSide.js:20:18:20:28 | window.name | clientSide.js:20:11:20:28 | name | provenance | | +| clientSide.js:20:11:20:14 | name | clientSide.js:21:42:21:45 | name | provenance | | +| clientSide.js:20:18:20:28 | window.name | clientSide.js:20:11:20:14 | name | provenance | | | clientSide.js:21:42:21:45 | name | clientSide.js:21:13:21:53 | 'https: ... + '/id' | provenance | | nodes -| clientSide.js:11:11:11:53 | query | semmle.label | query | +| clientSide.js:11:11:11:15 | query | semmle.label | query | | clientSide.js:11:19:11:40 | window. ... .search | semmle.label | window. ... .search | | clientSide.js:11:19:11:53 | window. ... ring(1) | semmle.label | window. ... ring(1) | | clientSide.js:12:13:12:54 | 'https: ... + '/id' | semmle.label | 'https: ... + '/id' | | clientSide.js:12:42:12:46 | query | semmle.label | query | | clientSide.js:14:13:14:63 | 'https: ... .search | semmle.label | 'https: ... .search | | clientSide.js:14:42:14:63 | window. ... .search | semmle.label | window. ... .search | -| clientSide.js:16:11:16:54 | fragment | semmle.label | fragment | +| clientSide.js:16:11:16:18 | fragment | semmle.label | fragment | | clientSide.js:16:22:16:41 | window.location.hash | semmle.label | window.location.hash | | clientSide.js:16:22:16:54 | window. ... ring(1) | semmle.label | window. ... ring(1) | | clientSide.js:17:13:17:57 | 'https: ... + '/id' | semmle.label | 'https: ... + '/id' | | clientSide.js:17:42:17:49 | fragment | semmle.label | fragment | -| clientSide.js:20:11:20:28 | name | semmle.label | name | +| clientSide.js:20:11:20:14 | name | semmle.label | name | | clientSide.js:20:18:20:28 | window.name | semmle.label | window.name | | clientSide.js:21:13:21:53 | 'https: ... + '/id' | semmle.label | 'https: ... + '/id' | | clientSide.js:21:42:21:45 | name | semmle.label | name | diff --git a/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected b/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected index f7ff324b401..a91a6348dfa 100644 --- a/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected +++ b/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected @@ -40,58 +40,58 @@ | serverSide.js:145:3:145:23 | axios.g ... dedUrl) | serverSide.js:139:17:139:29 | req.query.url | serverSide.js:145:13:145:22 | encodedUrl | The $@ of this request depends on a $@. | serverSide.js:145:13:145:22 | encodedUrl | URL | serverSide.js:139:17:139:29 | req.query.url | user-provided value | | serverSide.js:147:3:147:23 | axios.g ... pedUrl) | serverSide.js:139:17:139:29 | req.query.url | serverSide.js:147:13:147:22 | escapedUrl | The $@ of this request depends on a $@. | serverSide.js:147:13:147:22 | escapedUrl | URL | serverSide.js:139:17:139:29 | req.query.url | user-provided value | edges -| Request/app/api/proxy/route2.serverSide.ts:4:9:4:15 | { url } | Request/app/api/proxy/route2.serverSide.ts:4:9:4:34 | url | provenance | | -| Request/app/api/proxy/route2.serverSide.ts:4:9:4:34 | url | Request/app/api/proxy/route2.serverSide.ts:5:27:5:29 | url | provenance | | +| Request/app/api/proxy/route2.serverSide.ts:4:9:4:15 | { url } | Request/app/api/proxy/route2.serverSide.ts:4:11:4:13 | url | provenance | | +| Request/app/api/proxy/route2.serverSide.ts:4:11:4:13 | url | Request/app/api/proxy/route2.serverSide.ts:5:27:5:29 | url | provenance | | | Request/app/api/proxy/route2.serverSide.ts:4:19:4:34 | await req.json() | Request/app/api/proxy/route2.serverSide.ts:4:9:4:15 | { url } | provenance | | | Request/app/api/proxy/route2.serverSide.ts:4:25:4:34 | req.json() | Request/app/api/proxy/route2.serverSide.ts:4:19:4:34 | await req.json() | provenance | | -| Request/app/api/proxy/route.serverSide.ts:2:9:2:15 | { url } | Request/app/api/proxy/route.serverSide.ts:2:9:2:34 | url | provenance | | -| Request/app/api/proxy/route.serverSide.ts:2:9:2:34 | url | Request/app/api/proxy/route.serverSide.ts:3:27:3:29 | url | provenance | | +| Request/app/api/proxy/route.serverSide.ts:2:9:2:15 | { url } | Request/app/api/proxy/route.serverSide.ts:2:11:2:13 | url | provenance | | +| Request/app/api/proxy/route.serverSide.ts:2:11:2:13 | url | Request/app/api/proxy/route.serverSide.ts:3:27:3:29 | url | provenance | | | Request/app/api/proxy/route.serverSide.ts:2:19:2:34 | await req.json() | Request/app/api/proxy/route.serverSide.ts:2:9:2:15 | { url } | provenance | | | Request/app/api/proxy/route.serverSide.ts:2:25:2:34 | req.json() | Request/app/api/proxy/route.serverSide.ts:2:19:2:34 | await req.json() | provenance | | -| Request/middleware.ts:4:11:4:30 | target | Request/middleware.ts:7:31:7:36 | target | provenance | | -| Request/middleware.ts:4:20:4:30 | req.nextUrl | Request/middleware.ts:4:11:4:30 | target | provenance | | -| Request/middleware.ts:5:11:5:53 | target2 | Request/middleware.ts:12:33:12:39 | target2 | provenance | | -| Request/middleware.ts:5:21:5:53 | target. ... arget') | Request/middleware.ts:5:11:5:53 | target2 | provenance | | -| apollo.serverSide.ts:7:36:7:44 | files | apollo.serverSide.ts:8:13:8:17 | files | provenance | | -| apollo.serverSide.ts:7:36:7:44 | { files } | apollo.serverSide.ts:7:36:7:44 | files | provenance | | +| Request/middleware.ts:4:11:4:16 | target | Request/middleware.ts:7:31:7:36 | target | provenance | | +| Request/middleware.ts:4:20:4:30 | req.nextUrl | Request/middleware.ts:4:11:4:16 | target | provenance | | +| Request/middleware.ts:5:11:5:17 | target2 | Request/middleware.ts:12:33:12:39 | target2 | provenance | | +| Request/middleware.ts:5:21:5:53 | target. ... arget') | Request/middleware.ts:5:11:5:17 | target2 | provenance | | +| apollo.serverSide.ts:7:36:7:44 | { files } | apollo.serverSide.ts:7:38:7:42 | files | provenance | | +| apollo.serverSide.ts:7:38:7:42 | files | apollo.serverSide.ts:8:13:8:17 | files | provenance | | | apollo.serverSide.ts:8:13:8:17 | files | apollo.serverSide.ts:8:28:8:31 | file | provenance | | | apollo.serverSide.ts:8:28:8:31 | file | apollo.serverSide.ts:8:43:8:46 | file | provenance | | | apollo.serverSide.ts:8:43:8:46 | file | apollo.serverSide.ts:8:43:8:50 | file.url | provenance | | -| apollo.serverSide.ts:17:34:17:42 | files | apollo.serverSide.ts:18:11:18:15 | files | provenance | | -| apollo.serverSide.ts:17:34:17:42 | { files } | apollo.serverSide.ts:17:34:17:42 | files | provenance | | +| apollo.serverSide.ts:17:34:17:42 | { files } | apollo.serverSide.ts:17:36:17:40 | files | provenance | | +| apollo.serverSide.ts:17:36:17:40 | files | apollo.serverSide.ts:18:11:18:15 | files | provenance | | | apollo.serverSide.ts:18:11:18:15 | files | apollo.serverSide.ts:18:26:18:29 | file | provenance | | | apollo.serverSide.ts:18:26:18:29 | file | apollo.serverSide.ts:18:41:18:44 | file | provenance | | | apollo.serverSide.ts:18:41:18:44 | file | apollo.serverSide.ts:18:41:18:48 | file.url | provenance | | -| axiosInterceptors.serverSide.js:19:11:19:17 | { url } | axiosInterceptors.serverSide.js:19:11:19:28 | url | provenance | | -| axiosInterceptors.serverSide.js:19:11:19:28 | url | axiosInterceptors.serverSide.js:20:23:20:25 | url | provenance | | +| axiosInterceptors.serverSide.js:19:11:19:17 | { url } | axiosInterceptors.serverSide.js:19:13:19:15 | url | provenance | | +| axiosInterceptors.serverSide.js:19:13:19:15 | url | axiosInterceptors.serverSide.js:20:23:20:25 | url | provenance | | | axiosInterceptors.serverSide.js:19:21:19:28 | req.body | axiosInterceptors.serverSide.js:19:11:19:17 | { url } | provenance | | -| axiosInterceptors.serverSide.js:20:5:20:25 | userProvidedUrl | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | provenance | | -| axiosInterceptors.serverSide.js:20:23:20:25 | url | axiosInterceptors.serverSide.js:20:5:20:25 | userProvidedUrl | provenance | | +| axiosInterceptors.serverSide.js:20:5:20:19 | userProvidedUrl | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | provenance | | +| axiosInterceptors.serverSide.js:20:23:20:25 | url | axiosInterceptors.serverSide.js:20:5:20:19 | userProvidedUrl | provenance | | | serverSide2.js:9:34:9:63 | qs.pars ... .query) | serverSide2.js:19:24:19:51 | req.par ... rsedUrl | provenance | | | serverSide2.js:9:43:9:56 | req._parsedUrl | serverSide2.js:9:34:9:63 | qs.pars ... .query) | provenance | | | serverSide2.js:10:25:10:31 | req.url | serverSide2.js:16:23:16:41 | req.parsedQuery.url | provenance | | | serverSide2.js:11:24:11:30 | req.url | serverSide2.js:25:24:25:41 | req.SomeObject.url | provenance | | -| serverSide2.js:16:11:16:41 | targetUrl | serverSide2.js:17:38:17:46 | targetUrl | provenance | | -| serverSide2.js:16:23:16:41 | req.parsedQuery.url | serverSide2.js:16:11:16:41 | targetUrl | provenance | | -| serverSide2.js:19:11:19:55 | targetUrl1 | serverSide2.js:20:39:20:48 | targetUrl1 | provenance | | -| serverSide2.js:19:24:19:51 | req.par ... rsedUrl | serverSide2.js:19:11:19:55 | targetUrl1 | provenance | | -| serverSide2.js:22:11:22:36 | targetUrl2 | serverSide2.js:23:39:23:48 | targetUrl2 | provenance | | -| serverSide2.js:22:24:22:30 | req.url | serverSide2.js:22:11:22:36 | targetUrl2 | provenance | | -| serverSide2.js:25:11:25:47 | targetUrl3 | serverSide2.js:26:39:26:48 | targetUrl3 | provenance | | -| serverSide2.js:25:24:25:41 | req.SomeObject.url | serverSide2.js:25:11:25:47 | targetUrl3 | provenance | | -| serverSide.js:14:9:14:52 | tainted | serverSide.js:18:13:18:19 | tainted | provenance | | -| serverSide.js:14:9:14:52 | tainted | serverSide.js:20:17:20:23 | tainted | provenance | | -| serverSide.js:14:9:14:52 | tainted | serverSide.js:23:19:23:25 | tainted | provenance | | -| serverSide.js:14:9:14:52 | tainted | serverSide.js:26:25:26:31 | tainted | provenance | | -| serverSide.js:14:9:14:52 | tainted | serverSide.js:28:36:28:42 | tainted | provenance | | -| serverSide.js:14:9:14:52 | tainted | serverSide.js:30:37:30:43 | tainted | provenance | | -| serverSide.js:14:9:14:52 | tainted | serverSide.js:34:34:34:40 | tainted | provenance | | -| serverSide.js:14:9:14:52 | tainted | serverSide.js:36:24:36:30 | tainted | provenance | | -| serverSide.js:14:9:14:52 | tainted | serverSide.js:37:30:37:36 | tainted | provenance | | -| serverSide.js:14:9:14:52 | tainted | serverSide.js:41:43:41:49 | tainted | provenance | | -| serverSide.js:14:9:14:52 | tainted | serverSide.js:43:46:43:52 | tainted | provenance | | -| serverSide.js:14:9:14:52 | tainted | serverSide.js:45:50:45:56 | tainted | provenance | | -| serverSide.js:14:19:14:42 | url.par ... , true) | serverSide.js:14:9:14:52 | tainted | provenance | | +| serverSide2.js:16:11:16:19 | targetUrl | serverSide2.js:17:38:17:46 | targetUrl | provenance | | +| serverSide2.js:16:23:16:41 | req.parsedQuery.url | serverSide2.js:16:11:16:19 | targetUrl | provenance | | +| serverSide2.js:19:11:19:20 | targetUrl1 | serverSide2.js:20:39:20:48 | targetUrl1 | provenance | | +| serverSide2.js:19:24:19:51 | req.par ... rsedUrl | serverSide2.js:19:11:19:20 | targetUrl1 | provenance | | +| serverSide2.js:22:11:22:20 | targetUrl2 | serverSide2.js:23:39:23:48 | targetUrl2 | provenance | | +| serverSide2.js:22:24:22:30 | req.url | serverSide2.js:22:11:22:20 | targetUrl2 | provenance | | +| serverSide2.js:25:11:25:20 | targetUrl3 | serverSide2.js:26:39:26:48 | targetUrl3 | provenance | | +| serverSide2.js:25:24:25:41 | req.SomeObject.url | serverSide2.js:25:11:25:20 | targetUrl3 | provenance | | +| serverSide.js:14:9:14:15 | tainted | serverSide.js:18:13:18:19 | tainted | provenance | | +| serverSide.js:14:9:14:15 | tainted | serverSide.js:20:17:20:23 | tainted | provenance | | +| serverSide.js:14:9:14:15 | tainted | serverSide.js:23:19:23:25 | tainted | provenance | | +| serverSide.js:14:9:14:15 | tainted | serverSide.js:26:25:26:31 | tainted | provenance | | +| serverSide.js:14:9:14:15 | tainted | serverSide.js:28:36:28:42 | tainted | provenance | | +| serverSide.js:14:9:14:15 | tainted | serverSide.js:30:37:30:43 | tainted | provenance | | +| serverSide.js:14:9:14:15 | tainted | serverSide.js:34:34:34:40 | tainted | provenance | | +| serverSide.js:14:9:14:15 | tainted | serverSide.js:36:24:36:30 | tainted | provenance | | +| serverSide.js:14:9:14:15 | tainted | serverSide.js:37:30:37:36 | tainted | provenance | | +| serverSide.js:14:9:14:15 | tainted | serverSide.js:41:43:41:49 | tainted | provenance | | +| serverSide.js:14:9:14:15 | tainted | serverSide.js:43:46:43:52 | tainted | provenance | | +| serverSide.js:14:9:14:15 | tainted | serverSide.js:45:50:45:56 | tainted | provenance | | +| serverSide.js:14:19:14:42 | url.par ... , true) | serverSide.js:14:9:14:15 | tainted | provenance | | | serverSide.js:14:29:14:35 | req.url | serverSide.js:14:19:14:42 | url.par ... , true) | provenance | | | serverSide.js:26:25:26:31 | tainted | serverSide.js:26:13:26:31 | "http://" + tainted | provenance | | | serverSide.js:28:36:28:42 | tainted | serverSide.js:28:13:28:42 | "http:/ ... tainted | provenance | | @@ -101,101 +101,101 @@ edges | serverSide.js:41:43:41:49 | tainted | serverSide.js:41:13:41:51 | `http:/ ... inted}` | provenance | | | serverSide.js:43:46:43:52 | tainted | serverSide.js:43:13:43:54 | `http:/ ... inted}` | provenance | | | serverSide.js:45:50:45:56 | tainted | serverSide.js:45:13:45:56 | 'http:/ ... tainted | provenance | | -| serverSide.js:58:9:58:52 | tainted | serverSide.js:61:29:61:35 | tainted | provenance | | -| serverSide.js:58:9:58:52 | tainted | serverSide.js:61:29:61:35 | tainted | provenance | | -| serverSide.js:58:19:58:42 | url.par ... , true) | serverSide.js:58:9:58:52 | tainted | provenance | | +| serverSide.js:58:9:58:15 | tainted | serverSide.js:61:29:61:35 | tainted | provenance | | +| serverSide.js:58:9:58:15 | tainted | serverSide.js:61:29:61:35 | tainted | provenance | | +| serverSide.js:58:19:58:42 | url.par ... , true) | serverSide.js:58:9:58:15 | tainted | provenance | | | serverSide.js:58:29:58:35 | req.url | serverSide.js:58:19:58:42 | url.par ... , true) | provenance | | | serverSide.js:61:29:61:35 | tainted | serverSide.js:64:30:64:36 | tainted | provenance | | | serverSide.js:61:29:61:35 | tainted | serverSide.js:68:30:68:36 | tainted | provenance | | -| serverSide.js:74:9:74:52 | tainted | serverSide.js:76:19:76:25 | tainted | provenance | | -| serverSide.js:74:19:74:42 | url.par ... , true) | serverSide.js:74:9:74:52 | tainted | provenance | | +| serverSide.js:74:9:74:15 | tainted | serverSide.js:76:19:76:25 | tainted | provenance | | +| serverSide.js:74:19:74:42 | url.par ... , true) | serverSide.js:74:9:74:15 | tainted | provenance | | | serverSide.js:74:29:74:35 | req.url | serverSide.js:74:19:74:42 | url.par ... , true) | provenance | | | serverSide.js:83:38:83:43 | param1 | serverSide.js:84:19:84:24 | param1 | provenance | | | serverSide.js:90:19:90:28 | ctx.params | serverSide.js:90:19:90:32 | ctx.params.foo | provenance | | | serverSide.js:92:19:92:28 | ctx.params | serverSide.js:92:19:92:32 | ctx.params.foo | provenance | | -| serverSide.js:98:9:98:52 | tainted | serverSide.js:100:19:100:25 | tainted | provenance | | -| serverSide.js:98:19:98:42 | url.par ... , true) | serverSide.js:98:9:98:52 | tainted | provenance | | +| serverSide.js:98:9:98:15 | tainted | serverSide.js:100:19:100:25 | tainted | provenance | | +| serverSide.js:98:19:98:42 | url.par ... , true) | serverSide.js:98:9:98:15 | tainted | provenance | | | serverSide.js:98:29:98:35 | req.url | serverSide.js:98:19:98:42 | url.par ... , true) | provenance | | -| serverSide.js:108:11:108:27 | url | serverSide.js:109:27:109:29 | url | provenance | | -| serverSide.js:108:17:108:27 | request.url | serverSide.js:108:11:108:27 | url | provenance | | -| serverSide.js:115:11:115:42 | url | serverSide.js:117:27:117:29 | url | provenance | | -| serverSide.js:115:17:115:42 | new URL ... , base) | serverSide.js:115:11:115:42 | url | provenance | | +| serverSide.js:108:11:108:13 | url | serverSide.js:109:27:109:29 | url | provenance | | +| serverSide.js:108:17:108:27 | request.url | serverSide.js:108:11:108:13 | url | provenance | | +| serverSide.js:115:11:115:13 | url | serverSide.js:117:27:117:29 | url | provenance | | +| serverSide.js:115:17:115:42 | new URL ... , base) | serverSide.js:115:11:115:13 | url | provenance | | | serverSide.js:115:25:115:35 | request.url | serverSide.js:115:17:115:42 | new URL ... , base) | provenance | Config | -| serverSide.js:123:9:123:52 | tainted | serverSide.js:127:14:127:20 | tainted | provenance | | -| serverSide.js:123:9:123:52 | tainted | serverSide.js:130:37:130:43 | tainted | provenance | | -| serverSide.js:123:19:123:42 | url.par ... , true) | serverSide.js:123:9:123:52 | tainted | provenance | | +| serverSide.js:123:9:123:15 | tainted | serverSide.js:127:14:127:20 | tainted | provenance | | +| serverSide.js:123:9:123:15 | tainted | serverSide.js:130:37:130:43 | tainted | provenance | | +| serverSide.js:123:19:123:42 | url.par ... , true) | serverSide.js:123:9:123:15 | tainted | provenance | | | serverSide.js:123:29:123:35 | req.url | serverSide.js:123:19:123:42 | url.par ... , true) | provenance | | -| serverSide.js:130:9:130:45 | myUrl | serverSide.js:131:15:131:19 | myUrl | provenance | | -| serverSide.js:130:37:130:43 | tainted | serverSide.js:130:9:130:45 | myUrl | provenance | | -| serverSide.js:139:9:139:29 | input | serverSide.js:140:26:140:30 | input | provenance | | -| serverSide.js:139:9:139:29 | input | serverSide.js:144:32:144:36 | input | provenance | | -| serverSide.js:139:9:139:29 | input | serverSide.js:146:29:146:33 | input | provenance | | -| serverSide.js:139:17:139:29 | req.query.url | serverSide.js:139:9:139:29 | input | provenance | | -| serverSide.js:140:9:140:31 | target | serverSide.js:141:13:141:18 | target | provenance | | -| serverSide.js:140:9:140:31 | target | serverSide.js:142:13:142:18 | target | provenance | | -| serverSide.js:140:9:140:31 | target | serverSide.js:143:13:143:18 | target | provenance | | -| serverSide.js:140:18:140:31 | new URL(input) | serverSide.js:140:9:140:31 | target | provenance | | +| serverSide.js:130:9:130:13 | myUrl | serverSide.js:131:15:131:19 | myUrl | provenance | | +| serverSide.js:130:37:130:43 | tainted | serverSide.js:130:9:130:13 | myUrl | provenance | | +| serverSide.js:139:9:139:13 | input | serverSide.js:140:26:140:30 | input | provenance | | +| serverSide.js:139:9:139:13 | input | serverSide.js:144:32:144:36 | input | provenance | | +| serverSide.js:139:9:139:13 | input | serverSide.js:146:29:146:33 | input | provenance | | +| serverSide.js:139:17:139:29 | req.query.url | serverSide.js:139:9:139:13 | input | provenance | | +| serverSide.js:140:9:140:14 | target | serverSide.js:141:13:141:18 | target | provenance | | +| serverSide.js:140:9:140:14 | target | serverSide.js:142:13:142:18 | target | provenance | | +| serverSide.js:140:9:140:14 | target | serverSide.js:143:13:143:18 | target | provenance | | +| serverSide.js:140:18:140:31 | new URL(input) | serverSide.js:140:9:140:14 | target | provenance | | | serverSide.js:140:26:140:30 | input | serverSide.js:140:18:140:31 | new URL(input) | provenance | Config | | serverSide.js:141:13:141:18 | target | serverSide.js:141:13:141:29 | target.toString() | provenance | | | serverSide.js:143:13:143:18 | target | serverSide.js:143:13:143:23 | target.href | provenance | | -| serverSide.js:144:9:144:37 | encodedUrl | serverSide.js:145:13:145:22 | encodedUrl | provenance | | -| serverSide.js:144:22:144:37 | encodeURI(input) | serverSide.js:144:9:144:37 | encodedUrl | provenance | | +| serverSide.js:144:9:144:18 | encodedUrl | serverSide.js:145:13:145:22 | encodedUrl | provenance | | +| serverSide.js:144:22:144:37 | encodeURI(input) | serverSide.js:144:9:144:18 | encodedUrl | provenance | | | serverSide.js:144:32:144:36 | input | serverSide.js:144:22:144:37 | encodeURI(input) | provenance | | -| serverSide.js:146:9:146:34 | escapedUrl | serverSide.js:147:13:147:22 | escapedUrl | provenance | | -| serverSide.js:146:22:146:34 | escape(input) | serverSide.js:146:9:146:34 | escapedUrl | provenance | | +| serverSide.js:146:9:146:18 | escapedUrl | serverSide.js:147:13:147:22 | escapedUrl | provenance | | +| serverSide.js:146:22:146:34 | escape(input) | serverSide.js:146:9:146:18 | escapedUrl | provenance | | | serverSide.js:146:29:146:33 | input | serverSide.js:146:22:146:34 | escape(input) | provenance | | nodes | Request/app/api/proxy/route2.serverSide.ts:4:9:4:15 | { url } | semmle.label | { url } | -| Request/app/api/proxy/route2.serverSide.ts:4:9:4:34 | url | semmle.label | url | +| Request/app/api/proxy/route2.serverSide.ts:4:11:4:13 | url | semmle.label | url | | Request/app/api/proxy/route2.serverSide.ts:4:19:4:34 | await req.json() | semmle.label | await req.json() | | Request/app/api/proxy/route2.serverSide.ts:4:25:4:34 | req.json() | semmle.label | req.json() | | Request/app/api/proxy/route2.serverSide.ts:5:27:5:29 | url | semmle.label | url | | Request/app/api/proxy/route.serverSide.ts:2:9:2:15 | { url } | semmle.label | { url } | -| Request/app/api/proxy/route.serverSide.ts:2:9:2:34 | url | semmle.label | url | +| Request/app/api/proxy/route.serverSide.ts:2:11:2:13 | url | semmle.label | url | | Request/app/api/proxy/route.serverSide.ts:2:19:2:34 | await req.json() | semmle.label | await req.json() | | Request/app/api/proxy/route.serverSide.ts:2:25:2:34 | req.json() | semmle.label | req.json() | | Request/app/api/proxy/route.serverSide.ts:3:27:3:29 | url | semmle.label | url | -| Request/middleware.ts:4:11:4:30 | target | semmle.label | target | +| Request/middleware.ts:4:11:4:16 | target | semmle.label | target | | Request/middleware.ts:4:20:4:30 | req.nextUrl | semmle.label | req.nextUrl | -| Request/middleware.ts:5:11:5:53 | target2 | semmle.label | target2 | +| Request/middleware.ts:5:11:5:17 | target2 | semmle.label | target2 | | Request/middleware.ts:5:21:5:53 | target. ... arget') | semmle.label | target. ... arget') | | Request/middleware.ts:7:31:7:36 | target | semmle.label | target | | Request/middleware.ts:12:33:12:39 | target2 | semmle.label | target2 | -| apollo.serverSide.ts:7:36:7:44 | files | semmle.label | files | | apollo.serverSide.ts:7:36:7:44 | { files } | semmle.label | { files } | +| apollo.serverSide.ts:7:38:7:42 | files | semmle.label | files | | apollo.serverSide.ts:8:13:8:17 | files | semmle.label | files | | apollo.serverSide.ts:8:28:8:31 | file | semmle.label | file | | apollo.serverSide.ts:8:43:8:46 | file | semmle.label | file | | apollo.serverSide.ts:8:43:8:50 | file.url | semmle.label | file.url | -| apollo.serverSide.ts:17:34:17:42 | files | semmle.label | files | | apollo.serverSide.ts:17:34:17:42 | { files } | semmle.label | { files } | +| apollo.serverSide.ts:17:36:17:40 | files | semmle.label | files | | apollo.serverSide.ts:18:11:18:15 | files | semmle.label | files | | apollo.serverSide.ts:18:26:18:29 | file | semmle.label | file | | apollo.serverSide.ts:18:41:18:44 | file | semmle.label | file | | apollo.serverSide.ts:18:41:18:48 | file.url | semmle.label | file.url | | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | semmle.label | userProvidedUrl | | axiosInterceptors.serverSide.js:19:11:19:17 | { url } | semmle.label | { url } | -| axiosInterceptors.serverSide.js:19:11:19:28 | url | semmle.label | url | +| axiosInterceptors.serverSide.js:19:13:19:15 | url | semmle.label | url | | axiosInterceptors.serverSide.js:19:21:19:28 | req.body | semmle.label | req.body | -| axiosInterceptors.serverSide.js:20:5:20:25 | userProvidedUrl | semmle.label | userProvidedUrl | +| axiosInterceptors.serverSide.js:20:5:20:19 | userProvidedUrl | semmle.label | userProvidedUrl | | axiosInterceptors.serverSide.js:20:23:20:25 | url | semmle.label | url | | serverSide2.js:9:34:9:63 | qs.pars ... .query) | semmle.label | qs.pars ... .query) | | serverSide2.js:9:43:9:56 | req._parsedUrl | semmle.label | req._parsedUrl | | serverSide2.js:10:25:10:31 | req.url | semmle.label | req.url | | serverSide2.js:11:24:11:30 | req.url | semmle.label | req.url | -| serverSide2.js:16:11:16:41 | targetUrl | semmle.label | targetUrl | +| serverSide2.js:16:11:16:19 | targetUrl | semmle.label | targetUrl | | serverSide2.js:16:23:16:41 | req.parsedQuery.url | semmle.label | req.parsedQuery.url | | serverSide2.js:17:38:17:46 | targetUrl | semmle.label | targetUrl | -| serverSide2.js:19:11:19:55 | targetUrl1 | semmle.label | targetUrl1 | +| serverSide2.js:19:11:19:20 | targetUrl1 | semmle.label | targetUrl1 | | serverSide2.js:19:24:19:51 | req.par ... rsedUrl | semmle.label | req.par ... rsedUrl | | serverSide2.js:20:39:20:48 | targetUrl1 | semmle.label | targetUrl1 | -| serverSide2.js:22:11:22:36 | targetUrl2 | semmle.label | targetUrl2 | +| serverSide2.js:22:11:22:20 | targetUrl2 | semmle.label | targetUrl2 | | serverSide2.js:22:24:22:30 | req.url | semmle.label | req.url | | serverSide2.js:23:39:23:48 | targetUrl2 | semmle.label | targetUrl2 | -| serverSide2.js:25:11:25:47 | targetUrl3 | semmle.label | targetUrl3 | +| serverSide2.js:25:11:25:20 | targetUrl3 | semmle.label | targetUrl3 | | serverSide2.js:25:24:25:41 | req.SomeObject.url | semmle.label | req.SomeObject.url | | serverSide2.js:26:39:26:48 | targetUrl3 | semmle.label | targetUrl3 | -| serverSide.js:14:9:14:52 | tainted | semmle.label | tainted | +| serverSide.js:14:9:14:15 | tainted | semmle.label | tainted | | serverSide.js:14:19:14:42 | url.par ... , true) | semmle.label | url.par ... , true) | | serverSide.js:14:29:14:35 | req.url | semmle.label | req.url | | serverSide.js:18:13:18:19 | tainted | semmle.label | tainted | @@ -218,14 +218,14 @@ nodes | serverSide.js:43:46:43:52 | tainted | semmle.label | tainted | | serverSide.js:45:13:45:56 | 'http:/ ... tainted | semmle.label | 'http:/ ... tainted | | serverSide.js:45:50:45:56 | tainted | semmle.label | tainted | -| serverSide.js:58:9:58:52 | tainted | semmle.label | tainted | +| serverSide.js:58:9:58:15 | tainted | semmle.label | tainted | | serverSide.js:58:19:58:42 | url.par ... , true) | semmle.label | url.par ... , true) | | serverSide.js:58:29:58:35 | req.url | semmle.label | req.url | | serverSide.js:61:29:61:35 | tainted | semmle.label | tainted | | serverSide.js:61:29:61:35 | tainted | semmle.label | tainted | | serverSide.js:64:30:64:36 | tainted | semmle.label | tainted | | serverSide.js:68:30:68:36 | tainted | semmle.label | tainted | -| serverSide.js:74:9:74:52 | tainted | semmle.label | tainted | +| serverSide.js:74:9:74:15 | tainted | semmle.label | tainted | | serverSide.js:74:19:74:42 | url.par ... , true) | semmle.label | url.par ... , true) | | serverSide.js:74:29:74:35 | req.url | semmle.label | req.url | | serverSide.js:76:19:76:25 | tainted | semmle.label | tainted | @@ -235,27 +235,27 @@ nodes | serverSide.js:90:19:90:32 | ctx.params.foo | semmle.label | ctx.params.foo | | serverSide.js:92:19:92:28 | ctx.params | semmle.label | ctx.params | | serverSide.js:92:19:92:32 | ctx.params.foo | semmle.label | ctx.params.foo | -| serverSide.js:98:9:98:52 | tainted | semmle.label | tainted | +| serverSide.js:98:9:98:15 | tainted | semmle.label | tainted | | serverSide.js:98:19:98:42 | url.par ... , true) | semmle.label | url.par ... , true) | | serverSide.js:98:29:98:35 | req.url | semmle.label | req.url | | serverSide.js:100:19:100:25 | tainted | semmle.label | tainted | -| serverSide.js:108:11:108:27 | url | semmle.label | url | +| serverSide.js:108:11:108:13 | url | semmle.label | url | | serverSide.js:108:17:108:27 | request.url | semmle.label | request.url | | serverSide.js:109:27:109:29 | url | semmle.label | url | -| serverSide.js:115:11:115:42 | url | semmle.label | url | +| serverSide.js:115:11:115:13 | url | semmle.label | url | | serverSide.js:115:17:115:42 | new URL ... , base) | semmle.label | new URL ... , base) | | serverSide.js:115:25:115:35 | request.url | semmle.label | request.url | | serverSide.js:117:27:117:29 | url | semmle.label | url | -| serverSide.js:123:9:123:52 | tainted | semmle.label | tainted | +| serverSide.js:123:9:123:15 | tainted | semmle.label | tainted | | serverSide.js:123:19:123:42 | url.par ... , true) | semmle.label | url.par ... , true) | | serverSide.js:123:29:123:35 | req.url | semmle.label | req.url | | serverSide.js:127:14:127:20 | tainted | semmle.label | tainted | -| serverSide.js:130:9:130:45 | myUrl | semmle.label | myUrl | +| serverSide.js:130:9:130:13 | myUrl | semmle.label | myUrl | | serverSide.js:130:37:130:43 | tainted | semmle.label | tainted | | serverSide.js:131:15:131:19 | myUrl | semmle.label | myUrl | -| serverSide.js:139:9:139:29 | input | semmle.label | input | +| serverSide.js:139:9:139:13 | input | semmle.label | input | | serverSide.js:139:17:139:29 | req.query.url | semmle.label | req.query.url | -| serverSide.js:140:9:140:31 | target | semmle.label | target | +| serverSide.js:140:9:140:14 | target | semmle.label | target | | serverSide.js:140:18:140:31 | new URL(input) | semmle.label | new URL(input) | | serverSide.js:140:26:140:30 | input | semmle.label | input | | serverSide.js:141:13:141:18 | target | semmle.label | target | @@ -263,11 +263,11 @@ nodes | serverSide.js:142:13:142:18 | target | semmle.label | target | | serverSide.js:143:13:143:18 | target | semmle.label | target | | serverSide.js:143:13:143:23 | target.href | semmle.label | target.href | -| serverSide.js:144:9:144:37 | encodedUrl | semmle.label | encodedUrl | +| serverSide.js:144:9:144:18 | encodedUrl | semmle.label | encodedUrl | | serverSide.js:144:22:144:37 | encodeURI(input) | semmle.label | encodeURI(input) | | serverSide.js:144:32:144:36 | input | semmle.label | input | | serverSide.js:145:13:145:22 | encodedUrl | semmle.label | encodedUrl | -| serverSide.js:146:9:146:34 | escapedUrl | semmle.label | escapedUrl | +| serverSide.js:146:9:146:18 | escapedUrl | semmle.label | escapedUrl | | serverSide.js:146:22:146:34 | escape(input) | semmle.label | escape(input) | | serverSide.js:146:29:146:33 | input | semmle.label | input | | serverSide.js:147:13:147:22 | escapedUrl | semmle.label | escapedUrl | diff --git a/javascript/ql/test/tutorials/Analyzing data flow in JavaScript/Local data flow/query1.expected b/javascript/ql/test/tutorials/Analyzing data flow in JavaScript/Local data flow/query1.expected index 42bfa5e6430..fef71929fdf 100644 --- a/javascript/ql/test/tutorials/Analyzing data flow in JavaScript/Local data flow/query1.expected +++ b/javascript/ql/test/tutorials/Analyzing data flow in JavaScript/Local data flow/query1.expected @@ -1,3 +1,3 @@ -| test.js:4:5:4:22 | firstArg | +| test.js:4:5:4:12 | firstArg | | test.js:4:16:4:22 | args[2] | | test.js:5:13:5:20 | firstArg | diff --git a/javascript/resources/codeql-extractor.yml b/javascript/resources/codeql-extractor.yml index b82b2a96581..14ec56e2429 100644 --- a/javascript/resources/codeql-extractor.yml +++ b/javascript/resources/codeql-extractor.yml @@ -6,8 +6,11 @@ display_name: "JavaScript/TypeScript" version: 1.22.1 column_kind: "utf16" unicode_newlines: true +overlay_support_version: 20250626 build_modes: - none +default_queries: + - codeql/javascript-queries file_coverage_languages: - name: javascript display_name: JavaScript diff --git a/misc/scripts/shared-code-metrics.py b/misc/scripts/shared-code-metrics.py index 94679693186..62a14be6749 100755 --- a/misc/scripts/shared-code-metrics.py +++ b/misc/scripts/shared-code-metrics.py @@ -159,7 +159,7 @@ class Package(SharedAsset): def containsDirectory(self, dir): return self.path.parent.parts == dir.parts[:len(self.path.parent.parts)] - # dir.startsWith(self.path.parent) + # dir.startsWith(self.path.parent) # Constructs a list of transitive depedencies of this package. def calculateDependencies(self, packageNameMap): diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 541e9e2a945..4a5e75cac92 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.30 + +No user-facing changes. + ## 1.0.29 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.30.md b/misc/suite-helpers/change-notes/released/1.0.30.md new file mode 100644 index 00000000000..cb2cf6d0a27 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.30.md @@ -0,0 +1,3 @@ +## 1.0.30 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 8751a216238..f04640951de 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.29 +lastReleaseVersion: 1.0.30 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 05d8f61eb99..16add0c5464 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.30-dev +version: 1.0.31-dev groups: shared warnOnImplicitThis: true diff --git a/python/codeql-extractor.yml b/python/codeql-extractor.yml index 97a9e1f2cf2..c8b51db42e6 100644 --- a/python/codeql-extractor.yml +++ b/python/codeql-extractor.yml @@ -4,6 +4,8 @@ version: 1.22.1 column_kind: utf32 build_modes: - none +default_queries: + - codeql/python-queries github_api_languages: - Python scc_languages: diff --git a/python/extractor/tsg-python/python.tsg b/python/extractor/tsg-python/python.tsg index 7ad0f3f1424..00e231ee6d5 100644 --- a/python/extractor/tsg-python/python.tsg +++ b/python/extractor/tsg-python/python.tsg @@ -174,7 +174,7 @@ { let @unaryop.node = (ast-node @unaryop "UnaryOp") } (exec_statement) @exec -{ let @exec.node = (ast-node @exec "Exec") } +{ let @exec.node = (ast-node @exec "Exec") } (print_statement) @print { let @print.node = (ast-node @print "Print") } @@ -3040,7 +3040,7 @@ if some @is_kwarg { attr (@lambda.function -> @name.node) kwonlyargs = (named-child-index @param) } - else {  + else { attr (@lambda.function -> @name.node) args = (named-child-index @param) } @@ -3153,7 +3153,7 @@ if some @is_kwarg { attr (@funcdef.function -> @name.node) kwonlyargs = (named-child-index @param) } - else {  + else { attr (@funcdef.function -> @name.node) args = (named-child-index @param) } @@ -3284,7 +3284,7 @@ attr (@last.node) func = @exp.node edge @last.node -> @funcdef.funcexpr attr (@last.node -> @funcdef.funcexpr) positional_args = 0 - attr (@last.node) _location_end = (location-end @exp) + attr (@last.node) _location_end = (location-end @exp) } (decorated_definition @@ -3296,7 +3296,7 @@ attr (@last.node) func = @exp.node edge @last.node -> @class.class_expr attr (@last.node -> @class.class_expr) positional_args = 0 - attr (@last.node) _location_end = (location-end @exp) + attr (@last.node) _location_end = (location-end @exp) } ;;; Type parameters diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index b71f642da27..eddd592be74 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 4.0.14 + +### Minor Analysis Improvements + +- The modelling of Psycopg2 now supports the use of `psycopg2.pool` connection pools for handling database connections. +* Removed `lxml` as an XML bomb sink. The underlying libxml2 library now includes [entity reference loop detection](https://github.com/lxml/lxml/blob/f33ac2c2f5f9c4c4c1fc47f363be96db308f2fa6/doc/FAQ.txt#L1077) that prevents XML bomb attacks. + ## 4.0.13 No user-facing changes. diff --git a/python/ql/lib/analysis/DefinitionTracking.qll b/python/ql/lib/analysis/DefinitionTracking.qll index 5a9811f6248..e015d0f70a9 100644 --- a/python/ql/lib/analysis/DefinitionTracking.qll +++ b/python/ql/lib/analysis/DefinitionTracking.qll @@ -83,7 +83,7 @@ private predicate ssa_phi_defn(PhiFunction phi, Definition defn) { ssa_variable_defn(phi.getAnInput(), defn) } -/** Holds if the ESSA defn `def` refers to (`value`, `cls`, `origin`) given the context `context`. */ +/** Holds if the ESSA defn `def` refers to (`value`, `cls`, `origin`) given the context `context`. */ private predicate ssa_defn_defn(EssaDefinition def, Definition defn) { ssa_phi_defn(def, defn) or diff --git a/python/ql/lib/change-notes/2025-08-25-psycopg2-connection-pool-modelling.md b/python/ql/lib/change-notes/2025-08-25-psycopg2-connection-pool-modelling.md deleted file mode 100644 index 5a94d9829b4..00000000000 --- a/python/ql/lib/change-notes/2025-08-25-psycopg2-connection-pool-modelling.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- - -- The modelling of Psycopg2 now supports the use of `psycopg2.pool` connection pools for handling database connections. diff --git a/python/ql/lib/change-notes/2025-07-15-xml-bomb-sinks-python.md b/python/ql/lib/change-notes/released/4.0.14.md similarity index 59% rename from python/ql/lib/change-notes/2025-07-15-xml-bomb-sinks-python.md rename to python/ql/lib/change-notes/released/4.0.14.md index 11ff0181a01..41957d11048 100644 --- a/python/ql/lib/change-notes/2025-07-15-xml-bomb-sinks-python.md +++ b/python/ql/lib/change-notes/released/4.0.14.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 4.0.14 + +### Minor Analysis Improvements + +- The modelling of Psycopg2 now supports the use of `psycopg2.pool` connection pools for handling database connections. * Removed `lxml` as an XML bomb sink. The underlying libxml2 library now includes [entity reference loop detection](https://github.com/lxml/lxml/blob/f33ac2c2f5f9c4c4c1fc47f363be96db308f2fa6/doc/FAQ.txt#L1077) that prevents XML bomb attacks. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index a03f76ad596..5e4c777a339 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.0.13 +lastReleaseVersion: 4.0.14 diff --git a/python/ql/lib/experimental/cryptography/CryptoArtifact.qll b/python/ql/lib/experimental/cryptography/CryptoArtifact.qll index fc5c75a4e44..e8939c98111 100644 --- a/python/ql/lib/experimental/cryptography/CryptoArtifact.qll +++ b/python/ql/lib/experimental/cryptography/CryptoArtifact.qll @@ -95,7 +95,7 @@ abstract class CryptographicAlgorithm extends CryptographicArtifact { /** * Normalizes a raw name into a normalized name as found in `CryptoAlgorithmNames.qll`. * Subclassess should override for more api-specific normalization. - * By deafult, converts a raw name to upper-case with no hyphen, underscore, hash, or space. + * By default, converts a raw name to upper-case with no hyphen, underscore, hash, or space. */ bindingset[s] string normalizeName(string s) { diff --git a/python/ql/lib/experimental/cryptography/modules/CryptographyModule.qll b/python/ql/lib/experimental/cryptography/modules/CryptographyModule.qll index 405433b0735..0831d625d80 100644 --- a/python/ql/lib/experimental/cryptography/modules/CryptographyModule.qll +++ b/python/ql/lib/experimental/cryptography/modules/CryptographyModule.qll @@ -117,31 +117,25 @@ module KDF { override predicate requiresIteration() { this.getAlgorithm().getKDFName() in ["PBKDF2HMAC"] } override DataFlow::Node getIterationSizeSrc() { - if this.requiresIteration() - then - // ASSUMPTION: ONLY EVER in arg 3 in PBKDF2HMAC - result = Utils::getUltimateSrcFromApiNode(this.getParameter(3, "iterations")) - else none() + this.requiresIteration() and + // ASSUMPTION: ONLY EVER in arg 3 in PBKDF2HMAC + result = Utils::getUltimateSrcFromApiNode(this.getParameter(3, "iterations")) } override DataFlow::Node getSaltConfigSrc() { - if this.requiresSalt() - then - // SCRYPT has it in arg 1 - if this.getAlgorithm().getKDFName() = "SCRYPT" - then result = Utils::getUltimateSrcFromApiNode(this.getParameter(1, "salt")) - else - // EVERYTHING ELSE that uses salt is in arg 2 - result = Utils::getUltimateSrcFromApiNode(this.getParameter(2, "salt")) - else none() + this.requiresSalt() and + // SCRYPT has it in arg 1 + if this.getAlgorithm().getKDFName() = "SCRYPT" + then result = Utils::getUltimateSrcFromApiNode(this.getParameter(1, "salt")) + else + // EVERYTHING ELSE that uses salt is in arg 2 + result = Utils::getUltimateSrcFromApiNode(this.getParameter(2, "salt")) } override DataFlow::Node getHashConfigSrc() { - if this.requiresHash() - then - // ASSUMPTION: ONLY EVER in arg 0 - result = Utils::getUltimateSrcFromApiNode(this.getParameter(0, "algorithm")) - else none() + this.requiresHash() and + // ASSUMPTION: ONLY EVER in arg 0 + result = Utils::getUltimateSrcFromApiNode(this.getParameter(0, "algorithm")) } // TODO: get encryption algorithm for CBC-based KDF? @@ -152,11 +146,9 @@ module KDF { } override DataFlow::Node getModeSrc() { - if this.requiresMode() - then - // ASSUMPTION: ONLY EVER in arg 1 - result = Utils::getUltimateSrcFromApiNode(this.getParameter(1, "mode")) - else none() + this.requiresMode() and + // ASSUMPTION: ONLY EVER in arg 1 + result = Utils::getUltimateSrcFromApiNode(this.getParameter(1, "mode")) } } } diff --git a/python/ql/lib/experimental/cryptography/modules/stdlib/HashlibModule.qll b/python/ql/lib/experimental/cryptography/modules/stdlib/HashlibModule.qll index 5b2586dc54a..346512e9a2d 100644 --- a/python/ql/lib/experimental/cryptography/modules/stdlib/HashlibModule.qll +++ b/python/ql/lib/experimental/cryptography/modules/stdlib/HashlibModule.qll @@ -201,7 +201,7 @@ module KDF { // TODO: better modeling of scrypt /** - * Identifies key derivation fucntion hashlib.scrypt accesses. + * Identifies key derivation function hashlib.scrypt accesses. */ class HashlibScryptAlgorithm extends KeyDerivationAlgorithm, KeyDerivationOperation { HashlibScryptAlgorithm() { this = API::moduleImport("hashlib").getMember("scrypt").getACall() } diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index ad4bbced61a..71746d34c4e 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 4.0.14-dev +version: 4.0.15-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/lib/semmle/python/Flow.qll b/python/ql/lib/semmle/python/Flow.qll index 90633651f11..621013adcd5 100644 --- a/python/ql/lib/semmle/python/Flow.qll +++ b/python/ql/lib/semmle/python/Flow.qll @@ -1,6 +1,7 @@ import python private import semmle.python.pointsto.PointsTo private import semmle.python.internal.CachedStages +private import codeql.controlflow.BasicBlock as BB /* * Note about matching parent and child nodes and CFG splitting: @@ -1082,9 +1083,15 @@ class BasicBlock extends @py_flow_node { * Dominance frontier of a node x is the set of all nodes `other` such that `this` dominates a predecessor * of `other` but does not strictly dominate `other` */ - pragma[noinline] - predicate dominanceFrontier(BasicBlock other) { - this.dominates(other.getAPredecessor()) and not this.strictlyDominates(other) + predicate dominanceFrontier(BasicBlock other) { this.inDominanceFrontier(other) } + + predicate inDominanceFrontier(BasicBlock df) { + this = df.getAPredecessor() and not this = df.getImmediateDominator() + or + exists(BasicBlock prev | prev.inDominanceFrontier(df) | + this = prev.getImmediateDominator() and + not this = df.getImmediateDominator() + ) } private ControlFlowNode firstNode() { result = this } @@ -1246,3 +1253,73 @@ private predicate end_bb_likely_reachable(BasicBlock b) { not p = b.getLastNode() ) } + +private class ControlFlowNodeAlias = ControlFlowNode; + +final private class FinalBasicBlock = BasicBlock; + +module Cfg implements BB::CfgSig { + private import codeql.controlflow.SuccessorType + + class ControlFlowNode = ControlFlowNodeAlias; + + class BasicBlock extends FinalBasicBlock { + // Note `PY:BasicBlock` does not have a `getLocation`. + // (Instead it has a complicated location info logic.) + // Using the location of the first node is simple + // and we just need a way to identify the basic block + // during debugging, so this will be serviceable. + Location getLocation() { result = super.getNode(0).getLocation() } + + int length() { result = count(int i | exists(this.getNode(i))) } + + BasicBlock getASuccessor() { result = super.getASuccessor() } + + private BasicBlock getANonDirectSuccessor(SuccessorType t) { + result = this.getATrueSuccessor() and + t.(BooleanSuccessor).getValue() = true + or + result = this.getAFalseSuccessor() and + t.(BooleanSuccessor).getValue() = false + or + result = this.getAnExceptionalSuccessor() and + t instanceof ExceptionSuccessor + } + + BasicBlock getASuccessor(SuccessorType t) { + result = this.getANonDirectSuccessor(t) + or + result = super.getASuccessor() and + t instanceof DirectSuccessor and + not result = this.getANonDirectSuccessor(_) + } + + predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } + + predicate dominates(BasicBlock bb) { super.dominates(bb) } + + predicate inDominanceFrontier(BasicBlock df) { super.inDominanceFrontier(df) } + + BasicBlock getImmediateDominator() { result = super.getImmediateDominator() } + + /** Unsupported. Do not use. */ + predicate strictlyPostDominates(BasicBlock bb) { none() } + + /** Unsupported. Do not use. */ + predicate postDominates(BasicBlock bb) { + this.strictlyPostDominates(bb) or + this = bb + } + } + + class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { this.getNode(0).isEntryNode() } + } + + pragma[nomagic] + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + bb1.getASuccessor() = bb2 and + bb1 = bb2.getImmediateDominator() and + forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred)) + } +} diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index b29be706c4f..724ae82aa0d 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -613,7 +613,7 @@ DataFlowType getNodeType(Node node) { // Extra flow //-------- /** - * Holds if `pred` can flow to `succ`, by jumping from one callable to + * Holds if `nodeFrom` can flow to `nodeTo`, by jumping from one callable to * another. Additional steps specified by the configuration are *not* * taken into account. */ @@ -634,7 +634,7 @@ predicate jumpStep(Node nodeFrom, Node nodeTo) { * the type-trackers as well, as that would make evaluation of type-tracking recursive * with the new jumpsteps. * - * Holds if `pred` can flow to `succ`, by jumping from one callable to + * Holds if `nodeFrom` can flow to `nodeTo`, by jumping from one callable to * another. Additional steps specified by the configuration are *not* * taken into account. */ @@ -657,7 +657,7 @@ predicate jumpStepSharedWithTypeTracker(Node nodeFrom, Node nodeTo) { * the type-trackers as well, as that would make evaluation of type-tracking recursive * with the new jumpsteps. * - * Holds if `pred` can flow to `succ`, by jumping from one callable to + * Holds if `nodeFrom` can flow to `nodeTo`, by jumping from one callable to * another. Additional steps specified by the configuration are *not* * taken into account. */ @@ -766,7 +766,7 @@ module Orm { abstract predicate storeStep(Node nodeFrom, Content c, Node nodeTo); /** - * Holds if `pred` can flow to `succ`, by jumping from one callable to + * Holds if `nodeFrom` can flow to `nodeTo`, by jumping from one callable to * another. Additional steps specified by the configuration are *not* * taken into account. */ diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll index 6cb80881e2a..a7b3b9ceaeb 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -12,7 +12,7 @@ private import codeql.dataflow.VariableCapture as Shared // The first is the main implementation, the second is a performance motivated restriction. // The restriction is to clear any `CapturedVariableContent` before writing a new one // to avoid long access paths (see the link for a nice explanation). -private module CaptureInput implements Shared::InputSig { +private module CaptureInput implements Shared::InputSig { private import python as PY additional class ExprCfgNode extends ControlFlowNode { @@ -23,24 +23,7 @@ private module CaptureInput implements Shared::InputSig { predicate isConstructor() { none() } } - class BasicBlock extends PY::BasicBlock { - int length() { result = count(int i | exists(this.getNode(i))) } - - Callable getEnclosingCallable() { result = this.getScope() } - - // Note `PY:BasicBlock` does not have a `getLocation`. - // (Instead it has a complicated location info logic.) - // Using the location of the first node is simple - // and we just need a way to identify the basic block - // during debugging, so this will be serviceable. - Location getLocation() { result = super.getNode(0).getLocation() } - } - - class ControlFlowNode = PY::ControlFlowNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result = bb.getImmediateDominator() } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } + Callable basicBlockGetEnclosingCallable(Cfg::BasicBlock bb) { result = bb.getScope() } class CapturedVariable extends LocalVariable { Function f; @@ -70,7 +53,7 @@ private module CaptureInput implements Shared::InputSig { } class Expr extends ExprCfgNode { - predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } + predicate hasCfgNode(Cfg::BasicBlock bb, int i) { this = bb.getNode(i) } } class VariableWrite extends ControlFlowNode { @@ -80,7 +63,7 @@ private module CaptureInput implements Shared::InputSig { CapturedVariable getVariable() { result = v } - predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } + predicate hasCfgNode(Cfg::BasicBlock bb, int i) { this = bb.getNode(i) } } class VariableRead extends Expr { @@ -122,7 +105,7 @@ class CapturedVariable = CaptureInput::CapturedVariable; class ClosureExpr = CaptureInput::ClosureExpr; -module Flow = Shared::Flow; +module Flow = Shared::Flow; private Flow::ClosureNode asClosureNode(Node n) { result = n.(SynthCaptureNode).getSynthesizedCaptureNode() diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index ceb2f1952a0..c6b671e8b78 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3702,11 +3702,8 @@ module StdlibPrivate { * A call to a find method on a tree or an element will execute an XPath expression. */ private class ElementTreeFindCall extends XML::XPathExecution::Range, DataFlow::CallCfgNode { - string methodName; - ElementTreeFindCall() { - methodName in ["find", "findall", "findtext"] and - ( + exists(string methodName | methodName in ["find", "findall", "findtext"] | this = elementTreeInstance().getMember(methodName).getACall() or this = elementInstance().getMember(methodName).getACall() diff --git a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsExtensions.qll b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsExtensions.qll index b86d7de457e..4969da43be3 100644 --- a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsExtensions.qll +++ b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsExtensions.qll @@ -4,7 +4,7 @@ /** * Holds if the value at `(type, path)` should be seen as a flow - * source of the given `kind`. + * source of the given `kind` and `madId` is the data extension row number. * * The kind `remote` represents a general remote flow source. */ @@ -14,13 +14,14 @@ extensible predicate sourceModel( /** * Holds if the value at `(type, path)` should be seen as a sink - * of the given `kind`. + * of the given `kind` and `madId` is the data extension row number. */ extensible predicate sinkModel(string type, string path, string kind, QlBuiltins::ExtensionId madId); /** * Holds if in calls to `(type, path)`, the value referred to by `input` - * can flow to the value referred to by `output`. + * can flow to the value referred to by `output` and `madId` is the data + * extension row number. * * `kind` should be either `value` or `taint`, for value-preserving or taint-preserving steps, * respectively. diff --git a/python/ql/lib/semmle/python/objects/ObjectInternal.qll b/python/ql/lib/semmle/python/objects/ObjectInternal.qll index a58b8b5f0a9..aa78caa2c9d 100644 --- a/python/ql/lib/semmle/python/objects/ObjectInternal.qll +++ b/python/ql/lib/semmle/python/objects/ObjectInternal.qll @@ -174,9 +174,9 @@ class ObjectInternal extends TObject { abstract int length(); /** - * Holds if the object `function` is called when this object is called and `paramOffset` + * Holds if the object `function` is called when this object is called and `offset` * is the difference from the parameter position and the argument position. - * For a normal function `paramOffset` is 0. For classes and bound-methods it is 1. + * For a normal function `offset` is 0. For classes and bound-methods it is 1. * This is used to implement the `CallableValue` public API. */ predicate functionAndOffset(CallableObjectInternal function, int offset) { none() } diff --git a/python/ql/lib/semmle/python/types/FunctionObject.qll b/python/ql/lib/semmle/python/types/FunctionObject.qll index d52a885a832..f64c02b9c6b 100644 --- a/python/ql/lib/semmle/python/types/FunctionObject.qll +++ b/python/ql/lib/semmle/python/types/FunctionObject.qll @@ -46,9 +46,7 @@ abstract class FunctionObject extends Object { ControlFlowNode getACall() { result = this.theCallable().getACall() } /** Gets a call-site from where this function is called, given the `context` */ - ControlFlowNode getACall(Context caller_context) { - result = this.theCallable().getACall(caller_context) - } + ControlFlowNode getACall(Context context) { result = this.theCallable().getACall(context) } /** * Gets the `ControlFlowNode` that will be passed as the nth argument to `this` when called at `call`. diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 42d3b42a5e8..0c22d526f39 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.6.4 + +### Minor Analysis Improvements + +* The `py/unexpected-raise-in-special-method` query has been modernized. It produces additional results in cases where the exception is +only raised conditionally. Its precision has been changed from `very-high` to `high`. +* The queries `py/incomplete-ordering`, `py/inconsistent-equality`, and `py/equals-hash-mismatch` have been modernized; no longer relying on outdated libraries, improved documentation, and no longer producing alerts for problems specific to Python 2. + ## 1.6.3 No user-facing changes. diff --git a/python/ql/src/Security/CWE-327/FluentApiModel.qll b/python/ql/src/Security/CWE-327/FluentApiModel.qll index 8dd90a58821..0f8dae7b316 100644 --- a/python/ql/src/Security/CWE-327/FluentApiModel.qll +++ b/python/ql/src/Security/CWE-327/FluentApiModel.qll @@ -15,7 +15,7 @@ import TlsLibraryModel * The state is represented as a bit vector, where each bit corresponds to a * protocol version. The bit is set if the protocol is allowed. */ -module InsecureContextConfiguration implements DataFlow::StateConfigSig { +module InsecureContextConfig implements DataFlow::StateConfigSig { private newtype TFlowState = TMkFlowState(TlsLibrary library, int bits) { bits in [0 .. max(any(ProtocolVersion v).getBit()) * 2 - 1] @@ -116,7 +116,12 @@ module InsecureContextConfiguration implements DataFlow::StateConfigSig { } } -private module InsecureContextFlow = DataFlow::GlobalWithState; +/** + * DEPRECATED: Renamed to `InsecureContextConfig`. + */ +deprecated module InsecureContextConfiguration = InsecureContextConfig; + +private module InsecureContextFlow = DataFlow::GlobalWithState; /** * Holds if `conectionCreation` marks the creation of a connection based on the contex diff --git a/python/ql/src/change-notes/2025-07-14-comparisons.md b/python/ql/src/change-notes/2025-07-14-comparisons.md deleted file mode 100644 index a8a2bdacf31..00000000000 --- a/python/ql/src/change-notes/2025-07-14-comparisons.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The queries `py/incomplete-ordering`, `py/inconsistent-equality`, and `py/equals-hash-mismatch` have been modernized; no longer relying on outdated libraries, improved documentation, and no longer producing alerts for problems specific to Python 2. \ No newline at end of file diff --git a/python/ql/src/change-notes/2025-07-25-unexpected-raise-special-method.md b/python/ql/src/change-notes/2025-07-25-unexpected-raise-special-method.md deleted file mode 100644 index 4b79dbc3b81..00000000000 --- a/python/ql/src/change-notes/2025-07-25-unexpected-raise-special-method.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The `py/unexpected-raise-in-special-method` query has been modernized. It produces additional results in cases where the exception is -only raised conditionally. Its precision has been changed from `very-high` to `high`. \ No newline at end of file diff --git a/python/ql/src/change-notes/released/1.6.4.md b/python/ql/src/change-notes/released/1.6.4.md new file mode 100644 index 00000000000..e2f0bb39930 --- /dev/null +++ b/python/ql/src/change-notes/released/1.6.4.md @@ -0,0 +1,7 @@ +## 1.6.4 + +### Minor Analysis Improvements + +* The `py/unexpected-raise-in-special-method` query has been modernized. It produces additional results in cases where the exception is +only raised conditionally. Its precision has been changed from `very-high` to `high`. +* The queries `py/incomplete-ordering`, `py/inconsistent-equality`, and `py/equals-hash-mismatch` have been modernized; no longer relying on outdated libraries, improved documentation, and no longer producing alerts for problems specific to Python 2. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 00b51441d88..1910e09d6a6 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.6.3 +lastReleaseVersion: 1.6.4 diff --git a/python/ql/src/experimental/Security/CWE-022bis/TarSlipImprov.ql b/python/ql/src/experimental/Security/CWE-022bis/TarSlipImprov.ql index 1727da1bcf5..42c0bc170fd 100755 --- a/python/ql/src/experimental/Security/CWE-022bis/TarSlipImprov.ql +++ b/python/ql/src/experimental/Security/CWE-022bis/TarSlipImprov.ql @@ -63,7 +63,7 @@ private module TarSlipImprovConfig implements DataFlow::ConfigSig { // For a call to `file.extractall` without `members` argument, `file` is considered a sink. exists(MethodCallNode call, AllTarfileOpens atfo | call = atfo.getReturn().getMember("extractall").getACall() and - not exists(Node arg | arg = call.getArgByName("members")) and + not exists(call.getArgByName("members")) and sink = call.getObject() ) or diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 0f047b047b9..3cc58c14faf 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.6.4-dev +version: 1.6.5-dev groups: - python - queries diff --git a/python/ql/test/library-tests/dataflow/global-flow/known.py b/python/ql/test/library-tests/dataflow/global-flow/known.py index ab60b991452..f9bdbd7af54 100644 --- a/python/ql/test/library-tests/dataflow/global-flow/known.py +++ b/python/ql/test/library-tests/dataflow/global-flow/known.py @@ -1 +1 @@ -known_attr = [1000] #$ writes=known_attr +known_attr = [1000] #$ writes=known_attr diff --git a/python/ql/test/library-tests/dataflow/typetracking/attribute_tests.py b/python/ql/test/library-tests/dataflow/typetracking/attribute_tests.py index 2cc6346527f..8df3ef51f88 100644 --- a/python/ql/test/library-tests/dataflow/typetracking/attribute_tests.py +++ b/python/ql/test/library-tests/dataflow/typetracking/attribute_tests.py @@ -35,7 +35,7 @@ def set_foo(some_class_instance): # $ tracked=foo some_class_instance.foo = tracked # $ tracked=foo tracked def test_set_x(): - x = SomeClass() # $ MISSING: tracked=foo + x = SomeClass() # $ MISSING: tracked=foo set_foo(x) # $ MISSING: tracked=foo print(x.foo) # $ MISSING: tracked=foo tracked @@ -51,7 +51,7 @@ def test_create_with_foo(): def test_global_attribute_assignment(): global global_var - global_var.foo = tracked # $ tracked tracked=foo + global_var.foo = tracked # $ tracked tracked=foo def test_global_attribute_read(): x = global_var.foo # $ tracked tracked=foo @@ -61,7 +61,7 @@ def test_local_attribute_assignment(): # In this case, we don't want flow going to the `ModuleVariableNode` for `local_var` # (which is referenced in `test_local_attribute_read`). local_var = object() # $ tracked=foo - local_var.foo = tracked # $ tracked tracked=foo + local_var.foo = tracked # $ tracked tracked=foo def test_local_attribute_read(): x = local_var.foo @@ -129,7 +129,7 @@ def dunder_dict_indirect_write(): x = SomeClass() # $ MISSING: tracked=foo x.__dict__[attr] = tracked # $tracked MISSING: tracked=foo y = x.foo # $ MISSING: tracked tracked=foo - do_stuff(y) # $ MISSING: tracked + do_stuff(y) # $ MISSING: tracked def dunder_dict_indirect_read(): attr = "foo" @@ -153,7 +153,7 @@ class MyClass2(object): def print_foo(self): # $ MISSING: tracked=foo print(self.foo) # $ MISSING: tracked=foo tracked - def possibly_uncalled_method(self): # $ MISSING: tracked=foo + def possibly_uncalled_method(self): # $ MISSING: tracked=foo print(self.foo) # $ MISSING: tracked=foo tracked instance = MyClass2() @@ -170,7 +170,7 @@ class MyClass3(object): def print_foo(self): # $ tracked=foo print(self.foo) # $ tracked=foo tracked - def possibly_uncalled_method(self): # $ MISSING: tracked=foo + def possibly_uncalled_method(self): # $ MISSING: tracked=foo print(self.foo) # $ MISSING: tracked=foo tracked instance = MyClass3() # $ tracked=foo diff --git a/ql/ql/src/codeql_ql/style/RedundantCastQuery.qll b/ql/ql/src/codeql_ql/style/RedundantCastQuery.qll index 9549bb85844..4805cf5d69f 100644 --- a/ql/ql/src/codeql_ql/style/RedundantCastQuery.qll +++ b/ql/ql/src/codeql_ql/style/RedundantCastQuery.qll @@ -1,11 +1,12 @@ import ql class RedundantInlineCast extends AstNode instanceof InlineCast { - Type t; - RedundantInlineCast() { - t = unique( | | super.getType()) and - ( + exists(Type t | + t = unique( | | super.getType()) and + // noopt can require explicit casts + not this.getEnclosingPredicate().getAnAnnotation() instanceof NoOpt + | // The cast is to the type the base expression already has t = unique( | | super.getBase().getType()) or @@ -23,9 +24,7 @@ class RedundantInlineCast extends AstNode instanceof InlineCast { target = unique( | | call.getTarget()) and t = unique( | | target.getParameterType(i)) ) - ) and - // noopt can require explicit casts - not this.getEnclosingPredicate().getAnAnnotation() instanceof NoOpt + ) } TypeExpr getTypeExpr() { result = super.getTypeExpr() } @@ -49,15 +48,16 @@ private class AnyCast extends AstNode instanceof FullAggregate { // `foo = any(Bar b)` is effectively a cast to `Bar`. class RedundantAnyCast extends AstNode instanceof ComparisonFormula { AnyCast cast; - Expr operand; RedundantAnyCast() { super.getOperator() = "=" and super.getAnOperand() = cast and - super.getAnOperand() = operand and - cast != operand and - unique( | | operand.getType()).getASuperType*() = - unique( | | cast.getTypeExpr().getResolvedType()) and + exists(Expr operand | + super.getAnOperand() = operand and + cast != operand and + unique( | | operand.getType()).getASuperType*() = + unique( | | cast.getTypeExpr().getResolvedType()) + ) and not this.getEnclosingPredicate().getAnAnnotation() instanceof NoOpt } diff --git a/ql/ql/test/queries/performance/VarUnusedInDisjunct/Test.qll b/ql/ql/test/queries/performance/VarUnusedInDisjunct/Test.qll index 520acbaa1b3..10e97e58209 100644 --- a/ql/ql/test/queries/performance/VarUnusedInDisjunct/Test.qll +++ b/ql/ql/test/queries/performance/VarUnusedInDisjunct/Test.qll @@ -165,4 +165,6 @@ class HasField extends Big { or this.toString().matches("%foo") // <- field only defined here. } + + Big getField() { result = field } } diff --git a/ql/ql/test/queries/style/Misspelling/Misspelling.expected b/ql/ql/test/queries/style/Misspelling/Misspelling.expected index 8116e2b5afa..1c02ca81d62 100644 --- a/ql/ql/test/queries/style/Misspelling/Misspelling.expected +++ b/ql/ql/test/queries/style/Misspelling/Misspelling.expected @@ -2,5 +2,5 @@ | Test.qll:4:7:4:26 | Class PublicallyAccessible | This class name contains the common misspelling 'publically', which should instead be 'publicly'. | | Test.qll:5:3:5:20 | FieldDecl | This field name contains the common misspelling 'occurences', which should instead be 'occurrences'. | | Test.qll:10:13:10:23 | ClassPredicate hasAgrument | This predicate name contains the common misspelling 'agrument', which should instead be 'argument'. | -| Test.qll:13:1:16:3 | QLDoc | This comment contains the non-US spelling 'colour', which should instead be 'color'. | -| Test.qll:17:7:17:17 | Class AnalysedInt | This class name contains the non-US spelling 'analysed', which should instead be 'analyzed'. | +| Test.qll:15:1:18:3 | QLDoc | This comment contains the non-US spelling 'colour', which should instead be 'color'. | +| Test.qll:19:7:19:17 | Class AnalysedInt | This class name contains the non-US spelling 'analysed', which should instead be 'analyzed'. | diff --git a/ql/ql/test/queries/style/Misspelling/Test.qll b/ql/ql/test/queries/style/Misspelling/Test.qll index f49f4633c6b..b6619145f8d 100644 --- a/ql/ql/test/queries/style/Misspelling/Test.qll +++ b/ql/ql/test/queries/style/Misspelling/Test.qll @@ -8,6 +8,8 @@ class PublicallyAccessible extends string { // should be argument predicate hasAgrument() { none() } + + int getNum() { result = numOccurences } } /** diff --git a/ql/ql/test/queries/style/UseInstanceofExtension/Foo.qll b/ql/ql/test/queries/style/UseInstanceofExtension/Foo.qll index 3429ce5b599..b58cb3f93e3 100644 --- a/ql/ql/test/queries/style/UseInstanceofExtension/Foo.qll +++ b/ql/ql/test/queries/style/UseInstanceofExtension/Foo.qll @@ -22,6 +22,8 @@ class Inst3 extends string { Range range; Inst3() { this = range } + + Range getRange() { result = range } } class Inst4 extends string { diff --git a/ql/ql/test/queries/style/UseInstanceofExtension/UseInstanceofExtension.expected b/ql/ql/test/queries/style/UseInstanceofExtension/UseInstanceofExtension.expected index 72f110c632f..804927fa032 100644 --- a/ql/ql/test/queries/style/UseInstanceofExtension/UseInstanceofExtension.expected +++ b/ql/ql/test/queries/style/UseInstanceofExtension/UseInstanceofExtension.expected @@ -1,4 +1,4 @@ | Foo.qll:7:7:7:10 | Class Inst | Consider defining this class as non-extending subtype of $@. | Foo.qll:1:7:1:11 | Class Range | Range | | Foo.qll:15:7:15:11 | Class Inst2 | Consider defining this class as non-extending subtype of $@. | Foo.qll:1:7:1:11 | Class Range | Range | | Foo.qll:21:7:21:11 | Class Inst3 | Consider defining this class as non-extending subtype of $@. | Foo.qll:1:7:1:11 | Class Range | Range | -| Foo.qll:27:7:27:11 | Class Inst4 | Consider defining this class as non-extending subtype of $@. | Foo.qll:1:7:1:11 | Class Range | Range | +| Foo.qll:29:7:29:11 | Class Inst4 | Consider defining this class as non-extending subtype of $@. | Foo.qll:1:7:1:11 | Class Range | Range | diff --git a/ql/ql/test/queries/style/UseSetLiteral/UseSetLiteral.expected b/ql/ql/test/queries/style/UseSetLiteral/UseSetLiteral.expected index fac79ff078e..ed17f5e1f1a 100644 --- a/ql/ql/test/queries/style/UseSetLiteral/UseSetLiteral.expected +++ b/ql/ql/test/queries/style/UseSetLiteral/UseSetLiteral.expected @@ -4,5 +4,5 @@ | test.qll:62:7:65:14 | Disjunction | This formula of 4 comparisons can be replaced with a single equality on a set literal, improving readability. | | test.qll:68:7:71:13 | Disjunction | This formula of 4 comparisons can be replaced with a single equality on a set literal, improving readability. | | test.qll:74:7:77:13 | Disjunction | This formula of 4 comparisons can be replaced with a single equality on a set literal, improving readability. | -| test.qll:87:3:90:9 | Disjunction | This formula of 4 predicate calls can be replaced with a single call on a set literal, improving readability. | -| test.qll:128:3:134:3 | Disjunction | This formula of 4 comparisons can be replaced with a single equality on a set literal, improving readability. | +| test.qll:89:3:92:9 | Disjunction | This formula of 4 predicate calls can be replaced with a single call on a set literal, improving readability. | +| test.qll:130:3:136:3 | Disjunction | This formula of 4 comparisons can be replaced with a single equality on a set literal, improving readability. | diff --git a/ql/ql/test/queries/style/UseSetLiteral/test.qll b/ql/ql/test/queries/style/UseSetLiteral/test.qll index 36a5f938f89..fcc581c3e8c 100644 --- a/ql/ql/test/queries/style/UseSetLiteral/test.qll +++ b/ql/ql/test/queries/style/UseSetLiteral/test.qll @@ -81,6 +81,8 @@ class MyTest8Class extends int { predicate is(int x) { x = this } int get() { result = this } + + string getS() { result = s } } predicate test9(MyTest8Class c) { diff --git a/ruby/codeql-extractor.yml b/ruby/codeql-extractor.yml index b1eee384133..dc885ecc37b 100644 --- a/ruby/codeql-extractor.yml +++ b/ruby/codeql-extractor.yml @@ -6,6 +6,8 @@ legacy_qltest_extraction: true overlay_support_version: 20250626 build_modes: - none +default_queries: + - codeql/ruby-queries github_api_languages: - Ruby scc_languages: diff --git a/ruby/ql/consistency-queries/DataFlowConsistency.ql b/ruby/ql/consistency-queries/DataFlowConsistency.ql index 24766016cbb..4e0588d5d4a 100644 --- a/ruby/ql/consistency-queries/DataFlowConsistency.ql +++ b/ruby/ql/consistency-queries/DataFlowConsistency.ql @@ -28,7 +28,7 @@ private module Input implements InputSig { exists(CfgNodes::ExprCfgNode n | arg.argumentOf(call, _) and n = call.asCall() and - arg.asExpr().getASuccessor(any(SuccessorTypes::ConditionalSuccessor c)).getASuccessor*() = n and + arg.asExpr().getASuccessor(any(ConditionalSuccessor c)).getASuccessor*() = n and n.getASplit() instanceof Split::ConditionalCompletionSplit ) } diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 24c2c0b6a4a..560bf17bc51 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.0.3 + +No user-facing changes. + ## 5.0.2 ### Bug Fixes diff --git a/ruby/ql/lib/change-notes/released/5.0.3.md b/ruby/ql/lib/change-notes/released/5.0.3.md new file mode 100644 index 00000000000..57074925279 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/5.0.3.md @@ -0,0 +1,3 @@ +## 5.0.3 + +No user-facing changes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 3940dee0f32..6997554f6dd 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.0.2 +lastReleaseVersion: 5.0.3 diff --git a/ruby/ql/lib/codeql/ruby/ApiGraphs.qll b/ruby/ql/lib/codeql/ruby/ApiGraphs.qll index 00537e375b1..a74b0e08199 100644 --- a/ruby/ql/lib/codeql/ruby/ApiGraphs.qll +++ b/ruby/ql/lib/codeql/ruby/ApiGraphs.qll @@ -1,5 +1,5 @@ /** - * Provides an implementation of _API graphs_, which allow efficient modelling of how a given + * Provides an implementation of _API graphs_, which allow efficient modeling of how a given * value is used by the code base or how values produced by the code base are consumed by a library. * * See `API::Node` for more details. diff --git a/ruby/ql/lib/codeql/ruby/controlflow/BasicBlocks.qll b/ruby/ql/lib/codeql/ruby/controlflow/BasicBlocks.qll index 93253371198..e085dbd90a3 100644 --- a/ruby/ql/lib/codeql/ruby/controlflow/BasicBlocks.qll +++ b/ruby/ql/lib/codeql/ruby/controlflow/BasicBlocks.qll @@ -8,8 +8,8 @@ private import codeql.ruby.ast.internal.TreeSitter private import codeql.ruby.controlflow.ControlFlowGraph private import internal.ControlFlowGraphImpl as CfgImpl private import CfgNodes -private import SuccessorTypes private import CfgImpl::BasicBlocks as BasicBlocksImpl +private import codeql.controlflow.BasicBlock as BB /** * A basic block, that is, a maximal straight-line sequence of control flow nodes @@ -296,3 +296,19 @@ final class ConditionBlock extends BasicBlock, BasicBlocksImpl::ConditionBasicBl super.edgeDominates(controlled, s) } } + +private class BasicBlockAlias = BasicBlock; + +private class EntryBasicBlockAlias = EntryBasicBlock; + +module Cfg implements BB::CfgSig { + class ControlFlowNode = CfgNode; + + class BasicBlock = BasicBlockAlias; + + class EntryBasicBlock = EntryBasicBlockAlias; + + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + BasicBlocksImpl::dominatingEdge(bb1, bb2) + } +} diff --git a/ruby/ql/lib/codeql/ruby/controlflow/ControlFlowGraph.qll b/ruby/ql/lib/codeql/ruby/controlflow/ControlFlowGraph.qll index 1d3632ba1c0..8a7abea3090 100644 --- a/ruby/ql/lib/codeql/ruby/controlflow/ControlFlowGraph.qll +++ b/ruby/ql/lib/codeql/ruby/controlflow/ControlFlowGraph.qll @@ -2,9 +2,9 @@ overlay[local] module; +import codeql.controlflow.SuccessorType private import codeql.ruby.AST private import codeql.ruby.controlflow.BasicBlocks -private import SuccessorTypes private import internal.ControlFlowGraphImpl as CfgImpl private import internal.Splitting as Splitting private import internal.Completion @@ -59,241 +59,6 @@ class CfgNode extends CfgImpl::Node { BasicBlock getBasicBlock() { result.getANode() = this } } -/** The type of a control flow successor. */ -class SuccessorType extends CfgImpl::TSuccessorType { - /** Gets a textual representation of successor type. */ - string toString() { none() } -} - -/** Provides different types of control flow successor types. */ -module SuccessorTypes { - /** A normal control flow successor. */ - class NormalSuccessor extends SuccessorType, CfgImpl::TSuccessorSuccessor { - final override string toString() { result = "successor" } - } - - /** - * A conditional control flow successor. Either a Boolean successor (`BooleanSuccessor`) - * or a matching successor (`MatchingSuccessor`) - */ - class ConditionalSuccessor extends SuccessorType { - boolean value; - - ConditionalSuccessor() { - this = CfgImpl::TBooleanSuccessor(value) or - this = CfgImpl::TMatchingSuccessor(value) - } - - /** Gets the Boolean value of this successor. */ - final boolean getValue() { result = value } - - override string toString() { result = this.getValue().toString() } - } - - /** - * A Boolean control flow successor. - * - * For example, in - * - * ```rb - * if x >= 0 - * puts "positive" - * else - * puts "negative" - * end - * ``` - * - * `x >= 0` has both a `true` successor and a `false` successor. - */ - class BooleanSuccessor extends ConditionalSuccessor, CfgImpl::TBooleanSuccessor { } - - /** - * A matching control flow successor. - * - * For example, this program fragment: - * - * ```rb - * case x - * when 1 then puts "one" - * else puts "not one" - * end - * ``` - * - * has a control flow graph containing matching successors: - * - * ``` - * x - * | - * 1 - * / \ - * / \ - * / \ - * / \ - * match non-match - * | | - * puts "one" puts "not one" - * ``` - */ - class MatchingSuccessor extends ConditionalSuccessor, CfgImpl::TMatchingSuccessor { - override string toString() { if value = true then result = "match" else result = "no-match" } - } - - /** - * A `return` control flow successor. - * - * Example: - * - * ```rb - * def sum(x,y) - * return x + y - * end - * ``` - * - * The exit node of `sum` is a `return` successor of the `return x + y` - * statement. - */ - class ReturnSuccessor extends SuccessorType, CfgImpl::TReturnSuccessor { - final override string toString() { result = "return" } - } - - /** - * A `break` control flow successor. - * - * Example: - * - * ```rb - * def m - * while x >= 0 - * x -= 1 - * if num > 100 - * break - * end - * end - * puts "done" - * end - * ``` - * - * The node `puts "done"` is `break` successor of the node `break`. - */ - class BreakSuccessor extends SuccessorType, CfgImpl::TBreakSuccessor { - final override string toString() { result = "break" } - } - - /** - * A `next` control flow successor. - * - * Example: - * - * ```rb - * def m - * while x >= 0 - * x -= 1 - * if num > 100 - * next - * end - * end - * puts "done" - * end - * ``` - * - * The node `x >= 0` is `next` successor of the node `next`. - */ - class NextSuccessor extends SuccessorType, CfgImpl::TNextSuccessor { - final override string toString() { result = "next" } - } - - /** - * A `redo` control flow successor. - * - * Example: - * - * Example: - * - * ```rb - * def m - * while x >= 0 - * x -= 1 - * if num > 100 - * redo - * end - * end - * puts "done" - * end - * ``` - * - * The node `x -= 1` is `redo` successor of the node `redo`. - */ - class RedoSuccessor extends SuccessorType, CfgImpl::TRedoSuccessor { - final override string toString() { result = "redo" } - } - - /** - * A `retry` control flow successor. - * - * Example: - * - * Example: - * - * ```rb - * def m - * begin - * puts "Retry" - * raise - * rescue - * retry - * end - * end - * ``` - * - * The node `puts "Retry"` is `retry` successor of the node `retry`. - */ - class RetrySuccessor extends SuccessorType, CfgImpl::TRetrySuccessor { - final override string toString() { result = "retry" } - } - - /** - * An exceptional control flow successor. - * - * Example: - * - * ```rb - * def m x - * if x > 2 - * raise "x > 2" - * end - * puts "x <= 2" - * end - * ``` - * - * The exit node of `m` is an exceptional successor of the node - * `raise "x > 2"`. - */ - class RaiseSuccessor extends SuccessorType, CfgImpl::TRaiseSuccessor { - final override string toString() { result = "raise" } - } - - /** - * An exit control flow successor. - * - * Example: - * - * ```rb - * def m x - * if x > 2 - * exit 1 - * end - * puts "x <= 2" - * end - * ``` - * - * The exit node of `m` is an exit successor of the node - * `exit 1`. - */ - class ExitSuccessor extends SuccessorType, CfgImpl::TExitSuccessor { - final override string toString() { result = "exit" } - } -} - class Split = Splitting::Split; /** Provides different kinds of control flow graph splittings. */ diff --git a/ruby/ql/lib/codeql/ruby/controlflow/internal/Completion.qll b/ruby/ql/lib/codeql/ruby/controlflow/internal/Completion.qll index b8edf83c20d..bcfe8f98d43 100644 --- a/ruby/ql/lib/codeql/ruby/controlflow/internal/Completion.qll +++ b/ruby/ql/lib/codeql/ruby/controlflow/internal/Completion.qll @@ -12,7 +12,6 @@ private import codeql.ruby.ast.internal.Control private import codeql.ruby.controlflow.ControlFlowGraph private import ControlFlowGraphImpl as CfgImpl private import NonReturning -private import SuccessorTypes private newtype TCompletion = TSimpleCompletion() or @@ -267,7 +266,7 @@ abstract private class NonNestedNormalCompletion extends NormalCompletion { } /** A simple (normal) completion. */ class SimpleCompletion extends NonNestedNormalCompletion, TSimpleCompletion { - override NormalSuccessor getAMatchingSuccessorType() { any() } + override DirectSuccessor getAMatchingSuccessorType() { any() } override string toString() { result = "simple" } } @@ -377,7 +376,7 @@ class NextCompletion extends Completion { this = TNestedCompletion(_, TNextCompletion(), _) } - override NextSuccessor getAMatchingSuccessorType() { any() } + override ContinueSuccessor getAMatchingSuccessorType() { any() } override string toString() { // `NestedCompletion` defines `toString()` for the other case @@ -431,7 +430,7 @@ class RaiseCompletion extends Completion { this = TNestedCompletion(_, TRaiseCompletion(), _) } - override RaiseSuccessor getAMatchingSuccessorType() { any() } + override ExceptionSuccessor getAMatchingSuccessorType() { any() } override string toString() { // `NestedCompletion` defines `toString()` for the other case diff --git a/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll b/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll index d0d418a839f..f564633bb00 100644 --- a/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll +++ b/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll @@ -46,23 +46,10 @@ private module CfgInput implements CfgShared::InputSig { scope.(Impl::CfgScopeImpl).exit(last, c) } - class SuccessorType = Cfg::SuccessorType; + private class SuccessorType = Cfg::SuccessorType; SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } - predicate successorTypeIsSimple(SuccessorType t) { - t instanceof Cfg::SuccessorTypes::NormalSuccessor - } - - predicate successorTypeIsCondition(SuccessorType t) { - t instanceof Cfg::SuccessorTypes::ConditionalSuccessor - } - - predicate isAbnormalExitType(SuccessorType t) { - t instanceof Cfg::SuccessorTypes::RaiseSuccessor or - t instanceof Cfg::SuccessorTypes::ExitSuccessor - } - private predicate id(Ruby::AstNode node1, Ruby::AstNode node2) { node1 = node2 } private predicate idOf(Ruby::AstNode node, int id) = equivalenceRelation(id/2)(node, id) @@ -1528,21 +1515,3 @@ CfgScope getCfgScope(AstNode n) { pragma[only_bind_into](result) = getCfgScopeImpl(n0) ) } - -cached -private module Cached { - cached - newtype TSuccessorType = - TSuccessorSuccessor() or - TBooleanSuccessor(boolean b) { b in [false, true] } or - TMatchingSuccessor(boolean isMatch) { isMatch in [false, true] } or - TReturnSuccessor() or - TBreakSuccessor() or - TNextSuccessor() or - TRedoSuccessor() or - TRetrySuccessor() or - TRaiseSuccessor() or // TODO: Add exception type? - TExitSuccessor() -} - -import Cached diff --git a/ruby/ql/lib/codeql/ruby/controlflow/internal/Guards.qll b/ruby/ql/lib/codeql/ruby/controlflow/internal/Guards.qll index a60102e017c..387fb03dc9a 100644 --- a/ruby/ql/lib/codeql/ruby/controlflow/internal/Guards.qll +++ b/ruby/ql/lib/codeql/ruby/controlflow/internal/Guards.qll @@ -6,7 +6,7 @@ private import codeql.ruby.CFG /** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */ pragma[nomagic] predicate guardControlsBlock(CfgNodes::AstCfgNode guard, BasicBlock bb, boolean branch) { - exists(ConditionBlock conditionBlock, SuccessorTypes::ConditionalSuccessor s | + exists(ConditionBlock conditionBlock, ConditionalSuccessor s | guard = conditionBlock.getLastNode() and s.getValue() = branch and conditionBlock.edgeDominates(bb, s) diff --git a/ruby/ql/lib/codeql/ruby/controlflow/internal/Splitting.qll b/ruby/ql/lib/codeql/ruby/controlflow/internal/Splitting.qll index 146d5927479..782315dc14c 100644 --- a/ruby/ql/lib/codeql/ruby/controlflow/internal/Splitting.qll +++ b/ruby/ql/lib/codeql/ruby/controlflow/internal/Splitting.qll @@ -8,7 +8,6 @@ private import codeql.ruby.AST as Ast private import Completion as Comp private import Comp private import ControlFlowGraphImpl -private import SuccessorTypes private import codeql.ruby.controlflow.ControlFlowGraph cached @@ -132,7 +131,7 @@ module EnsureSplitting { then // If the entry into the `ensure` block completes with any normal completion, // it simply means normal execution after the `ensure` block - this instanceof NormalSuccessor + this instanceof DirectSuccessor else this = c.getAMatchingSuccessorType() } } @@ -195,7 +194,7 @@ module EnsureSplitting { int getNestLevel() { result = nestLevel } override string toString() { - if type instanceof NormalSuccessor + if type instanceof DirectSuccessor then result = "" else if nestLevel > 0 @@ -271,14 +270,14 @@ module EnsureSplitting { or not c instanceof NormalCompletion or - type instanceof NormalSuccessor + type instanceof DirectSuccessor ) else ( // `ensure` block can exit with inherited completion `c`, which must // match this split inherited = true and type = c.getAMatchingSuccessorType() and - not type instanceof NormalSuccessor + not type instanceof DirectSuccessor ) ) or @@ -308,7 +307,7 @@ module EnsureSplitting { exists(EnsureSplitImpl outer | outer.(EnsureSplit).getNestLevel() = super.getNestLevel() - 1 and outer.exit(pred, c, inherited) and - super.getType() instanceof NormalSuccessor and + super.getType() instanceof DirectSuccessor and inherited = true ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 59fe0238c7f..9332aa43e52 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -153,7 +153,7 @@ module LocalFlow { exprTo = nodeTo.asExpr() and n.getReturningNode().getAstNode() instanceof BreakStmt and exprTo.getAstNode() instanceof Loop and - nodeTo.asExpr().getAPredecessor(any(SuccessorTypes::BreakSuccessor s)) = n.getReturningNode() + nodeTo.asExpr().getAPredecessor(any(BreakSuccessor s)) = n.getReturningNode() ) or nodeFrom.asExpr() = nodeTo.(ReturningStatementNode).getReturningNode().getReturnedValueNode() @@ -161,7 +161,7 @@ module LocalFlow { nodeTo.asExpr() = any(CfgNodes::ExprNodes::ForExprCfgNode for | exists(SuccessorType s | - not s instanceof SuccessorTypes::BreakSuccessor and + not s instanceof BreakSuccessor and exists(for.getAPredecessor(s)) ) and nodeFrom.asExpr() = for.getValue() @@ -280,6 +280,7 @@ predicate isNonConstantExpr(CfgNodes::ExprCfgNode n) { /** Provides logic related to captured variables. */ module VariableCapture { private import codeql.dataflow.VariableCapture as Shared + private import codeql.ruby.controlflow.BasicBlocks as BasicBlocks private predicate closureFlowStep(CfgNodes::ExprCfgNode e1, CfgNodes::ExprCfgNode e2) { e1 = getALastEvalNode(e2) @@ -290,23 +291,14 @@ module VariableCapture { ) } - private module CaptureInput implements Shared::InputSig { + private module CaptureInput implements Shared::InputSig { private import codeql.ruby.controlflow.ControlFlowGraph as Cfg - private import codeql.ruby.controlflow.BasicBlocks as BasicBlocks private import TaintTrackingPrivate as TaintTrackingPrivate - class BasicBlock extends BasicBlocks::BasicBlock { - Callable getEnclosingCallable() { result = this.getScope() } + Callable basicBlockGetEnclosingCallable(BasicBlocks::Cfg::BasicBlock bb) { + result = bb.getScope() } - class ControlFlowNode = Cfg::CfgNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { - result = bb.getImmediateDominator() - } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - class CapturedVariable extends LocalVariable { CapturedVariable() { this.isCaptured() and @@ -377,7 +369,7 @@ module VariableCapture { class ClosureExpr = CaptureInput::ClosureExpr; - module Flow = Shared::Flow; + module Flow = Shared::Flow; private Flow::ClosureNode asClosureNode(Node n) { result = n.(CaptureNode).getSynthesizedCaptureNode() @@ -2394,8 +2386,7 @@ module TypeInference { | m = resolveConstantReadAccess(pattern.getExpr()) and cb.getLastNode() = pattern and - cb.edgeDominates(read.getBasicBlock(), - any(SuccessorTypes::MatchingSuccessor match | match.getValue() = true)) and + cb.edgeDominates(read.getBasicBlock(), any(MatchingSuccessor match | match.getValue() = true)) and caseRead = def.getARead() and read = def.getARead() and case.getValue() = caseRead diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll index fd1619b1c63..029d4c53060 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll @@ -4,22 +4,16 @@ module; private import codeql.ssa.Ssa as SsaImplCommon private import codeql.ruby.AST private import codeql.ruby.CFG as Cfg +private import codeql.ruby.controlflow.BasicBlocks as BasicBlocks private import codeql.ruby.controlflow.internal.ControlFlowGraphImpl as ControlFlowGraphImpl private import codeql.ruby.dataflow.SSA private import codeql.ruby.ast.Variable private import Cfg::CfgNodes::ExprNodes -module SsaInput implements SsaImplCommon::InputSig { +private class BasicBlock = BasicBlocks::Cfg::BasicBlock; + +module SsaInput implements SsaImplCommon::InputSig { private import codeql.ruby.controlflow.ControlFlowGraph as Cfg - private import codeql.ruby.controlflow.BasicBlocks as BasicBlocks - - class BasicBlock = BasicBlocks::BasicBlock; - - class ControlFlowNode = Cfg::CfgNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result = bb.getImmediateDominator() } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } class SourceVariable = LocalVariable; @@ -66,7 +60,7 @@ module SsaInput implements SsaImplCommon::InputSig { } } -import SsaImplCommon::Make as Impl +import SsaImplCommon::Make as Impl class Definition = Impl::Definition; @@ -220,15 +214,14 @@ private predicate hasVariableReadWithCapturedWrite( pragma[noinline] deprecated private predicate adjacentDefReadExt( - Definition def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2, - SsaInput::SourceVariable v + Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2, SsaInput::SourceVariable v ) { Impl::adjacentDefReadExt(def, _, bb1, i1, bb2, i2) and v = def.getSourceVariable() } deprecated private predicate adjacentDefReachesReadExt( - Definition def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2 + Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2 ) { exists(SsaInput::SourceVariable v | adjacentDefReadExt(def, bb1, i1, bb2, i2, v) | def.definesAt(v, bb1, i1) @@ -236,7 +229,7 @@ deprecated private predicate adjacentDefReachesReadExt( SsaInput::variableRead(bb1, i1, v, true) ) or - exists(SsaInput::BasicBlock bb3, int i3 | + exists(BasicBlock bb3, int i3 | adjacentDefReachesReadExt(def, bb1, i1, bb3, i3) and SsaInput::variableRead(bb3, i3, _, false) and Impl::adjacentDefReadExt(def, _, bb3, i3, bb2, i2) @@ -244,7 +237,7 @@ deprecated private predicate adjacentDefReachesReadExt( } deprecated private predicate adjacentDefReachesUncertainReadExt( - Definition def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2 + Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2 ) { adjacentDefReachesReadExt(def, bb1, i1, bb2, i2) and SsaInput::variableRead(bb2, i2, _, false) @@ -252,13 +245,11 @@ deprecated private predicate adjacentDefReachesUncertainReadExt( /** Same as `lastRefRedef`, but skips uncertain reads. */ pragma[nomagic] -deprecated private predicate lastRefSkipUncertainReadsExt( - Definition def, SsaInput::BasicBlock bb, int i -) { +deprecated private predicate lastRefSkipUncertainReadsExt(Definition def, BasicBlock bb, int i) { Impl::lastRef(def, bb, i) and not SsaInput::variableRead(bb, i, def.getSourceVariable(), false) or - exists(SsaInput::BasicBlock bb0, int i0 | + exists(BasicBlock bb0, int i0 | Impl::lastRef(def, bb0, i0) and adjacentDefReachesUncertainReadExt(def, bb, i, bb0, i0) ) @@ -479,7 +470,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu private import codeql.util.Boolean class Expr extends Cfg::CfgNodes::ExprCfgNode { - predicate hasCfgNode(SsaInput::BasicBlock bb, int i) { this = bb.getNode(i) } + predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } } Expr getARead(Definition def) { result = Cached::getARead(def) } @@ -495,10 +486,8 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu * Holds if the evaluation of this guard to `branch` corresponds to the edge * from `bb1` to `bb2`. */ - predicate hasValueBranchEdge( - SsaInput::BasicBlock bb1, SsaInput::BasicBlock bb2, GuardValue branch - ) { - exists(Cfg::SuccessorTypes::ConditionalSuccessor s | + predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) { + exists(Cfg::ConditionalSuccessor s | this.getBasicBlock() = bb1 and bb2 = bb1.getASuccessor(s) and s.getValue() = branch @@ -510,15 +499,13 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu * branch edge from `bb1` to `bb2`. That is, following the edge from * `bb1` to `bb2` implies that this guard evaluated to `branch`. */ - predicate valueControlsBranchEdge( - SsaInput::BasicBlock bb1, SsaInput::BasicBlock bb2, GuardValue branch - ) { + predicate valueControlsBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) { this.hasValueBranchEdge(bb1, bb2, branch) } } /** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */ - predicate guardDirectlyControlsBlock(Guard guard, SsaInput::BasicBlock bb, GuardValue branch) { + predicate guardDirectlyControlsBlock(Guard guard, BasicBlock bb, GuardValue branch) { Guards::guardControlsBlock(guard, bb, branch) } } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll index 2746faebdc8..cef6cb4fa04 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Kernel.qll @@ -50,7 +50,7 @@ module Kernel { } /** - * Private methods in the `Kernel` module. + * Holds if `method` is a name of a private method in the `Kernel` module. * These can be be invoked on `self`, on `Kernel`, or using a low-level primitive like `send` or `instance_eval`. * ```ruby * puts "hello world" diff --git a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModelsExtensions.qll b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModelsExtensions.qll index b86d7de457e..4969da43be3 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModelsExtensions.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModelsExtensions.qll @@ -4,7 +4,7 @@ /** * Holds if the value at `(type, path)` should be seen as a flow - * source of the given `kind`. + * source of the given `kind` and `madId` is the data extension row number. * * The kind `remote` represents a general remote flow source. */ @@ -14,13 +14,14 @@ extensible predicate sourceModel( /** * Holds if the value at `(type, path)` should be seen as a sink - * of the given `kind`. + * of the given `kind` and `madId` is the data extension row number. */ extensible predicate sinkModel(string type, string path, string kind, QlBuiltins::ExtensionId madId); /** * Holds if in calls to `(type, path)`, the value referred to by `input` - * can flow to the value referred to by `output`. + * can flow to the value referred to by `output` and `madId` is the data + * extension row number. * * `kind` should be either `value` or `taint`, for value-preserving or taint-preserving steps, * respectively. diff --git a/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Excon.qll b/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Excon.qll index e2ba1eb48fe..9ffd5e3ef51 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Excon.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/http_clients/Excon.qll @@ -25,27 +25,28 @@ private import codeql.ruby.DataFlow */ class ExconHttpRequest extends Http::Client::Request::Range instanceof DataFlow::CallNode { API::Node requestNode; - API::Node connectionNode; DataFlow::Node connectionUse; ExconHttpRequest() { this = requestNode.asSource() and - connectionUse = connectionNode.asSource() and - connectionNode = - [ - // one-off requests - API::getTopLevelMember("Excon"), - // connection re-use - API::getTopLevelMember("Excon").getInstance(), - API::getTopLevelMember("Excon").getMember("Connection").getInstance() - ] and - requestNode = - connectionNode - .getReturn([ - // Excon#request exists but Excon.request doesn't. - // This shouldn't be a problem - in real code the latter would raise NoMethodError anyway. - "get", "head", "delete", "options", "post", "put", "patch", "trace", "request" - ]) + exists(API::Node connectionNode | + connectionUse = connectionNode.asSource() and + connectionNode = + [ + // one-off requests + API::getTopLevelMember("Excon"), + // connection re-use + API::getTopLevelMember("Excon").getInstance(), + API::getTopLevelMember("Excon").getMember("Connection").getInstance() + ] and + requestNode = + connectionNode + .getReturn([ + // Excon#request exists but Excon.request doesn't. + // This shouldn't be a problem - in real code the latter would raise NoMethodError anyway. + "get", "head", "delete", "options", "post", "put", "patch", "trace", "request" + ]) + ) } override DataFlow::Node getResponseBody() { result = requestNode.getAMethodCall("body") } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/http_clients/NetHttp.qll b/ruby/ql/lib/codeql/ruby/frameworks/http_clients/NetHttp.qll index bcb86e2b63d..a1b58d700b8 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/http_clients/NetHttp.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/http_clients/NetHttp.qll @@ -27,11 +27,10 @@ private import codeql.ruby.DataFlow class NetHttpRequest extends Http::Client::Request::Range instanceof DataFlow::CallNode { private DataFlow::CallNode request; API::Node requestNode; - API::Node connectionNode; private boolean returnsResponseBody; NetHttpRequest() { - exists(string method | + exists(string method, API::Node connectionNode | request = requestNode.asSource() and this = request and requestNode = connectionNode.getReturn(method) diff --git a/ruby/ql/lib/codeql/ruby/regexp/internal/ParseRegExp.qll b/ruby/ql/lib/codeql/ruby/regexp/internal/ParseRegExp.qll index d1f96ec407e..d35d9353bf1 100644 --- a/ruby/ql/lib/codeql/ruby/regexp/internal/ParseRegExp.qll +++ b/ruby/ql/lib/codeql/ruby/regexp/internal/ParseRegExp.qll @@ -194,7 +194,7 @@ abstract class RegExp extends Ast::StringlikeLiteral { } /** - * Holds if the character set starting at `charset_start` contains a character range + * Holds if the character set starting at `charsetStart` contains a character range * with lower bound found between `start` and `lowerEnd` * and upper bound found between `upperStart` and `end`. */ diff --git a/ruby/ql/lib/codeql/ruby/security/ImproperMemoizationQuery.qll b/ruby/ql/lib/codeql/ruby/security/ImproperMemoizationQuery.qll index 46fc231c6fc..dab75f00b9e 100644 --- a/ruby/ql/lib/codeql/ruby/security/ImproperMemoizationQuery.qll +++ b/ruby/ql/lib/codeql/ruby/security/ImproperMemoizationQuery.qll @@ -45,7 +45,7 @@ private class MemoCandidate extends Method { } /** - * Holds if parameter `p` of `m` is read in the right hand side of `assign`. + * Holds if parameter `p` of `m` is read in the right hand side of `a`. */ private predicate parameterUsedInMemoValue(Method m, Parameter p, MemoStmt a) { p = m.getAParameter() and @@ -54,7 +54,7 @@ private predicate parameterUsedInMemoValue(Method m, Parameter p, MemoStmt a) { } /** - * Holds if parameter `p` of `m` is read in the left hand side of `assign`. + * Holds if parameter `p` of `m` is read in the left hand side of `a`. */ private predicate parameterUsedInMemoKey(Method m, Parameter p, HashMemoStmt a) { p = m.getAParameter() and diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index f0cbf51f467..89f162e0ed9 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 5.0.3-dev +version: 5.0.4-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/lib/utils/test/InlineFlowTest.qll b/ruby/ql/lib/utils/test/InlineFlowTest.qll index 2444b04fb13..7ef20938003 100644 --- a/ruby/ql/lib/utils/test/InlineFlowTest.qll +++ b/ruby/ql/lib/utils/test/InlineFlowTest.qll @@ -3,7 +3,7 @@ * See `shared/util/codeql/dataflow/test/InlineFlowTest.qll` */ -import ruby +private import ruby private import codeql.Locations private import codeql.dataflow.test.InlineFlowTest private import codeql.ruby.dataflow.internal.DataFlowImplSpecific diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 469f8421413..29b4ff27bc0 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.4.4 + +No user-facing changes. + ## 1.4.3 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/1.4.4.md b/ruby/ql/src/change-notes/released/1.4.4.md new file mode 100644 index 00000000000..cb7dd204b9c --- /dev/null +++ b/ruby/ql/src/change-notes/released/1.4.4.md @@ -0,0 +1,3 @@ +## 1.4.4 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 08f88b689fb..1dfca6daa3b 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.3 +lastReleaseVersion: 1.4.4 diff --git a/ruby/ql/src/experimental/insecure-randomness/examples/InsecureRandomnessBad.rb b/ruby/ql/src/experimental/insecure-randomness/examples/InsecureRandomnessBad.rb index d4a94a8b18b..044d257096a 100644 --- a/ruby/ql/src/experimental/insecure-randomness/examples/InsecureRandomnessBad.rb +++ b/ruby/ql/src/experimental/insecure-randomness/examples/InsecureRandomnessBad.rb @@ -1,6 +1,6 @@ def generate_password() chars = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a + ['!', '@', '#', '$', '%'] - # BAD: rand is not cryptographically secure + # BAD: rand is not cryptographically secure password = (1..10).collect { chars[rand(chars.size)] }.join end diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 1e435c15de2..da157badc90 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.4.4-dev +version: 1.4.5-dev groups: - ruby - queries diff --git a/ruby/ql/src/queries/performance/DatabaseQueryInLoop.ql b/ruby/ql/src/queries/performance/DatabaseQueryInLoop.ql index b34ee080fcd..c81cdd6b2f6 100644 --- a/ruby/ql/src/queries/performance/DatabaseQueryInLoop.ql +++ b/ruby/ql/src/queries/performance/DatabaseQueryInLoop.ql @@ -16,7 +16,6 @@ import codeql.ruby.ast.internal.Constant import codeql.ruby.Concepts import codeql.ruby.frameworks.ActiveRecord private import codeql.ruby.TaintTracking -private import codeql.ruby.CFG private import codeql.ruby.controlflow.internal.Guards as Guards /** Gets the name of a built-in method that involves a loop operation. */ @@ -42,7 +41,7 @@ class LoopingCall extends DataFlow::CallNode { /** Holds if `ar` influences a guard that may control the execution of a loop. */ predicate usedInLoopControlGuard(ActiveRecordInstance ar) { - exists(DataFlow::Node insideGuard, CfgNodes::ExprCfgNode guard | + exists(DataFlow::Node insideGuard, Cfg::CfgNodes::ExprCfgNode guard | // For a guard like `cond && ar`, the whole guard will not be tainted // so we need to look at the taint of the individual parts. insideGuard.asExpr().getExpr() = guard.getExpr().getAChild*() @@ -53,12 +52,12 @@ predicate usedInLoopControlGuard(ActiveRecordInstance ar) { } /** Holds if `guard` controls `break` and `break` would break out of a loop. */ -predicate guardForLoopControl(CfgNodes::ExprCfgNode guard, CfgNodes::AstCfgNode break) { +predicate guardForLoopControl(Cfg::CfgNodes::ExprCfgNode guard, Cfg::CfgNodes::AstCfgNode break) { Guards::guardControlsBlock(guard, break.getBasicBlock(), _) and ( - break.(CfgNodes::ExprNodes::MethodCallCfgNode).getMethodName() = "raise" + break.(Cfg::CfgNodes::ExprNodes::MethodCallCfgNode).getMethodName() = "raise" or - break instanceof CfgNodes::ReturningCfgNode + break instanceof Cfg::CfgNodes::ReturningCfgNode ) } diff --git a/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected b/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected index cafb6267eb9..35b18b7132b 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected +++ b/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected @@ -6,10 +6,10 @@ dominates | break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:3:5:5:7 | if ... | | break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:3:8:3:8 | x | | break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:4:7:4:11 | break | -| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | | break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:8:3:10:5 | if ... | -| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:8:6:8:13 | [ensure: raise] self | -| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:9:5:9:23 | [ensure: raise] self | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:8:6:8:13 | [ensure: exception] self | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:9:5:9:23 | [ensure: exception] self | | break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:9:5:9:23 | self | | break_ensure.rb:1:1:11:3 | exit m1 | break_ensure.rb:1:1:11:3 | exit m1 | | break_ensure.rb:1:1:56:4 | enter break_ensure.rb | break_ensure.rb:1:1:56:4 | enter break_ensure.rb | @@ -22,22 +22,22 @@ dominates | break_ensure.rb:2:9:2:9 | x | break_ensure.rb:3:5:5:7 | if ... | | break_ensure.rb:2:9:2:9 | x | break_ensure.rb:3:8:3:8 | x | | break_ensure.rb:2:9:2:9 | x | break_ensure.rb:4:7:4:11 | break | -| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | | break_ensure.rb:2:9:2:9 | x | break_ensure.rb:8:3:10:5 | if ... | -| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:8:6:8:13 | [ensure: raise] self | -| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:9:5:9:23 | [ensure: raise] self | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:8:6:8:13 | [ensure: exception] self | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:9:5:9:23 | [ensure: exception] self | | break_ensure.rb:2:9:2:9 | x | break_ensure.rb:9:5:9:23 | self | | break_ensure.rb:3:5:5:7 | if ... | break_ensure.rb:3:5:5:7 | if ... | | break_ensure.rb:3:8:3:8 | x | break_ensure.rb:3:5:5:7 | if ... | | break_ensure.rb:3:8:3:8 | x | break_ensure.rb:3:8:3:8 | x | | break_ensure.rb:3:8:3:8 | x | break_ensure.rb:4:7:4:11 | break | | break_ensure.rb:4:7:4:11 | break | break_ensure.rb:4:7:4:11 | break | -| break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | +| break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | | break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:8:3:10:5 | if ... | -| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | -| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:8:6:8:13 | [ensure: raise] self | -| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:9:5:9:23 | [ensure: raise] self | -| break_ensure.rb:9:5:9:23 | [ensure: raise] self | break_ensure.rb:9:5:9:23 | [ensure: raise] self | +| break_ensure.rb:8:6:8:13 | [ensure: exception] self | break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | +| break_ensure.rb:8:6:8:13 | [ensure: exception] self | break_ensure.rb:8:6:8:13 | [ensure: exception] self | +| break_ensure.rb:8:6:8:13 | [ensure: exception] self | break_ensure.rb:9:5:9:23 | [ensure: exception] self | +| break_ensure.rb:9:5:9:23 | [ensure: exception] self | break_ensure.rb:9:5:9:23 | [ensure: exception] self | | break_ensure.rb:9:5:9:23 | self | break_ensure.rb:9:5:9:23 | self | | break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:13:1:25:3 | enter m2 | | break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:14:3:24:5 | while ... | @@ -46,11 +46,11 @@ dominates | break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:16:10:16:10 | x | | break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:17:9:17:13 | break | | break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | -| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | | break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:20:7:22:9 | if ... | -| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:20:10:20:10 | [ensure: exception] y | | break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:21:9:21:20 | [ensure: break] self | -| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:21:9:21:20 | [ensure: exception] self | | break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:21:9:21:20 | self | | break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:14:3:24:5 | while ... | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:14:3:24:5 | while ... | @@ -59,11 +59,11 @@ dominates | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:16:10:16:10 | x | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:17:9:17:13 | break | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | -| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | if ... | -| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:10:20:10 | [ensure: exception] y | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | [ensure: break] self | -| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | [ensure: exception] self | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | self | | break_ensure.rb:16:7:18:9 | if ... | break_ensure.rb:16:7:18:9 | if ... | | break_ensure.rb:16:7:18:9 | if ... | break_ensure.rb:20:7:22:9 | if ... | @@ -72,42 +72,42 @@ dominates | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:16:10:16:10 | x | | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:17:9:17:13 | break | | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | -| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:7:22:9 | if ... | -| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:10:20:10 | [ensure: exception] y | | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:21:9:21:20 | [ensure: break] self | -| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:21:9:21:20 | [ensure: exception] self | | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:21:9:21:20 | self | | break_ensure.rb:17:9:17:13 | break | break_ensure.rb:17:9:17:13 | break | | break_ensure.rb:17:9:17:13 | break | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | | break_ensure.rb:17:9:17:13 | break | break_ensure.rb:21:9:21:20 | [ensure: break] self | | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | -| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | +| break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | | break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:20:7:22:9 | if ... | -| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | -| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:20:10:20:10 | [ensure: raise] y | -| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:20:10:20:10 | [ensure: exception] y | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | +| break_ensure.rb:20:10:20:10 | [ensure: exception] y | break_ensure.rb:20:10:20:10 | [ensure: exception] y | +| break_ensure.rb:20:10:20:10 | [ensure: exception] y | break_ensure.rb:21:9:21:20 | [ensure: exception] self | | break_ensure.rb:21:9:21:20 | [ensure: break] self | break_ensure.rb:21:9:21:20 | [ensure: break] self | -| break_ensure.rb:21:9:21:20 | [ensure: raise] self | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:21:9:21:20 | [ensure: exception] self | break_ensure.rb:21:9:21:20 | [ensure: exception] self | | break_ensure.rb:21:9:21:20 | self | break_ensure.rb:21:9:21:20 | self | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:27:1:42:3 | enter m3 | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:27:1:42:3 | exit m3 | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:27:1:42:3 | exit m3 (normal) | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:29:5:31:7 | if ... | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:30:7:30:12 | return | -| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:5:39:7 | while ... | -| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:11:33:11 | [ensure: raise] y | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:11:33:11 | [ensure: exception] y | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:11:33:11 | [ensure: return] y | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:11:33:11 | y | -| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:9:37:11 | if ... | -| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:12:35:12 | [ensure: raise] x | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:12:35:12 | [ensure: exception] x | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:12:35:12 | [ensure: return] x | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:12:35:12 | x | -| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:36:11:36:15 | [ensure: raise] break | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:36:11:36:15 | [ensure: exception] break | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:36:11:36:15 | [ensure: return] break | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:36:11:36:15 | break | | break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:27:1:42:3 | exit m3 | @@ -124,14 +124,14 @@ dominates | break_ensure.rb:30:7:30:12 | return | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | | break_ensure.rb:30:7:30:12 | return | break_ensure.rb:35:12:35:12 | [ensure: return] x | | break_ensure.rb:30:7:30:12 | return | break_ensure.rb:36:11:36:15 | [ensure: return] break | -| break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | +| break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | | break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:33:5:39:7 | while ... | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:33:11:33:11 | [ensure: raise] y | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:35:12:35:12 | [ensure: raise] x | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:36:11:36:15 | [ensure: raise] break | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:33:11:33:11 | [ensure: exception] y | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:35:12:35:12 | [ensure: exception] x | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:36:11:36:15 | [ensure: exception] break | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:33:11:33:11 | [ensure: return] y | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | @@ -142,19 +142,19 @@ dominates | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:9:37:11 | if ... | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:12:35:12 | x | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:36:11:36:15 | break | -| break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | +| break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | | break_ensure.rb:35:9:37:11 | if ... | break_ensure.rb:35:9:37:11 | if ... | -| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | -| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:35:12:35:12 | [ensure: raise] x | -| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:36:11:36:15 | [ensure: raise] break | +| break_ensure.rb:35:12:35:12 | [ensure: exception] x | break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | +| break_ensure.rb:35:12:35:12 | [ensure: exception] x | break_ensure.rb:35:12:35:12 | [ensure: exception] x | +| break_ensure.rb:35:12:35:12 | [ensure: exception] x | break_ensure.rb:36:11:36:15 | [ensure: exception] break | | break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | | break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:35:12:35:12 | [ensure: return] x | | break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:36:11:36:15 | [ensure: return] break | | break_ensure.rb:35:12:35:12 | x | break_ensure.rb:35:9:37:11 | if ... | | break_ensure.rb:35:12:35:12 | x | break_ensure.rb:35:12:35:12 | x | | break_ensure.rb:35:12:35:12 | x | break_ensure.rb:36:11:36:15 | break | -| break_ensure.rb:36:11:36:15 | [ensure: raise] break | break_ensure.rb:36:11:36:15 | [ensure: raise] break | +| break_ensure.rb:36:11:36:15 | [ensure: exception] break | break_ensure.rb:36:11:36:15 | [ensure: exception] break | | break_ensure.rb:36:11:36:15 | [ensure: return] break | break_ensure.rb:36:11:36:15 | [ensure: return] break | | break_ensure.rb:36:11:36:15 | break | break_ensure.rb:36:11:36:15 | break | | break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:44:1:56:3 | enter m4 | @@ -163,41 +163,41 @@ dominates | break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:47:7:49:9 | if ... | | break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:47:10:47:10 | x | | break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:48:9:48:16 | self | -| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | | break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:51:7:53:9 | if ... | -| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:51:10:51:10 | [ensure: exception] x | | break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:52:15:52:16 | 10 | -| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | | break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:45:3:55:5 | while ... | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:45:3:55:5 | while ... | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:45:9:45:9 | x | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:47:7:49:9 | if ... | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:47:10:47:10 | x | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:48:9:48:16 | self | -| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | if ... | -| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:10:51:10 | [ensure: exception] x | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:52:15:52:16 | 10 | -| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | | break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:47:7:49:9 | if ... | | break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:51:7:53:9 | if ... | | break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:52:15:52:16 | 10 | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:47:7:49:9 | if ... | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:47:10:47:10 | x | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:48:9:48:16 | self | -| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:51:7:53:9 | if ... | -| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:51:10:51:10 | [ensure: exception] x | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:52:15:52:16 | 10 | -| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | | break_ensure.rb:48:9:48:16 | self | break_ensure.rb:48:9:48:16 | self | -| break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | +| break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | | break_ensure.rb:51:7:53:9 | if ... | break_ensure.rb:51:7:53:9 | if ... | -| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | -| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:51:10:51:10 | [ensure: raise] x | -| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | +| break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:51:10:51:10 | [ensure: exception] x | +| break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | | break_ensure.rb:52:15:52:16 | 10 | break_ensure.rb:52:15:52:16 | 10 | -| break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | | case.rb:1:1:6:3 | enter if_in_case | case.rb:1:1:6:3 | enter if_in_case | | case.rb:1:1:6:3 | enter if_in_case | case.rb:2:3:5:5 | case ... | | case.rb:1:1:6:3 | enter if_in_case | case.rb:3:5:3:42 | [match] when ... | @@ -2047,7 +2047,7 @@ dominates | raise.rb:68:1:77:3 | enter m7 | raise.rb:71:3:72:18 | elsif ... | | raise.rb:68:1:77:3 | enter m7 | raise.rb:71:9:71:9 | x | | raise.rb:68:1:77:3 | enter m7 | raise.rb:72:13:72:17 | x < 0 | -| raise.rb:68:1:77:3 | enter m7 | raise.rb:76:3:76:15 | [ensure: raise] self | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:76:3:76:15 | [ensure: exception] self | | raise.rb:68:1:77:3 | enter m7 | raise.rb:76:3:76:15 | self | | raise.rb:68:1:77:3 | exit m7 | raise.rb:68:1:77:3 | exit m7 | | raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:68:1:77:3 | exit m7 (normal) | @@ -2060,7 +2060,7 @@ dominates | raise.rb:71:9:71:9 | x | raise.rb:72:13:72:17 | x < 0 | | raise.rb:71:9:71:9 | x | raise.rb:76:3:76:15 | self | | raise.rb:72:13:72:17 | x < 0 | raise.rb:72:13:72:17 | x < 0 | -| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:76:3:76:15 | [ensure: raise] self | +| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:76:3:76:15 | [ensure: exception] self | | raise.rb:76:3:76:15 | self | raise.rb:76:3:76:15 | self | | raise.rb:79:1:92:3 | enter m8 | raise.rb:79:1:92:3 | enter m8 | | raise.rb:79:1:92:3 | enter m8 | raise.rb:79:1:92:3 | exit m8 | @@ -2069,7 +2069,7 @@ dominates | raise.rb:79:1:92:3 | enter m8 | raise.rb:84:5:85:20 | elsif ... | | raise.rb:79:1:92:3 | enter m8 | raise.rb:84:11:84:11 | x | | raise.rb:79:1:92:3 | enter m8 | raise.rb:85:15:85:19 | x < 0 | -| raise.rb:79:1:92:3 | enter m8 | raise.rb:89:5:89:17 | [ensure: raise] self | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:89:5:89:17 | [ensure: exception] self | | raise.rb:79:1:92:3 | enter m8 | raise.rb:89:5:89:17 | self | | raise.rb:79:1:92:3 | exit m8 | raise.rb:79:1:92:3 | exit m8 | | raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:79:1:92:3 | exit m8 (normal) | @@ -2082,7 +2082,7 @@ dominates | raise.rb:84:11:84:11 | x | raise.rb:85:15:85:19 | x < 0 | | raise.rb:84:11:84:11 | x | raise.rb:89:5:89:17 | self | | raise.rb:85:15:85:19 | x < 0 | raise.rb:85:15:85:19 | x < 0 | -| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:89:5:89:17 | [ensure: raise] self | +| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:89:5:89:17 | [ensure: exception] self | | raise.rb:89:5:89:17 | self | raise.rb:89:5:89:17 | self | | raise.rb:94:1:119:3 | enter m9 | raise.rb:94:1:119:3 | enter m9 | | raise.rb:94:1:119:3 | enter m9 | raise.rb:94:1:119:3 | exit m9 | @@ -2093,29 +2093,29 @@ dominates | raise.rb:94:1:119:3 | enter m9 | raise.rb:99:5:100:20 | elsif ... | | raise.rb:94:1:119:3 | enter m9 | raise.rb:99:11:99:11 | x | | raise.rb:94:1:119:3 | enter m9 | raise.rb:100:15:100:19 | x < 0 | -| raise.rb:94:1:119:3 | enter m9 | raise.rb:104:5:104:23 | [ensure: raise] self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:104:5:104:23 | [ensure: exception] self | | raise.rb:94:1:119:3 | enter m9 | raise.rb:104:5:104:23 | self | -| raise.rb:94:1:119:3 | enter m9 | raise.rb:106:7:108:9 | [ensure: raise] if ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:106:7:108:9 | [ensure: exception] if ... | | raise.rb:94:1:119:3 | enter m9 | raise.rb:106:7:108:9 | [ensure: return] if ... | | raise.rb:94:1:119:3 | enter m9 | raise.rb:106:7:108:9 | if ... | -| raise.rb:94:1:119:3 | enter m9 | raise.rb:106:10:106:11 | [ensure: raise] b1 | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:106:10:106:11 | [ensure: exception] b1 | | raise.rb:94:1:119:3 | enter m9 | raise.rb:106:10:106:11 | [ensure: return] b1 | | raise.rb:94:1:119:3 | enter m9 | raise.rb:106:10:106:11 | b1 | -| raise.rb:94:1:119:3 | enter m9 | raise.rb:107:9:107:26 | [ensure: raise] self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:107:9:107:26 | [ensure: exception] self | | raise.rb:94:1:119:3 | enter m9 | raise.rb:107:9:107:26 | [ensure: return] self | | raise.rb:94:1:119:3 | enter m9 | raise.rb:107:9:107:26 | self | -| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | -| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | -| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | -| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure: exception] ensure ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | | raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure: return] ensure ... | | raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | ensure ... | -| raise.rb:94:1:119:3 | enter m9 | raise.rb:115:3:115:22 | [ensure: raise] self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:115:3:115:22 | [ensure: exception] self | | raise.rb:94:1:119:3 | enter m9 | raise.rb:115:3:115:22 | self | -| raise.rb:94:1:119:3 | enter m9 | raise.rb:116:3:118:5 | [ensure: raise] if ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:116:3:118:5 | [ensure: exception] if ... | | raise.rb:94:1:119:3 | enter m9 | raise.rb:116:3:118:5 | [ensure: return] if ... | | raise.rb:94:1:119:3 | enter m9 | raise.rb:116:3:118:5 | if ... | -| raise.rb:94:1:119:3 | enter m9 | raise.rb:117:5:117:22 | [ensure: raise] self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:117:5:117:22 | [ensure: exception] self | | raise.rb:94:1:119:3 | enter m9 | raise.rb:117:5:117:22 | [ensure: return] self | | raise.rb:94:1:119:3 | enter m9 | raise.rb:117:5:117:22 | self | | raise.rb:94:1:119:3 | exit m9 | raise.rb:94:1:119:3 | exit m9 | @@ -2127,21 +2127,21 @@ dominates | raise.rb:97:8:97:8 | x | raise.rb:99:5:100:20 | elsif ... | | raise.rb:97:8:97:8 | x | raise.rb:99:11:99:11 | x | | raise.rb:97:8:97:8 | x | raise.rb:100:15:100:19 | x < 0 | -| raise.rb:97:8:97:8 | x | raise.rb:104:5:104:23 | [ensure: raise] self | +| raise.rb:97:8:97:8 | x | raise.rb:104:5:104:23 | [ensure: exception] self | | raise.rb:97:8:97:8 | x | raise.rb:104:5:104:23 | self | -| raise.rb:97:8:97:8 | x | raise.rb:106:7:108:9 | [ensure: raise] if ... | +| raise.rb:97:8:97:8 | x | raise.rb:106:7:108:9 | [ensure: exception] if ... | | raise.rb:97:8:97:8 | x | raise.rb:106:7:108:9 | [ensure: return] if ... | | raise.rb:97:8:97:8 | x | raise.rb:106:7:108:9 | if ... | -| raise.rb:97:8:97:8 | x | raise.rb:106:10:106:11 | [ensure: raise] b1 | +| raise.rb:97:8:97:8 | x | raise.rb:106:10:106:11 | [ensure: exception] b1 | | raise.rb:97:8:97:8 | x | raise.rb:106:10:106:11 | [ensure: return] b1 | | raise.rb:97:8:97:8 | x | raise.rb:106:10:106:11 | b1 | -| raise.rb:97:8:97:8 | x | raise.rb:107:9:107:26 | [ensure: raise] self | +| raise.rb:97:8:97:8 | x | raise.rb:107:9:107:26 | [ensure: exception] self | | raise.rb:97:8:97:8 | x | raise.rb:107:9:107:26 | [ensure: return] self | | raise.rb:97:8:97:8 | x | raise.rb:107:9:107:26 | self | -| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | -| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | -| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | -| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: exception] ensure ... | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | | raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: return] ensure ... | | raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | ensure ... | | raise.rb:97:8:97:8 | x | raise.rb:115:3:115:22 | self | @@ -2155,7 +2155,7 @@ dominates | raise.rb:99:5:100:20 | elsif ... | raise.rb:106:7:108:9 | if ... | | raise.rb:99:5:100:20 | elsif ... | raise.rb:106:10:106:11 | b1 | | raise.rb:99:5:100:20 | elsif ... | raise.rb:107:9:107:26 | self | -| raise.rb:99:5:100:20 | elsif ... | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | +| raise.rb:99:5:100:20 | elsif ... | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | | raise.rb:99:5:100:20 | elsif ... | raise.rb:109:5:110:25 | ensure ... | | raise.rb:99:5:100:20 | elsif ... | raise.rb:115:3:115:22 | self | | raise.rb:99:5:100:20 | elsif ... | raise.rb:116:3:118:5 | if ... | @@ -2171,8 +2171,8 @@ dominates | raise.rb:99:11:99:11 | x | raise.rb:106:10:106:11 | b1 | | raise.rb:99:11:99:11 | x | raise.rb:107:9:107:26 | [ensure: return] self | | raise.rb:99:11:99:11 | x | raise.rb:107:9:107:26 | self | -| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | -| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | +| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | | raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure: return] ensure ... | | raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | ensure ... | | raise.rb:99:11:99:11 | x | raise.rb:115:3:115:22 | self | @@ -2184,27 +2184,27 @@ dominates | raise.rb:100:15:100:19 | x < 0 | raise.rb:106:7:108:9 | [ensure: return] if ... | | raise.rb:100:15:100:19 | x < 0 | raise.rb:106:10:106:11 | [ensure: return] b1 | | raise.rb:100:15:100:19 | x < 0 | raise.rb:107:9:107:26 | [ensure: return] self | -| raise.rb:100:15:100:19 | x < 0 | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:100:15:100:19 | x < 0 | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | | raise.rb:100:15:100:19 | x < 0 | raise.rb:109:5:110:25 | [ensure: return] ensure ... | | raise.rb:100:15:100:19 | x < 0 | raise.rb:116:3:118:5 | [ensure: return] if ... | | raise.rb:100:15:100:19 | x < 0 | raise.rb:117:5:117:22 | [ensure: return] self | -| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:104:5:104:23 | [ensure: raise] self | -| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:106:7:108:9 | [ensure: raise] if ... | -| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:106:10:106:11 | [ensure: raise] b1 | -| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:107:9:107:26 | [ensure: raise] self | -| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | -| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | +| raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:104:5:104:23 | [ensure: exception] self | +| raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:106:7:108:9 | [ensure: exception] if ... | +| raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:106:10:106:11 | [ensure: exception] b1 | +| raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:107:9:107:26 | [ensure: exception] self | +| raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | +| raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:109:5:110:25 | [ensure: exception] ensure ... | | raise.rb:104:5:104:23 | self | raise.rb:104:5:104:23 | self | | raise.rb:104:5:104:23 | self | raise.rb:106:7:108:9 | if ... | | raise.rb:104:5:104:23 | self | raise.rb:106:10:106:11 | b1 | | raise.rb:104:5:104:23 | self | raise.rb:107:9:107:26 | self | -| raise.rb:104:5:104:23 | self | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | +| raise.rb:104:5:104:23 | self | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | | raise.rb:104:5:104:23 | self | raise.rb:109:5:110:25 | ensure ... | | raise.rb:104:5:104:23 | self | raise.rb:115:3:115:22 | self | | raise.rb:104:5:104:23 | self | raise.rb:116:3:118:5 | if ... | | raise.rb:104:5:104:23 | self | raise.rb:117:5:117:22 | self | -| raise.rb:106:7:108:9 | [ensure: raise] if ... | raise.rb:106:7:108:9 | [ensure: raise] if ... | -| raise.rb:106:7:108:9 | [ensure: raise] if ... | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | +| raise.rb:106:7:108:9 | [ensure: exception] if ... | raise.rb:106:7:108:9 | [ensure: exception] if ... | +| raise.rb:106:7:108:9 | [ensure: exception] if ... | raise.rb:109:5:110:25 | [ensure: exception] ensure ... | | raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:106:7:108:9 | [ensure: return] if ... | | raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:109:5:110:25 | [ensure: return] ensure ... | | raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:116:3:118:5 | [ensure: return] if ... | @@ -2214,36 +2214,36 @@ dominates | raise.rb:106:7:108:9 | if ... | raise.rb:115:3:115:22 | self | | raise.rb:106:7:108:9 | if ... | raise.rb:116:3:118:5 | if ... | | raise.rb:106:7:108:9 | if ... | raise.rb:117:5:117:22 | self | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:106:7:108:9 | [ensure: raise] if ... | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:106:10:106:11 | [ensure: raise] b1 | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:107:9:107:26 | [ensure: raise] self | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:106:7:108:9 | [ensure: exception] if ... | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:106:10:106:11 | [ensure: exception] b1 | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:107:9:107:26 | [ensure: exception] self | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:109:5:110:25 | [ensure: exception] ensure ... | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:106:7:108:9 | [ensure: return] if ... | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:106:10:106:11 | [ensure: return] b1 | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:107:9:107:26 | [ensure: return] self | -| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:109:5:110:25 | [ensure: return] ensure ... | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:116:3:118:5 | [ensure: return] if ... | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:117:5:117:22 | [ensure: return] self | | raise.rb:106:10:106:11 | b1 | raise.rb:106:7:108:9 | if ... | | raise.rb:106:10:106:11 | b1 | raise.rb:106:10:106:11 | b1 | | raise.rb:106:10:106:11 | b1 | raise.rb:107:9:107:26 | self | -| raise.rb:106:10:106:11 | b1 | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | +| raise.rb:106:10:106:11 | b1 | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | | raise.rb:106:10:106:11 | b1 | raise.rb:109:5:110:25 | ensure ... | | raise.rb:106:10:106:11 | b1 | raise.rb:115:3:115:22 | self | | raise.rb:106:10:106:11 | b1 | raise.rb:116:3:118:5 | if ... | | raise.rb:106:10:106:11 | b1 | raise.rb:117:5:117:22 | self | -| raise.rb:107:9:107:26 | [ensure: raise] self | raise.rb:107:9:107:26 | [ensure: raise] self | -| raise.rb:107:9:107:26 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | +| raise.rb:107:9:107:26 | [ensure: exception] self | raise.rb:107:9:107:26 | [ensure: exception] self | +| raise.rb:107:9:107:26 | [ensure: exception] self | raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | | raise.rb:107:9:107:26 | [ensure: return] self | raise.rb:107:9:107:26 | [ensure: return] self | -| raise.rb:107:9:107:26 | [ensure: return] self | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:107:9:107:26 | [ensure: return] self | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | | raise.rb:107:9:107:26 | self | raise.rb:107:9:107:26 | self | -| raise.rb:107:9:107:26 | self | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | -| raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | -| raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | -| raise.rb:109:5:110:25 | [ensure: raise] ensure ... | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | -| raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:107:9:107:26 | self | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | +| raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | +| raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | +| raise.rb:109:5:110:25 | [ensure: exception] ensure ... | raise.rb:109:5:110:25 | [ensure: exception] ensure ... | +| raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | | raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:109:5:110:25 | [ensure: return] ensure ... | | raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:116:3:118:5 | [ensure: return] if ... | | raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:117:5:117:22 | [ensure: return] self | @@ -2251,16 +2251,16 @@ dominates | raise.rb:109:5:110:25 | ensure ... | raise.rb:115:3:115:22 | self | | raise.rb:109:5:110:25 | ensure ... | raise.rb:116:3:118:5 | if ... | | raise.rb:109:5:110:25 | ensure ... | raise.rb:117:5:117:22 | self | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:115:3:115:22 | [ensure: raise] self | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:116:3:118:5 | [ensure: raise] if ... | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:117:5:117:22 | [ensure: raise] self | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:115:3:115:22 | [ensure: exception] self | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:116:3:118:5 | [ensure: exception] if ... | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:117:5:117:22 | [ensure: exception] self | | raise.rb:115:3:115:22 | self | raise.rb:115:3:115:22 | self | | raise.rb:115:3:115:22 | self | raise.rb:116:3:118:5 | if ... | | raise.rb:115:3:115:22 | self | raise.rb:117:5:117:22 | self | -| raise.rb:116:3:118:5 | [ensure: raise] if ... | raise.rb:116:3:118:5 | [ensure: raise] if ... | +| raise.rb:116:3:118:5 | [ensure: exception] if ... | raise.rb:116:3:118:5 | [ensure: exception] if ... | | raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:116:3:118:5 | [ensure: return] if ... | | raise.rb:116:3:118:5 | if ... | raise.rb:116:3:118:5 | if ... | -| raise.rb:117:5:117:22 | [ensure: raise] self | raise.rb:117:5:117:22 | [ensure: raise] self | +| raise.rb:117:5:117:22 | [ensure: exception] self | raise.rb:117:5:117:22 | [ensure: exception] self | | raise.rb:117:5:117:22 | [ensure: return] self | raise.rb:117:5:117:22 | [ensure: return] self | | raise.rb:117:5:117:22 | self | raise.rb:117:5:117:22 | self | | raise.rb:121:1:126:3 | enter m10 | raise.rb:121:1:126:3 | enter m10 | @@ -2277,7 +2277,7 @@ dominates | raise.rb:128:1:140:3 | enter m11 | raise.rb:133:3:133:19 | rescue ... | | raise.rb:128:1:140:3 | enter m11 | raise.rb:134:10:134:19 | ExceptionB | | raise.rb:128:1:140:3 | enter m11 | raise.rb:135:5:135:21 | self | -| raise.rb:128:1:140:3 | enter m11 | raise.rb:137:5:137:17 | [ensure: raise] self | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:137:5:137:17 | [ensure: exception] self | | raise.rb:128:1:140:3 | enter m11 | raise.rb:137:5:137:17 | self | | raise.rb:128:1:140:3 | exit m11 | raise.rb:128:1:140:3 | exit m11 | | raise.rb:130:5:132:7 | if ... | raise.rb:130:5:132:7 | if ... | @@ -2285,13 +2285,13 @@ dominates | raise.rb:131:7:131:22 | self | raise.rb:133:3:133:19 | rescue ... | | raise.rb:131:7:131:22 | self | raise.rb:134:10:134:19 | ExceptionB | | raise.rb:131:7:131:22 | self | raise.rb:135:5:135:21 | self | -| raise.rb:131:7:131:22 | self | raise.rb:137:5:137:17 | [ensure: raise] self | +| raise.rb:131:7:131:22 | self | raise.rb:137:5:137:17 | [ensure: exception] self | | raise.rb:133:3:133:19 | rescue ... | raise.rb:133:3:133:19 | rescue ... | | raise.rb:134:10:134:19 | ExceptionB | raise.rb:134:10:134:19 | ExceptionB | | raise.rb:134:10:134:19 | ExceptionB | raise.rb:135:5:135:21 | self | -| raise.rb:134:10:134:19 | ExceptionB | raise.rb:137:5:137:17 | [ensure: raise] self | +| raise.rb:134:10:134:19 | ExceptionB | raise.rb:137:5:137:17 | [ensure: exception] self | | raise.rb:135:5:135:21 | self | raise.rb:135:5:135:21 | self | -| raise.rb:137:5:137:17 | [ensure: raise] self | raise.rb:137:5:137:17 | [ensure: raise] self | +| raise.rb:137:5:137:17 | [ensure: exception] self | raise.rb:137:5:137:17 | [ensure: exception] self | | raise.rb:137:5:137:17 | self | raise.rb:137:5:137:17 | self | | raise.rb:142:1:148:3 | enter m12 | raise.rb:142:1:148:3 | enter m12 | | raise.rb:142:1:148:3 | enter m12 | raise.rb:142:1:148:3 | exit m12 (normal) | @@ -2362,7 +2362,7 @@ postDominance | break_ensure.rb:3:5:5:7 | if ... | break_ensure.rb:3:5:5:7 | if ... | | break_ensure.rb:3:8:3:8 | x | break_ensure.rb:3:8:3:8 | x | | break_ensure.rb:4:7:4:11 | break | break_ensure.rb:4:7:4:11 | break | -| break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | +| break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | | break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:1:1:11:3 | enter m1 | | break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:2:3:6:5 | while ... | | break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:2:9:2:9 | x | @@ -2371,8 +2371,8 @@ postDominance | break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:4:7:4:11 | break | | break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:8:3:10:5 | if ... | | break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:9:5:9:23 | self | -| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:8:6:8:13 | [ensure: raise] self | -| break_ensure.rb:9:5:9:23 | [ensure: raise] self | break_ensure.rb:9:5:9:23 | [ensure: raise] self | +| break_ensure.rb:8:6:8:13 | [ensure: exception] self | break_ensure.rb:8:6:8:13 | [ensure: exception] self | +| break_ensure.rb:9:5:9:23 | [ensure: exception] self | break_ensure.rb:9:5:9:23 | [ensure: exception] self | | break_ensure.rb:9:5:9:23 | self | break_ensure.rb:9:5:9:23 | self | | break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:13:1:25:3 | enter m2 | | break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:13:1:25:3 | enter m2 | @@ -2382,11 +2382,11 @@ postDominance | break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:16:10:16:10 | x | | break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:17:9:17:13 | break | | break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | -| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | | break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:7:22:9 | if ... | -| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:10:20:10 | [ensure: exception] y | | break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:21:9:21:20 | [ensure: break] self | -| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:21:9:21:20 | [ensure: exception] self | | break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:21:9:21:20 | self | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:13:1:25:3 | enter m2 | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:14:9:14:9 | x | @@ -2399,15 +2399,15 @@ postDominance | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:17:9:17:13 | break | | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:21:9:21:20 | [ensure: break] self | -| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | -| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:20:10:20:10 | [ensure: raise] y | -| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | +| break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | break_ensure.rb:20:10:20:10 | [ensure: exception] y | +| break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | break_ensure.rb:21:9:21:20 | [ensure: exception] self | | break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:16:7:18:9 | if ... | | break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:20:7:22:9 | if ... | | break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:21:9:21:20 | self | -| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:20:10:20:10 | [ensure: exception] y | break_ensure.rb:20:10:20:10 | [ensure: exception] y | | break_ensure.rb:21:9:21:20 | [ensure: break] self | break_ensure.rb:21:9:21:20 | [ensure: break] self | -| break_ensure.rb:21:9:21:20 | [ensure: raise] self | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:21:9:21:20 | [ensure: exception] self | break_ensure.rb:21:9:21:20 | [ensure: exception] self | | break_ensure.rb:21:9:21:20 | self | break_ensure.rb:21:9:21:20 | self | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:27:1:42:3 | enter m3 | | break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:27:1:42:3 | exit m3 | @@ -2427,7 +2427,7 @@ postDominance | break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:36:11:36:15 | break | | break_ensure.rb:29:5:31:7 | if ... | break_ensure.rb:29:5:31:7 | if ... | | break_ensure.rb:30:7:30:12 | return | break_ensure.rb:30:7:30:12 | return | -| break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | +| break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:30:7:30:12 | return | | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:33:11:33:11 | [ensure: return] y | @@ -2440,20 +2440,20 @@ postDominance | break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:35:9:37:11 | if ... | | break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:35:12:35:12 | x | | break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:36:11:36:15 | break | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:33:11:33:11 | [ensure: raise] y | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:33:11:33:11 | [ensure: exception] y | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:30:7:30:12 | return | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:33:11:33:11 | [ensure: return] y | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:29:5:31:7 | if ... | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:33:11:33:11 | y | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:9:37:11 | if ... | -| break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | +| break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | | break_ensure.rb:35:9:37:11 | if ... | break_ensure.rb:35:9:37:11 | if ... | -| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:35:12:35:12 | [ensure: raise] x | +| break_ensure.rb:35:12:35:12 | [ensure: exception] x | break_ensure.rb:35:12:35:12 | [ensure: exception] x | | break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:35:12:35:12 | [ensure: return] x | | break_ensure.rb:35:12:35:12 | x | break_ensure.rb:35:12:35:12 | x | -| break_ensure.rb:36:11:36:15 | [ensure: raise] break | break_ensure.rb:36:11:36:15 | [ensure: raise] break | +| break_ensure.rb:36:11:36:15 | [ensure: exception] break | break_ensure.rb:36:11:36:15 | [ensure: exception] break | | break_ensure.rb:36:11:36:15 | [ensure: return] break | break_ensure.rb:36:11:36:15 | [ensure: return] break | | break_ensure.rb:36:11:36:15 | break | break_ensure.rb:36:11:36:15 | break | | break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:44:1:56:3 | enter m4 | @@ -2463,23 +2463,23 @@ postDominance | break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:47:7:49:9 | if ... | | break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:47:10:47:10 | x | | break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:48:9:48:16 | self | -| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | | break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:51:7:53:9 | if ... | -| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:51:10:51:10 | [ensure: exception] x | | break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:52:15:52:16 | 10 | -| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:44:1:56:3 | enter m4 | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:45:9:45:9 | x | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | if ... | | break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:47:7:49:9 | if ... | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:47:10:47:10 | x | | break_ensure.rb:48:9:48:16 | self | break_ensure.rb:48:9:48:16 | self | -| break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | +| break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | | break_ensure.rb:51:7:53:9 | if ... | break_ensure.rb:51:7:53:9 | if ... | -| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:48:9:48:16 | self | -| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:48:9:48:16 | self | +| break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:51:10:51:10 | [ensure: exception] x | | break_ensure.rb:52:15:52:16 | 10 | break_ensure.rb:52:15:52:16 | 10 | -| break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | | case.rb:1:1:6:3 | enter if_in_case | case.rb:1:1:6:3 | enter if_in_case | | case.rb:1:1:99:4 | enter case.rb | case.rb:1:1:99:4 | enter case.rb | | case.rb:2:3:5:5 | case ... | case.rb:1:1:6:3 | enter if_in_case | @@ -3959,7 +3959,7 @@ postDominance | raise.rb:71:9:71:9 | x | raise.rb:68:1:77:3 | enter m7 | | raise.rb:71:9:71:9 | x | raise.rb:71:9:71:9 | x | | raise.rb:72:13:72:17 | x < 0 | raise.rb:72:13:72:17 | x < 0 | -| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:76:3:76:15 | [ensure: raise] self | +| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:76:3:76:15 | [ensure: exception] self | | raise.rb:76:3:76:15 | self | raise.rb:71:3:72:18 | elsif ... | | raise.rb:76:3:76:15 | self | raise.rb:76:3:76:15 | self | | raise.rb:79:1:92:3 | enter m8 | raise.rb:79:1:92:3 | enter m8 | @@ -3975,7 +3975,7 @@ postDominance | raise.rb:84:11:84:11 | x | raise.rb:79:1:92:3 | enter m8 | | raise.rb:84:11:84:11 | x | raise.rb:84:11:84:11 | x | | raise.rb:85:15:85:19 | x < 0 | raise.rb:85:15:85:19 | x < 0 | -| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:89:5:89:17 | [ensure: raise] self | +| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:89:5:89:17 | [ensure: exception] self | | raise.rb:89:5:89:17 | self | raise.rb:84:5:85:20 | elsif ... | | raise.rb:89:5:89:17 | self | raise.rb:89:5:89:17 | self | | raise.rb:94:1:119:3 | enter m9 | raise.rb:94:1:119:3 | enter m9 | @@ -4005,10 +4005,10 @@ postDominance | raise.rb:99:11:99:11 | x | raise.rb:97:8:97:8 | x | | raise.rb:99:11:99:11 | x | raise.rb:99:11:99:11 | x | | raise.rb:100:15:100:19 | x < 0 | raise.rb:100:15:100:19 | x < 0 | -| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:104:5:104:23 | [ensure: raise] self | +| raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:104:5:104:23 | [ensure: exception] self | | raise.rb:104:5:104:23 | self | raise.rb:99:5:100:20 | elsif ... | | raise.rb:104:5:104:23 | self | raise.rb:104:5:104:23 | self | -| raise.rb:106:7:108:9 | [ensure: raise] if ... | raise.rb:106:7:108:9 | [ensure: raise] if ... | +| raise.rb:106:7:108:9 | [ensure: exception] if ... | raise.rb:106:7:108:9 | [ensure: exception] if ... | | raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:100:15:100:19 | x < 0 | | raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:106:7:108:9 | [ensure: return] if ... | | raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:106:10:106:11 | [ensure: return] b1 | @@ -4016,19 +4016,19 @@ postDominance | raise.rb:106:7:108:9 | if ... | raise.rb:104:5:104:23 | self | | raise.rb:106:7:108:9 | if ... | raise.rb:106:7:108:9 | if ... | | raise.rb:106:7:108:9 | if ... | raise.rb:106:10:106:11 | b1 | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:106:10:106:11 | [ensure: raise] b1 | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:106:10:106:11 | [ensure: exception] b1 | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:100:15:100:19 | x < 0 | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:106:10:106:11 | [ensure: return] b1 | | raise.rb:106:10:106:11 | b1 | raise.rb:99:5:100:20 | elsif ... | | raise.rb:106:10:106:11 | b1 | raise.rb:104:5:104:23 | self | | raise.rb:106:10:106:11 | b1 | raise.rb:106:10:106:11 | b1 | -| raise.rb:107:9:107:26 | [ensure: raise] self | raise.rb:107:9:107:26 | [ensure: raise] self | +| raise.rb:107:9:107:26 | [ensure: exception] self | raise.rb:107:9:107:26 | [ensure: exception] self | | raise.rb:107:9:107:26 | [ensure: return] self | raise.rb:107:9:107:26 | [ensure: return] self | | raise.rb:107:9:107:26 | self | raise.rb:107:9:107:26 | self | -| raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | -| raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | -| raise.rb:109:5:110:25 | [ensure: raise] ensure ... | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | -| raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | +| raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | +| raise.rb:109:5:110:25 | [ensure: exception] ensure ... | raise.rb:109:5:110:25 | [ensure: exception] ensure ... | +| raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | | raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:100:15:100:19 | x < 0 | | raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:106:7:108:9 | [ensure: return] if ... | | raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:106:10:106:11 | [ensure: return] b1 | @@ -4038,14 +4038,14 @@ postDominance | raise.rb:109:5:110:25 | ensure ... | raise.rb:106:7:108:9 | if ... | | raise.rb:109:5:110:25 | ensure ... | raise.rb:106:10:106:11 | b1 | | raise.rb:109:5:110:25 | ensure ... | raise.rb:109:5:110:25 | ensure ... | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:115:3:115:22 | [ensure: raise] self | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:115:3:115:22 | [ensure: exception] self | | raise.rb:115:3:115:22 | self | raise.rb:99:5:100:20 | elsif ... | | raise.rb:115:3:115:22 | self | raise.rb:104:5:104:23 | self | | raise.rb:115:3:115:22 | self | raise.rb:106:7:108:9 | if ... | | raise.rb:115:3:115:22 | self | raise.rb:106:10:106:11 | b1 | | raise.rb:115:3:115:22 | self | raise.rb:109:5:110:25 | ensure ... | | raise.rb:115:3:115:22 | self | raise.rb:115:3:115:22 | self | -| raise.rb:116:3:118:5 | [ensure: raise] if ... | raise.rb:116:3:118:5 | [ensure: raise] if ... | +| raise.rb:116:3:118:5 | [ensure: exception] if ... | raise.rb:116:3:118:5 | [ensure: exception] if ... | | raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:100:15:100:19 | x < 0 | | raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:106:7:108:9 | [ensure: return] if ... | | raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:106:10:106:11 | [ensure: return] b1 | @@ -4058,7 +4058,7 @@ postDominance | raise.rb:116:3:118:5 | if ... | raise.rb:109:5:110:25 | ensure ... | | raise.rb:116:3:118:5 | if ... | raise.rb:115:3:115:22 | self | | raise.rb:116:3:118:5 | if ... | raise.rb:116:3:118:5 | if ... | -| raise.rb:117:5:117:22 | [ensure: raise] self | raise.rb:117:5:117:22 | [ensure: raise] self | +| raise.rb:117:5:117:22 | [ensure: exception] self | raise.rb:117:5:117:22 | [ensure: exception] self | | raise.rb:117:5:117:22 | [ensure: return] self | raise.rb:117:5:117:22 | [ensure: return] self | | raise.rb:117:5:117:22 | self | raise.rb:117:5:117:22 | self | | raise.rb:121:1:126:3 | enter m10 | raise.rb:121:1:126:3 | enter m10 | @@ -4074,7 +4074,7 @@ postDominance | raise.rb:134:10:134:19 | ExceptionB | raise.rb:134:10:134:19 | ExceptionB | | raise.rb:135:5:135:21 | self | raise.rb:134:10:134:19 | ExceptionB | | raise.rb:135:5:135:21 | self | raise.rb:135:5:135:21 | self | -| raise.rb:137:5:137:17 | [ensure: raise] self | raise.rb:137:5:137:17 | [ensure: raise] self | +| raise.rb:137:5:137:17 | [ensure: exception] self | raise.rb:137:5:137:17 | [ensure: exception] self | | raise.rb:137:5:137:17 | self | raise.rb:128:1:140:3 | enter m11 | | raise.rb:137:5:137:17 | self | raise.rb:130:5:132:7 | if ... | | raise.rb:137:5:137:17 | self | raise.rb:131:7:131:22 | self | @@ -4131,10 +4131,10 @@ immediateDominator | break_ensure.rb:3:5:5:7 | if ... | break_ensure.rb:3:8:3:8 | x | | break_ensure.rb:3:8:3:8 | x | break_ensure.rb:2:9:2:9 | x | | break_ensure.rb:4:7:4:11 | break | break_ensure.rb:3:8:3:8 | x | -| break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | break_ensure.rb:8:6:8:13 | [ensure: raise] self | +| break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | break_ensure.rb:8:6:8:13 | [ensure: exception] self | | break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:2:3:6:5 | while ... | -| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:2:9:2:9 | x | -| break_ensure.rb:9:5:9:23 | [ensure: raise] self | break_ensure.rb:8:6:8:13 | [ensure: raise] self | +| break_ensure.rb:8:6:8:13 | [ensure: exception] self | break_ensure.rb:2:9:2:9 | x | +| break_ensure.rb:9:5:9:23 | [ensure: exception] self | break_ensure.rb:8:6:8:13 | [ensure: exception] self | | break_ensure.rb:9:5:9:23 | self | break_ensure.rb:2:3:6:5 | while ... | | break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:14:9:14:9 | x | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:13:1:25:3 | enter m2 | @@ -4142,29 +4142,29 @@ immediateDominator | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:14:9:14:9 | x | | break_ensure.rb:17:9:17:13 | break | break_ensure.rb:16:10:16:10 | x | | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:17:9:17:13 | break | -| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | break_ensure.rb:20:10:20:10 | [ensure: exception] y | | break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:16:7:18:9 | if ... | -| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:16:10:16:10 | x | +| break_ensure.rb:20:10:20:10 | [ensure: exception] y | break_ensure.rb:16:10:16:10 | x | | break_ensure.rb:21:9:21:20 | [ensure: break] self | break_ensure.rb:17:9:17:13 | break | -| break_ensure.rb:21:9:21:20 | [ensure: raise] self | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:21:9:21:20 | [ensure: exception] self | break_ensure.rb:20:10:20:10 | [ensure: exception] y | | break_ensure.rb:21:9:21:20 | self | break_ensure.rb:16:7:18:9 | if ... | | break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:27:1:42:3 | enter m3 | | break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:27:1:42:3 | enter m3 | | break_ensure.rb:29:5:31:7 | if ... | break_ensure.rb:27:1:42:3 | enter m3 | | break_ensure.rb:30:7:30:12 | return | break_ensure.rb:27:1:42:3 | enter m3 | -| break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break_ensure.rb:33:11:33:11 | [ensure: raise] y | +| break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | break_ensure.rb:33:11:33:11 | [ensure: exception] y | | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:33:11:33:11 | [ensure: return] y | | break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:33:11:33:11 | y | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:27:1:42:3 | enter m3 | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:27:1:42:3 | enter m3 | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:30:7:30:12 | return | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:29:5:31:7 | if ... | -| break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | break_ensure.rb:35:12:35:12 | [ensure: raise] x | +| break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | break_ensure.rb:35:12:35:12 | [ensure: exception] x | | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | break_ensure.rb:35:12:35:12 | [ensure: return] x | | break_ensure.rb:35:9:37:11 | if ... | break_ensure.rb:35:12:35:12 | x | -| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:33:11:33:11 | [ensure: raise] y | +| break_ensure.rb:35:12:35:12 | [ensure: exception] x | break_ensure.rb:33:11:33:11 | [ensure: exception] y | | break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:33:11:33:11 | [ensure: return] y | | break_ensure.rb:35:12:35:12 | x | break_ensure.rb:33:11:33:11 | y | -| break_ensure.rb:36:11:36:15 | [ensure: raise] break | break_ensure.rb:35:12:35:12 | [ensure: raise] x | +| break_ensure.rb:36:11:36:15 | [ensure: exception] break | break_ensure.rb:35:12:35:12 | [ensure: exception] x | | break_ensure.rb:36:11:36:15 | [ensure: return] break | break_ensure.rb:35:12:35:12 | [ensure: return] x | | break_ensure.rb:36:11:36:15 | break | break_ensure.rb:35:12:35:12 | x | | break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:45:9:45:9 | x | @@ -4172,11 +4172,11 @@ immediateDominator | break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:47:10:47:10 | x | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:45:9:45:9 | x | | break_ensure.rb:48:9:48:16 | self | break_ensure.rb:47:10:47:10 | x | -| break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | break_ensure.rb:51:10:51:10 | [ensure: exception] x | | break_ensure.rb:51:7:53:9 | if ... | break_ensure.rb:47:7:49:9 | if ... | -| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:47:10:47:10 | x | +| break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:47:10:47:10 | x | | break_ensure.rb:52:15:52:16 | 10 | break_ensure.rb:47:7:49:9 | if ... | -| break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | break_ensure.rb:51:10:51:10 | [ensure: exception] x | | case.rb:2:3:5:5 | case ... | case.rb:1:1:6:3 | enter if_in_case | | case.rb:3:5:3:42 | [match] when ... | case.rb:1:1:6:3 | enter if_in_case | | case.rb:3:5:3:42 | [no-match] when ... | case.rb:1:1:6:3 | enter if_in_case | @@ -4470,7 +4470,7 @@ immediateDominator | raise.rb:71:3:72:18 | elsif ... | raise.rb:71:9:71:9 | x | | raise.rb:71:9:71:9 | x | raise.rb:68:1:77:3 | enter m7 | | raise.rb:72:13:72:17 | x < 0 | raise.rb:71:9:71:9 | x | -| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:68:1:77:3 | enter m7 | +| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:68:1:77:3 | enter m7 | | raise.rb:76:3:76:15 | self | raise.rb:71:3:72:18 | elsif ... | | raise.rb:79:1:92:3 | exit m8 | raise.rb:79:1:92:3 | enter m8 | | raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:84:11:84:11 | x | @@ -4478,7 +4478,7 @@ immediateDominator | raise.rb:84:5:85:20 | elsif ... | raise.rb:84:11:84:11 | x | | raise.rb:84:11:84:11 | x | raise.rb:79:1:92:3 | enter m8 | | raise.rb:85:15:85:19 | x < 0 | raise.rb:84:11:84:11 | x | -| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:79:1:92:3 | enter m8 | +| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:79:1:92:3 | enter m8 | | raise.rb:89:5:89:17 | self | raise.rb:84:5:85:20 | elsif ... | | raise.rb:94:1:119:3 | exit m9 | raise.rb:94:1:119:3 | enter m9 | | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:94:1:119:3 | enter m9 | @@ -4488,29 +4488,29 @@ immediateDominator | raise.rb:99:5:100:20 | elsif ... | raise.rb:99:11:99:11 | x | | raise.rb:99:11:99:11 | x | raise.rb:97:8:97:8 | x | | raise.rb:100:15:100:19 | x < 0 | raise.rb:99:11:99:11 | x | -| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:97:8:97:8 | x | +| raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:97:8:97:8 | x | | raise.rb:104:5:104:23 | self | raise.rb:99:5:100:20 | elsif ... | -| raise.rb:106:7:108:9 | [ensure: raise] if ... | raise.rb:106:10:106:11 | [ensure: raise] b1 | +| raise.rb:106:7:108:9 | [ensure: exception] if ... | raise.rb:106:10:106:11 | [ensure: exception] b1 | | raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:106:10:106:11 | [ensure: return] b1 | | raise.rb:106:7:108:9 | if ... | raise.rb:106:10:106:11 | b1 | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:104:5:104:23 | [ensure: raise] self | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:104:5:104:23 | [ensure: exception] self | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:100:15:100:19 | x < 0 | | raise.rb:106:10:106:11 | b1 | raise.rb:104:5:104:23 | self | -| raise.rb:107:9:107:26 | [ensure: raise] self | raise.rb:106:10:106:11 | [ensure: raise] b1 | +| raise.rb:107:9:107:26 | [ensure: exception] self | raise.rb:106:10:106:11 | [ensure: exception] b1 | | raise.rb:107:9:107:26 | [ensure: return] self | raise.rb:106:10:106:11 | [ensure: return] b1 | | raise.rb:107:9:107:26 | self | raise.rb:106:10:106:11 | b1 | -| raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | raise.rb:107:9:107:26 | self | -| raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | raise.rb:107:9:107:26 | [ensure: raise] self | -| raise.rb:109:5:110:25 | [ensure: raise] ensure ... | raise.rb:106:7:108:9 | [ensure: raise] if ... | -| raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | raise.rb:107:9:107:26 | [ensure: return] self | +| raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | raise.rb:107:9:107:26 | self | +| raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | raise.rb:107:9:107:26 | [ensure: exception] self | +| raise.rb:109:5:110:25 | [ensure: exception] ensure ... | raise.rb:106:7:108:9 | [ensure: exception] if ... | +| raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | raise.rb:107:9:107:26 | [ensure: return] self | | raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:106:7:108:9 | [ensure: return] if ... | | raise.rb:109:5:110:25 | ensure ... | raise.rb:106:7:108:9 | if ... | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:94:1:119:3 | enter m9 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:94:1:119:3 | enter m9 | | raise.rb:115:3:115:22 | self | raise.rb:109:5:110:25 | ensure ... | -| raise.rb:116:3:118:5 | [ensure: raise] if ... | raise.rb:115:3:115:22 | [ensure: raise] self | +| raise.rb:116:3:118:5 | [ensure: exception] if ... | raise.rb:115:3:115:22 | [ensure: exception] self | | raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:109:5:110:25 | [ensure: return] ensure ... | | raise.rb:116:3:118:5 | if ... | raise.rb:115:3:115:22 | self | -| raise.rb:117:5:117:22 | [ensure: raise] self | raise.rb:115:3:115:22 | [ensure: raise] self | +| raise.rb:117:5:117:22 | [ensure: exception] self | raise.rb:115:3:115:22 | [ensure: exception] self | | raise.rb:117:5:117:22 | [ensure: return] self | raise.rb:109:5:110:25 | [ensure: return] ensure ... | | raise.rb:117:5:117:22 | self | raise.rb:115:3:115:22 | self | | raise.rb:121:1:126:3 | exit m10 | raise.rb:121:1:126:3 | enter m10 | @@ -4522,7 +4522,7 @@ immediateDominator | raise.rb:133:3:133:19 | rescue ... | raise.rb:131:7:131:22 | self | | raise.rb:134:10:134:19 | ExceptionB | raise.rb:131:7:131:22 | self | | raise.rb:135:5:135:21 | self | raise.rb:134:10:134:19 | ExceptionB | -| raise.rb:137:5:137:17 | [ensure: raise] self | raise.rb:134:10:134:19 | ExceptionB | +| raise.rb:137:5:137:17 | [ensure: exception] self | raise.rb:134:10:134:19 | ExceptionB | | raise.rb:137:5:137:17 | self | raise.rb:128:1:140:3 | enter m11 | | raise.rb:142:1:148:3 | exit m12 (normal) | raise.rb:142:1:148:3 | enter m12 | | raise.rb:143:3:145:5 | if ... | raise.rb:142:1:148:3 | enter m12 | @@ -4550,16 +4550,16 @@ controls | break_ensure.rb:2:9:2:9 | x | break_ensure.rb:4:7:4:11 | break | true | | break_ensure.rb:3:8:3:8 | x | break_ensure.rb:3:5:5:7 | if ... | false | | break_ensure.rb:3:8:3:8 | x | break_ensure.rb:4:7:4:11 | break | true | -| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:9:5:9:23 | [ensure: raise] self | true | +| break_ensure.rb:8:6:8:13 | [ensure: exception] self | break_ensure.rb:9:5:9:23 | [ensure: exception] self | true | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:16:7:18:9 | if ... | true | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:16:10:16:10 | x | true | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:17:9:17:13 | break | true | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | true | -| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | true | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | if ... | true | -| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:10:20:10 | [ensure: raise] y | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:10:20:10 | [ensure: exception] y | true | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | [ensure: break] self | true | -| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | [ensure: raise] self | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | [ensure: exception] self | true | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | self | true | | break_ensure.rb:16:7:18:9 | if ... | break_ensure.rb:21:9:21:20 | self | true | | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:16:7:18:9 | if ... | false | @@ -4569,7 +4569,7 @@ controls | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:21:9:21:20 | [ensure: break] self | true | | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:21:9:21:20 | self | false | | break_ensure.rb:17:9:17:13 | break | break_ensure.rb:21:9:21:20 | [ensure: break] self | true | -| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:21:9:21:20 | [ensure: raise] self | true | +| break_ensure.rb:20:10:20:10 | [ensure: exception] y | break_ensure.rb:21:9:21:20 | [ensure: exception] self | true | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:29:5:31:7 | if ... | false | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:30:7:30:12 | return | true | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | true | @@ -4582,17 +4582,17 @@ controls | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:12:35:12 | x | false | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:36:11:36:15 | [ensure: return] break | true | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:36:11:36:15 | break | false | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | true | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:35:12:35:12 | [ensure: raise] x | true | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:36:11:36:15 | [ensure: raise] break | true | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | true | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:35:12:35:12 | [ensure: exception] x | true | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:36:11:36:15 | [ensure: exception] break | true | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | true | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:35:12:35:12 | [ensure: return] x | true | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:36:11:36:15 | [ensure: return] break | true | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:9:37:11 | if ... | true | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:12:35:12 | x | true | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:36:11:36:15 | break | true | -| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | false | -| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:36:11:36:15 | [ensure: raise] break | true | +| break_ensure.rb:35:12:35:12 | [ensure: exception] x | break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | false | +| break_ensure.rb:35:12:35:12 | [ensure: exception] x | break_ensure.rb:36:11:36:15 | [ensure: exception] break | true | | break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | false | | break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:36:11:36:15 | [ensure: return] break | true | | break_ensure.rb:35:12:35:12 | x | break_ensure.rb:35:9:37:11 | if ... | false | @@ -4600,19 +4600,19 @@ controls | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:47:7:49:9 | if ... | true | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:47:10:47:10 | x | true | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:48:9:48:16 | self | true | -| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | true | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | true | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | if ... | true | -| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:10:51:10 | [ensure: raise] x | true | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:10:51:10 | [ensure: exception] x | true | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:52:15:52:16 | 10 | true | -| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | true | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | true | | break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:51:7:53:9 | if ... | false | | break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:52:15:52:16 | 10 | true | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:47:7:49:9 | if ... | false | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:48:9:48:16 | self | true | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:51:7:53:9 | if ... | false | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:52:15:52:16 | 10 | false | -| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | false | -| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | true | +| break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | false | +| break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | true | | case.rb:1:1:6:3 | enter if_in_case | case.rb:3:5:3:42 | [match] when ... | match | | case.rb:1:1:6:3 | enter if_in_case | case.rb:3:5:3:42 | [no-match] when ... | no-match | | case.rb:1:1:6:3 | enter if_in_case | case.rb:3:18:3:41 | if ... | match | @@ -5726,8 +5726,8 @@ controls | raise.rb:97:8:97:8 | x | raise.rb:106:10:106:11 | b1 | false | | raise.rb:97:8:97:8 | x | raise.rb:107:9:107:26 | [ensure: return] self | false | | raise.rb:97:8:97:8 | x | raise.rb:107:9:107:26 | self | false | -| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | false | -| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | false | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | false | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | false | | raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: return] ensure ... | false | | raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | ensure ... | false | | raise.rb:97:8:97:8 | x | raise.rb:115:3:115:22 | self | false | @@ -5744,8 +5744,8 @@ controls | raise.rb:99:11:99:11 | x | raise.rb:106:10:106:11 | b1 | false | | raise.rb:99:11:99:11 | x | raise.rb:107:9:107:26 | [ensure: return] self | true | | raise.rb:99:11:99:11 | x | raise.rb:107:9:107:26 | self | false | -| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | false | -| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | true | +| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | false | +| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | true | | raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure: return] ensure ... | true | | raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | ensure ... | false | | raise.rb:99:11:99:11 | x | raise.rb:115:3:115:22 | self | false | @@ -5753,27 +5753,27 @@ controls | raise.rb:99:11:99:11 | x | raise.rb:116:3:118:5 | if ... | false | | raise.rb:99:11:99:11 | x | raise.rb:117:5:117:22 | [ensure: return] self | true | | raise.rb:99:11:99:11 | x | raise.rb:117:5:117:22 | self | false | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:106:7:108:9 | [ensure: raise] if ... | false | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:107:9:107:26 | [ensure: raise] self | true | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | true | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | false | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:106:7:108:9 | [ensure: exception] if ... | false | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:107:9:107:26 | [ensure: exception] self | true | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | true | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:109:5:110:25 | [ensure: exception] ensure ... | false | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:106:7:108:9 | [ensure: return] if ... | false | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:107:9:107:26 | [ensure: return] self | true | -| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | true | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | true | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:109:5:110:25 | [ensure: return] ensure ... | false | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:116:3:118:5 | [ensure: return] if ... | false | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:117:5:117:22 | [ensure: return] self | false | | raise.rb:106:10:106:11 | b1 | raise.rb:106:7:108:9 | if ... | false | | raise.rb:106:10:106:11 | b1 | raise.rb:107:9:107:26 | self | true | -| raise.rb:106:10:106:11 | b1 | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | true | +| raise.rb:106:10:106:11 | b1 | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | true | | raise.rb:106:10:106:11 | b1 | raise.rb:109:5:110:25 | ensure ... | false | | raise.rb:106:10:106:11 | b1 | raise.rb:115:3:115:22 | self | false | | raise.rb:106:10:106:11 | b1 | raise.rb:116:3:118:5 | if ... | false | | raise.rb:106:10:106:11 | b1 | raise.rb:117:5:117:22 | self | false | | raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:116:3:118:5 | [ensure: return] if ... | false | | raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:117:5:117:22 | [ensure: return] self | true | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:116:3:118:5 | [ensure: raise] if ... | false | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:117:5:117:22 | [ensure: raise] self | true | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:116:3:118:5 | [ensure: exception] if ... | false | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:117:5:117:22 | [ensure: exception] self | true | | raise.rb:115:3:115:22 | self | raise.rb:116:3:118:5 | if ... | false | | raise.rb:115:3:115:22 | self | raise.rb:117:5:117:22 | self | true | | raise.rb:121:1:126:3 | enter m10 | raise.rb:121:14:121:30 | self | false | @@ -5785,11 +5785,11 @@ controls | raise.rb:128:1:140:3 | enter m11 | raise.rb:133:3:133:19 | rescue ... | true | | raise.rb:128:1:140:3 | enter m11 | raise.rb:134:10:134:19 | ExceptionB | true | | raise.rb:128:1:140:3 | enter m11 | raise.rb:135:5:135:21 | self | true | -| raise.rb:128:1:140:3 | enter m11 | raise.rb:137:5:137:17 | [ensure: raise] self | true | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:137:5:137:17 | [ensure: exception] self | true | | raise.rb:131:7:131:22 | self | raise.rb:133:3:133:19 | rescue ... | match | | raise.rb:131:7:131:22 | self | raise.rb:134:10:134:19 | ExceptionB | no-match | | raise.rb:131:7:131:22 | self | raise.rb:135:5:135:21 | self | no-match | -| raise.rb:131:7:131:22 | self | raise.rb:137:5:137:17 | [ensure: raise] self | no-match | +| raise.rb:131:7:131:22 | self | raise.rb:137:5:137:17 | [ensure: exception] self | no-match | | raise.rb:134:10:134:19 | ExceptionB | raise.rb:135:5:135:21 | self | match | | raise.rb:142:1:148:3 | enter m12 | raise.rb:143:3:145:5 | if ... | false | | raise.rb:142:1:148:3 | enter m12 | raise.rb:144:5:144:12 | self | true | @@ -5810,34 +5810,34 @@ successor | break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:9:5:9:23 | self | true | | break_ensure.rb:2:9:2:9 | x | break_ensure.rb:2:3:6:5 | while ... | false | | break_ensure.rb:2:9:2:9 | x | break_ensure.rb:3:8:3:8 | x | true | -| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:8:6:8:13 | [ensure: raise] self | raise | -| break_ensure.rb:3:8:3:8 | x | break_ensure.rb:2:3:6:5 | while ... | raise | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:8:6:8:13 | [ensure: exception] self | exception | +| break_ensure.rb:3:8:3:8 | x | break_ensure.rb:2:3:6:5 | while ... | exception | | break_ensure.rb:3:8:3:8 | x | break_ensure.rb:3:5:5:7 | if ... | false | | break_ensure.rb:3:8:3:8 | x | break_ensure.rb:4:7:4:11 | break | true | -| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | false | -| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:9:5:9:23 | [ensure: raise] self | true | +| break_ensure.rb:8:6:8:13 | [ensure: exception] self | break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | false | +| break_ensure.rb:8:6:8:13 | [ensure: exception] self | break_ensure.rb:9:5:9:23 | [ensure: exception] self | true | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:14:3:24:5 | while ... | false | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:16:10:16:10 | x | true | | break_ensure.rb:16:7:18:9 | if ... | break_ensure.rb:20:7:22:9 | if ... | false | | break_ensure.rb:16:7:18:9 | if ... | break_ensure.rb:21:9:21:20 | self | true | | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:16:7:18:9 | if ... | false | | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:17:9:17:13 | break | true | -| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:10:20:10 | [ensure: raise] y | raise | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:10:20:10 | [ensure: exception] y | exception | | break_ensure.rb:17:9:17:13 | break | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | false | | break_ensure.rb:17:9:17:13 | break | break_ensure.rb:21:9:21:20 | [ensure: break] self | true | -| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | false | -| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:21:9:21:20 | [ensure: raise] self | true | +| break_ensure.rb:20:10:20:10 | [ensure: exception] y | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | false | +| break_ensure.rb:20:10:20:10 | [ensure: exception] y | break_ensure.rb:21:9:21:20 | [ensure: exception] self | true | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:29:5:31:7 | if ... | false | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:30:7:30:12 | return | true | -| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:11:33:11 | [ensure: raise] y | raise | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | false | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:35:12:35:12 | [ensure: raise] x | true | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:11:33:11 | [ensure: exception] y | exception | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | false | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:35:12:35:12 | [ensure: exception] x | true | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | false | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:35:12:35:12 | [ensure: return] x | true | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:33:5:39:7 | while ... | false | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:12:35:12 | x | true | -| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | false | -| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:36:11:36:15 | [ensure: raise] break | true | +| break_ensure.rb:35:12:35:12 | [ensure: exception] x | break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | false | +| break_ensure.rb:35:12:35:12 | [ensure: exception] x | break_ensure.rb:36:11:36:15 | [ensure: exception] break | true | | break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | false | | break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:36:11:36:15 | [ensure: return] break | true | | break_ensure.rb:35:12:35:12 | x | break_ensure.rb:35:9:37:11 | if ... | false | @@ -5848,9 +5848,9 @@ successor | break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:52:15:52:16 | 10 | true | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:47:7:49:9 | if ... | false | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:48:9:48:16 | self | true | -| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:51:10:51:10 | [ensure: raise] x | raise | -| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | false | -| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | true | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:51:10:51:10 | [ensure: exception] x | exception | +| break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | false | +| break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | true | | case.rb:1:1:6:3 | enter if_in_case | case.rb:3:5:3:42 | [match] when ... | match | | case.rb:1:1:6:3 | enter if_in_case | case.rb:3:5:3:42 | [no-match] when ... | no-match | | case.rb:3:5:3:42 | [match] when ... | case.rb:3:21:3:22 | self | match | @@ -5873,9 +5873,9 @@ successor | case.rb:15:5:15:28 | in ... then ... | case.rb:15:17:15:17 | x | match | | case.rb:15:17:15:17 | x | case.rb:15:28:15:28 | 7 | false | | case.rb:15:17:15:17 | x | case.rb:16:10:16:10 | 8 | true | -| case.rb:20:1:24:3 | enter case_match_no_match | case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | raise | +| case.rb:20:1:24:3 | enter case_match_no_match | case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | exception | | case.rb:20:1:24:3 | enter case_match_no_match | case.rb:21:3:23:5 | case ... | match | -| case.rb:26:1:30:3 | enter case_match_raise | case.rb:26:1:30:3 | exit case_match_raise (abnormal) | raise | +| case.rb:26:1:30:3 | enter case_match_raise | case.rb:26:1:30:3 | exit case_match_raise (abnormal) | exception | | case.rb:26:1:30:3 | enter case_match_raise | case.rb:27:3:29:5 | case ... | match | | case.rb:32:1:39:3 | enter case_match_array | case.rb:33:3:38:5 | case ... | match | | case.rb:32:1:39:3 | enter case_match_array | case.rb:35:5:35:11 | in ... then ... | no-match | @@ -5889,9 +5889,9 @@ successor | case.rb:36:5:36:13 | in ... then ... | case.rb:36:9:36:9 | x | true | | case.rb:36:5:36:13 | in ... then ... | case.rb:37:5:37:27 | in ... then ... | no-match | | case.rb:36:9:36:9 | x | case.rb:33:3:38:5 | case ... | match | -| case.rb:37:5:37:27 | in ... then ... | case.rb:32:1:39:3 | exit case_match_array (abnormal) | raise | +| case.rb:37:5:37:27 | in ... then ... | case.rb:32:1:39:3 | exit case_match_array (abnormal) | exception | | case.rb:37:5:37:27 | in ... then ... | case.rb:37:8:37:26 | [ ..., * ] | match | -| case.rb:37:8:37:26 | [ ..., * ] | case.rb:32:1:39:3 | exit case_match_array (abnormal) | raise | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:32:1:39:3 | exit case_match_array (abnormal) | exception | | case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:12:37:12 | a | false | | case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:12:37:12 | a | match | | case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:12:37:12 | a | true | @@ -5899,13 +5899,13 @@ successor | case.rb:37:15:37:15 | b | case.rb:37:19:37:19 | c | match | | case.rb:37:19:37:19 | c | case.rb:37:25:37:25 | e | match | | case.rb:37:25:37:25 | e | case.rb:33:3:38:5 | case ... | match | -| case.rb:41:1:45:3 | enter case_match_find | case.rb:41:1:45:3 | exit case_match_find (abnormal) | raise | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:41:1:45:3 | exit case_match_find (abnormal) | exception | | case.rb:41:1:45:3 | enter case_match_find | case.rb:43:10:43:10 | x | false | | case.rb:41:1:45:3 | enter case_match_find | case.rb:43:10:43:10 | x | match | | case.rb:41:1:45:3 | enter case_match_find | case.rb:43:10:43:10 | x | true | -| case.rb:43:10:43:10 | x | case.rb:41:1:45:3 | exit case_match_find (abnormal) | raise | +| case.rb:43:10:43:10 | x | case.rb:41:1:45:3 | exit case_match_find (abnormal) | exception | | case.rb:43:10:43:10 | x | case.rb:43:16:43:16 | 2 | match | -| case.rb:43:16:43:16 | 2 | case.rb:41:1:45:3 | exit case_match_find (abnormal) | raise | +| case.rb:43:16:43:16 | 2 | case.rb:41:1:45:3 | exit case_match_find (abnormal) | exception | | case.rb:43:16:43:16 | 2 | case.rb:43:20:43:20 | y | match | | case.rb:47:1:53:3 | enter case_match_hash | case.rb:49:8:49:34 | { ..., ** } | match | | case.rb:47:1:53:3 | enter case_match_hash | case.rb:50:5:50:25 | in ... then ... | no-match | @@ -5924,9 +5924,9 @@ successor | case.rb:50:8:50:24 | { ..., ** } | case.rb:51:5:51:17 | in ... then ... | no-match | | case.rb:50:16:50:16 | 1 | case.rb:48:3:52:5 | case ... | match | | case.rb:50:16:50:16 | 1 | case.rb:51:5:51:17 | in ... then ... | no-match | -| case.rb:51:5:51:17 | in ... then ... | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | raise | +| case.rb:51:5:51:17 | in ... then ... | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | exception | | case.rb:51:5:51:17 | in ... then ... | case.rb:51:8:51:16 | { ..., ** } | match | -| case.rb:51:8:51:16 | { ..., ** } | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | raise | +| case.rb:51:8:51:16 | { ..., ** } | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | exception | | case.rb:51:8:51:16 | { ..., ** } | case.rb:48:3:52:5 | case ... | false | | case.rb:51:8:51:16 | { ..., ** } | case.rb:48:3:52:5 | case ... | match | | case.rb:51:8:51:16 | { ..., ** } | case.rb:48:3:52:5 | case ... | true | @@ -5997,12 +5997,12 @@ successor | case.rb:91:13:91:14 | "" | case.rb:91:18:91:19 | [ ..., * ] | no-match | | case.rb:91:18:91:19 | [ ..., * ] | case.rb:72:3:92:5 | case ... | match | | case.rb:91:18:91:19 | [ ..., * ] | case.rb:91:23:91:24 | { ..., ** } | no-match | -| case.rb:91:23:91:24 | { ..., ** } | case.rb:69:1:93:3 | exit case_match_various (abnormal) | raise | +| case.rb:91:23:91:24 | { ..., ** } | case.rb:69:1:93:3 | exit case_match_various (abnormal) | exception | | case.rb:91:23:91:24 | { ..., ** } | case.rb:72:3:92:5 | case ... | false | | case.rb:91:23:91:24 | { ..., ** } | case.rb:72:3:92:5 | case ... | match | | case.rb:91:23:91:24 | { ..., ** } | case.rb:72:3:92:5 | case ... | true | | case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:97:13:97:13 | x | match | -| case.rb:97:13:97:13 | x | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | raise | +| case.rb:97:13:97:13 | x | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | exception | | case.rb:97:13:97:13 | x | case.rb:97:25:97:25 | 6 | true | | cfg.html.erb:5:16:31:12 | enter cfg.html.erb | cfg.html.erb:19:19:19:32 | self | true | | cfg.html.erb:5:16:31:12 | enter cfg.html.erb | cfg.html.erb:21:19:21:32 | self | false | @@ -6158,7 +6158,7 @@ successor | raise.rb:7:1:12:3 | enter m1 | raise.rb:9:5:9:17 | self | true | | raise.rb:14:1:23:3 | enter m2 | raise.rb:16:5:18:7 | if ... | false | | raise.rb:14:1:23:3 | enter m2 | raise.rb:17:7:17:22 | self | true | -| raise.rb:17:7:17:22 | self | raise.rb:14:1:23:3 | exit m2 (abnormal) | raise | +| raise.rb:17:7:17:22 | self | raise.rb:14:1:23:3 | exit m2 (abnormal) | exception | | raise.rb:17:7:17:22 | self | raise.rb:20:5:20:18 | self | match | | raise.rb:25:1:34:3 | enter m3 | raise.rb:27:5:29:7 | if ... | false | | raise.rb:25:1:34:3 | enter m3 | raise.rb:28:7:28:22 | self | true | @@ -6170,36 +6170,36 @@ successor | raise.rb:57:1:66:3 | enter m6 | raise.rb:60:7:60:22 | self | true | | raise.rb:60:7:60:22 | self | raise.rb:62:22:62:31 | ExceptionB | no-match | | raise.rb:60:7:60:22 | self | raise.rb:62:36:62:36 | e | match | -| raise.rb:62:22:62:31 | ExceptionB | raise.rb:57:1:66:3 | exit m6 (abnormal) | raise | +| raise.rb:62:22:62:31 | ExceptionB | raise.rb:57:1:66:3 | exit m6 (abnormal) | exception | | raise.rb:62:22:62:31 | ExceptionB | raise.rb:62:36:62:36 | e | match | | raise.rb:68:1:77:3 | enter m7 | raise.rb:70:5:70:17 | self | true | | raise.rb:68:1:77:3 | enter m7 | raise.rb:71:9:71:9 | x | false | -| raise.rb:68:1:77:3 | enter m7 | raise.rb:76:3:76:15 | [ensure: raise] self | raise | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:76:3:76:15 | [ensure: exception] self | exception | | raise.rb:71:9:71:9 | x | raise.rb:71:3:72:18 | elsif ... | false | | raise.rb:71:9:71:9 | x | raise.rb:72:13:72:17 | x < 0 | true | -| raise.rb:71:9:71:9 | x | raise.rb:76:3:76:15 | [ensure: raise] self | raise | +| raise.rb:71:9:71:9 | x | raise.rb:76:3:76:15 | [ensure: exception] self | exception | | raise.rb:79:1:92:3 | enter m8 | raise.rb:83:7:83:19 | self | true | | raise.rb:79:1:92:3 | enter m8 | raise.rb:84:11:84:11 | x | false | -| raise.rb:79:1:92:3 | enter m8 | raise.rb:89:5:89:17 | [ensure: raise] self | raise | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:89:5:89:17 | [ensure: exception] self | exception | | raise.rb:84:11:84:11 | x | raise.rb:84:5:85:20 | elsif ... | false | | raise.rb:84:11:84:11 | x | raise.rb:85:15:85:19 | x < 0 | true | -| raise.rb:84:11:84:11 | x | raise.rb:89:5:89:17 | [ensure: raise] self | raise | +| raise.rb:84:11:84:11 | x | raise.rb:89:5:89:17 | [ensure: exception] self | exception | | raise.rb:97:8:97:8 | x | raise.rb:98:7:98:19 | self | true | | raise.rb:97:8:97:8 | x | raise.rb:99:11:99:11 | x | false | -| raise.rb:97:8:97:8 | x | raise.rb:104:5:104:23 | [ensure: raise] self | raise | +| raise.rb:97:8:97:8 | x | raise.rb:104:5:104:23 | [ensure: exception] self | exception | | raise.rb:99:11:99:11 | x | raise.rb:99:5:100:20 | elsif ... | false | | raise.rb:99:11:99:11 | x | raise.rb:100:15:100:19 | x < 0 | true | -| raise.rb:99:11:99:11 | x | raise.rb:104:5:104:23 | [ensure: raise] self | raise | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:106:7:108:9 | [ensure: raise] if ... | false | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:107:9:107:26 | [ensure: raise] self | true | +| raise.rb:99:11:99:11 | x | raise.rb:104:5:104:23 | [ensure: exception] self | exception | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:106:7:108:9 | [ensure: exception] if ... | false | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:107:9:107:26 | [ensure: exception] self | true | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:106:7:108:9 | [ensure: return] if ... | false | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:107:9:107:26 | [ensure: return] self | true | | raise.rb:106:10:106:11 | b1 | raise.rb:106:7:108:9 | if ... | false | | raise.rb:106:10:106:11 | b1 | raise.rb:107:9:107:26 | self | true | | raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:116:3:118:5 | [ensure: return] if ... | false | | raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:117:5:117:22 | [ensure: return] self | true | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:116:3:118:5 | [ensure: raise] if ... | false | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:117:5:117:22 | [ensure: raise] self | true | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:116:3:118:5 | [ensure: exception] if ... | false | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:117:5:117:22 | [ensure: exception] self | true | | raise.rb:115:3:115:22 | self | raise.rb:116:3:118:5 | if ... | false | | raise.rb:115:3:115:22 | self | raise.rb:117:5:117:22 | self | true | | raise.rb:121:1:126:3 | enter m10 | raise.rb:121:14:121:30 | self | false | @@ -6211,7 +6211,7 @@ successor | raise.rb:131:7:131:22 | self | raise.rb:133:3:133:19 | rescue ... | match | | raise.rb:131:7:131:22 | self | raise.rb:134:10:134:19 | ExceptionB | no-match | | raise.rb:134:10:134:19 | ExceptionB | raise.rb:135:5:135:21 | self | match | -| raise.rb:134:10:134:19 | ExceptionB | raise.rb:137:5:137:17 | [ensure: raise] self | raise | +| raise.rb:134:10:134:19 | ExceptionB | raise.rb:137:5:137:17 | [ensure: exception] self | exception | | raise.rb:142:1:148:3 | enter m12 | raise.rb:143:3:145:5 | if ... | false | | raise.rb:142:1:148:3 | enter m12 | raise.rb:144:5:144:12 | self | true | | raise.rb:155:16:155:50 | enter { ... } | raise.rb:155:25:155:32 | self | true | @@ -6221,60 +6221,60 @@ successor | raise.rb:172:1:182:3 | enter m16 | raise.rb:174:8:174:23 | [true] ... \|\| ... | true | | raise.rb:172:1:182:3 | enter m16 | raise.rb:174:14:174:15 | b2 | false | | raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:177:14:177:14 | 2 | false | -| raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:179:10:179:19 | ExceptionA | raise | +| raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:179:10:179:19 | ExceptionA | exception | | raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:175:14:175:14 | 1 | true | -| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:179:10:179:19 | ExceptionA | raise | +| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:179:10:179:19 | ExceptionA | exception | | raise.rb:174:14:174:15 | b2 | raise.rb:174:8:174:23 | [false] ... \|\| ... | false | | raise.rb:174:14:174:15 | b2 | raise.rb:174:8:174:23 | [true] ... \|\| ... | true | -| raise.rb:174:14:174:15 | b2 | raise.rb:179:10:179:19 | ExceptionA | raise | -| raise.rb:179:10:179:19 | ExceptionA | raise.rb:172:1:182:3 | exit m16 (abnormal) | raise | +| raise.rb:174:14:174:15 | b2 | raise.rb:179:10:179:19 | ExceptionA | exception | +| raise.rb:179:10:179:19 | ExceptionA | raise.rb:172:1:182:3 | exit m16 (abnormal) | exception | | raise.rb:179:10:179:19 | ExceptionA | raise.rb:180:12:180:12 | 3 | match | joinBlockPredecessor -| break_ensure.rb:1:1:11:3 | exit m1 | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | 1 | +| break_ensure.rb:1:1:11:3 | exit m1 | break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | 1 | | break_ensure.rb:1:1:11:3 | exit m1 | break_ensure.rb:8:3:10:5 | if ... | 0 | | break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:2:9:2:9 | x | 0 | | break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:3:8:3:8 | x | 1 | | break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:4:7:4:11 | break | 2 | | break_ensure.rb:2:9:2:9 | x | break_ensure.rb:1:1:11:3 | enter m1 | 0 | | break_ensure.rb:2:9:2:9 | x | break_ensure.rb:3:5:5:7 | if ... | 1 | -| break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | break_ensure.rb:8:6:8:13 | [ensure: raise] self | 0 | -| break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | break_ensure.rb:9:5:9:23 | [ensure: raise] self | 1 | +| break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | break_ensure.rb:8:6:8:13 | [ensure: exception] self | 0 | +| break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | break_ensure.rb:9:5:9:23 | [ensure: exception] self | 1 | | break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:2:3:6:5 | while ... | 0 | | break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:9:5:9:23 | self | 1 | | break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:14:9:14:9 | x | 0 | | break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | 1 | -| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | 2 | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | 2 | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:13:1:25:3 | enter m2 | 0 | | break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | if ... | 1 | | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:17:9:17:13 | break | 0 | | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:21:9:21:20 | [ensure: break] self | 1 | -| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:20:10:20:10 | [ensure: raise] y | 0 | -| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:21:9:21:20 | [ensure: raise] self | 1 | +| break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | break_ensure.rb:20:10:20:10 | [ensure: exception] y | 0 | +| break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | break_ensure.rb:21:9:21:20 | [ensure: exception] self | 1 | | break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:16:7:18:9 | if ... | 0 | | break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:21:9:21:20 | self | 1 | -| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | 0 | +| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | 0 | | break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | 1 | | break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:5:39:7 | while ... | 0 | -| break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break_ensure.rb:33:11:33:11 | [ensure: raise] y | 0 | -| break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break_ensure.rb:36:11:36:15 | [ensure: raise] break | 1 | +| break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | break_ensure.rb:33:11:33:11 | [ensure: exception] y | 0 | +| break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | break_ensure.rb:36:11:36:15 | [ensure: exception] break | 1 | | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:33:11:33:11 | [ensure: return] y | 0 | | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:36:11:36:15 | [ensure: return] break | 1 | | break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:33:11:33:11 | y | 0 | | break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:36:11:36:15 | break | 1 | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:27:1:42:3 | enter m3 | 0 | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | 1 | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:27:1:42:3 | enter m3 | 0 | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | 1 | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:30:7:30:12 | return | 0 | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | 1 | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:29:5:31:7 | if ... | 0 | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:9:37:11 | if ... | 1 | | break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:45:9:45:9 | x | 0 | -| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | 1 | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | 1 | | break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:52:15:52:16 | 10 | 2 | -| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | 3 | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | 3 | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:44:1:56:3 | enter m4 | 0 | | break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | if ... | 1 | -| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:47:10:47:10 | x | 0 | -| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:48:9:48:16 | self | 1 | +| break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:47:10:47:10 | x | 0 | +| break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:48:9:48:16 | self | 1 | | case.rb:2:3:5:5 | case ... | case.rb:3:18:3:41 | if ... | 0 | | case.rb:2:3:5:5 | case ... | case.rb:4:5:4:24 | [no-match] when ... | 1 | | case.rb:2:3:5:5 | case ... | case.rb:4:17:4:24 | self | 2 | @@ -6468,48 +6468,48 @@ joinBlockPredecessor | raise.rb:62:36:62:36 | e | raise.rb:62:22:62:31 | ExceptionB | 1 | | raise.rb:65:3:65:15 | self | raise.rb:59:5:61:7 | if ... | 0 | | raise.rb:65:3:65:15 | self | raise.rb:62:36:62:36 | e | 1 | -| raise.rb:68:1:77:3 | exit m7 | raise.rb:76:3:76:15 | [ensure: raise] self | 0 | +| raise.rb:68:1:77:3 | exit m7 | raise.rb:76:3:76:15 | [ensure: exception] self | 0 | | raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:72:13:72:17 | x < 0 | 0 | | raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:76:3:76:15 | self | 1 | -| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:68:1:77:3 | enter m7 | 0 | -| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:70:5:70:17 | self | 1 | -| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:71:3:72:18 | elsif ... | 2 | -| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:71:9:71:9 | x | 3 | -| raise.rb:79:1:92:3 | exit m8 | raise.rb:89:5:89:17 | [ensure: raise] self | 0 | +| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:68:1:77:3 | enter m7 | 0 | +| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:70:5:70:17 | self | 1 | +| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:71:3:72:18 | elsif ... | 2 | +| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:71:9:71:9 | x | 3 | +| raise.rb:79:1:92:3 | exit m8 | raise.rb:89:5:89:17 | [ensure: exception] self | 0 | | raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:85:15:85:19 | x < 0 | 0 | | raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:89:5:89:17 | self | 1 | -| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:79:1:92:3 | enter m8 | 0 | -| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:83:7:83:19 | self | 1 | -| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:84:5:85:20 | elsif ... | 2 | -| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:84:11:84:11 | x | 3 | -| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:116:3:118:5 | [ensure: raise] if ... | 0 | -| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:117:5:117:22 | [ensure: raise] self | 2 | +| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:79:1:92:3 | enter m8 | 0 | +| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:83:7:83:19 | self | 1 | +| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:84:5:85:20 | elsif ... | 2 | +| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:84:11:84:11 | x | 3 | +| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:116:3:118:5 | [ensure: exception] if ... | 0 | +| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:117:5:117:22 | [ensure: exception] self | 2 | | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:117:5:117:22 | [ensure: return] self | 3 | | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:117:5:117:22 | self | 1 | | raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:116:3:118:5 | [ensure: return] if ... | 1 | | raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:116:3:118:5 | if ... | 0 | -| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:97:8:97:8 | x | 0 | -| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:98:7:98:19 | self | 1 | -| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:99:5:100:20 | elsif ... | 2 | -| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:99:11:99:11 | x | 3 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:94:1:119:3 | enter m9 | 0 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:100:15:100:19 | x < 0 | 1 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:104:5:104:23 | [ensure: raise] self | 3 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:104:5:104:23 | self | 2 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:106:7:108:9 | [ensure: raise] if ... | 5 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:106:7:108:9 | [ensure: return] if ... | 6 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:106:7:108:9 | if ... | 4 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:107:9:107:26 | [ensure: raise] self | 8 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:107:9:107:26 | [ensure: return] self | 9 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:107:9:107:26 | self | 7 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | 11 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | 13 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | 12 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | 14 | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:109:5:110:25 | ensure ... | 10 | +| raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:97:8:97:8 | x | 0 | +| raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:98:7:98:19 | self | 1 | +| raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:99:5:100:20 | elsif ... | 2 | +| raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:99:11:99:11 | x | 3 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:94:1:119:3 | enter m9 | 0 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:100:15:100:19 | x < 0 | 1 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:104:5:104:23 | [ensure: exception] self | 3 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:104:5:104:23 | self | 2 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:106:7:108:9 | [ensure: exception] if ... | 5 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:106:7:108:9 | [ensure: return] if ... | 6 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:106:7:108:9 | if ... | 4 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:107:9:107:26 | [ensure: exception] self | 8 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:107:9:107:26 | [ensure: return] self | 9 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:107:9:107:26 | self | 7 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | 11 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | 13 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:109:5:110:25 | [ensure: exception] ensure ... | 12 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | 14 | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:109:5:110:25 | ensure ... | 10 | | raise.rb:121:1:126:3 | exit m10 | raise.rb:121:14:121:30 | self | 0 | | raise.rb:121:1:126:3 | exit m10 | raise.rb:125:3:125:51 | self | 1 | -| raise.rb:128:1:140:3 | exit m11 | raise.rb:137:5:137:17 | [ensure: raise] self | 1 | +| raise.rb:128:1:140:3 | exit m11 | raise.rb:137:5:137:17 | [ensure: exception] self | 1 | | raise.rb:128:1:140:3 | exit m11 | raise.rb:137:5:137:17 | self | 0 | | raise.rb:137:5:137:17 | self | raise.rb:130:5:132:7 | if ... | 0 | | raise.rb:137:5:137:17 | self | raise.rb:133:3:133:19 | rescue ... | 1 | diff --git a/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.ql b/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.ql index e7879fa600a..c99de9bc0a8 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.ql +++ b/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.ql @@ -1,4 +1,3 @@ -import ruby import codeql.ruby.controlflow.ControlFlowGraph import codeql.ruby.controlflow.BasicBlocks @@ -10,7 +9,7 @@ query predicate immediateDominator(BasicBlock bb1, BasicBlock bb2) { bb1.getImmediateDominator() = bb2 } -query predicate controls(ConditionBlock bb1, BasicBlock bb2, SuccessorTypes::ConditionalSuccessor t) { +query predicate controls(ConditionBlock bb1, BasicBlock bb2, ConditionalSuccessor t) { bb1.edgeDominates(bb2, t) } diff --git a/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected b/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected index 243e107906a..583ca5d46a8 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected +++ b/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected @@ -9,37 +9,37 @@ | break_ensure.rb:2:9:2:9 | x | break_ensure.rb:2:13:2:13 | 0 | | | break_ensure.rb:2:9:2:13 | ... < ... | break_ensure.rb:2:3:6:5 | while ... | false | | break_ensure.rb:2:9:2:13 | ... < ... | break_ensure.rb:3:8:3:8 | x | true | -| break_ensure.rb:2:9:2:13 | ... < ... | break_ensure.rb:8:6:8:13 | [ensure: raise] self | raise | +| break_ensure.rb:2:9:2:13 | ... < ... | break_ensure.rb:8:6:8:13 | [ensure: exception] self | exception | | break_ensure.rb:2:13:2:13 | 0 | break_ensure.rb:2:9:2:13 | ... < ... | | | break_ensure.rb:2:14:6:5 | do ... | break_ensure.rb:2:9:2:9 | x | | | break_ensure.rb:3:5:5:7 | if ... | break_ensure.rb:2:14:6:5 | do ... | | | break_ensure.rb:3:8:3:8 | x | break_ensure.rb:3:12:3:12 | 0 | | -| break_ensure.rb:3:8:3:12 | ... > ... | break_ensure.rb:2:3:6:5 | while ... | raise | +| break_ensure.rb:3:8:3:12 | ... > ... | break_ensure.rb:2:3:6:5 | while ... | exception | | break_ensure.rb:3:8:3:12 | ... > ... | break_ensure.rb:3:5:5:7 | if ... | false | | break_ensure.rb:3:8:3:12 | ... > ... | break_ensure.rb:4:7:4:11 | break | true | | break_ensure.rb:3:12:3:12 | 0 | break_ensure.rb:3:8:3:12 | ... > ... | | | break_ensure.rb:4:7:4:11 | break | break_ensure.rb:2:3:6:5 | while ... | break | -| break_ensure.rb:7:1:10:5 | [ensure: raise] ensure ... | break_ensure.rb:1:1:11:3 | exit m1 (abnormal) | raise | +| break_ensure.rb:7:1:10:5 | [ensure: exception] ensure ... | break_ensure.rb:1:1:11:3 | exit m1 (abnormal) | exception | | break_ensure.rb:7:1:10:5 | ensure ... | break_ensure.rb:1:1:11:3 | exit m1 (normal) | | -| break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | break_ensure.rb:7:1:10:5 | [ensure: raise] ensure ... | | +| break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | break_ensure.rb:7:1:10:5 | [ensure: exception] ensure ... | | | break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:7:1:10:5 | ensure ... | | -| break_ensure.rb:8:6:8:13 | [ensure: raise] call to elements | break_ensure.rb:8:6:8:18 | [ensure: raise] call to nil? | | -| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:8:6:8:13 | [ensure: raise] call to elements | | +| break_ensure.rb:8:6:8:13 | [ensure: exception] call to elements | break_ensure.rb:8:6:8:18 | [ensure: exception] call to nil? | | +| break_ensure.rb:8:6:8:13 | [ensure: exception] self | break_ensure.rb:8:6:8:13 | [ensure: exception] call to elements | | | break_ensure.rb:8:6:8:13 | call to elements | break_ensure.rb:8:6:8:18 | call to nil? | | | break_ensure.rb:8:6:8:13 | self | break_ensure.rb:8:6:8:13 | call to elements | | -| break_ensure.rb:8:6:8:18 | [ensure: raise] call to nil? | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | false | -| break_ensure.rb:8:6:8:18 | [ensure: raise] call to nil? | break_ensure.rb:9:5:9:23 | [ensure: raise] self | true | +| break_ensure.rb:8:6:8:18 | [ensure: exception] call to nil? | break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | false | +| break_ensure.rb:8:6:8:18 | [ensure: exception] call to nil? | break_ensure.rb:9:5:9:23 | [ensure: exception] self | true | | break_ensure.rb:8:6:8:18 | call to nil? | break_ensure.rb:8:3:10:5 | if ... | false | | break_ensure.rb:8:6:8:18 | call to nil? | break_ensure.rb:9:5:9:23 | self | true | -| break_ensure.rb:8:20:9:23 | [ensure: raise] then ... | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | | +| break_ensure.rb:8:20:9:23 | [ensure: exception] then ... | break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | | | break_ensure.rb:8:20:9:23 | then ... | break_ensure.rb:8:3:10:5 | if ... | | -| break_ensure.rb:9:5:9:23 | [ensure: raise] call to puts | break_ensure.rb:8:20:9:23 | [ensure: raise] then ... | | -| break_ensure.rb:9:5:9:23 | [ensure: raise] self | break_ensure.rb:9:11:9:22 | [ensure: raise] elements nil | | +| break_ensure.rb:9:5:9:23 | [ensure: exception] call to puts | break_ensure.rb:8:20:9:23 | [ensure: exception] then ... | | +| break_ensure.rb:9:5:9:23 | [ensure: exception] self | break_ensure.rb:9:11:9:22 | [ensure: exception] elements nil | | | break_ensure.rb:9:5:9:23 | call to puts | break_ensure.rb:8:20:9:23 | then ... | | | break_ensure.rb:9:5:9:23 | self | break_ensure.rb:9:11:9:22 | elements nil | | | break_ensure.rb:9:10:9:23 | "elements nil" | break_ensure.rb:9:5:9:23 | call to puts | | -| break_ensure.rb:9:10:9:23 | [ensure: raise] "elements nil" | break_ensure.rb:9:5:9:23 | [ensure: raise] call to puts | | -| break_ensure.rb:9:11:9:22 | [ensure: raise] elements nil | break_ensure.rb:9:10:9:23 | [ensure: raise] "elements nil" | | +| break_ensure.rb:9:10:9:23 | [ensure: exception] "elements nil" | break_ensure.rb:9:5:9:23 | [ensure: exception] call to puts | | +| break_ensure.rb:9:11:9:22 | [ensure: exception] elements nil | break_ensure.rb:9:10:9:23 | [ensure: exception] "elements nil" | | | break_ensure.rb:9:11:9:22 | elements nil | break_ensure.rb:9:10:9:23 | "elements nil" | | | break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:13:8:13:8 | x | | | break_ensure.rb:13:1:25:3 | exit m2 (normal) | break_ensure.rb:13:1:25:3 | exit m2 | | @@ -56,38 +56,38 @@ | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:16:14:16:14 | 0 | | | break_ensure.rb:16:10:16:14 | ... > ... | break_ensure.rb:16:7:18:9 | if ... | false | | break_ensure.rb:16:10:16:14 | ... > ... | break_ensure.rb:17:9:17:13 | break | true | -| break_ensure.rb:16:10:16:14 | ... > ... | break_ensure.rb:20:10:20:10 | [ensure: raise] y | raise | +| break_ensure.rb:16:10:16:14 | ... > ... | break_ensure.rb:20:10:20:10 | [ensure: exception] y | exception | | break_ensure.rb:16:14:16:14 | 0 | break_ensure.rb:16:10:16:14 | ... > ... | | | break_ensure.rb:17:9:17:13 | break | break_ensure.rb:20:10:20:10 | [ensure: break] y | break | | break_ensure.rb:19:5:22:9 | [ensure: break] ensure ... | break_ensure.rb:14:3:24:5 | while ... | break | -| break_ensure.rb:19:5:22:9 | [ensure: raise] ensure ... | break_ensure.rb:14:3:24:5 | while ... | raise | +| break_ensure.rb:19:5:22:9 | [ensure: exception] ensure ... | break_ensure.rb:14:3:24:5 | while ... | exception | | break_ensure.rb:19:5:22:9 | ensure ... | break_ensure.rb:14:14:24:5 | do ... | | | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:19:5:22:9 | [ensure: break] ensure ... | | -| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:19:5:22:9 | [ensure: raise] ensure ... | | +| break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | break_ensure.rb:19:5:22:9 | [ensure: exception] ensure ... | | | break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:19:5:22:9 | ensure ... | | | break_ensure.rb:20:10:20:10 | [ensure: break] y | break_ensure.rb:20:10:20:15 | [ensure: break] call to nil? | | -| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:20:10:20:15 | [ensure: raise] call to nil? | | +| break_ensure.rb:20:10:20:10 | [ensure: exception] y | break_ensure.rb:20:10:20:15 | [ensure: exception] call to nil? | | | break_ensure.rb:20:10:20:10 | y | break_ensure.rb:20:10:20:15 | call to nil? | | | break_ensure.rb:20:10:20:15 | [ensure: break] call to nil? | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | false | | break_ensure.rb:20:10:20:15 | [ensure: break] call to nil? | break_ensure.rb:21:9:21:20 | [ensure: break] self | true | -| break_ensure.rb:20:10:20:15 | [ensure: raise] call to nil? | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | false | -| break_ensure.rb:20:10:20:15 | [ensure: raise] call to nil? | break_ensure.rb:21:9:21:20 | [ensure: raise] self | true | +| break_ensure.rb:20:10:20:15 | [ensure: exception] call to nil? | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | false | +| break_ensure.rb:20:10:20:15 | [ensure: exception] call to nil? | break_ensure.rb:21:9:21:20 | [ensure: exception] self | true | | break_ensure.rb:20:10:20:15 | call to nil? | break_ensure.rb:20:7:22:9 | if ... | false | | break_ensure.rb:20:10:20:15 | call to nil? | break_ensure.rb:21:9:21:20 | self | true | | break_ensure.rb:20:17:21:20 | [ensure: break] then ... | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | | -| break_ensure.rb:20:17:21:20 | [ensure: raise] then ... | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | | +| break_ensure.rb:20:17:21:20 | [ensure: exception] then ... | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | | | break_ensure.rb:20:17:21:20 | then ... | break_ensure.rb:20:7:22:9 | if ... | | | break_ensure.rb:21:9:21:20 | [ensure: break] call to puts | break_ensure.rb:20:17:21:20 | [ensure: break] then ... | | | break_ensure.rb:21:9:21:20 | [ensure: break] self | break_ensure.rb:21:15:21:19 | [ensure: break] y nil | | -| break_ensure.rb:21:9:21:20 | [ensure: raise] call to puts | break_ensure.rb:20:17:21:20 | [ensure: raise] then ... | | -| break_ensure.rb:21:9:21:20 | [ensure: raise] self | break_ensure.rb:21:15:21:19 | [ensure: raise] y nil | | +| break_ensure.rb:21:9:21:20 | [ensure: exception] call to puts | break_ensure.rb:20:17:21:20 | [ensure: exception] then ... | | +| break_ensure.rb:21:9:21:20 | [ensure: exception] self | break_ensure.rb:21:15:21:19 | [ensure: exception] y nil | | | break_ensure.rb:21:9:21:20 | call to puts | break_ensure.rb:20:17:21:20 | then ... | | | break_ensure.rb:21:9:21:20 | self | break_ensure.rb:21:15:21:19 | y nil | | | break_ensure.rb:21:14:21:20 | "y nil" | break_ensure.rb:21:9:21:20 | call to puts | | | break_ensure.rb:21:14:21:20 | [ensure: break] "y nil" | break_ensure.rb:21:9:21:20 | [ensure: break] call to puts | | -| break_ensure.rb:21:14:21:20 | [ensure: raise] "y nil" | break_ensure.rb:21:9:21:20 | [ensure: raise] call to puts | | +| break_ensure.rb:21:14:21:20 | [ensure: exception] "y nil" | break_ensure.rb:21:9:21:20 | [ensure: exception] call to puts | | | break_ensure.rb:21:15:21:19 | [ensure: break] y nil | break_ensure.rb:21:14:21:20 | [ensure: break] "y nil" | | -| break_ensure.rb:21:15:21:19 | [ensure: raise] y nil | break_ensure.rb:21:14:21:20 | [ensure: raise] "y nil" | | +| break_ensure.rb:21:15:21:19 | [ensure: exception] y nil | break_ensure.rb:21:14:21:20 | [ensure: exception] "y nil" | | | break_ensure.rb:21:15:21:19 | y nil | break_ensure.rb:21:14:21:20 | "y nil" | | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:27:8:27:8 | x | | | break_ensure.rb:27:1:42:3 | exit m3 (abnormal) | break_ensure.rb:27:1:42:3 | exit m3 | | @@ -99,45 +99,45 @@ | break_ensure.rb:29:8:29:8 | x | break_ensure.rb:29:8:29:13 | call to nil? | | | break_ensure.rb:29:8:29:13 | call to nil? | break_ensure.rb:29:5:31:7 | if ... | false | | break_ensure.rb:29:8:29:13 | call to nil? | break_ensure.rb:30:7:30:12 | return | true | -| break_ensure.rb:29:8:29:13 | call to nil? | break_ensure.rb:33:11:33:11 | [ensure: raise] y | raise | +| break_ensure.rb:29:8:29:13 | call to nil? | break_ensure.rb:33:11:33:11 | [ensure: exception] y | exception | | break_ensure.rb:30:7:30:12 | return | break_ensure.rb:33:11:33:11 | [ensure: return] y | return | -| break_ensure.rb:32:3:39:7 | [ensure: raise] ensure ... | break_ensure.rb:27:1:42:3 | exit m3 (abnormal) | raise | +| break_ensure.rb:32:3:39:7 | [ensure: exception] ensure ... | break_ensure.rb:27:1:42:3 | exit m3 (abnormal) | exception | | break_ensure.rb:32:3:39:7 | [ensure: return] ensure ... | break_ensure.rb:27:1:42:3 | exit m3 (normal) | return | | break_ensure.rb:32:3:39:7 | ensure ... | break_ensure.rb:41:3:41:13 | self | | -| break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break_ensure.rb:32:3:39:7 | [ensure: raise] ensure ... | | +| break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | break_ensure.rb:32:3:39:7 | [ensure: exception] ensure ... | | | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:32:3:39:7 | [ensure: return] ensure ... | | | break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:32:3:39:7 | ensure ... | | -| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:33:15:33:15 | [ensure: raise] 0 | | +| break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:33:15:33:15 | [ensure: exception] 0 | | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:33:15:33:15 | [ensure: return] 0 | | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:33:15:33:15 | 0 | | | break_ensure.rb:33:11:33:15 | ... < ... | break_ensure.rb:33:5:39:7 | while ... | false | | break_ensure.rb:33:11:33:15 | ... < ... | break_ensure.rb:35:12:35:12 | x | true | -| break_ensure.rb:33:11:33:15 | [ensure: raise] ... < ... | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | false | -| break_ensure.rb:33:11:33:15 | [ensure: raise] ... < ... | break_ensure.rb:35:12:35:12 | [ensure: raise] x | true | +| break_ensure.rb:33:11:33:15 | [ensure: exception] ... < ... | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | false | +| break_ensure.rb:33:11:33:15 | [ensure: exception] ... < ... | break_ensure.rb:35:12:35:12 | [ensure: exception] x | true | | break_ensure.rb:33:11:33:15 | [ensure: return] ... < ... | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | false | | break_ensure.rb:33:11:33:15 | [ensure: return] ... < ... | break_ensure.rb:35:12:35:12 | [ensure: return] x | true | | break_ensure.rb:33:15:33:15 | 0 | break_ensure.rb:33:11:33:15 | ... < ... | | -| break_ensure.rb:33:15:33:15 | [ensure: raise] 0 | break_ensure.rb:33:11:33:15 | [ensure: raise] ... < ... | | +| break_ensure.rb:33:15:33:15 | [ensure: exception] 0 | break_ensure.rb:33:11:33:15 | [ensure: exception] ... < ... | | | break_ensure.rb:33:15:33:15 | [ensure: return] 0 | break_ensure.rb:33:11:33:15 | [ensure: return] ... < ... | | -| break_ensure.rb:33:16:39:7 | [ensure: raise] do ... | break_ensure.rb:33:11:33:11 | [ensure: raise] y | | +| break_ensure.rb:33:16:39:7 | [ensure: exception] do ... | break_ensure.rb:33:11:33:11 | [ensure: exception] y | | | break_ensure.rb:33:16:39:7 | [ensure: return] do ... | break_ensure.rb:33:11:33:11 | [ensure: return] y | | | break_ensure.rb:33:16:39:7 | do ... | break_ensure.rb:33:11:33:11 | y | | -| break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | break_ensure.rb:33:16:39:7 | [ensure: raise] do ... | | +| break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | break_ensure.rb:33:16:39:7 | [ensure: exception] do ... | | | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | break_ensure.rb:33:16:39:7 | [ensure: return] do ... | | | break_ensure.rb:35:9:37:11 | if ... | break_ensure.rb:33:16:39:7 | do ... | | -| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:35:16:35:16 | [ensure: raise] 0 | | +| break_ensure.rb:35:12:35:12 | [ensure: exception] x | break_ensure.rb:35:16:35:16 | [ensure: exception] 0 | | | break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:35:16:35:16 | [ensure: return] 0 | | | break_ensure.rb:35:12:35:12 | x | break_ensure.rb:35:16:35:16 | 0 | | | break_ensure.rb:35:12:35:16 | ... > ... | break_ensure.rb:35:9:37:11 | if ... | false | | break_ensure.rb:35:12:35:16 | ... > ... | break_ensure.rb:36:11:36:15 | break | true | -| break_ensure.rb:35:12:35:16 | [ensure: raise] ... > ... | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | false | -| break_ensure.rb:35:12:35:16 | [ensure: raise] ... > ... | break_ensure.rb:36:11:36:15 | [ensure: raise] break | true | +| break_ensure.rb:35:12:35:16 | [ensure: exception] ... > ... | break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | false | +| break_ensure.rb:35:12:35:16 | [ensure: exception] ... > ... | break_ensure.rb:36:11:36:15 | [ensure: exception] break | true | | break_ensure.rb:35:12:35:16 | [ensure: return] ... > ... | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | false | | break_ensure.rb:35:12:35:16 | [ensure: return] ... > ... | break_ensure.rb:36:11:36:15 | [ensure: return] break | true | | break_ensure.rb:35:16:35:16 | 0 | break_ensure.rb:35:12:35:16 | ... > ... | | -| break_ensure.rb:35:16:35:16 | [ensure: raise] 0 | break_ensure.rb:35:12:35:16 | [ensure: raise] ... > ... | | +| break_ensure.rb:35:16:35:16 | [ensure: exception] 0 | break_ensure.rb:35:12:35:16 | [ensure: exception] ... > ... | | | break_ensure.rb:35:16:35:16 | [ensure: return] 0 | break_ensure.rb:35:12:35:16 | [ensure: return] ... > ... | | -| break_ensure.rb:36:11:36:15 | [ensure: raise] break | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break | +| break_ensure.rb:36:11:36:15 | [ensure: exception] break | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | break | | break_ensure.rb:36:11:36:15 | [ensure: return] break | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break | | break_ensure.rb:36:11:36:15 | break | break_ensure.rb:33:5:39:7 | while ... | break | | break_ensure.rb:41:3:41:13 | call to puts | break_ensure.rb:27:1:42:3 | exit m3 (normal) | | @@ -158,27 +158,27 @@ | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:47:14:47:14 | 1 | | | break_ensure.rb:47:10:47:14 | ... > ... | break_ensure.rb:47:7:49:9 | if ... | false | | break_ensure.rb:47:10:47:14 | ... > ... | break_ensure.rb:48:9:48:16 | self | true | -| break_ensure.rb:47:10:47:14 | ... > ... | break_ensure.rb:51:10:51:10 | [ensure: raise] x | raise | +| break_ensure.rb:47:10:47:14 | ... > ... | break_ensure.rb:51:10:51:10 | [ensure: exception] x | exception | | break_ensure.rb:47:14:47:14 | 1 | break_ensure.rb:47:10:47:14 | ... > ... | | -| break_ensure.rb:48:9:48:16 | call to raise | break_ensure.rb:51:10:51:10 | [ensure: raise] x | raise | +| break_ensure.rb:48:9:48:16 | call to raise | break_ensure.rb:51:10:51:10 | [ensure: exception] x | exception | | break_ensure.rb:48:9:48:16 | self | break_ensure.rb:48:15:48:16 | "" | | | break_ensure.rb:48:15:48:16 | "" | break_ensure.rb:48:9:48:16 | call to raise | | -| break_ensure.rb:50:5:53:9 | [ensure: raise] ensure ... | break_ensure.rb:45:3:55:5 | while ... | raise | +| break_ensure.rb:50:5:53:9 | [ensure: exception] ensure ... | break_ensure.rb:45:3:55:5 | while ... | exception | | break_ensure.rb:50:5:53:9 | ensure ... | break_ensure.rb:45:14:55:5 | do ... | | -| break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | break_ensure.rb:50:5:53:9 | [ensure: raise] ensure ... | | +| break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | break_ensure.rb:50:5:53:9 | [ensure: exception] ensure ... | | | break_ensure.rb:51:7:53:9 | if ... | break_ensure.rb:50:5:53:9 | ensure ... | | -| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:51:14:51:14 | [ensure: raise] 0 | | +| break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:51:14:51:14 | [ensure: exception] 0 | | | break_ensure.rb:51:10:51:10 | x | break_ensure.rb:51:14:51:14 | 0 | | | break_ensure.rb:51:10:51:14 | ... > ... | break_ensure.rb:51:7:53:9 | if ... | false | | break_ensure.rb:51:10:51:14 | ... > ... | break_ensure.rb:52:15:52:16 | 10 | true | -| break_ensure.rb:51:10:51:14 | [ensure: raise] ... > ... | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | false | -| break_ensure.rb:51:10:51:14 | [ensure: raise] ... > ... | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | true | +| break_ensure.rb:51:10:51:14 | [ensure: exception] ... > ... | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | false | +| break_ensure.rb:51:10:51:14 | [ensure: exception] ... > ... | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | true | | break_ensure.rb:51:14:51:14 | 0 | break_ensure.rb:51:10:51:14 | ... > ... | | -| break_ensure.rb:51:14:51:14 | [ensure: raise] 0 | break_ensure.rb:51:10:51:14 | [ensure: raise] ... > ... | | -| break_ensure.rb:52:9:52:16 | [ensure: raise] break | break_ensure.rb:45:3:55:5 | while ... | break | +| break_ensure.rb:51:14:51:14 | [ensure: exception] 0 | break_ensure.rb:51:10:51:14 | [ensure: exception] ... > ... | | +| break_ensure.rb:52:9:52:16 | [ensure: exception] break | break_ensure.rb:45:3:55:5 | while ... | break | | break_ensure.rb:52:9:52:16 | break | break_ensure.rb:45:3:55:5 | while ... | break | | break_ensure.rb:52:15:52:16 | 10 | break_ensure.rb:52:9:52:16 | break | | -| break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | break_ensure.rb:52:9:52:16 | [ensure: raise] break | | +| break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | break_ensure.rb:52:9:52:16 | [ensure: exception] break | | | case.rb:1:1:6:3 | enter if_in_case | case.rb:2:8:2:9 | self | | | case.rb:1:1:6:3 | exit if_in_case (normal) | case.rb:1:1:6:3 | exit if_in_case | | | case.rb:1:1:6:3 | if_in_case | case.rb:8:1:18:3 | case_match | | @@ -256,7 +256,7 @@ | case.rb:21:3:23:5 | case ... | case.rb:20:1:24:3 | exit case_match_no_match (normal) | | | case.rb:21:8:21:12 | value | case.rb:22:5:22:8 | in ... then ... | | | case.rb:22:5:22:8 | in ... then ... | case.rb:22:8:22:8 | 1 | | -| case.rb:22:8:22:8 | 1 | case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | raise | +| case.rb:22:8:22:8 | 1 | case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | exception | | case.rb:22:8:22:8 | 1 | case.rb:21:3:23:5 | case ... | match | | case.rb:26:1:30:3 | case_match_raise | case.rb:32:1:39:3 | case_match_array | | | case.rb:26:1:30:3 | enter case_match_raise | case.rb:26:22:26:26 | value | | @@ -266,12 +266,12 @@ | case.rb:27:3:29:5 | case ... | case.rb:26:1:30:3 | exit case_match_raise (normal) | | | case.rb:27:8:27:12 | value | case.rb:28:4:28:28 | in ... then ... | | | case.rb:28:4:28:28 | in ... then ... | case.rb:28:7:28:28 | -> { ... } | | -| case.rb:28:7:28:28 | -> { ... } | case.rb:26:1:30:3 | exit case_match_raise (abnormal) | raise | +| case.rb:28:7:28:28 | -> { ... } | case.rb:26:1:30:3 | exit case_match_raise (abnormal) | exception | | case.rb:28:7:28:28 | -> { ... } | case.rb:27:3:29:5 | case ... | match | | case.rb:28:7:28:28 | enter -> { ... } | case.rb:28:10:28:10 | x | | | case.rb:28:7:28:28 | exit -> { ... } (abnormal) | case.rb:28:7:28:28 | exit -> { ... } | | | case.rb:28:10:28:10 | x | case.rb:28:14:28:25 | self | | -| case.rb:28:14:28:25 | call to raise | case.rb:28:7:28:28 | exit -> { ... } (abnormal) | raise | +| case.rb:28:14:28:25 | call to raise | case.rb:28:7:28:28 | exit -> { ... } (abnormal) | exception | | case.rb:28:14:28:25 | self | case.rb:28:21:28:24 | oops | | | case.rb:28:20:28:25 | "oops" | case.rb:28:14:28:25 | call to raise | | | case.rb:28:21:28:24 | oops | case.rb:28:20:28:25 | "oops" | | @@ -294,9 +294,9 @@ | case.rb:36:8:36:12 | [ ..., * ] | case.rb:37:5:37:27 | in ... then ... | no-match | | case.rb:36:9:36:9 | x | case.rb:33:3:38:5 | case ... | match | | case.rb:37:5:37:27 | in ... then ... | case.rb:37:8:37:10 | Bar | | -| case.rb:37:8:37:10 | Bar | case.rb:32:1:39:3 | exit case_match_array (abnormal) | raise | +| case.rb:37:8:37:10 | Bar | case.rb:32:1:39:3 | exit case_match_array (abnormal) | exception | | case.rb:37:8:37:10 | Bar | case.rb:37:8:37:26 | [ ..., * ] | match | -| case.rb:37:8:37:26 | [ ..., * ] | case.rb:32:1:39:3 | exit case_match_array (abnormal) | raise | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:32:1:39:3 | exit case_match_array (abnormal) | exception | | case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:12:37:12 | a | false, match, true | | case.rb:37:12:37:12 | a | case.rb:37:15:37:15 | b | match | | case.rb:37:15:37:15 | b | case.rb:37:19:37:19 | c | match | @@ -311,12 +311,12 @@ | case.rb:42:3:44:5 | case ... | case.rb:41:1:45:3 | exit case_match_find (normal) | | | case.rb:42:8:42:12 | value | case.rb:43:5:43:22 | in ... then ... | | | case.rb:43:5:43:22 | in ... then ... | case.rb:43:8:43:21 | [ *,...,* ] | | -| case.rb:43:8:43:21 | [ *,...,* ] | case.rb:41:1:45:3 | exit case_match_find (abnormal) | raise | +| case.rb:43:8:43:21 | [ *,...,* ] | case.rb:41:1:45:3 | exit case_match_find (abnormal) | exception | | case.rb:43:8:43:21 | [ *,...,* ] | case.rb:43:10:43:10 | x | false, match, true | | case.rb:43:10:43:10 | x | case.rb:43:13:43:13 | 1 | | -| case.rb:43:13:43:13 | 1 | case.rb:41:1:45:3 | exit case_match_find (abnormal) | raise | +| case.rb:43:13:43:13 | 1 | case.rb:41:1:45:3 | exit case_match_find (abnormal) | exception | | case.rb:43:13:43:13 | 1 | case.rb:43:16:43:16 | 2 | match | -| case.rb:43:16:43:16 | 2 | case.rb:41:1:45:3 | exit case_match_find (abnormal) | raise | +| case.rb:43:16:43:16 | 2 | case.rb:41:1:45:3 | exit case_match_find (abnormal) | exception | | case.rb:43:16:43:16 | 2 | case.rb:43:20:43:20 | y | match | | case.rb:43:20:43:20 | y | case.rb:42:3:44:5 | case ... | | | case.rb:47:1:53:3 | case_match_hash | case.rb:55:1:61:3 | case_match_variable | | @@ -344,9 +344,9 @@ | case.rb:50:16:50:16 | 1 | case.rb:48:3:52:5 | case ... | match | | case.rb:50:16:50:16 | 1 | case.rb:51:5:51:17 | in ... then ... | no-match | | case.rb:51:5:51:17 | in ... then ... | case.rb:51:8:51:10 | Bar | | -| case.rb:51:8:51:10 | Bar | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | raise | +| case.rb:51:8:51:10 | Bar | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | exception | | case.rb:51:8:51:10 | Bar | case.rb:51:8:51:16 | { ..., ** } | match | -| case.rb:51:8:51:16 | { ..., ** } | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | raise | +| case.rb:51:8:51:16 | { ..., ** } | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | exception | | case.rb:51:8:51:16 | { ..., ** } | case.rb:48:3:52:5 | case ... | false, match, true | | case.rb:55:1:61:3 | case_match_variable | case.rb:63:1:67:3 | case_match_underscore | | | case.rb:55:1:61:3 | enter case_match_variable | case.rb:55:25:55:29 | value | | @@ -500,7 +500,7 @@ | case.rb:91:13:91:14 | "" | case.rb:91:18:91:19 | [ ..., * ] | no-match | | case.rb:91:18:91:19 | [ ..., * ] | case.rb:72:3:92:5 | case ... | match | | case.rb:91:18:91:19 | [ ..., * ] | case.rb:91:23:91:24 | { ..., ** } | no-match | -| case.rb:91:23:91:24 | { ..., ** } | case.rb:69:1:93:3 | exit case_match_various (abnormal) | raise | +| case.rb:91:23:91:24 | { ..., ** } | case.rb:69:1:93:3 | exit case_match_various (abnormal) | exception | | case.rb:91:23:91:24 | { ..., ** } | case.rb:72:3:92:5 | case ... | false, match, true | | case.rb:95:1:99:3 | case_match_guard_no_else | case.rb:1:1:99:4 | exit case.rb (normal) | | | case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:95:30:95:34 | value | | @@ -512,7 +512,7 @@ | case.rb:97:5:97:25 | in ... then ... | case.rb:97:8:97:8 | x | | | case.rb:97:8:97:8 | x | case.rb:97:13:97:13 | x | match | | case.rb:97:13:97:13 | x | case.rb:97:18:97:18 | 5 | | -| case.rb:97:13:97:18 | ... == ... | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | raise | +| case.rb:97:13:97:18 | ... == ... | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | exception | | case.rb:97:13:97:18 | ... == ... | case.rb:97:25:97:25 | 6 | true | | case.rb:97:18:97:18 | 5 | case.rb:97:13:97:18 | ... == ... | | | case.rb:97:20:97:25 | then ... | case.rb:96:3:98:5 | case ... | | @@ -870,7 +870,7 @@ | cfg.rb:91:6:91:10 | ... > ... | cfg.rb:91:3:91:24 | if ... | false | | cfg.rb:91:6:91:10 | ... > ... | cfg.rb:91:17:91:20 | next | true | | cfg.rb:91:10:91:10 | 3 | cfg.rb:91:6:91:10 | ... > ... | | -| cfg.rb:91:17:91:20 | next | cfg.rb:90:1:93:3 | exit { ... } (normal) | next | +| cfg.rb:91:17:91:20 | next | cfg.rb:90:1:93:3 | exit { ... } (normal) | continue | | cfg.rb:92:3:92:8 | call to puts | cfg.rb:90:1:93:3 | exit { ... } (normal) | | | cfg.rb:92:3:92:8 | self | cfg.rb:92:8:92:8 | x | | | cfg.rb:92:8:92:8 | x | cfg.rb:92:3:92:8 | call to puts | | @@ -1024,7 +1024,7 @@ | cfg.rb:134:1:134:23 | EmptyModule | cfg.rb:136:1:136:1 | 1 | | | cfg.rb:136:1:136:1 | 1 | cfg.rb:136:3:136:3 | 0 | | | cfg.rb:136:1:136:3 | ... / ... | cfg.rb:136:1:136:29 | ... rescue ... | | -| cfg.rb:136:1:136:3 | ... / ... | cfg.rb:136:12:136:29 | self | raise | +| cfg.rb:136:1:136:3 | ... / ... | cfg.rb:136:12:136:29 | self | exception | | cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:138:17:138:23 | __synth__2 | | | cfg.rb:136:3:136:3 | 0 | cfg.rb:136:1:136:3 | ... / ... | | | cfg.rb:136:12:136:29 | call to puts | cfg.rb:136:1:136:29 | ... rescue ... | | @@ -1828,7 +1828,7 @@ | loops.rb:14:11:14:16 | ... > ... | loops.rb:15:7:15:10 | next | true | | loops.rb:14:11:14:16 | ... > ... | loops.rb:16:11:16:11 | x | false | | loops.rb:14:15:14:16 | 50 | loops.rb:14:11:14:16 | ... > ... | | -| loops.rb:15:7:15:10 | next | loops.rb:9:9:9:9 | x | next | +| loops.rb:15:7:15:10 | next | loops.rb:9:9:9:9 | x | continue | | loops.rb:16:5:17:10 | elsif ... | loops.rb:14:5:17:10 | elsif ... | | | loops.rb:16:11:16:11 | x | loops.rb:16:15:16:16 | 10 | | | loops.rb:16:11:16:16 | ... > ... | loops.rb:16:5:17:10 | elsif ... | false | @@ -1886,7 +1886,7 @@ | raise.rb:8:6:8:10 | ... > ... | raise.rb:8:3:10:5 | if ... | false | | raise.rb:8:6:8:10 | ... > ... | raise.rb:9:5:9:17 | self | true | | raise.rb:8:10:8:10 | 2 | raise.rb:8:6:8:10 | ... > ... | | -| raise.rb:9:5:9:17 | call to raise | raise.rb:7:1:12:3 | exit m1 (abnormal) | raise | +| raise.rb:9:5:9:17 | call to raise | raise.rb:7:1:12:3 | exit m1 (abnormal) | exception | | raise.rb:9:5:9:17 | self | raise.rb:9:12:9:16 | x > 2 | | | raise.rb:9:11:9:17 | "x > 2" | raise.rb:9:5:9:17 | call to raise | | | raise.rb:9:12:9:16 | x > 2 | raise.rb:9:11:9:17 | "x > 2" | | @@ -1902,11 +1902,11 @@ | raise.rb:16:5:18:7 | if ... | raise.rb:22:3:22:15 | self | | | raise.rb:16:8:16:8 | b | raise.rb:16:5:18:7 | if ... | false | | raise.rb:16:8:16:8 | b | raise.rb:17:7:17:22 | self | true | -| raise.rb:17:7:17:22 | call to raise | raise.rb:19:10:19:19 | ExceptionA | raise | +| raise.rb:17:7:17:22 | call to raise | raise.rb:19:10:19:19 | ExceptionA | exception | | raise.rb:17:7:17:22 | self | raise.rb:17:13:17:22 | ExceptionA | | | raise.rb:17:13:17:22 | ExceptionA | raise.rb:17:7:17:22 | call to raise | | | raise.rb:19:3:20:18 | rescue ... | raise.rb:22:3:22:15 | self | | -| raise.rb:19:10:19:19 | ExceptionA | raise.rb:14:1:23:3 | exit m2 (abnormal) | raise | +| raise.rb:19:10:19:19 | ExceptionA | raise.rb:14:1:23:3 | exit m2 (abnormal) | exception | | raise.rb:19:10:19:19 | ExceptionA | raise.rb:20:5:20:18 | self | match | | raise.rb:19:20:20:18 | then ... | raise.rb:19:3:20:18 | rescue ... | | | raise.rb:20:5:20:18 | call to puts | raise.rb:19:20:20:18 | then ... | | @@ -1924,7 +1924,7 @@ | raise.rb:27:5:29:7 | if ... | raise.rb:33:3:33:15 | self | | | raise.rb:27:8:27:8 | b | raise.rb:27:5:29:7 | if ... | false | | raise.rb:27:8:27:8 | b | raise.rb:28:7:28:22 | self | true | -| raise.rb:28:7:28:22 | call to raise | raise.rb:31:5:31:18 | self | raise | +| raise.rb:28:7:28:22 | call to raise | raise.rb:31:5:31:18 | self | exception | | raise.rb:28:7:28:22 | self | raise.rb:28:13:28:22 | ExceptionA | | | raise.rb:28:13:28:22 | ExceptionA | raise.rb:28:7:28:22 | call to raise | | | raise.rb:30:3:31:18 | rescue ... | raise.rb:33:3:33:15 | self | | @@ -1944,7 +1944,7 @@ | raise.rb:38:5:40:7 | if ... | raise.rb:44:3:44:15 | self | | | raise.rb:38:8:38:8 | b | raise.rb:38:5:40:7 | if ... | false | | raise.rb:38:8:38:8 | b | raise.rb:39:7:39:22 | self | true | -| raise.rb:39:7:39:22 | call to raise | raise.rb:41:13:41:13 | e | raise | +| raise.rb:39:7:39:22 | call to raise | raise.rb:41:13:41:13 | e | exception | | raise.rb:39:7:39:22 | self | raise.rb:39:13:39:22 | ExceptionA | | | raise.rb:39:13:39:22 | ExceptionA | raise.rb:39:7:39:22 | call to raise | | | raise.rb:41:3:42:22 | rescue ... | raise.rb:44:3:44:15 | self | | @@ -1965,7 +1965,7 @@ | raise.rb:49:5:51:7 | if ... | raise.rb:54:3:54:15 | self | | | raise.rb:49:8:49:8 | b | raise.rb:49:5:51:7 | if ... | false | | raise.rb:49:8:49:8 | b | raise.rb:50:7:50:22 | self | true | -| raise.rb:50:7:50:22 | call to raise | raise.rb:52:13:52:13 | e | raise | +| raise.rb:50:7:50:22 | call to raise | raise.rb:52:13:52:13 | e | exception | | raise.rb:50:7:50:22 | self | raise.rb:50:13:50:22 | ExceptionA | | | raise.rb:50:13:50:22 | ExceptionA | raise.rb:50:7:50:22 | call to raise | | | raise.rb:52:3:52:13 | rescue ... | raise.rb:54:3:54:15 | self | | @@ -1982,13 +1982,13 @@ | raise.rb:59:5:61:7 | if ... | raise.rb:65:3:65:15 | self | | | raise.rb:59:8:59:8 | b | raise.rb:59:5:61:7 | if ... | false | | raise.rb:59:8:59:8 | b | raise.rb:60:7:60:22 | self | true | -| raise.rb:60:7:60:22 | call to raise | raise.rb:62:10:62:19 | ExceptionA | raise | +| raise.rb:60:7:60:22 | call to raise | raise.rb:62:10:62:19 | ExceptionA | exception | | raise.rb:60:7:60:22 | self | raise.rb:60:13:60:22 | ExceptionA | | | raise.rb:60:13:60:22 | ExceptionA | raise.rb:60:7:60:22 | call to raise | | | raise.rb:62:3:63:22 | rescue ... | raise.rb:65:3:65:15 | self | | | raise.rb:62:10:62:19 | ExceptionA | raise.rb:62:22:62:31 | ExceptionB | no-match | | raise.rb:62:10:62:19 | ExceptionA | raise.rb:62:36:62:36 | e | match | -| raise.rb:62:22:62:31 | ExceptionB | raise.rb:57:1:66:3 | exit m6 (abnormal) | raise | +| raise.rb:62:22:62:31 | ExceptionB | raise.rb:57:1:66:3 | exit m6 (abnormal) | exception | | raise.rb:62:22:62:31 | ExceptionB | raise.rb:62:36:62:36 | e | match | | raise.rb:62:36:62:36 | e | raise.rb:63:5:63:22 | self | | | raise.rb:62:37:63:22 | then ... | raise.rb:62:3:63:22 | rescue ... | | @@ -2009,9 +2009,9 @@ | raise.rb:69:6:69:6 | x | raise.rb:69:10:69:10 | 2 | | | raise.rb:69:6:69:10 | ... > ... | raise.rb:70:5:70:17 | self | true | | raise.rb:69:6:69:10 | ... > ... | raise.rb:71:9:71:9 | x | false | -| raise.rb:69:6:69:10 | ... > ... | raise.rb:76:3:76:15 | [ensure: raise] self | raise | +| raise.rb:69:6:69:10 | ... > ... | raise.rb:76:3:76:15 | [ensure: exception] self | exception | | raise.rb:69:10:69:10 | 2 | raise.rb:69:6:69:10 | ... > ... | | -| raise.rb:70:5:70:17 | call to raise | raise.rb:76:3:76:15 | [ensure: raise] self | raise | +| raise.rb:70:5:70:17 | call to raise | raise.rb:76:3:76:15 | [ensure: exception] self | exception | | raise.rb:70:5:70:17 | self | raise.rb:70:12:70:16 | x > 2 | | | raise.rb:70:11:70:17 | "x > 2" | raise.rb:70:5:70:17 | call to raise | | | raise.rb:70:12:70:16 | x > 2 | raise.rb:70:11:70:17 | "x > 2" | | @@ -2019,29 +2019,29 @@ | raise.rb:71:9:71:9 | x | raise.rb:71:13:71:13 | 0 | | | raise.rb:71:9:71:13 | ... < ... | raise.rb:71:3:72:18 | elsif ... | false | | raise.rb:71:9:71:13 | ... < ... | raise.rb:72:13:72:17 | x < 0 | true | -| raise.rb:71:9:71:13 | ... < ... | raise.rb:76:3:76:15 | [ensure: raise] self | raise | +| raise.rb:71:9:71:13 | ... < ... | raise.rb:76:3:76:15 | [ensure: exception] self | exception | | raise.rb:71:13:71:13 | 0 | raise.rb:71:9:71:13 | ... < ... | | | raise.rb:72:5:72:18 | return | raise.rb:76:3:76:15 | [ensure: return] self | return | | raise.rb:72:12:72:18 | "x < 0" | raise.rb:72:5:72:18 | return | | | raise.rb:72:13:72:17 | x < 0 | raise.rb:72:12:72:18 | "x < 0" | | -| raise.rb:74:3:74:20 | call to puts | raise.rb:76:3:76:15 | [ensure: raise] self | raise | +| raise.rb:74:3:74:20 | call to puts | raise.rb:76:3:76:15 | [ensure: exception] self | exception | | raise.rb:74:3:74:20 | call to puts | raise.rb:76:3:76:15 | self | | | raise.rb:74:3:74:20 | self | raise.rb:74:9:74:19 | 0 <= x <= 2 | | | raise.rb:74:8:74:20 | "0 <= x <= 2" | raise.rb:74:3:74:20 | call to puts | | | raise.rb:74:9:74:19 | 0 <= x <= 2 | raise.rb:74:8:74:20 | "0 <= x <= 2" | | -| raise.rb:75:1:76:15 | [ensure: raise] ensure ... | raise.rb:68:1:77:3 | exit m7 (abnormal) | raise | +| raise.rb:75:1:76:15 | [ensure: exception] ensure ... | raise.rb:68:1:77:3 | exit m7 (abnormal) | exception | | raise.rb:75:1:76:15 | [ensure: return] ensure ... | raise.rb:68:1:77:3 | exit m7 (normal) | return | | raise.rb:75:1:76:15 | ensure ... | raise.rb:68:1:77:3 | exit m7 (normal) | | -| raise.rb:76:3:76:15 | [ensure: raise] call to puts | raise.rb:75:1:76:15 | [ensure: raise] ensure ... | | -| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:76:9:76:14 | [ensure: raise] ensure | | +| raise.rb:76:3:76:15 | [ensure: exception] call to puts | raise.rb:75:1:76:15 | [ensure: exception] ensure ... | | +| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:76:9:76:14 | [ensure: exception] ensure | | | raise.rb:76:3:76:15 | [ensure: return] call to puts | raise.rb:75:1:76:15 | [ensure: return] ensure ... | | | raise.rb:76:3:76:15 | [ensure: return] self | raise.rb:76:9:76:14 | [ensure: return] ensure | | | raise.rb:76:3:76:15 | call to puts | raise.rb:75:1:76:15 | ensure ... | | | raise.rb:76:3:76:15 | self | raise.rb:76:9:76:14 | ensure | | | raise.rb:76:8:76:15 | "ensure" | raise.rb:76:3:76:15 | call to puts | | -| raise.rb:76:8:76:15 | [ensure: raise] "ensure" | raise.rb:76:3:76:15 | [ensure: raise] call to puts | | +| raise.rb:76:8:76:15 | [ensure: exception] "ensure" | raise.rb:76:3:76:15 | [ensure: exception] call to puts | | | raise.rb:76:8:76:15 | [ensure: return] "ensure" | raise.rb:76:3:76:15 | [ensure: return] call to puts | | -| raise.rb:76:9:76:14 | [ensure: raise] ensure | raise.rb:76:8:76:15 | [ensure: raise] "ensure" | | +| raise.rb:76:9:76:14 | [ensure: exception] ensure | raise.rb:76:8:76:15 | [ensure: exception] "ensure" | | | raise.rb:76:9:76:14 | [ensure: return] ensure | raise.rb:76:8:76:15 | [ensure: return] "ensure" | | | raise.rb:76:9:76:14 | ensure | raise.rb:76:8:76:15 | "ensure" | | | raise.rb:79:1:92:3 | enter m8 | raise.rb:79:8:79:8 | x | | @@ -2057,9 +2057,9 @@ | raise.rb:82:8:82:8 | x | raise.rb:82:12:82:12 | 2 | | | raise.rb:82:8:82:12 | ... > ... | raise.rb:83:7:83:19 | self | true | | raise.rb:82:8:82:12 | ... > ... | raise.rb:84:11:84:11 | x | false | -| raise.rb:82:8:82:12 | ... > ... | raise.rb:89:5:89:17 | [ensure: raise] self | raise | +| raise.rb:82:8:82:12 | ... > ... | raise.rb:89:5:89:17 | [ensure: exception] self | exception | | raise.rb:82:12:82:12 | 2 | raise.rb:82:8:82:12 | ... > ... | | -| raise.rb:83:7:83:19 | call to raise | raise.rb:89:5:89:17 | [ensure: raise] self | raise | +| raise.rb:83:7:83:19 | call to raise | raise.rb:89:5:89:17 | [ensure: exception] self | exception | | raise.rb:83:7:83:19 | self | raise.rb:83:14:83:18 | x > 2 | | | raise.rb:83:13:83:19 | "x > 2" | raise.rb:83:7:83:19 | call to raise | | | raise.rb:83:14:83:18 | x > 2 | raise.rb:83:13:83:19 | "x > 2" | | @@ -2067,29 +2067,29 @@ | raise.rb:84:11:84:11 | x | raise.rb:84:15:84:15 | 0 | | | raise.rb:84:11:84:15 | ... < ... | raise.rb:84:5:85:20 | elsif ... | false | | raise.rb:84:11:84:15 | ... < ... | raise.rb:85:15:85:19 | x < 0 | true | -| raise.rb:84:11:84:15 | ... < ... | raise.rb:89:5:89:17 | [ensure: raise] self | raise | +| raise.rb:84:11:84:15 | ... < ... | raise.rb:89:5:89:17 | [ensure: exception] self | exception | | raise.rb:84:15:84:15 | 0 | raise.rb:84:11:84:15 | ... < ... | | | raise.rb:85:7:85:20 | return | raise.rb:89:5:89:17 | [ensure: return] self | return | | raise.rb:85:14:85:20 | "x < 0" | raise.rb:85:7:85:20 | return | | | raise.rb:85:15:85:19 | x < 0 | raise.rb:85:14:85:20 | "x < 0" | | -| raise.rb:87:5:87:22 | call to puts | raise.rb:89:5:89:17 | [ensure: raise] self | raise | +| raise.rb:87:5:87:22 | call to puts | raise.rb:89:5:89:17 | [ensure: exception] self | exception | | raise.rb:87:5:87:22 | call to puts | raise.rb:89:5:89:17 | self | | | raise.rb:87:5:87:22 | self | raise.rb:87:11:87:21 | 0 <= x <= 2 | | | raise.rb:87:10:87:22 | "0 <= x <= 2" | raise.rb:87:5:87:22 | call to puts | | | raise.rb:87:11:87:21 | 0 <= x <= 2 | raise.rb:87:10:87:22 | "0 <= x <= 2" | | -| raise.rb:88:3:89:17 | [ensure: raise] ensure ... | raise.rb:79:1:92:3 | exit m8 (abnormal) | raise | +| raise.rb:88:3:89:17 | [ensure: exception] ensure ... | raise.rb:79:1:92:3 | exit m8 (abnormal) | exception | | raise.rb:88:3:89:17 | [ensure: return] ensure ... | raise.rb:79:1:92:3 | exit m8 (normal) | return | | raise.rb:88:3:89:17 | ensure ... | raise.rb:91:3:91:15 | self | | -| raise.rb:89:5:89:17 | [ensure: raise] call to puts | raise.rb:88:3:89:17 | [ensure: raise] ensure ... | | -| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:89:11:89:16 | [ensure: raise] ensure | | +| raise.rb:89:5:89:17 | [ensure: exception] call to puts | raise.rb:88:3:89:17 | [ensure: exception] ensure ... | | +| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:89:11:89:16 | [ensure: exception] ensure | | | raise.rb:89:5:89:17 | [ensure: return] call to puts | raise.rb:88:3:89:17 | [ensure: return] ensure ... | | | raise.rb:89:5:89:17 | [ensure: return] self | raise.rb:89:11:89:16 | [ensure: return] ensure | | | raise.rb:89:5:89:17 | call to puts | raise.rb:88:3:89:17 | ensure ... | | | raise.rb:89:5:89:17 | self | raise.rb:89:11:89:16 | ensure | | | raise.rb:89:10:89:17 | "ensure" | raise.rb:89:5:89:17 | call to puts | | -| raise.rb:89:10:89:17 | [ensure: raise] "ensure" | raise.rb:89:5:89:17 | [ensure: raise] call to puts | | +| raise.rb:89:10:89:17 | [ensure: exception] "ensure" | raise.rb:89:5:89:17 | [ensure: exception] call to puts | | | raise.rb:89:10:89:17 | [ensure: return] "ensure" | raise.rb:89:5:89:17 | [ensure: return] call to puts | | -| raise.rb:89:11:89:16 | [ensure: raise] ensure | raise.rb:89:10:89:17 | [ensure: raise] "ensure" | | +| raise.rb:89:11:89:16 | [ensure: exception] ensure | raise.rb:89:10:89:17 | [ensure: exception] "ensure" | | | raise.rb:89:11:89:16 | [ensure: return] ensure | raise.rb:89:10:89:17 | [ensure: return] "ensure" | | | raise.rb:89:11:89:16 | ensure | raise.rb:89:10:89:17 | "ensure" | | | raise.rb:91:3:91:15 | call to puts | raise.rb:79:1:92:3 | exit m8 (normal) | | @@ -2104,7 +2104,7 @@ | raise.rb:94:11:94:12 | b1 | raise.rb:94:15:94:16 | b2 | | | raise.rb:94:15:94:16 | b2 | raise.rb:95:3:95:17 | self | | | raise.rb:95:3:95:17 | call to puts | raise.rb:97:8:97:8 | x | | -| raise.rb:95:3:95:17 | call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | +| raise.rb:95:3:95:17 | call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception | | raise.rb:95:3:95:17 | self | raise.rb:95:9:95:16 | Begin m9 | | | raise.rb:95:8:95:17 | "Begin m9" | raise.rb:95:3:95:17 | call to puts | | | raise.rb:95:9:95:16 | Begin m9 | raise.rb:95:8:95:17 | "Begin m9" | | @@ -2112,9 +2112,9 @@ | raise.rb:97:8:97:8 | x | raise.rb:97:12:97:12 | 2 | | | raise.rb:97:8:97:12 | ... > ... | raise.rb:98:7:98:19 | self | true | | raise.rb:97:8:97:12 | ... > ... | raise.rb:99:11:99:11 | x | false | -| raise.rb:97:8:97:12 | ... > ... | raise.rb:104:5:104:23 | [ensure: raise] self | raise | +| raise.rb:97:8:97:12 | ... > ... | raise.rb:104:5:104:23 | [ensure: exception] self | exception | | raise.rb:97:12:97:12 | 2 | raise.rb:97:8:97:12 | ... > ... | | -| raise.rb:98:7:98:19 | call to raise | raise.rb:104:5:104:23 | [ensure: raise] self | raise | +| raise.rb:98:7:98:19 | call to raise | raise.rb:104:5:104:23 | [ensure: exception] self | exception | | raise.rb:98:7:98:19 | self | raise.rb:98:14:98:18 | x > 2 | | | raise.rb:98:13:98:19 | "x > 2" | raise.rb:98:7:98:19 | call to raise | | | raise.rb:98:14:98:18 | x > 2 | raise.rb:98:13:98:19 | "x > 2" | | @@ -2122,130 +2122,130 @@ | raise.rb:99:11:99:11 | x | raise.rb:99:15:99:15 | 0 | | | raise.rb:99:11:99:15 | ... < ... | raise.rb:99:5:100:20 | elsif ... | false | | raise.rb:99:11:99:15 | ... < ... | raise.rb:100:15:100:19 | x < 0 | true | -| raise.rb:99:11:99:15 | ... < ... | raise.rb:104:5:104:23 | [ensure: raise] self | raise | +| raise.rb:99:11:99:15 | ... < ... | raise.rb:104:5:104:23 | [ensure: exception] self | exception | | raise.rb:99:15:99:15 | 0 | raise.rb:99:11:99:15 | ... < ... | | | raise.rb:100:7:100:20 | return | raise.rb:104:5:104:23 | [ensure: return] self | return | | raise.rb:100:14:100:20 | "x < 0" | raise.rb:100:7:100:20 | return | | | raise.rb:100:15:100:19 | x < 0 | raise.rb:100:14:100:20 | "x < 0" | | -| raise.rb:102:5:102:22 | call to puts | raise.rb:104:5:104:23 | [ensure: raise] self | raise | +| raise.rb:102:5:102:22 | call to puts | raise.rb:104:5:104:23 | [ensure: exception] self | exception | | raise.rb:102:5:102:22 | call to puts | raise.rb:104:5:104:23 | self | | | raise.rb:102:5:102:22 | self | raise.rb:102:11:102:21 | 0 <= x <= 2 | | | raise.rb:102:10:102:22 | "0 <= x <= 2" | raise.rb:102:5:102:22 | call to puts | | | raise.rb:102:11:102:21 | 0 <= x <= 2 | raise.rb:102:10:102:22 | "0 <= x <= 2" | | -| raise.rb:103:3:111:7 | [ensure: raise] ensure ... | raise.rb:115:3:115:22 | [ensure: raise] self | raise | +| raise.rb:103:3:111:7 | [ensure: exception] ensure ... | raise.rb:115:3:115:22 | [ensure: exception] self | exception | | raise.rb:103:3:111:7 | [ensure: return] ensure ... | raise.rb:115:3:115:22 | [ensure: return] self | return | | raise.rb:103:3:111:7 | ensure ... | raise.rb:113:3:113:15 | self | | -| raise.rb:104:5:104:23 | [ensure: raise] call to puts | raise.rb:106:10:106:11 | [ensure: raise] b1 | | -| raise.rb:104:5:104:23 | [ensure: raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | -| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:104:11:104:22 | [ensure: raise] outer ensure | | +| raise.rb:104:5:104:23 | [ensure: exception] call to puts | raise.rb:106:10:106:11 | [ensure: exception] b1 | | +| raise.rb:104:5:104:23 | [ensure: exception] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception | +| raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:104:11:104:22 | [ensure: exception] outer ensure | | | raise.rb:104:5:104:23 | [ensure: return] call to puts | raise.rb:106:10:106:11 | [ensure: return] b1 | | -| raise.rb:104:5:104:23 | [ensure: return] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | +| raise.rb:104:5:104:23 | [ensure: return] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception | | raise.rb:104:5:104:23 | [ensure: return] self | raise.rb:104:11:104:22 | [ensure: return] outer ensure | | | raise.rb:104:5:104:23 | call to puts | raise.rb:106:10:106:11 | b1 | | -| raise.rb:104:5:104:23 | call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | +| raise.rb:104:5:104:23 | call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception | | raise.rb:104:5:104:23 | self | raise.rb:104:11:104:22 | outer ensure | | | raise.rb:104:10:104:23 | "outer ensure" | raise.rb:104:5:104:23 | call to puts | | -| raise.rb:104:10:104:23 | [ensure: raise] "outer ensure" | raise.rb:104:5:104:23 | [ensure: raise] call to puts | | +| raise.rb:104:10:104:23 | [ensure: exception] "outer ensure" | raise.rb:104:5:104:23 | [ensure: exception] call to puts | | | raise.rb:104:10:104:23 | [ensure: return] "outer ensure" | raise.rb:104:5:104:23 | [ensure: return] call to puts | | -| raise.rb:104:11:104:22 | [ensure: raise] outer ensure | raise.rb:104:10:104:23 | [ensure: raise] "outer ensure" | | +| raise.rb:104:11:104:22 | [ensure: exception] outer ensure | raise.rb:104:10:104:23 | [ensure: exception] "outer ensure" | | | raise.rb:104:11:104:22 | [ensure: return] outer ensure | raise.rb:104:10:104:23 | [ensure: return] "outer ensure" | | | raise.rb:104:11:104:22 | outer ensure | raise.rb:104:10:104:23 | "outer ensure" | | -| raise.rb:106:7:108:9 | [ensure: raise] if ... | raise.rb:110:7:110:25 | [ensure: raise] self | | +| raise.rb:106:7:108:9 | [ensure: exception] if ... | raise.rb:110:7:110:25 | [ensure: exception] self | | | raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:110:7:110:25 | [ensure: return] self | | | raise.rb:106:7:108:9 | if ... | raise.rb:110:7:110:25 | self | | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:106:7:108:9 | [ensure: raise] if ... | false | -| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:107:9:107:26 | [ensure: raise] self | true | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:106:7:108:9 | [ensure: exception] if ... | false | +| raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:107:9:107:26 | [ensure: exception] self | true | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:106:7:108:9 | [ensure: return] if ... | false | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:107:9:107:26 | [ensure: return] self | true | | raise.rb:106:10:106:11 | b1 | raise.rb:106:7:108:9 | if ... | false | | raise.rb:106:10:106:11 | b1 | raise.rb:107:9:107:26 | self | true | -| raise.rb:107:9:107:26 | [ensure: raise] call to raise | raise.rb:110:7:110:25 | [ensure: raise, ensure(1): raise] self | raise | -| raise.rb:107:9:107:26 | [ensure: raise] self | raise.rb:107:16:107:25 | [ensure: raise] b1 is true | | -| raise.rb:107:9:107:26 | [ensure: return] call to raise | raise.rb:110:7:110:25 | [ensure: return, ensure(1): raise] self | raise | +| raise.rb:107:9:107:26 | [ensure: exception] call to raise | raise.rb:110:7:110:25 | [ensure: exception, ensure(1): exception] self | exception | +| raise.rb:107:9:107:26 | [ensure: exception] self | raise.rb:107:16:107:25 | [ensure: exception] b1 is true | | +| raise.rb:107:9:107:26 | [ensure: return] call to raise | raise.rb:110:7:110:25 | [ensure: return, ensure(1): exception] self | exception | | raise.rb:107:9:107:26 | [ensure: return] self | raise.rb:107:16:107:25 | [ensure: return] b1 is true | | -| raise.rb:107:9:107:26 | call to raise | raise.rb:110:7:110:25 | [ensure(1): raise] self | raise | +| raise.rb:107:9:107:26 | call to raise | raise.rb:110:7:110:25 | [ensure(1): exception] self | exception | | raise.rb:107:9:107:26 | self | raise.rb:107:16:107:25 | b1 is true | | | raise.rb:107:15:107:26 | "b1 is true" | raise.rb:107:9:107:26 | call to raise | | -| raise.rb:107:15:107:26 | [ensure: raise] "b1 is true" | raise.rb:107:9:107:26 | [ensure: raise] call to raise | | +| raise.rb:107:15:107:26 | [ensure: exception] "b1 is true" | raise.rb:107:9:107:26 | [ensure: exception] call to raise | | | raise.rb:107:15:107:26 | [ensure: return] "b1 is true" | raise.rb:107:9:107:26 | [ensure: return] call to raise | | -| raise.rb:107:16:107:25 | [ensure: raise] b1 is true | raise.rb:107:15:107:26 | [ensure: raise] "b1 is true" | | +| raise.rb:107:16:107:25 | [ensure: exception] b1 is true | raise.rb:107:15:107:26 | [ensure: exception] "b1 is true" | | | raise.rb:107:16:107:25 | [ensure: return] b1 is true | raise.rb:107:15:107:26 | [ensure: return] "b1 is true" | | | raise.rb:107:16:107:25 | b1 is true | raise.rb:107:15:107:26 | "b1 is true" | | -| raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | raise.rb:115:3:115:22 | [ensure: raise] self | raise | -| raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | raise.rb:115:3:115:22 | [ensure: raise] self | raise | -| raise.rb:109:5:110:25 | [ensure: raise] ensure ... | raise.rb:103:3:111:7 | [ensure: raise] ensure ... | | -| raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | raise.rb:115:3:115:22 | [ensure: raise] self | raise | +| raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | raise.rb:115:3:115:22 | [ensure: exception] self | exception | +| raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | raise.rb:115:3:115:22 | [ensure: exception] self | exception | +| raise.rb:109:5:110:25 | [ensure: exception] ensure ... | raise.rb:103:3:111:7 | [ensure: exception] ensure ... | | +| raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | raise.rb:115:3:115:22 | [ensure: exception] self | exception | | raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:103:3:111:7 | [ensure: return] ensure ... | | | raise.rb:109:5:110:25 | ensure ... | raise.rb:103:3:111:7 | ensure ... | | -| raise.rb:110:7:110:25 | [ensure(1): raise] call to puts | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | | -| raise.rb:110:7:110:25 | [ensure(1): raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | -| raise.rb:110:7:110:25 | [ensure(1): raise] self | raise.rb:110:13:110:24 | [ensure(1): raise] inner ensure | | -| raise.rb:110:7:110:25 | [ensure: raise, ensure(1): raise] call to puts | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | | -| raise.rb:110:7:110:25 | [ensure: raise, ensure(1): raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | -| raise.rb:110:7:110:25 | [ensure: raise, ensure(1): raise] self | raise.rb:110:13:110:24 | [ensure: raise, ensure(1): raise] inner ensure | | -| raise.rb:110:7:110:25 | [ensure: raise] call to puts | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | | -| raise.rb:110:7:110:25 | [ensure: raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | -| raise.rb:110:7:110:25 | [ensure: raise] self | raise.rb:110:13:110:24 | [ensure: raise] inner ensure | | -| raise.rb:110:7:110:25 | [ensure: return, ensure(1): raise] call to puts | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | | -| raise.rb:110:7:110:25 | [ensure: return, ensure(1): raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | -| raise.rb:110:7:110:25 | [ensure: return, ensure(1): raise] self | raise.rb:110:13:110:24 | [ensure: return, ensure(1): raise] inner ensure | | +| raise.rb:110:7:110:25 | [ensure(1): exception] call to puts | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | | +| raise.rb:110:7:110:25 | [ensure(1): exception] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception | +| raise.rb:110:7:110:25 | [ensure(1): exception] self | raise.rb:110:13:110:24 | [ensure(1): exception] inner ensure | | +| raise.rb:110:7:110:25 | [ensure: exception, ensure(1): exception] call to puts | raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | | +| raise.rb:110:7:110:25 | [ensure: exception, ensure(1): exception] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception | +| raise.rb:110:7:110:25 | [ensure: exception, ensure(1): exception] self | raise.rb:110:13:110:24 | [ensure: exception, ensure(1): exception] inner ensure | | +| raise.rb:110:7:110:25 | [ensure: exception] call to puts | raise.rb:109:5:110:25 | [ensure: exception] ensure ... | | +| raise.rb:110:7:110:25 | [ensure: exception] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception | +| raise.rb:110:7:110:25 | [ensure: exception] self | raise.rb:110:13:110:24 | [ensure: exception] inner ensure | | +| raise.rb:110:7:110:25 | [ensure: return, ensure(1): exception] call to puts | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | | +| raise.rb:110:7:110:25 | [ensure: return, ensure(1): exception] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception | +| raise.rb:110:7:110:25 | [ensure: return, ensure(1): exception] self | raise.rb:110:13:110:24 | [ensure: return, ensure(1): exception] inner ensure | | | raise.rb:110:7:110:25 | [ensure: return] call to puts | raise.rb:109:5:110:25 | [ensure: return] ensure ... | | -| raise.rb:110:7:110:25 | [ensure: return] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | +| raise.rb:110:7:110:25 | [ensure: return] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception | | raise.rb:110:7:110:25 | [ensure: return] self | raise.rb:110:13:110:24 | [ensure: return] inner ensure | | | raise.rb:110:7:110:25 | call to puts | raise.rb:109:5:110:25 | ensure ... | | -| raise.rb:110:7:110:25 | call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | +| raise.rb:110:7:110:25 | call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception | | raise.rb:110:7:110:25 | self | raise.rb:110:13:110:24 | inner ensure | | | raise.rb:110:12:110:25 | "inner ensure" | raise.rb:110:7:110:25 | call to puts | | -| raise.rb:110:12:110:25 | [ensure(1): raise] "inner ensure" | raise.rb:110:7:110:25 | [ensure(1): raise] call to puts | | -| raise.rb:110:12:110:25 | [ensure: raise, ensure(1): raise] "inner ensure" | raise.rb:110:7:110:25 | [ensure: raise, ensure(1): raise] call to puts | | -| raise.rb:110:12:110:25 | [ensure: raise] "inner ensure" | raise.rb:110:7:110:25 | [ensure: raise] call to puts | | -| raise.rb:110:12:110:25 | [ensure: return, ensure(1): raise] "inner ensure" | raise.rb:110:7:110:25 | [ensure: return, ensure(1): raise] call to puts | | +| raise.rb:110:12:110:25 | [ensure(1): exception] "inner ensure" | raise.rb:110:7:110:25 | [ensure(1): exception] call to puts | | +| raise.rb:110:12:110:25 | [ensure: exception, ensure(1): exception] "inner ensure" | raise.rb:110:7:110:25 | [ensure: exception, ensure(1): exception] call to puts | | +| raise.rb:110:12:110:25 | [ensure: exception] "inner ensure" | raise.rb:110:7:110:25 | [ensure: exception] call to puts | | +| raise.rb:110:12:110:25 | [ensure: return, ensure(1): exception] "inner ensure" | raise.rb:110:7:110:25 | [ensure: return, ensure(1): exception] call to puts | | | raise.rb:110:12:110:25 | [ensure: return] "inner ensure" | raise.rb:110:7:110:25 | [ensure: return] call to puts | | -| raise.rb:110:13:110:24 | [ensure(1): raise] inner ensure | raise.rb:110:12:110:25 | [ensure(1): raise] "inner ensure" | | -| raise.rb:110:13:110:24 | [ensure: raise, ensure(1): raise] inner ensure | raise.rb:110:12:110:25 | [ensure: raise, ensure(1): raise] "inner ensure" | | -| raise.rb:110:13:110:24 | [ensure: raise] inner ensure | raise.rb:110:12:110:25 | [ensure: raise] "inner ensure" | | -| raise.rb:110:13:110:24 | [ensure: return, ensure(1): raise] inner ensure | raise.rb:110:12:110:25 | [ensure: return, ensure(1): raise] "inner ensure" | | +| raise.rb:110:13:110:24 | [ensure(1): exception] inner ensure | raise.rb:110:12:110:25 | [ensure(1): exception] "inner ensure" | | +| raise.rb:110:13:110:24 | [ensure: exception, ensure(1): exception] inner ensure | raise.rb:110:12:110:25 | [ensure: exception, ensure(1): exception] "inner ensure" | | +| raise.rb:110:13:110:24 | [ensure: exception] inner ensure | raise.rb:110:12:110:25 | [ensure: exception] "inner ensure" | | +| raise.rb:110:13:110:24 | [ensure: return, ensure(1): exception] inner ensure | raise.rb:110:12:110:25 | [ensure: return, ensure(1): exception] "inner ensure" | | | raise.rb:110:13:110:24 | [ensure: return] inner ensure | raise.rb:110:12:110:25 | [ensure: return] "inner ensure" | | | raise.rb:110:13:110:24 | inner ensure | raise.rb:110:12:110:25 | "inner ensure" | | -| raise.rb:113:3:113:15 | call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | +| raise.rb:113:3:113:15 | call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception | | raise.rb:113:3:113:15 | call to puts | raise.rb:115:3:115:22 | self | | | raise.rb:113:3:113:15 | self | raise.rb:113:9:113:14 | End m9 | | | raise.rb:113:8:113:15 | "End m9" | raise.rb:113:3:113:15 | call to puts | | | raise.rb:113:9:113:14 | End m9 | raise.rb:113:8:113:15 | "End m9" | | -| raise.rb:114:1:118:5 | [ensure: raise] ensure ... | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise | +| raise.rb:114:1:118:5 | [ensure: exception] ensure ... | raise.rb:94:1:119:3 | exit m9 (abnormal) | exception | | raise.rb:114:1:118:5 | [ensure: return] ensure ... | raise.rb:94:1:119:3 | exit m9 (normal) | return | | raise.rb:114:1:118:5 | ensure ... | raise.rb:94:1:119:3 | exit m9 (normal) | | -| raise.rb:115:3:115:22 | [ensure: raise] call to puts | raise.rb:116:6:116:7 | [ensure: raise] b2 | | -| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:115:9:115:21 | [ensure: raise] method ensure | | +| raise.rb:115:3:115:22 | [ensure: exception] call to puts | raise.rb:116:6:116:7 | [ensure: exception] b2 | | +| raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:115:9:115:21 | [ensure: exception] method ensure | | | raise.rb:115:3:115:22 | [ensure: return] call to puts | raise.rb:116:6:116:7 | [ensure: return] b2 | | | raise.rb:115:3:115:22 | [ensure: return] self | raise.rb:115:9:115:21 | [ensure: return] method ensure | | | raise.rb:115:3:115:22 | call to puts | raise.rb:116:6:116:7 | b2 | | | raise.rb:115:3:115:22 | self | raise.rb:115:9:115:21 | method ensure | | | raise.rb:115:8:115:22 | "method ensure" | raise.rb:115:3:115:22 | call to puts | | -| raise.rb:115:8:115:22 | [ensure: raise] "method ensure" | raise.rb:115:3:115:22 | [ensure: raise] call to puts | | +| raise.rb:115:8:115:22 | [ensure: exception] "method ensure" | raise.rb:115:3:115:22 | [ensure: exception] call to puts | | | raise.rb:115:8:115:22 | [ensure: return] "method ensure" | raise.rb:115:3:115:22 | [ensure: return] call to puts | | -| raise.rb:115:9:115:21 | [ensure: raise] method ensure | raise.rb:115:8:115:22 | [ensure: raise] "method ensure" | | +| raise.rb:115:9:115:21 | [ensure: exception] method ensure | raise.rb:115:8:115:22 | [ensure: exception] "method ensure" | | | raise.rb:115:9:115:21 | [ensure: return] method ensure | raise.rb:115:8:115:22 | [ensure: return] "method ensure" | | | raise.rb:115:9:115:21 | method ensure | raise.rb:115:8:115:22 | "method ensure" | | -| raise.rb:116:3:118:5 | [ensure: raise] if ... | raise.rb:114:1:118:5 | [ensure: raise] ensure ... | | +| raise.rb:116:3:118:5 | [ensure: exception] if ... | raise.rb:114:1:118:5 | [ensure: exception] ensure ... | | | raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:114:1:118:5 | [ensure: return] ensure ... | | | raise.rb:116:3:118:5 | if ... | raise.rb:114:1:118:5 | ensure ... | | -| raise.rb:116:6:116:7 | [ensure: raise] b2 | raise.rb:116:3:118:5 | [ensure: raise] if ... | false | -| raise.rb:116:6:116:7 | [ensure: raise] b2 | raise.rb:117:5:117:22 | [ensure: raise] self | true | +| raise.rb:116:6:116:7 | [ensure: exception] b2 | raise.rb:116:3:118:5 | [ensure: exception] if ... | false | +| raise.rb:116:6:116:7 | [ensure: exception] b2 | raise.rb:117:5:117:22 | [ensure: exception] self | true | | raise.rb:116:6:116:7 | [ensure: return] b2 | raise.rb:116:3:118:5 | [ensure: return] if ... | false | | raise.rb:116:6:116:7 | [ensure: return] b2 | raise.rb:117:5:117:22 | [ensure: return] self | true | | raise.rb:116:6:116:7 | b2 | raise.rb:116:3:118:5 | if ... | false | | raise.rb:116:6:116:7 | b2 | raise.rb:117:5:117:22 | self | true | -| raise.rb:117:5:117:22 | [ensure: raise] call to raise | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise | -| raise.rb:117:5:117:22 | [ensure: raise] self | raise.rb:117:12:117:21 | [ensure: raise] b2 is true | | -| raise.rb:117:5:117:22 | [ensure: return] call to raise | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise | +| raise.rb:117:5:117:22 | [ensure: exception] call to raise | raise.rb:94:1:119:3 | exit m9 (abnormal) | exception | +| raise.rb:117:5:117:22 | [ensure: exception] self | raise.rb:117:12:117:21 | [ensure: exception] b2 is true | | +| raise.rb:117:5:117:22 | [ensure: return] call to raise | raise.rb:94:1:119:3 | exit m9 (abnormal) | exception | | raise.rb:117:5:117:22 | [ensure: return] self | raise.rb:117:12:117:21 | [ensure: return] b2 is true | | -| raise.rb:117:5:117:22 | call to raise | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise | +| raise.rb:117:5:117:22 | call to raise | raise.rb:94:1:119:3 | exit m9 (abnormal) | exception | | raise.rb:117:5:117:22 | self | raise.rb:117:12:117:21 | b2 is true | | | raise.rb:117:11:117:22 | "b2 is true" | raise.rb:117:5:117:22 | call to raise | | -| raise.rb:117:11:117:22 | [ensure: raise] "b2 is true" | raise.rb:117:5:117:22 | [ensure: raise] call to raise | | +| raise.rb:117:11:117:22 | [ensure: exception] "b2 is true" | raise.rb:117:5:117:22 | [ensure: exception] call to raise | | | raise.rb:117:11:117:22 | [ensure: return] "b2 is true" | raise.rb:117:5:117:22 | [ensure: return] call to raise | | -| raise.rb:117:12:117:21 | [ensure: raise] b2 is true | raise.rb:117:11:117:22 | [ensure: raise] "b2 is true" | | +| raise.rb:117:12:117:21 | [ensure: exception] b2 is true | raise.rb:117:11:117:22 | [ensure: exception] "b2 is true" | | | raise.rb:117:12:117:21 | [ensure: return] b2 is true | raise.rb:117:11:117:22 | [ensure: return] "b2 is true" | | | raise.rb:117:12:117:21 | b2 is true | raise.rb:117:11:117:22 | "b2 is true" | | | raise.rb:121:1:126:3 | enter m10 | raise.rb:121:9:121:9 | p | | @@ -2254,7 +2254,7 @@ | raise.rb:121:1:126:3 | m10 | raise.rb:128:1:140:3 | m11 | | | raise.rb:121:9:121:9 | p | raise.rb:121:14:121:30 | self | false, no-match, true | | raise.rb:121:9:121:9 | p | raise.rb:125:3:125:51 | self | match | -| raise.rb:121:14:121:30 | call to raise | raise.rb:121:1:126:3 | exit m10 (abnormal) | raise | +| raise.rb:121:14:121:30 | call to raise | raise.rb:121:1:126:3 | exit m10 (abnormal) | exception | | raise.rb:121:14:121:30 | self | raise.rb:121:21:121:29 | Exception | | | raise.rb:121:20:121:30 | "Exception" | raise.rb:121:14:121:30 | call to raise | | | raise.rb:121:21:121:29 | Exception | raise.rb:121:20:121:30 | "Exception" | | @@ -2271,7 +2271,7 @@ | raise.rb:130:5:132:7 | if ... | raise.rb:137:5:137:17 | self | | | raise.rb:130:8:130:8 | b | raise.rb:130:5:132:7 | if ... | false | | raise.rb:130:8:130:8 | b | raise.rb:131:7:131:22 | self | true | -| raise.rb:131:7:131:22 | call to raise | raise.rb:133:10:133:19 | ExceptionA | raise | +| raise.rb:131:7:131:22 | call to raise | raise.rb:133:10:133:19 | ExceptionA | exception | | raise.rb:131:7:131:22 | self | raise.rb:131:13:131:22 | ExceptionA | | | raise.rb:131:13:131:22 | ExceptionA | raise.rb:131:7:131:22 | call to raise | | | raise.rb:133:3:133:19 | rescue ... | raise.rb:137:5:137:17 | self | | @@ -2279,22 +2279,22 @@ | raise.rb:133:10:133:19 | ExceptionA | raise.rb:134:10:134:19 | ExceptionB | no-match | | raise.rb:134:3:135:21 | rescue ... | raise.rb:137:5:137:17 | self | | | raise.rb:134:10:134:19 | ExceptionB | raise.rb:135:5:135:21 | self | match | -| raise.rb:134:10:134:19 | ExceptionB | raise.rb:137:5:137:17 | [ensure: raise] self | raise | +| raise.rb:134:10:134:19 | ExceptionB | raise.rb:137:5:137:17 | [ensure: exception] self | exception | | raise.rb:134:20:135:21 | then ... | raise.rb:134:3:135:21 | rescue ... | | | raise.rb:135:5:135:21 | call to puts | raise.rb:134:20:135:21 | then ... | | | raise.rb:135:5:135:21 | self | raise.rb:135:11:135:20 | ExceptionB | | | raise.rb:135:10:135:21 | "ExceptionB" | raise.rb:135:5:135:21 | call to puts | | | raise.rb:135:11:135:20 | ExceptionB | raise.rb:135:10:135:21 | "ExceptionB" | | -| raise.rb:136:3:137:17 | [ensure: raise] ensure ... | raise.rb:128:1:140:3 | exit m11 (abnormal) | raise | +| raise.rb:136:3:137:17 | [ensure: exception] ensure ... | raise.rb:128:1:140:3 | exit m11 (abnormal) | exception | | raise.rb:136:3:137:17 | ensure ... | raise.rb:139:3:139:16 | self | | -| raise.rb:137:5:137:17 | [ensure: raise] call to puts | raise.rb:136:3:137:17 | [ensure: raise] ensure ... | | -| raise.rb:137:5:137:17 | [ensure: raise] self | raise.rb:137:11:137:16 | [ensure: raise] Ensure | | +| raise.rb:137:5:137:17 | [ensure: exception] call to puts | raise.rb:136:3:137:17 | [ensure: exception] ensure ... | | +| raise.rb:137:5:137:17 | [ensure: exception] self | raise.rb:137:11:137:16 | [ensure: exception] Ensure | | | raise.rb:137:5:137:17 | call to puts | raise.rb:136:3:137:17 | ensure ... | | | raise.rb:137:5:137:17 | self | raise.rb:137:11:137:16 | Ensure | | | raise.rb:137:10:137:17 | "Ensure" | raise.rb:137:5:137:17 | call to puts | | -| raise.rb:137:10:137:17 | [ensure: raise] "Ensure" | raise.rb:137:5:137:17 | [ensure: raise] call to puts | | +| raise.rb:137:10:137:17 | [ensure: exception] "Ensure" | raise.rb:137:5:137:17 | [ensure: exception] call to puts | | | raise.rb:137:11:137:16 | Ensure | raise.rb:137:10:137:17 | "Ensure" | | -| raise.rb:137:11:137:16 | [ensure: raise] Ensure | raise.rb:137:10:137:17 | [ensure: raise] "Ensure" | | +| raise.rb:137:11:137:16 | [ensure: exception] Ensure | raise.rb:137:10:137:17 | [ensure: exception] "Ensure" | | | raise.rb:139:3:139:16 | call to puts | raise.rb:128:1:140:3 | exit m11 (normal) | | | raise.rb:139:3:139:16 | self | raise.rb:139:9:139:15 | End m11 | | | raise.rb:139:8:139:16 | "End m11" | raise.rb:139:3:139:16 | call to puts | | @@ -2306,13 +2306,13 @@ | raise.rb:143:3:145:5 | if ... | raise.rb:147:10:147:10 | 3 | | | raise.rb:143:6:143:6 | b | raise.rb:143:3:145:5 | if ... | false | | raise.rb:143:6:143:6 | b | raise.rb:144:5:144:12 | self | true | -| raise.rb:144:5:144:12 | call to raise | raise.rb:147:10:147:10 | [ensure: raise] 3 | raise | +| raise.rb:144:5:144:12 | call to raise | raise.rb:147:10:147:10 | [ensure: exception] 3 | exception | | raise.rb:144:5:144:12 | self | raise.rb:144:11:144:12 | "" | | | raise.rb:144:11:144:12 | "" | raise.rb:144:5:144:12 | call to raise | | -| raise.rb:147:3:147:10 | [ensure: raise] return | raise.rb:142:1:148:3 | exit m12 (normal) | return | +| raise.rb:147:3:147:10 | [ensure: exception] return | raise.rb:142:1:148:3 | exit m12 (normal) | return | | raise.rb:147:3:147:10 | return | raise.rb:142:1:148:3 | exit m12 (normal) | return | | raise.rb:147:10:147:10 | 3 | raise.rb:147:3:147:10 | return | | -| raise.rb:147:10:147:10 | [ensure: raise] 3 | raise.rb:147:3:147:10 | [ensure: raise] return | | +| raise.rb:147:10:147:10 | [ensure: exception] 3 | raise.rb:147:3:147:10 | [ensure: exception] return | | | raise.rb:150:1:152:3 | enter m13 | raise.rb:151:1:151:6 | ensure ... | | | raise.rb:150:1:152:3 | exit m13 (normal) | raise.rb:150:1:152:3 | exit m13 | | | raise.rb:150:1:152:3 | m13 | raise.rb:154:1:156:3 | m14 | | @@ -2328,7 +2328,7 @@ | raise.rb:155:16:155:50 | exit { ... } (normal) | raise.rb:155:16:155:50 | exit { ... } | | | raise.rb:155:16:155:50 | { ... } | raise.rb:155:3:155:50 | call to each | | | raise.rb:155:19:155:22 | elem | raise.rb:155:37:155:43 | element | | -| raise.rb:155:25:155:32 | call to raise | raise.rb:155:16:155:50 | exit { ... } (abnormal) | raise | +| raise.rb:155:25:155:32 | call to raise | raise.rb:155:16:155:50 | exit { ... } (abnormal) | exception | | raise.rb:155:25:155:32 | self | raise.rb:155:31:155:32 | "" | | | raise.rb:155:25:155:48 | ... if ... | raise.rb:155:16:155:50 | exit { ... } (normal) | | | raise.rb:155:31:155:32 | "" | raise.rb:155:25:155:32 | call to raise | | @@ -2350,7 +2350,7 @@ | raise.rb:160:9:162:7 | exit -> { ... } (abnormal) | raise.rb:160:9:162:7 | exit -> { ... } | | | raise.rb:160:9:162:7 | exit -> { ... } (normal) | raise.rb:160:9:162:7 | exit -> { ... } | | | raise.rb:160:12:160:12 | x | raise.rb:161:23:161:23 | x | | -| raise.rb:161:7:161:14 | call to raise | raise.rb:160:9:162:7 | exit -> { ... } (abnormal) | raise | +| raise.rb:161:7:161:14 | call to raise | raise.rb:160:9:162:7 | exit -> { ... } (abnormal) | exception | | raise.rb:161:7:161:14 | self | raise.rb:161:13:161:14 | "" | | | raise.rb:161:7:161:23 | ... unless ... | raise.rb:160:9:162:7 | exit -> { ... } (normal) | | | raise.rb:161:13:161:14 | "" | raise.rb:161:7:161:14 | call to raise | | @@ -2361,7 +2361,7 @@ | raise.rb:167:3:169:5 | exit m (abnormal) | raise.rb:167:3:169:5 | exit m | | | raise.rb:167:3:169:5 | m | raise.rb:172:1:182:3 | m16 | | | raise.rb:167:7:167:10 | self | raise.rb:167:3:169:5 | m | | -| raise.rb:168:5:168:12 | call to raise | raise.rb:167:3:169:5 | exit m (abnormal) | raise | +| raise.rb:168:5:168:12 | call to raise | raise.rb:167:3:169:5 | exit m (abnormal) | exception | | raise.rb:168:5:168:12 | self | raise.rb:168:11:168:12 | "" | | | raise.rb:168:11:168:12 | "" | raise.rb:168:5:168:12 | call to raise | | | raise.rb:172:1:182:3 | enter m16 | raise.rb:172:9:172:10 | b1 | | @@ -2373,19 +2373,19 @@ | raise.rb:174:8:174:9 | b1 | raise.rb:174:8:174:23 | [true] ... \|\| ... | true | | raise.rb:174:8:174:9 | b1 | raise.rb:174:14:174:15 | b2 | false | | raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:177:14:177:14 | 2 | false | -| raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:179:10:179:19 | ExceptionA | raise | +| raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:179:10:179:19 | ExceptionA | exception | | raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:175:14:175:14 | 1 | true | -| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:179:10:179:19 | ExceptionA | raise | +| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:179:10:179:19 | ExceptionA | exception | | raise.rb:174:14:174:15 | b2 | raise.rb:174:20:174:23 | true | | | raise.rb:174:14:174:23 | ... == ... | raise.rb:174:8:174:23 | [false] ... \|\| ... | false | | raise.rb:174:14:174:23 | ... == ... | raise.rb:174:8:174:23 | [true] ... \|\| ... | true | -| raise.rb:174:14:174:23 | ... == ... | raise.rb:179:10:179:19 | ExceptionA | raise | +| raise.rb:174:14:174:23 | ... == ... | raise.rb:179:10:179:19 | ExceptionA | exception | | raise.rb:174:20:174:23 | true | raise.rb:174:14:174:23 | ... == ... | | | raise.rb:175:7:175:14 | return | raise.rb:172:1:182:3 | exit m16 (normal) | return | | raise.rb:175:14:175:14 | 1 | raise.rb:175:7:175:14 | return | | | raise.rb:177:7:177:14 | return | raise.rb:172:1:182:3 | exit m16 (normal) | return | | raise.rb:177:14:177:14 | 2 | raise.rb:177:7:177:14 | return | | -| raise.rb:179:10:179:19 | ExceptionA | raise.rb:172:1:182:3 | exit m16 (abnormal) | raise | +| raise.rb:179:10:179:19 | ExceptionA | raise.rb:172:1:182:3 | exit m16 (abnormal) | exception | | raise.rb:179:10:179:19 | ExceptionA | raise.rb:180:12:180:12 | 3 | match | | raise.rb:180:5:180:12 | return | raise.rb:172:1:182:3 | exit m16 (normal) | return | | raise.rb:180:12:180:12 | 3 | raise.rb:180:5:180:12 | return | | diff --git a/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected b/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected index 2bc683f894e..54cf1d08543 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected +++ b/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected @@ -1,10 +1,10 @@ callsWithNoArguments -| break_ensure.rb:8:6:8:13 | [ensure: raise] call to elements | +| break_ensure.rb:8:6:8:13 | [ensure: exception] call to elements | | break_ensure.rb:8:6:8:13 | call to elements | -| break_ensure.rb:8:6:8:18 | [ensure: raise] call to nil? | +| break_ensure.rb:8:6:8:18 | [ensure: exception] call to nil? | | break_ensure.rb:8:6:8:18 | call to nil? | | break_ensure.rb:20:10:20:15 | [ensure: break] call to nil? | -| break_ensure.rb:20:10:20:15 | [ensure: raise] call to nil? | +| break_ensure.rb:20:10:20:15 | [ensure: exception] call to nil? | | break_ensure.rb:20:10:20:15 | call to nil? | | break_ensure.rb:29:8:29:13 | call to nil? | | case.rb:2:8:2:9 | call to x1 | @@ -72,25 +72,25 @@ callsWithNoArguments positionalArguments | break_ensure.rb:2:9:2:13 | ... < ... | break_ensure.rb:2:13:2:13 | 0 | | break_ensure.rb:3:8:3:12 | ... > ... | break_ensure.rb:3:12:3:12 | 0 | -| break_ensure.rb:9:5:9:23 | [ensure: raise] call to puts | break_ensure.rb:9:10:9:23 | [ensure: raise] "elements nil" | +| break_ensure.rb:9:5:9:23 | [ensure: exception] call to puts | break_ensure.rb:9:10:9:23 | [ensure: exception] "elements nil" | | break_ensure.rb:9:5:9:23 | call to puts | break_ensure.rb:9:10:9:23 | "elements nil" | | break_ensure.rb:14:9:14:13 | ... < ... | break_ensure.rb:14:13:14:13 | 0 | | break_ensure.rb:16:10:16:14 | ... > ... | break_ensure.rb:16:14:16:14 | 0 | | break_ensure.rb:21:9:21:20 | [ensure: break] call to puts | break_ensure.rb:21:14:21:20 | [ensure: break] "y nil" | -| break_ensure.rb:21:9:21:20 | [ensure: raise] call to puts | break_ensure.rb:21:14:21:20 | [ensure: raise] "y nil" | +| break_ensure.rb:21:9:21:20 | [ensure: exception] call to puts | break_ensure.rb:21:14:21:20 | [ensure: exception] "y nil" | | break_ensure.rb:21:9:21:20 | call to puts | break_ensure.rb:21:14:21:20 | "y nil" | | break_ensure.rb:33:11:33:15 | ... < ... | break_ensure.rb:33:15:33:15 | 0 | -| break_ensure.rb:33:11:33:15 | [ensure: raise] ... < ... | break_ensure.rb:33:15:33:15 | [ensure: raise] 0 | +| break_ensure.rb:33:11:33:15 | [ensure: exception] ... < ... | break_ensure.rb:33:15:33:15 | [ensure: exception] 0 | | break_ensure.rb:33:11:33:15 | [ensure: return] ... < ... | break_ensure.rb:33:15:33:15 | [ensure: return] 0 | | break_ensure.rb:35:12:35:16 | ... > ... | break_ensure.rb:35:16:35:16 | 0 | -| break_ensure.rb:35:12:35:16 | [ensure: raise] ... > ... | break_ensure.rb:35:16:35:16 | [ensure: raise] 0 | +| break_ensure.rb:35:12:35:16 | [ensure: exception] ... > ... | break_ensure.rb:35:16:35:16 | [ensure: exception] 0 | | break_ensure.rb:35:12:35:16 | [ensure: return] ... > ... | break_ensure.rb:35:16:35:16 | [ensure: return] 0 | | break_ensure.rb:41:3:41:13 | call to puts | break_ensure.rb:41:8:41:13 | "Done" | | break_ensure.rb:45:9:45:13 | ... < ... | break_ensure.rb:45:13:45:13 | 0 | | break_ensure.rb:47:10:47:14 | ... > ... | break_ensure.rb:47:14:47:14 | 1 | | break_ensure.rb:48:9:48:16 | call to raise | break_ensure.rb:48:15:48:16 | "" | | break_ensure.rb:51:10:51:14 | ... > ... | break_ensure.rb:51:14:51:14 | 0 | -| break_ensure.rb:51:10:51:14 | [ensure: raise] ... > ... | break_ensure.rb:51:14:51:14 | [ensure: raise] 0 | +| break_ensure.rb:51:10:51:14 | [ensure: exception] ... > ... | break_ensure.rb:51:14:51:14 | [ensure: exception] 0 | | case.rb:3:29:3:37 | call to puts | case.rb:3:34:3:37 | "x2" | | case.rb:4:17:4:24 | call to puts | case.rb:4:22:4:24 | "2" | | case.rb:14:13:14:18 | ... == ... | case.rb:14:18:14:18 | 5 | @@ -319,7 +319,7 @@ positionalArguments | raise.rb:70:5:70:17 | call to raise | raise.rb:70:11:70:17 | "x > 2" | | raise.rb:71:9:71:13 | ... < ... | raise.rb:71:13:71:13 | 0 | | raise.rb:74:3:74:20 | call to puts | raise.rb:74:8:74:20 | "0 <= x <= 2" | -| raise.rb:76:3:76:15 | [ensure: raise] call to puts | raise.rb:76:8:76:15 | [ensure: raise] "ensure" | +| raise.rb:76:3:76:15 | [ensure: exception] call to puts | raise.rb:76:8:76:15 | [ensure: exception] "ensure" | | raise.rb:76:3:76:15 | [ensure: return] call to puts | raise.rb:76:8:76:15 | [ensure: return] "ensure" | | raise.rb:76:3:76:15 | call to puts | raise.rb:76:8:76:15 | "ensure" | | raise.rb:80:3:80:17 | call to puts | raise.rb:80:8:80:17 | "Begin m8" | @@ -327,7 +327,7 @@ positionalArguments | raise.rb:83:7:83:19 | call to raise | raise.rb:83:13:83:19 | "x > 2" | | raise.rb:84:11:84:15 | ... < ... | raise.rb:84:15:84:15 | 0 | | raise.rb:87:5:87:22 | call to puts | raise.rb:87:10:87:22 | "0 <= x <= 2" | -| raise.rb:89:5:89:17 | [ensure: raise] call to puts | raise.rb:89:10:89:17 | [ensure: raise] "ensure" | +| raise.rb:89:5:89:17 | [ensure: exception] call to puts | raise.rb:89:10:89:17 | [ensure: exception] "ensure" | | raise.rb:89:5:89:17 | [ensure: return] call to puts | raise.rb:89:10:89:17 | [ensure: return] "ensure" | | raise.rb:89:5:89:17 | call to puts | raise.rb:89:10:89:17 | "ensure" | | raise.rb:91:3:91:15 | call to puts | raise.rb:91:8:91:15 | "End m8" | @@ -336,30 +336,30 @@ positionalArguments | raise.rb:98:7:98:19 | call to raise | raise.rb:98:13:98:19 | "x > 2" | | raise.rb:99:11:99:15 | ... < ... | raise.rb:99:15:99:15 | 0 | | raise.rb:102:5:102:22 | call to puts | raise.rb:102:10:102:22 | "0 <= x <= 2" | -| raise.rb:104:5:104:23 | [ensure: raise] call to puts | raise.rb:104:10:104:23 | [ensure: raise] "outer ensure" | +| raise.rb:104:5:104:23 | [ensure: exception] call to puts | raise.rb:104:10:104:23 | [ensure: exception] "outer ensure" | | raise.rb:104:5:104:23 | [ensure: return] call to puts | raise.rb:104:10:104:23 | [ensure: return] "outer ensure" | | raise.rb:104:5:104:23 | call to puts | raise.rb:104:10:104:23 | "outer ensure" | -| raise.rb:107:9:107:26 | [ensure: raise] call to raise | raise.rb:107:15:107:26 | [ensure: raise] "b1 is true" | +| raise.rb:107:9:107:26 | [ensure: exception] call to raise | raise.rb:107:15:107:26 | [ensure: exception] "b1 is true" | | raise.rb:107:9:107:26 | [ensure: return] call to raise | raise.rb:107:15:107:26 | [ensure: return] "b1 is true" | | raise.rb:107:9:107:26 | call to raise | raise.rb:107:15:107:26 | "b1 is true" | -| raise.rb:110:7:110:25 | [ensure(1): raise] call to puts | raise.rb:110:12:110:25 | [ensure(1): raise] "inner ensure" | -| raise.rb:110:7:110:25 | [ensure: raise, ensure(1): raise] call to puts | raise.rb:110:12:110:25 | [ensure: raise, ensure(1): raise] "inner ensure" | -| raise.rb:110:7:110:25 | [ensure: raise] call to puts | raise.rb:110:12:110:25 | [ensure: raise] "inner ensure" | -| raise.rb:110:7:110:25 | [ensure: return, ensure(1): raise] call to puts | raise.rb:110:12:110:25 | [ensure: return, ensure(1): raise] "inner ensure" | +| raise.rb:110:7:110:25 | [ensure(1): exception] call to puts | raise.rb:110:12:110:25 | [ensure(1): exception] "inner ensure" | +| raise.rb:110:7:110:25 | [ensure: exception, ensure(1): exception] call to puts | raise.rb:110:12:110:25 | [ensure: exception, ensure(1): exception] "inner ensure" | +| raise.rb:110:7:110:25 | [ensure: exception] call to puts | raise.rb:110:12:110:25 | [ensure: exception] "inner ensure" | +| raise.rb:110:7:110:25 | [ensure: return, ensure(1): exception] call to puts | raise.rb:110:12:110:25 | [ensure: return, ensure(1): exception] "inner ensure" | | raise.rb:110:7:110:25 | [ensure: return] call to puts | raise.rb:110:12:110:25 | [ensure: return] "inner ensure" | | raise.rb:110:7:110:25 | call to puts | raise.rb:110:12:110:25 | "inner ensure" | | raise.rb:113:3:113:15 | call to puts | raise.rb:113:8:113:15 | "End m9" | -| raise.rb:115:3:115:22 | [ensure: raise] call to puts | raise.rb:115:8:115:22 | [ensure: raise] "method ensure" | +| raise.rb:115:3:115:22 | [ensure: exception] call to puts | raise.rb:115:8:115:22 | [ensure: exception] "method ensure" | | raise.rb:115:3:115:22 | [ensure: return] call to puts | raise.rb:115:8:115:22 | [ensure: return] "method ensure" | | raise.rb:115:3:115:22 | call to puts | raise.rb:115:8:115:22 | "method ensure" | -| raise.rb:117:5:117:22 | [ensure: raise] call to raise | raise.rb:117:11:117:22 | [ensure: raise] "b2 is true" | +| raise.rb:117:5:117:22 | [ensure: exception] call to raise | raise.rb:117:11:117:22 | [ensure: exception] "b2 is true" | | raise.rb:117:5:117:22 | [ensure: return] call to raise | raise.rb:117:11:117:22 | [ensure: return] "b2 is true" | | raise.rb:117:5:117:22 | call to raise | raise.rb:117:11:117:22 | "b2 is true" | | raise.rb:121:14:121:30 | call to raise | raise.rb:121:20:121:30 | "Exception" | | raise.rb:125:3:125:51 | call to puts | raise.rb:125:8:125:51 | "Will not get executed if p is..." | | raise.rb:131:7:131:22 | call to raise | raise.rb:131:13:131:22 | ExceptionA | | raise.rb:135:5:135:21 | call to puts | raise.rb:135:10:135:21 | "ExceptionB" | -| raise.rb:137:5:137:17 | [ensure: raise] call to puts | raise.rb:137:10:137:17 | [ensure: raise] "Ensure" | +| raise.rb:137:5:137:17 | [ensure: exception] call to puts | raise.rb:137:10:137:17 | [ensure: exception] "Ensure" | | raise.rb:137:5:137:17 | call to puts | raise.rb:137:10:137:17 | "Ensure" | | raise.rb:139:3:139:16 | call to puts | raise.rb:139:8:139:16 | "End m11" | | raise.rb:144:5:144:12 | call to raise | raise.rb:144:11:144:12 | "" | diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql index e485d98d361..3828ea6b3ae 100644 --- a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql @@ -2,8 +2,7 @@ * @kind path-problem */ -import codeql.ruby.AST -import codeql.ruby.CFG +import ruby import utils.test.InlineFlowTest import codeql.ruby.dataflow.BarrierGuards import PathGraph diff --git a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.ql b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.ql index 1bf7461e7fa..86609a73909 100644 --- a/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.ql +++ b/ruby/ql/test/library-tests/dataflow/barrier-guards/barrier-guards.ql @@ -12,7 +12,7 @@ query predicate newStyleBarrierGuards(DataFlow::Node n) { n instanceof StringConstArrayInclusionCallBarrier } -query predicate controls(CfgNode condition, BasicBlock bb, SuccessorTypes::ConditionalSuccessor s) { +query predicate controls(CfgNode condition, BasicBlock bb, ConditionalSuccessor s) { exists(ConditionBlock cb | cb.edgeDominates(bb, s) and condition = cb.getLastNode() diff --git a/ruby/ql/test/query-tests/experimental/InsecureRandomness/InsecureRandomness.rb b/ruby/ql/test/query-tests/experimental/InsecureRandomness/InsecureRandomness.rb index 516b282ece5..116957137b5 100644 --- a/ruby/ql/test/query-tests/experimental/InsecureRandomness/InsecureRandomness.rb +++ b/ruby/ql/test/query-tests/experimental/InsecureRandomness/InsecureRandomness.rb @@ -2,7 +2,7 @@ require 'securerandom' def generate_password_1(length) chars = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a + ['!', '@', '#', '$', '%'] - # BAD: rand is not cryptographically secure + # BAD: rand is not cryptographically secure password = (1..length).collect { chars[rand(chars.size)] }.join end diff --git a/ruby/ql/test/query-tests/security/cwe-915/test.rb b/ruby/ql/test/query-tests/security/cwe-915/test.rb index a60def5d201..c72ad536ef7 100644 --- a/ruby/ql/test/query-tests/security/cwe-915/test.rb +++ b/ruby/ql/test/query-tests/security/cwe-915/test.rb @@ -46,7 +46,7 @@ class UserController < ActionController::Base def create4 x = params[:user] x.permit! - User.new(x) # BAD + User.new(x) # BAD User.new(x.permit(:name,:address)) # GOOD User.new(params.permit(user: {})) # BAD User.new(params.permit(user: [:name, :address, {friends:{}}])) # BAD diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index e67152c3d0f..1fd2d143a15 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -62,15 +62,6 @@ fn has_special_emission(type_name: &str) -> bool { | "Struct" | "Enum" | "Union" - | "Trait" - | "Module" - | "Variant" - | "PathExpr" - | "RecordExpr" - | "PathPat" - | "RecordPat" - | "TupleStructPat" - | "MethodCallExpr" | "PathSegment" | "Const" ) diff --git a/rust/codeql-extractor.yml b/rust/codeql-extractor.yml index c7785e5f8c7..6675dd3a271 100644 --- a/rust/codeql-extractor.yml +++ b/rust/codeql-extractor.yml @@ -5,6 +5,8 @@ column_kind: "utf8" legacy_qltest_extraction: true build_modes: - none +default_queries: + - codeql/rust-queries github_api_languages: - Rust scc_languages: @@ -80,12 +82,6 @@ options: Collect flame graph data using the `tracing-flame` crate. To render a flame graph or chart, run the `inferno-flamegraph` command. See also: https://crates.io/crates/tracing-flame type: string - skip_path_resolution: - title: Skip path resolution - description: > - Skip path resolution. This is experimental, while we move path resolution from the extractor to the QL library. - type: string - pattern: "^(false|true)$" extract_dependencies_as_source: title: Extract dependencies as source code description: > diff --git a/rust/downgrades/dfade44a27bd44db996ae8c5095a11effc883aba/old.dbscheme b/rust/downgrades/dfade44a27bd44db996ae8c5095a11effc883aba/old.dbscheme new file mode 100644 index 00000000000..dfade44a27b --- /dev/null +++ b/rust/downgrades/dfade44a27bd44db996ae8c5095a11effc883aba/old.dbscheme @@ -0,0 +1,3615 @@ +// 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 +); + +overlayChangedFiles( + string path: 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 +| @expr +| @extern_item_list +| @field_list +| @for_binder +| @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_ast_node +| @path_segment +| @rename +| @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 +; + +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 +); + +@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 +; + +for_binders( + unique int id: @for_binder +); + +#keyset[id] +for_binder_generic_param_lists( + int id: @for_binder ref, + int generic_param_list: @generic_param_list ref +); + +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_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_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 +); + +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_for_binders( + int id: @type_bound ref, + int for_binder: @for_binder ref +); + +#keyset[id] +type_bound_is_async( + int id: @type_bound ref +); + +#keyset[id] +type_bound_is_const( + int id: @type_bound ref +); + +#keyset[id] +type_bound_lifetimes( + int id: @type_bound ref, + 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_for_binders( + int id: @where_pred ref, + int for_binder: @for_binder 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_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_for_binders( + int id: @closure_expr ref, + int for_binder: @for_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_for_binders( + int id: @for_type_repr ref, + int for_binder: @for_binder 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 +| @asm_expr +| @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, index] +macro_block_expr_statements( + int id: @macro_block_expr ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +macro_block_expr_tail_exprs( + int id: @macro_block_expr ref, + int tail_expr: @expr 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_expr_base = + @path_expr +; + +path_pats( + unique int id: @path_pat +); + +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_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_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 +); + +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 +); + +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_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 +); + +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 +); + +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 +); + +@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 +); + +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 +); + +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/dfade44a27bd44db996ae8c5095a11effc883aba/rust.dbscheme b/rust/downgrades/dfade44a27bd44db996ae8c5095a11effc883aba/rust.dbscheme new file mode 100644 index 00000000000..b41e55c0dba --- /dev/null +++ b/rust/downgrades/dfade44a27bd44db996ae8c5095a11effc883aba/rust.dbscheme @@ -0,0 +1,3644 @@ +// 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 +); + +overlayChangedFiles( + string path: 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 +| @expr +| @extern_item_list +| @field_list +| @for_binder +| @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 +); + +@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 +; + +for_binders( + unique int id: @for_binder +); + +#keyset[id] +for_binder_generic_param_lists( + int id: @for_binder ref, + int generic_param_list: @generic_param_list ref +); + +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_for_binders( + int id: @type_bound ref, + int for_binder: @for_binder ref +); + +#keyset[id] +type_bound_is_async( + int id: @type_bound ref +); + +#keyset[id] +type_bound_is_const( + int id: @type_bound ref +); + +#keyset[id] +type_bound_lifetimes( + int id: @type_bound ref, + 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_for_binders( + int id: @where_pred ref, + int for_binder: @for_binder 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_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_for_binders( + int id: @closure_expr ref, + int for_binder: @for_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_for_binders( + int id: @for_type_repr ref, + int for_binder: @for_binder 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 +| @asm_expr +| @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, index] +macro_block_expr_statements( + int id: @macro_block_expr ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +macro_block_expr_tail_exprs( + int id: @macro_block_expr ref, + int tail_expr: @expr 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 +); + +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 +); + +@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/dfade44a27bd44db996ae8c5095a11effc883aba/upgrade.properties b/rust/downgrades/dfade44a27bd44db996ae8c5095a11effc883aba/upgrade.properties new file mode 100644 index 00000000000..05ada67c81b --- /dev/null +++ b/rust/downgrades/dfade44a27bd44db996ae8c5095a11effc883aba/upgrade.properties @@ -0,0 +1,2 @@ +description: Revert removing extractor generated paths +compatibility: partial diff --git a/rust/extractor/src/config.rs b/rust/extractor/src/config.rs index a26bf790f82..86d3ab6272c 100644 --- a/rust/extractor/src/config.rs +++ b/rust/extractor/src/config.rs @@ -69,7 +69,6 @@ pub struct Config { pub build_script_command: Vec, pub extra_includes: Vec, pub proc_macro_server: Option, - pub skip_path_resolution: bool, pub extract_dependencies_as_source: bool, pub force_library_mode: bool, // for testing purposes } diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 1ac7818e6a2..247613daec2 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 cf4f3f6b3fd0dee0d8b35f346695cfd3e080ca328ca1726ce851f6abfbabc631 cf4f3f6b3fd0dee0d8b35f346695cfd3e080ca328ca1726ce851f6abfbabc631 +top.rs ef1e4ee1ec10669092c216f95bc34a1740e1fadfc4f3ad91ef14dccc5f2a7490 ef1e4ee1ec10669092c216f95bc34a1740e1fadfc4f3ad91ef14dccc5f2a7490 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 806ee80d6ce..ef25c5aecc1 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -331,17 +331,6 @@ pub struct Addressable { _unused: () } -impl Addressable { - pub fn emit_extended_canonical_path(id: trap::Label, value: String, out: &mut trap::Writer) { - out.add_tuple("addressable_extended_canonical_paths", vec![id.into(), value.into()]); - } - - pub fn emit_crate_origin(id: trap::Label, value: String, out: &mut trap::Writer) { - out.add_tuple("addressable_crate_origins", vec![id.into(), value.into()]); - } - -} - impl trap::TrapClass for Addressable { fn class_name() -> &'static str { "Addressable" } } @@ -1949,6 +1938,42 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct PathAstNode { + _unused: () +} + +impl trap::TrapClass for PathAstNode { + fn class_name() -> &'static str { "PathAstNode" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathAstNode 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 PathAstNode 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 PathAstNode is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct PathSegment { pub id: trap::TrapId, @@ -2076,53 +2101,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct Resolvable { - _unused: () -} - -impl Resolvable { - pub fn emit_resolved_path(id: trap::Label, value: String, out: &mut trap::Writer) { - out.add_tuple("resolvable_resolved_paths", vec![id.into(), value.into()]); - } - - pub fn emit_resolved_crate_origin(id: trap::Label, value: String, out: &mut trap::Writer) { - out.add_tuple("resolvable_resolved_crate_origins", vec![id.into(), value.into()]); - } - -} - -impl trap::TrapClass for Resolvable { - fn class_name() -> &'static str { "Resolvable" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme Resolvable 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 Resolvable 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 Resolvable is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct RetTypeRepr { pub id: trap::TrapId, @@ -6940,51 +6918,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct PathAstNode { - _unused: () -} - -impl trap::TrapClass for PathAstNode { - fn class_name() -> &'static str { "PathAstNode" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme PathAstNode is a subclass of Resolvable - 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 PathAstNode 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 PathAstNode 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 PathAstNode is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct PathExprBase { _unused: () @@ -7030,6 +6963,74 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct PathPat { + pub id: trap::TrapId, + pub path: Option>, +} + +impl trap::TrapEntry for PathPat { + 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("path_pats", vec![id.into()]); + if let Some(v) = self.path { + out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for PathPat { + fn class_name() -> &'static str { "PathPat" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathPat is a subclass of Pat + 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 PathPat 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 PathPat 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 PathPat 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 PathPat is a subclass of PathAstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct PathTypeRepr { pub id: trap::TrapId, @@ -7885,6 +7886,78 @@ 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) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("struct_exprs", vec![id.into()]); + if let Some(v) = self.path { + out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); + } + if let Some(v) = self.struct_expr_field_list { + out.add_tuple("struct_expr_struct_expr_field_lists", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for StructExpr { + fn class_name() -> &'static str { "StructExpr" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme StructExpr 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 StructExpr 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 StructExpr 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 StructExpr 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 StructExpr is a subclass of PathAstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct StructFieldList { pub id: trap::TrapId, @@ -7944,6 +8017,78 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct StructPat { + pub id: trap::TrapId, + pub path: Option>, + pub struct_pat_field_list: Option>, +} + +impl trap::TrapEntry for StructPat { + 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_pats", vec![id.into()]); + if let Some(v) = self.path { + out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); + } + if let Some(v) = self.struct_pat_field_list { + out.add_tuple("struct_pat_struct_pat_field_lists", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for StructPat { + fn class_name() -> &'static str { "StructPat" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme StructPat is a subclass of Pat + 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 StructPat 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 StructPat 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 StructPat 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 StructPat is a subclass of PathAstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct TryExpr { pub id: trap::TrapId, @@ -8188,6 +8333,78 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct TupleStructPat { + pub id: trap::TrapId, + pub path: Option>, + pub fields: Vec>, +} + +impl trap::TrapEntry for TupleStructPat { + 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("tuple_struct_pats", vec![id.into()]); + if let Some(v) = self.path { + out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); + } + for (i, v) in self.fields.into_iter().enumerate() { + out.add_tuple("tuple_struct_pat_fields", vec![id.into(), i.into(), v.into()]); + } + } +} + +impl trap::TrapClass for TupleStructPat { + fn class_name() -> &'static str { "TupleStructPat" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of Pat + 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 TupleStructPat 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 TupleStructPat 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 TupleStructPat 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 TupleStructPat is a subclass of PathAstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct TupleTypeRepr { pub id: trap::TrapId, @@ -9775,15 +9992,6 @@ impl From> for trap::Label { } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MethodCallExpr is a subclass of Resolvable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct Module { pub id: trap::TrapId, @@ -9954,254 +10162,6 @@ impl From> for trap::Label { } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme PathExpr is a subclass of Resolvable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -#[derive(Debug)] -pub struct PathPat { - pub id: trap::TrapId, - pub path: Option>, -} - -impl trap::TrapEntry for PathPat { - 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("path_pats", vec![id.into()]); - if let Some(v) = self.path { - out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for PathPat { - fn class_name() -> &'static str { "PathPat" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme PathPat is a subclass of Pat - 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 PathPat 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 PathPat 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 PathPat 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 PathPat is a subclass of PathAstNode - 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 PathPat is a subclass of Resolvable - 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()]); - if let Some(v) = self.path { - out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); - } - if let Some(v) = self.struct_expr_field_list { - out.add_tuple("struct_expr_struct_expr_field_lists", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for StructExpr { - fn class_name() -> &'static str { "StructExpr" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme StructExpr 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 StructExpr 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 StructExpr 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 StructExpr 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 StructExpr is a subclass of PathAstNode - 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 StructExpr is a subclass of Resolvable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -#[derive(Debug)] -pub struct StructPat { - pub id: trap::TrapId, - pub path: Option>, - pub struct_pat_field_list: Option>, -} - -impl trap::TrapEntry for StructPat { - 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_pats", vec![id.into()]); - if let Some(v) = self.path { - out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); - } - if let Some(v) = self.struct_pat_field_list { - out.add_tuple("struct_pat_struct_pat_field_lists", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for StructPat { - fn class_name() -> &'static str { "StructPat" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme StructPat is a subclass of Pat - 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 StructPat 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 StructPat 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 StructPat 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 StructPat is a subclass of PathAstNode - 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 StructPat is a subclass of Resolvable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct Trait { pub id: trap::TrapId, @@ -10408,87 +10368,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct TupleStructPat { - pub id: trap::TrapId, - pub path: Option>, - pub fields: Vec>, -} - -impl trap::TrapEntry for TupleStructPat { - 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("tuple_struct_pats", vec![id.into()]); - if let Some(v) = self.path { - out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); - } - for (i, v) in self.fields.into_iter().enumerate() { - out.add_tuple("tuple_struct_pat_fields", vec![id.into(), i.into(), v.into()]); - } - } -} - -impl trap::TrapClass for TupleStructPat { - fn class_name() -> &'static str { "TupleStructPat" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of Pat - 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 TupleStructPat 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 TupleStructPat 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 TupleStructPat 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 TupleStructPat is a subclass of PathAstNode - 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 TupleStructPat is a subclass of Resolvable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct Use { pub id: trap::TrapId, diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index 27f0082fb6a..e90badc63cd 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -1,6 +1,6 @@ use crate::diagnostics::{ExtractionStep, emit_extraction_diagnostics}; use crate::rust_analyzer::{RustAnalyzerNoSemantics, path_to_file_id}; -use crate::translate::{ResolvePaths, SourceKind}; +use crate::translate::SourceKind; use crate::trap::TrapId; use anyhow::Context; use archive::Archiver; @@ -50,13 +50,7 @@ impl<'a> Extractor<'a> { } } - fn extract( - &mut self, - rust_analyzer: &RustAnalyzer, - file: &Path, - resolve_paths: ResolvePaths, - source_kind: SourceKind, - ) { + fn extract(&mut self, rust_analyzer: &RustAnalyzer, file: &Path, source_kind: SourceKind) { self.archiver.archive(file); let before_parse = Instant::now(); let ParseResult { @@ -79,7 +73,6 @@ impl<'a> Extractor<'a> { label, line_index, semantics_info.as_ref().ok(), - resolve_paths, source_kind, ); @@ -118,15 +111,9 @@ impl<'a> Extractor<'a> { file: &Path, semantics: &Semantics<'_, RootDatabase>, vfs: &Vfs, - resolve_paths: ResolvePaths, source_kind: SourceKind, ) { - self.extract( - &RustAnalyzer::new(vfs, semantics), - file, - resolve_paths, - source_kind, - ); + self.extract(&RustAnalyzer::new(vfs, semantics), file, source_kind); } pub fn extract_without_semantics( @@ -135,12 +122,7 @@ impl<'a> Extractor<'a> { source_kind: SourceKind, err: RustAnalyzerNoSemantics, ) { - self.extract( - &RustAnalyzer::from(err), - file, - ResolvePaths::No, - source_kind, - ); + self.extract(&RustAnalyzer::from(err), file, source_kind); } pub fn load_manifest( @@ -289,20 +271,15 @@ fn main() -> anyhow::Result<()> { } let cwd = cwd()?; let (cargo_config, load_cargo_config) = cfg.to_cargo_config(&cwd); - let resolve_paths = if cfg.skip_path_resolution { - ResolvePaths::No + let library_mode = if cfg.extract_dependencies_as_source { + SourceKind::Source } else { - ResolvePaths::Yes + SourceKind::Library }; - let (library_mode, library_resolve_paths) = if cfg.extract_dependencies_as_source { - (SourceKind::Source, resolve_paths) + let source_mode = if cfg.force_library_mode { + library_mode } else { - (SourceKind::Library, ResolvePaths::No) - }; - let (source_mode, source_resolve_paths) = if cfg.force_library_mode { - (library_mode, library_resolve_paths) - } else { - (SourceKind::Source, resolve_paths) + SourceKind::Source }; let mut processed_files: HashSet = HashSet::from_iter(files.iter().cloned()); @@ -318,13 +295,7 @@ fn main() -> anyhow::Result<()> { let semantics = Semantics::new(db); for file in files { match extractor.load_source(file, &semantics, vfs) { - Ok(()) => extractor.extract_with_semantics( - file, - &semantics, - vfs, - source_resolve_paths, - source_mode, - ), + Ok(()) => extractor.extract_with_semantics(file, &semantics, vfs, source_mode), Err(e) => extractor.extract_without_semantics(file, source_mode, e), }; } @@ -337,13 +308,7 @@ fn main() -> anyhow::Result<()> { .source_root(db) .is_library { - extractor.extract_with_semantics( - file, - &semantics, - vfs, - library_resolve_paths, - library_mode, - ); + extractor.extract_with_semantics(file, &semantics, vfs, library_mode); extractor.archiver.archive(file); } } diff --git a/rust/extractor/src/translate.rs b/rust/extractor/src/translate.rs index 22bb3f4909f..1e9f3775d40 100644 --- a/rust/extractor/src/translate.rs +++ b/rust/extractor/src/translate.rs @@ -2,4 +2,4 @@ mod base; mod generated; mod mappings; -pub use base::{ResolvePaths, SourceKind, Translator}; +pub use base::{SourceKind, Translator}; diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 347fdbdb715..ee26da665b2 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -1,22 +1,17 @@ -use super::mappings::{AddressableAst, AddressableHir, Emission, PathAst}; +use super::mappings::Emission; use crate::generated::{self}; use crate::rust_analyzer::FileSemanticInformation; use crate::trap::{DiagnosticSeverity, TrapFile, TrapId}; use crate::trap::{Label, TrapClass}; -use itertools::Either; -use ra_ap_base_db::{CrateOrigin, EditionedFileId}; +use ra_ap_base_db::EditionedFileId; +use ra_ap_hir::Semantics; use ra_ap_hir::db::ExpandDatabase; -use ra_ap_hir::{ - Adt, Crate, ItemContainer, Module, ModuleDef, PathResolution, Semantics, Type, Variant, -}; -use ra_ap_hir_def::ModuleId; -use ra_ap_hir_def::type_ref::Mutability; use ra_ap_hir_expand::{ExpandResult, ExpandTo, InFile}; use ra_ap_ide_db::RootDatabase; use ra_ap_ide_db::line_index::{LineCol, LineIndex}; use ra_ap_parser::SyntaxKind; use ra_ap_span::TextSize; -use ra_ap_syntax::ast::{HasAttrs, HasName}; +use ra_ap_syntax::ast::HasAttrs; use ra_ap_syntax::{ AstNode, NodeOrToken, SyntaxElementChildren, SyntaxError, SyntaxNode, SyntaxToken, TextRange, ast, @@ -66,82 +61,24 @@ impl Emission for Translator<'_> { 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); } } @@ -175,11 +112,6 @@ macro_rules! dispatch_to_tracing { }; } -#[derive(Copy, Clone, PartialEq, Eq)] -pub enum ResolvePaths { - Yes, - No, -} #[derive(Copy, Clone, PartialEq, Eq)] pub enum SourceKind { Source, @@ -193,7 +125,6 @@ pub struct Translator<'a> { line_index: LineIndex, file_id: Option, pub semantics: Option<&'a Semantics<'a, RootDatabase>>, - resolve_paths: bool, source_kind: SourceKind, pub(crate) macro_context_depth: usize, diagnostic_count: usize, @@ -211,7 +142,6 @@ impl<'a> Translator<'a> { label: Label, line_index: LineIndex, semantic_info: Option<&FileSemanticInformation<'a>>, - resolve_paths: ResolvePaths, source_kind: SourceKind, ) -> Translator<'a> { Translator { @@ -221,7 +151,6 @@ impl<'a> Translator<'a> { line_index, file_id: semantic_info.map(|i| i.file_id), semantics: semantic_info.map(|i| i.semantics), - resolve_paths: resolve_paths == ResolvePaths::Yes, source_kind, macro_context_depth: 0, diagnostic_count: 0, @@ -533,254 +462,6 @@ impl<'a> Translator<'a> { } } - 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 - if let Some(it) = ty.as_adt() { - return match it { - Adt::Struct(it) => self.canonical_path_from_hir(it), - Adt::Union(it) => self.canonical_path_from_hir(it), - Adt::Enum(it) => self.canonical_path_from_hir(it), - }; - }; - if let Some((it, size)) = ty.as_array(sema.db) { - return self - .canonical_path_from_type(it) - .map(|p| format!("[{p}; {size}]")); - } - if let Some(it) = ty.as_slice() { - return self.canonical_path_from_type(it).map(|p| format!("[{p}]")); - } - if let Some(it) = ty.as_builtin() { - return Some(it.name().as_str().to_owned()); - } - if let Some(it) = ty.as_dyn_trait() { - return self.canonical_path_from_hir(it).map(|p| format!("dyn {p}")); - } - if let Some((it, mutability)) = ty.as_reference() { - let mut_str = match mutability { - Mutability::Shared => "", - Mutability::Mut => "mut ", - }; - return self - .canonical_path_from_type(it) - .map(|p| format!("&{mut_str}{p}")); - } - if let Some(it) = ty.as_impl_traits(sema.db) { - let paths = it - .map(|t| self.canonical_path_from_hir(t)) - .collect::>>()?; - return Some(format!("impl {}", paths.join(" + "))); - } - if ty.as_type_param(sema.db).is_some() { - // from the canonical path perspective, we just want a special name - // e.g. `crate::<_ as SomeTrait>::func` - return Some("_".to_owned()); - } - None - } - - fn canonical_path_from_hir_module(&self, item: Module) -> Option { - if ModuleId::from(item).containing_block().is_some() { - // this means this is a block module, i.e. a virtual module for an anonymous block scope - return None; - } - if item.is_crate_root() { - return Some("crate".into()); - } - self.canonical_path_from_hir::(item) - } - - fn canonical_path_from_hir(&self, item: impl AddressableHir) -> Option { - // if we have a Hir entity, it means we have semantics - let sema = self.semantics.as_ref().unwrap(); - let name = item.name(sema)?; - let container = item.container(sema.db); - let prefix = match container { - ItemContainer::Trait(it) => self.canonical_path_from_hir(it), - ItemContainer::Impl(it) => { - let ty = self.canonical_path_from_type(it.self_ty(sema.db))?; - if let Some(trait_) = it.trait_(sema.db) { - let tr = self.canonical_path_from_hir(trait_)?; - Some(format!("<{ty} as {tr}>")) - } else { - Some(format!("<{ty}>")) - } - } - ItemContainer::Module(it) => self.canonical_path_from_hir_module(it), - ItemContainer::ExternBlock(..) | ItemContainer::Crate(..) => Some("".to_owned()), - }?; - Some(format!("{prefix}::{name}")) - } - - fn canonical_path_from_module_def(&self, item: ModuleDef) -> Option { - match item { - ModuleDef::Module(it) => self.canonical_path_from_hir(it), - ModuleDef::Function(it) => self.canonical_path_from_hir(it), - ModuleDef::Adt(Adt::Enum(it)) => self.canonical_path_from_hir(it), - ModuleDef::Adt(Adt::Struct(it)) => self.canonical_path_from_hir(it), - ModuleDef::Adt(Adt::Union(it)) => self.canonical_path_from_hir(it), - ModuleDef::Trait(it) => self.canonical_path_from_hir(it), - ModuleDef::Variant(it) => self.canonical_path_from_enum_variant(it), - ModuleDef::Static(_) => None, - ModuleDef::TraitAlias(_) => None, - ModuleDef::TypeAlias(_) => None, - ModuleDef::BuiltinType(_) => None, - ModuleDef::Macro(_) => None, - ModuleDef::Const(_) => None, - } - } - - fn canonical_path_from_enum_variant(&self, item: Variant) -> Option { - // if we have a Hir entity, it means we have semantics - let sema = self.semantics.as_ref().unwrap(); - let prefix = self.canonical_path_from_hir(item.parent_enum(sema.db))?; - let name = item.name(sema.db); - Some(format!("{prefix}::{}", name.as_str())) - } - - fn origin_from_hir(&self, item: impl AddressableHir) -> String { - // if we have a Hir entity, it means we have semantics - let sema = self.semantics.as_ref().unwrap(); - self.origin_from_crate(item.module(sema).krate()) - } - - fn origin_from_crate(&self, item: Crate) -> String { - // if we have a Hir entity, it means we have semantics - let sema = self.semantics.as_ref().unwrap(); - match item.origin(sema.db) { - CrateOrigin::Rustc { name } => format!("rustc:{name}"), - CrateOrigin::Local { repo, name } => format!( - "repo:{}:{}", - repo.unwrap_or_default(), - name.map(|s| s.as_str().to_owned()).unwrap_or_default() - ), - CrateOrigin::Library { repo, name } => { - format!("repo:{}:{}", repo.unwrap_or_default(), name) - } - CrateOrigin::Lang(it) => format!("lang:{it}"), - } - } - - fn origin_from_module_def(&self, item: ModuleDef) -> Option { - match item { - ModuleDef::Module(it) => Some(self.origin_from_hir(it)), - ModuleDef::Function(it) => Some(self.origin_from_hir(it)), - ModuleDef::Adt(Adt::Enum(it)) => Some(self.origin_from_hir(it)), - ModuleDef::Adt(Adt::Struct(it)) => Some(self.origin_from_hir(it)), - ModuleDef::Adt(Adt::Union(it)) => Some(self.origin_from_hir(it)), - ModuleDef::Trait(it) => Some(self.origin_from_hir(it)), - ModuleDef::Variant(it) => Some(self.origin_from_enum_variant(it)), - ModuleDef::Static(_) => None, - ModuleDef::TraitAlias(_) => None, - ModuleDef::TypeAlias(_) => None, - ModuleDef::BuiltinType(_) => None, - ModuleDef::Macro(_) => None, - ModuleDef::Const(_) => None, - } - } - - fn origin_from_enum_variant(&self, item: Variant) -> String { - // if we have a Hir entity, it means we have semantics - let sema = self.semantics.as_ref().unwrap(); - self.origin_from_hir(item.parent_enum(sema.db)) - } - - pub(crate) fn extract_canonical_origin( - &mut self, - item: &T, - label: Label, - ) { - if !self.resolve_paths { - return; - } - (|| { - let sema = self.semantics.as_ref()?; - let def = T::Hir::try_from_source(item, sema)?; - let path = self.canonical_path_from_hir(def)?; - let origin = self.origin_from_hir(def); - generated::Addressable::emit_crate_origin(label, origin, &mut self.trap.writer); - generated::Addressable::emit_extended_canonical_path( - label, - path, - &mut self.trap.writer, - ); - Some(()) - })(); - } - - pub(crate) fn extract_canonical_origin_of_enum_variant( - &mut self, - item: &ast::Variant, - label: Label, - ) { - if !self.resolve_paths { - return; - } - (|| { - let sema = self.semantics.as_ref()?; - let def = sema.to_enum_variant_def(item)?; - let path = self.canonical_path_from_enum_variant(def)?; - let origin = self.origin_from_enum_variant(def); - generated::Addressable::emit_crate_origin(label.into(), origin, &mut self.trap.writer); - generated::Addressable::emit_extended_canonical_path( - label.into(), - path, - &mut self.trap.writer, - ); - Some(()) - })(); - } - - pub(crate) fn extract_path_canonical_destination( - &mut self, - item: &impl PathAst, - label: Label, - ) { - if !self.resolve_paths { - return; - } - (|| { - let path = item.path()?; - let sema = self.semantics.as_ref()?; - let resolution = sema.resolve_path(&path)?; - let PathResolution::Def(def) = resolution else { - return None; - }; - let origin = self.origin_from_module_def(def)?; - let path = self.canonical_path_from_module_def(def)?; - generated::Resolvable::emit_resolved_crate_origin(label, origin, &mut self.trap.writer); - generated::Resolvable::emit_resolved_path(label, path, &mut self.trap.writer); - Some(()) - })(); - } - - pub(crate) fn extract_method_canonical_destination( - &mut self, - item: &ast::MethodCallExpr, - label: Label, - ) { - if !self.resolve_paths { - return; - } - (|| { - let sema = self.semantics.as_ref()?; - let resolved = sema.resolve_method_call_fallback(item)?; - let (Either::Left(function), _) = resolved else { - return None; - }; - let origin = self.origin_from_hir(function); - let path = self.canonical_path_from_hir(function)?; - generated::Resolvable::emit_resolved_crate_origin( - label.into(), - origin, - &mut self.trap.writer, - ); - generated::Resolvable::emit_resolved_path(label.into(), path, &mut self.trap.writer); - Some(()) - })(); - } - pub(crate) fn should_be_excluded(&self, item: &impl ast::HasAttrs) -> bool { self.semantics.is_some_and(|sema| { item.attrs().any(|attr| { diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 402fdfaf6b0..607d6e195fa 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -1715,9 +1715,6 @@ impl Translator<'_> { &mut self, node: &ast::MethodCallExpr, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } if self.should_be_excluded(node) { return None; } @@ -1737,14 +1734,10 @@ impl Translator<'_> { receiver, }); self.emit_location(label, node); - self.post_emit(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); - } if self.should_be_excluded(node) { return None; } @@ -1760,7 +1753,6 @@ impl Translator<'_> { visibility, }); self.emit_location(label, node); - self.post_emit(node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1943,9 +1935,6 @@ impl Translator<'_> { &mut self, node: &ast::PathExpr, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } if self.should_be_excluded(node) { return None; } @@ -1957,7 +1946,6 @@ impl Translator<'_> { path, }); self.emit_location(label, node); - self.post_emit(node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1965,16 +1953,12 @@ impl Translator<'_> { &mut self, node: &ast::PathPat, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } 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); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2102,9 +2086,6 @@ impl Translator<'_> { &mut self, node: &ast::RecordExpr, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } let path = node.path().and_then(|x| self.emit_path(&x)); let struct_expr_field_list = node .record_expr_field_list() @@ -2115,7 +2096,6 @@ impl Translator<'_> { struct_expr_field_list, }); self.emit_location(label, node); - self.post_emit(node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2208,9 +2188,6 @@ impl Translator<'_> { &mut self, node: &ast::RecordPat, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } let path = node.path().and_then(|x| self.emit_path(&x)); let struct_pat_field_list = node .record_pat_field_list() @@ -2221,7 +2198,6 @@ impl Translator<'_> { struct_pat_field_list, }); self.emit_location(label, node); - self.post_emit(node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2547,9 +2523,6 @@ impl Translator<'_> { Some(label) } pub(crate) fn emit_trait(&mut self, node: &ast::Trait) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } if self.should_be_excluded(node) { return None; } @@ -2581,7 +2554,6 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, node); - self.post_emit(node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2704,9 +2676,6 @@ impl Translator<'_> { &mut self, node: &ast::TupleStructPat, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } 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 { @@ -2715,7 +2684,6 @@ impl Translator<'_> { path, }); self.emit_location(label, node); - self.post_emit(node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2965,9 +2933,6 @@ impl Translator<'_> { &mut self, node: &ast::Variant, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } if self.should_be_excluded(node) { return None; } @@ -2985,7 +2950,6 @@ impl Translator<'_> { visibility, }); self.emit_location(label, node); - self.post_emit(node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -3147,39 +3111,12 @@ impl HasTrapClass for ast::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 3e71c6deb14..f1a42dbf245 100644 --- a/rust/extractor/src/translate/mappings.rs +++ b/rust/extractor/src/translate/mappings.rs @@ -1,6 +1,4 @@ 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 { @@ -65,155 +63,3 @@ impl TextValue for ast::RangePat { self.op_token().map(|x| x.text().to_string()) } } - -pub(crate) trait AddressableHir: HasContainer + Copy { - fn name(self, sema: &Semantics<'_, RootDatabase>) -> Option; - fn try_from_source(value: &Ast, sema: &Semantics<'_, RootDatabase>) -> Option; - fn module(self, sema: &Semantics<'_, RootDatabase>) -> Module; -} - -impl AddressableHir for Function { - fn name(self, sema: &Semantics<'_, RootDatabase>) -> Option { - Some(self.name(sema.db).as_str().to_owned()) - } - - fn try_from_source(value: &ast::Fn, sema: &Semantics<'_, RootDatabase>) -> Option { - sema.to_fn_def(value) - } - - fn module(self, sema: &Semantics<'_, RootDatabase>) -> Module { - self.module(sema.db) - } -} - -impl AddressableHir for Trait { - fn name(self, sema: &Semantics<'_, RootDatabase>) -> Option { - Some(self.name(sema.db).as_str().to_owned()) - } - - fn try_from_source(value: &ast::Trait, sema: &Semantics<'_, RootDatabase>) -> Option { - sema.to_trait_def(value) - } - - fn module(self, sema: &Semantics<'_, RootDatabase>) -> Module { - self.module(sema.db) - } -} - -impl AddressableHir for Module { - fn name(self, sema: &Semantics<'_, RootDatabase>) -> Option { - self.name(sema.db).map(|s| s.as_str().to_owned()) - } - - fn try_from_source(value: &ast::Module, sema: &Semantics<'_, RootDatabase>) -> Option { - sema.to_module_def(value) - } - - fn module(self, _sema: &Semantics<'_, RootDatabase>) -> Module { - self - } -} - -impl AddressableHir for Struct { - fn name(self, sema: &Semantics<'_, RootDatabase>) -> Option { - Some(self.name(sema.db).as_str().to_owned()) - } - - fn try_from_source(value: &ast::Struct, sema: &Semantics<'_, RootDatabase>) -> Option { - sema.to_struct_def(value) - } - - fn module(self, sema: &Semantics<'_, RootDatabase>) -> Module { - self.module(sema.db) - } -} - -impl AddressableHir for Enum { - fn name(self, sema: &Semantics<'_, RootDatabase>) -> Option { - Some(self.name(sema.db).as_str().to_owned()) - } - - fn try_from_source(value: &ast::Enum, sema: &Semantics<'_, RootDatabase>) -> Option { - sema.to_enum_def(value) - } - - fn module(self, sema: &Semantics<'_, RootDatabase>) -> Module { - self.module(sema.db) - } -} - -impl AddressableHir for Union { - fn name(self, sema: &Semantics<'_, RootDatabase>) -> Option { - Some(self.name(sema.db).as_str().to_owned()) - } - - fn try_from_source(value: &ast::Union, sema: &Semantics<'_, RootDatabase>) -> Option { - sema.to_union_def(value) - } - - fn module(self, sema: &Semantics<'_, RootDatabase>) -> Module { - self.module(sema.db) - } -} - -pub(crate) trait AddressableAst: AstNode + Sized { - type Hir: AddressableHir; -} - -impl AddressableAst for ast::Fn { - type Hir = Function; -} - -impl AddressableAst for ast::Trait { - type Hir = Trait; -} - -impl AddressableAst for ast::Struct { - type Hir = Struct; -} - -impl AddressableAst for ast::Enum { - type Hir = Enum; -} - -impl AddressableAst for ast::Union { - type Hir = Union; -} - -impl AddressableAst for ast::Module { - type Hir = Module; -} - -pub trait PathAst: AstNode { - fn path(&self) -> Option; -} - -impl PathAst for ast::PathExpr { - fn path(&self) -> Option { - self.path() - } -} - -impl PathAst for ast::RecordExpr { - fn path(&self) -> Option { - self.path() - } -} - -impl PathAst for ast::PathPat { - fn path(&self) -> Option { - self.path() - } -} - -impl PathAst for ast::RecordPat { - fn path(&self) -> Option { - self.path() - } -} - -impl PathAst for ast::TupleStructPat { - fn path(&self) -> Option { - self.path() - } -} diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index aa3ec5536da..23a5b4fabf0 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -103,7 +103,7 @@ lib/codeql/rust/elements/MatchArmList.qll f221c5e344814fa44db06ab897afdc249e8e88 lib/codeql/rust/elements/MatchExpr.qll e9ef1664f020823b6f4bb72d906a9dc0c1ee6432d4a9a13f7dbdbab2b2b1ee4d 38d71e5c487abcb5682293c573343be66e499a6e131bb630604c120d34b7777b lib/codeql/rust/elements/MatchGuard.qll 58256689a90f24b16401543452c2a32f00d619ddac6c0fe8b65a8cd3e46401bb 8efb2ac03c69a9db687e382331085d7a6cfbf8eca559174ba2727a9549ec7ddd lib/codeql/rust/elements/Meta.qll b17d7bf605bd0cf4f6d6c6cf4f39a16cfc431d256d45b93663a7569181d36168 815cdfef06231de4b4b1c85e321b8ccb3e22379e5a4e111df9cc9ca6be593841 -lib/codeql/rust/elements/MethodCallExpr.qll 318a46ba61e3e4f0d6ce0e8fa9f79ccbbf2d0f3d0638e6813e1bcb44d624715a 35e03ed4beddd75834fcfc4371bd65eaf099053aa23f7f1d1e6bea2e5825aa6e +lib/codeql/rust/elements/MethodCallExpr.qll 91b411e0fb1a0547dcad8726db460dccc61bed972741598d5cb3740593fe75a7 538d23b6db115bb699389d29a1829bb0449c08424a1fff80377828eb7ceb2563 lib/codeql/rust/elements/Missing.qll 70e6ac9790314752849c9888443c98223ccfc93a193998b7ce350b2c6ebe8ea4 e2f0623511acaa76b091f748d417714137a8b94f1f2bdbbd177f1c682c786dad lib/codeql/rust/elements/Module.qll 0bc85019177709256f8078d9de2a36f62f848d476225bff7bba1e35f249875c7 3fbb70e0c417a644dd0cada2c364c6e6876cfa16f37960e219c87e49c966c94e lib/codeql/rust/elements/Name.qll af41479d4260fe931d46154dda15484e4733c952b98f0e370106e6e9e8ce398b e188a0d0309dd1b684c0cb88df435b38e306eb94d6b66a2b748e75252f15e095 @@ -120,7 +120,7 @@ lib/codeql/rust/elements/ParenTypeRepr.qll 2388b6c663b2d02c834592c5da5cafac71baa lib/codeql/rust/elements/ParenthesizedArgList.qll aa3be48d2f8b5cec56db3866fb7d4e0cd97787e9123e2d947912eb8155bf372b 32790971728c9ae2f3d59155d46283aaf4f08238e47bb028a1f20a6d3a734b98 lib/codeql/rust/elements/Pat.qll 56211c5cb4709e7c12a2bfd2da5e413a451672d99e23a8386c08ad0b999fd45c b1b1893a13a75c4f0390f7e2a14ee98a46f067cfdc991a8d43adc82497d20aff lib/codeql/rust/elements/Path.qll 16264a9c978a3027f623530e386a9ad16541305b252fed5e1bedcfbe1d6475d5 8c21063c7f344ce686342e7c12542fec05004e364681f7a31b65f5ee9263a46d -lib/codeql/rust/elements/PathAstNode.qll c5c8627caaf863089d4d6004e206b2e62bc466db2ed5da9f3f443bf3dc29faf9 01107b1ce17cbee08a764962fb13d3f02edbd10675fa5bd89e089f03075ba443 +lib/codeql/rust/elements/PathAstNode.qll 68160b08272ecde0e636779b7c547f808356d69d1150863b37188ea84e110cab cafa2de0bf3be978854319bbcf5ad1591acd64abd7b0958ff14c96a7529fcc99 lib/codeql/rust/elements/PathExpr.qll 0232228845a2005fc63d6b8aea8b49ff50415e0e90fd18f863ee1d6e44f53c07 47b15cc6ae576d13f14b29ffa4620451accc603ff87071dfe48660dbe018bf36 lib/codeql/rust/elements/PathExprBase.qll bb41092ec690ae926e3233c215dcaf1fd8e161b8a6955151949f492e02dba13a b2257072f8062d31c29c63ee1311b07e0d2eb37075f582cfc76bb542ef773198 lib/codeql/rust/elements/PathPat.qll a7069d1dd77ba66814d6c84e135ed2975d7fcf379624079e6a76dc44b5de832e 2294d524b65ab0d038094b2a00f73feb8ab70c8f49fb4d91e9d390073205631d @@ -134,7 +134,6 @@ lib/codeql/rust/elements/RefExpr.qll 91a0d3a86002289dc01ffbe8daca13e34e92e522fbb lib/codeql/rust/elements/RefPat.qll fe076bdccb454111b38f360837d180274ba8a003b4cffe910b5197cd74188089 2604c8bb2b0b47091d5fc4aa276de46fe3561e346bd98f291c3783cef402ba06 lib/codeql/rust/elements/RefTypeRepr.qll 563d2edc097aa1896b3dea5a3918e6225f23dda91b3fb46e2f4c32feb813d56c af3bd746239130e3e94dd41ab682473b29b8b900b05c557beb8a2eba6508ebd9 lib/codeql/rust/elements/Rename.qll 5cb0ebad580d9842cfe65033059d4d373a1386f047f3a78f402a93e060e2c13e 642c6f37d94442575df12b2e998572a725d094ac5ae76147a56057e75138d72b -lib/codeql/rust/elements/Resolvable.qll efeec2b4b14d85334ec745b9a0c5aa6f7b9f86fe3caa45b005dccaee4f5265c4 7efe0063340ba61dd31125bc770773ca23a7067893c0d1e06d149da6e9a9ee92 lib/codeql/rust/elements/RestPat.qll 5fedfac18080b068f597c9bbb84de672834f72cc22295d6312e111f151f8e3c7 c0e1f77bfcdd40e8ab06ad8c138e6098d79940247758adf9de03a05b00c23de3 lib/codeql/rust/elements/RetTypeRepr.qll a603393d373f38831dded00878c3299d61fdb977723d3e1038692f7a46bfebc5 583c626f7ae7fb4ec9a9f93f072330c16560ab52c8dfec566c46af40fb9f39f8 lib/codeql/rust/elements/ReturnExpr.qll b87187cff55bc33c8c18558c9b88617179183d1341b322c1cab35ba07167bbdb 892f3a9df2187e745c869e67f33c228ee42754bc9e4f8f4c1718472eb8f8c80f @@ -368,7 +367,6 @@ lib/codeql/rust/elements/internal/RefTypeReprConstructor.qll 8e7012b456ebf1cc7a2 lib/codeql/rust/elements/internal/RefTypeReprImpl.qll 553dd95e1a49ab7aef5db08e7bb550104c604ec33c9a3c7529370cd47c6a0965 8902db7c814f631c2a995df5911a7b13b6a38c524417e4bbbf2bda74ad53e14c lib/codeql/rust/elements/internal/RenameConstructor.qll 65fa2e938978d154701e6cac05b56320b176ee014ef5c20a7b66f3e94fd5c4a7 dfc0ff4606b8e1c14003cc93a0811f4d62ec993b07ff3c1aa0776746577ed103 lib/codeql/rust/elements/internal/RenameImpl.qll 61c681055f1f86402af0772539f702e9e19a123f8cfcfca225535c3a1a4cb1d7 1aa1c78616c4b54a31c8af74de141aef9e5ada53f3859df631ecb4238faabdbf -lib/codeql/rust/elements/internal/ResolvableImpl.qll 7d6d02eceef54d588de6204abbcf7a6454916e49180e3db8a72131032cec5837 9c3a28ea0d293b449c69982e3695903a10510096e765a53c1b34ac3ad009a9f4 lib/codeql/rust/elements/internal/RestPatConstructor.qll 45430925ddf08fba70ede44c7f413ddb41b3113c149b7efc276e0c2bf72507b4 25c678898d72446e7a975bb8b7f2fde51e55b59dbd42f2cca997c833b1a995f1 lib/codeql/rust/elements/internal/RetTypeReprConstructor.qll 6dcb56c92a13f5ca2c9a8344bc05638cc611543896c578cd6ca185054f155537 3fe34953ba397dc31533bd28b48df76693e86b51c4a89c26ad4dfdbd816a0874 lib/codeql/rust/elements/internal/RetTypeReprImpl.qll 799e55ffcf27bf6f010419e1d61ebbbf3448e37b903b0f13984d0b44d6b7a999 be774bb09d121c35f40c75d5bee08918e7a6b5fccb4fd573fc55a650466b46e0 @@ -454,7 +452,7 @@ lib/codeql/rust/elements/internal/YeetExprImpl.qll e8924147c3ebe0c32d04c5b33edfd lib/codeql/rust/elements/internal/YieldExprConstructor.qll 8cbfa6405acb151ee31ccc7c89336948a597d783e8890e5c3e53853850871712 966f685eb6b9063bc359213323d3ff760b536158ecd17608e7618a3e9adf475f lib/codeql/rust/elements/internal/YieldExprImpl.qll af184649a348ddd0be16dee9daae307240bf123ace09243950342e9d71ededd9 17df90f67dd51623e8a5715b344ccd8740c8fc415af092469f801b99caacb70d lib/codeql/rust/elements/internal/generated/Abi.qll f5a22afe5596c261b4409395056ce3227b25d67602d51d0b72734d870f614df3 06d1c242ccd31f1cc90212823077e1a7a9e93cd3771a14ebe2f0659c979f3dd1 -lib/codeql/rust/elements/internal/generated/Addressable.qll 96a8b45166dd035b8d2c6d36b8b67019f2d4d0b4ccff6d492677c0c87197613e d8f1ce29feafc8ff7179399fc7eac5db031a7e1a8bc6b2cd75cfce1da3132e9b +lib/codeql/rust/elements/internal/generated/Addressable.qll 624c380d385af6563885417d1e8ecd5d9b7abf1435c0ab79a1b9a405387874a3 e2755dc2155d6f2bc0e2d54006da0e62ee359440592db9d6a8b73202ef28e64f lib/codeql/rust/elements/internal/generated/Adt.qll 155f4025a26c3d2d5d3c42dfce9274a10f0862ea0574843c5d276179de421569 17138b271eea81d3ee2697c82cccfd7af752cd18cd925dd5fa20d7fce0e2432f lib/codeql/rust/elements/internal/generated/ArgList.qll e41f48258082876a8ceac9107209d94fdd00a62d2e4c632987a01a8394c4aff6 bf1982d14f8cd55fa0c3da2c6aab56fc73b15a3572ffc72d9a94f2c860f8f3b7 lib/codeql/rust/elements/internal/generated/ArrayExpr.qll 73806a0de8168b38a9436fa6b8c6d68c92eeab3d64a1ae7edfff82f871929992 7ad998cdd8f4fed226473517ad7a5765cb35608033047aad53bf8aa3969fd03b @@ -559,7 +557,7 @@ lib/codeql/rust/elements/internal/generated/MatchArmList.qll 12d969ecb267a749918 lib/codeql/rust/elements/internal/generated/MatchExpr.qll b686842e7000fd61e3a0598bf245fb4e18167b99eca9162fdfdff0b0963def22 00f1743b1b0f1a92c5a687f5260fda02d80cc5871694cad0d5e7d94bac7fe977 lib/codeql/rust/elements/internal/generated/MatchGuard.qll 58fa1d6979ef22de2bd68574c7ffcf4a021d7543445f68834d879ff8cee3abcb 072f22a7929df3c0e764b2a770b4cdf03504b3053067d9b9008d6655fb5837e1 lib/codeql/rust/elements/internal/generated/Meta.qll 15e98e8d38f5618b7053057a629b135aae5e105fbf72731833a644fb695244c0 2977b6a0781c89383e87c595b14a39851f27b2508296f3e77466eea44c916188 -lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll 816267f27f990d655f1ef2304eb73a9468935ffbfddd908773a77fa3860bb970 adda2574300a169a13ea9e33af05c804bf00868d3e8930f0f78d6a8722ad688d +lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll 0cd0f84147e5f3887d609cc58246eb493d3461aee00ff37e7d26282c835f73af 6f4c5dc1decbce54fc12300d34798b890a85129208b25565130205c9d8ee2e29 lib/codeql/rust/elements/internal/generated/Missing.qll 16735d91df04a4e1ae52fae25db5f59a044e540755734bbab46b5fbb0fe6b0bd 28ca4e49fb7e6b4734be2f2f69e7c224c570344cc160ef80c5a5cd413e750dad lib/codeql/rust/elements/internal/generated/Module.qll ebae5d8963c9fd569c0fbad1d7770abd3fd2479437f236cbce0505ba9f9af52c fa3c382115fed18a26f1a755d8749a201b9489f82c09448a88fb8e9e1435fe5f lib/codeql/rust/elements/internal/generated/Name.qll e6bd6240a051383a52b21ab539bc204ce7bcd51a1a4379e497dff008d4eef5b4 578a3b45e70f519d57b3e3a3450f6272716c849940daee49889717c7aaa85fc9 @@ -574,11 +572,11 @@ 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 d43d7486ed04a3930fa476694fc74d972f4413992968de425573ccf823343c87 3d4245aee40a38bff658f2c0cb220d5276ae751194c5b728b65054ec98c841e4 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 7d67059559590954faf55aab56885fedc7b7a63a37b7a871b19204c42d493a4d 04ad386fd2b4e5d0150887aad97cf3ed8406391c8bc95dd2de29eb29a2ac0b6e 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 -lib/codeql/rust/elements/internal/generated/PathAstNode.qll e6d4d5bffd3c623baaaee46bc183eb31ce88795535f164f6a9b9b4d98bbd6101 168db515404933479ba6b150c72e012d28592cbc32366aefcb1bf9599dbcd183 +lib/codeql/rust/elements/internal/generated/PathAstNode.qll b02654422f80e398027069135bb01205358f0ab82ded3408d83d066f300996a3 345e7f92a75bfc71657b223602f60c36f7637d6f2e3798f07e2d2926eea2431b lib/codeql/rust/elements/internal/generated/PathExpr.qll 34ebad4d062ce8b7e517f2ab09d52745fb8455203f4a936df7284ad296638387 ba66781cdbdeb89c27a4bfb2be0f27f85fb34978d699b4e343446fb0d7ad2aa6 lib/codeql/rust/elements/internal/generated/PathExprBase.qll d8218e201b8557fa6d9ca2c30b764e5ad9a04a2e4fb695cc7219bbd7636a6ac2 4ef178426d7095a156f4f8c459b4d16f63abc64336cb50a6cf883a5f7ee09113 lib/codeql/rust/elements/internal/generated/PathPat.qll 003d10a4d18681da67c7b20fcb16b15047cf9cc4b1723e7674ef74e40589cc5a 955e66f6d317ca5562ad1b5b13e1cd230c29e2538b8e86f072795b0fdd8a1c66 @@ -589,12 +587,11 @@ 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 b32f6737ca918cf003f294cc809546e3e89fa9f91666b20aab8acaa6fb986094 aeecf005da2fcfcc6e143c7970866f476f3b146632ed6bb36ccb5db19570c11b +lib/codeql/rust/elements/internal/generated/Raw.qll ae8ebdaa26dc2dfbcc8d64c9c7b296de2e0e78086ce7545cbedfa1f560ef2ffa 6a78058f346e34a2da4dd984f76bf848d7d6708d4c0a35151303748cb0ea92fa 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 lib/codeql/rust/elements/internal/generated/Rename.qll 53dd50d35aa38cb6eb4174c94e8e23042b42bdc4f38df009489ebf707380483b db14fbce0d95b4dae3d7512f9bdee92e0dc2dffde5ba5d7458f2f5dd632876b0 -lib/codeql/rust/elements/internal/generated/Resolvable.qll 586eefb01794220679c3b5d69c059d50c2238cf78ab33efe7185bbd07dea8dbd 1b7c7297d541b9de9e881d18fed4ae40dd327396366a3a6f52a24b85685fa9c1 lib/codeql/rust/elements/internal/generated/RestPat.qll 369f5828bb78f2856d528679a9869f81859b375c2f831ff72f4507daaee976e3 17f24ce8aa6a27359c10a654667b7877ca7a1509509e2ab246ed26fe15ef66b4 lib/codeql/rust/elements/internal/generated/RetTypeRepr.qll 7e782d6ca346fd4057e95a6eefe796e3fba7eef62144a0df78e2d115a7ae9ba9 d5da144e06d180673fa7ce274c5e7e2ca2db12b064df1155bc56f2f9378b58b4 lib/codeql/rust/elements/internal/generated/ReturnExpr.qll c9c05400d326cd8e0da11c3bfa524daa08b2579ecaee80e468076e5dd7911d56 e7694926727220f46a7617b6ca336767450e359c6fa3782e82b1e21d85d37268 @@ -615,7 +612,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 e1f47da257976aa7689461ee3ea9022fc0d27494a556f14f1086f8149b885d5c 59b979f378be6ce75ecfd3430887bff747c273d1536c686f90def9e6c4ed2c12 +lib/codeql/rust/elements/internal/generated/Synth.qll 4c741d502d21d449c4e01010776f767c69b408c80ce7d10784b599463bcfd0e3 c76b8628663c126914ead897c779ce782294e9109125d61de958e0eee543abce lib/codeql/rust/elements/internal/generated/SynthConstructors.qll f41abfc73415b7accb38da7c107faebfe6843c270ad54e0e54a96e930dfe479a f41abfc73415b7accb38da7c107faebfe6843c270ad54e0e54a96e930dfe479a lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 1a3c4f5f30659738641abdd28cb793dab3cfde484196b59656fc0a2767e53511 de2ebb210c7759ef7a6f7ee9f805e1cac879221287281775fc80ba34a5492edf @@ -652,7 +649,7 @@ lib/codeql/rust/elements/internal/generated/WhileExpr.qll 0353aab87c49569e1fbf58 lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85 -lib/codeql/rust/elements.qll 49df59c1b9574135b6ff2b0480b645f7303e81df042714b22b1070351d0076b9 49df59c1b9574135b6ff2b0480b645f7303e81df042714b22b1070351d0076b9 +lib/codeql/rust/elements.qll d3beb3a35f2b5ea47d60aeefd86fb0d6406dd0a1b7cd89aecbb2732b4e72da38 d3beb3a35f2b5ea47d60aeefd86fb0d6406dd0a1b7cd89aecbb2732b4e72da38 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 @@ -661,7 +658,7 @@ test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.ql b262300235ab5bf4fe 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 2ecffe80979c6b49ec84466c913ef6424e0b1f61cf8a8d6f68ac24744a08eb0e 0bd5ee2a93d75c4daa1698613b5d5a462341d53b99e3da8af81ad51fa15a7f7e +test/extractor-tests/generated/AsmExpr/AsmExpr.ql 817faad3ea0b9da9a12026a8cfd91a0363595ce594fc5bc6ac43b112f911b2cd f0d5866dec3474f13fc85686aeb63e2fa8079b8f2774f0185959be00314eff87 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 @@ -682,17 +679,17 @@ test/extractor-tests/generated/CallExpr/CallExpr.ql 2a1cd4485ccd8d4eb24a75889e83 test/extractor-tests/generated/CastExpr/CastExpr.ql 3480ec51072399409b7553ab6139c832db6ed4ca991f3a7a2282a39afe07c6f2 614c8ea7a2fe30d57583dbf84ed7a12743c2aba49d8c6252d31af3ed10853a39 test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql f9002cc327769edff05ae428d0c01ba80e18a217057d4d2c3a31eb24ab659ed6 8af2986890d0f3dd77c72023d992d5e587c9922b6f3ea378a6e268a51cfbbda5 test/extractor-tests/generated/Comment/Comment.ql 0e0454911d2cf2e7ef5c6d860b84c57b9d490090914ebcf4fa0e8a70f777f066 cbd1c195276ef163f8d3c122344738c884dc9fb70eb2f9b7067829d735d48c4c -test/extractor-tests/generated/Const/Const.ql 28a0f2debbf73ae867fc2d08d8e54d9e96fea69522b7180a48495c9b7fce9367 54d4a68a2b67db95ceb856535a8b27860ce2b502da17a7eeea3bb554d7fb5e43 +test/extractor-tests/generated/Const/Const.ql 97797a56743b519c1990682ccb22af6d997ed5eea1e280b52ad31b16a5836f9e e5289ebcb71a25b7ac0a7e1aa0111e4f3ec83d26b7f83e819509c9b9d756921d 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/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/Enum/Enum.ql 64ed7f25aaf5eff67687cd3aa2690017fb6f9651c959aed7b655d486be0e0c5b 1df131d8e12c4594715ed31191e960792c21727b403dce59207c514671e88d62 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/ExternBlock/ExternBlock.ql b61e37f1c387bc91be127b5425089f9f1d687f4f1708cad334c0bb00dba5bae3 dc03f0f0912b2cfbce74c3bc31d261cdbea740847212ac3472ecf719d8eb71f7 +test/extractor-tests/generated/ExternCrate/ExternCrate.ql 55d2d9d32cb5e894cc2ee5242d688aaa8428ba7757cccea67d1c064db6de2514 46a2c57660a42ee6eaa532b0c86f4cc2d3de795c33ee7cadbff650bd0f23206b 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 @@ -704,12 +701,12 @@ test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.ql 5abcb565dcd2822e2 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/Function/Function.ql 061b34449c170b0fe50bbf8fe7b47f7ffc30d119c2479b906cb233f4dff9f006 5bc406906ea1537ee8ae299e29a1fbfa197c5920f97ff87f2c82b555c739de82 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/Impl/Impl.ql a36ea392729a6be3ee0cc0d8871b3682cf8f0c15fb657d4d35f2ca76eeef3a74 1fa345ca3b4c16c740b5684c7fdaf1116d52c2932287703b33143a08e4d7d38e 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 @@ -725,20 +722,20 @@ test/extractor-tests/generated/LiteralExpr/LiteralExpr.ql 00570642966d233a10ec31 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 936920b5b609b1e62b201004055bbce449d2d7c1f8016f57d9b27d3ea8107f07 21493009ed3b1810aa4fd8af4d8c7b7794982da032dfb6b7e9048445d651eecb -test/extractor-tests/generated/MacroCall/MacroCall.ql f98017f6070e2a5e4b191d5380cc0491d7358c456e8459b313235e44eb368794 437129210d9b7f6850adf4d2c8ef7d0644193418645d631b8edf229656fc57ac -test/extractor-tests/generated/MacroDef/MacroDef.ql 9e3647a92713d32f87e876f37d703081855ea88a7a3104757f90bd94eb382fa9 b50e9797c1b8ea5491267ddb6778862f0541617ee60bd8e167cc23a499e36733 +test/extractor-tests/generated/MacroCall/MacroCall.ql 28abee68c0681334e4ffd412f1b9b9b0fe844a6ae6c915ec18ea186b4766f58e c8c73902827d69a4b903ab3028408086b64b9f5d9a4da97620a2100f45ceaf69 +test/extractor-tests/generated/MacroDef/MacroDef.ql edcdd65706641c2827cac546091a99e0a1473ff8d383efd968023db411591197 b7832c67c6dd32e9e5ecfa4b6256e7cd820f55d49c44458a140cbf4d46542eb3 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/MacroRules/MacroRules.ql 9a6d5d9ec6cc77dd2f893e5315910c73f2ae2fc418b4a3a172799a16fefea456 413c8005e02dc1d79e6710e7dfc184cfa0e6bfb34d172b6b97bd7fa81ccd2594 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/MethodCallExpr/MethodCallExpr.ql 05ca29fdab8ce600469728b964c369368e5097b2a5eb35b84a7630ef044ac6b6 aa45fdbb7fba8afee9f6cef10d337622429d3f0fb71f7fbf861afb4906bdef71 +test/extractor-tests/generated/Module/Module.ql d7c442fd1b1f4f00da87e2228fc1aeeab0bb86648b2aa06a9dd6f40dbae1ee28 3229388727d14048e87238bcda5fde1bed503e5cac088922381e5833cfc32fa9 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 @@ -751,8 +748,8 @@ test/extractor-tests/generated/ParenPat/ParenPat.ql 50f99c6a7e5e2f76dc5bbc10a6b2 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/PathExpr.ql caa2a41b5cc3af837fcf52b49abc5f45ba924821ea0f75d5b25daa8d2b6d4b66 7c2d587d7a73c21dcc0a85c38baa0adcd64826719b2f12f92ae758d290f37706 +test/extractor-tests/generated/Path/PathPat.ql 8a6a759f4bbf4fa9c23fd235ce4d63f04bd715a86a6e71bba0a324fe1231d947 be23d83e4f6ac209f3f7c382fce6b9bc57db17a26b236bdf8215848285e345ff 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 @@ -771,40 +768,40 @@ test/extractor-tests/generated/SelfParam/SelfParam.ql 7e57dd845ddc9142cce250c7e6 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/Static/Static.ql ec2e5cf081453bbae16216d1250f5d8324be81d1d6ad8744e969934d2ef21b0d 7bde1afbafdc16f9c999e902626c77dc0efe3f1b3d687e9fe1a3e9db6b1f62a9 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/Struct/Struct.ql 846ef41cb4dfbe94f495fd68de26a68609e7b5ab0830d6ee844a67afea3ac591 6799a1246da45ecbf1f1040ffb7d1a5578ab9e236cce3029e6cc17c93b3bf138 +test/extractor-tests/generated/StructExpr/StructExpr.ql 3b98205260e750cc7adc42b318deef2854cc3b4f921cbcfffc6d701553af3903 368bccf01db2fa069dca30d9fb0878f8e6a88d4ce58b333b24a18620933e4c91 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/StructPat/StructPat.ql 894babd64d3def35717cbeed6eb4799cf9f52e73992822b72fc521c93efb4935 5bd1502b69014d70464b4b76795e1732ac2a6db5d028bea52929cf1998af5f07 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/Trait/Trait.ql e59d9d97baedc5691f9fb837e3600b1b33808c598971d8abe28121a9c70292b4 0da2808421a1e1acbc61076d4b50c559f2abf02cbd5f69ba15a65457887ff435 +test/extractor-tests/generated/TraitAlias/TraitAlias.ql 9a4bcbf850afd833606f9447493b848e9a5df593198e5fc7a3a5bfb1c4c0782c 1f738eaf245220142d9fe5b88718980494b1e3c5b68609f5ee591056f23ea765 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/TupleStructPat/TupleStructPat.ql ea588383e16328486156e872f4d6f999a35534cde49d69b66a6186f01b1c2581 2a2e179b4241a4ff7d486e987cb667ba62025bc8dd48a507142cfec882bd35cc test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.ql 2f1503734d272cd0616e5885cd344659cbd0ae7309a375c8351f57f2b86c3302 276a4fe91b8dc64cdca4467343e2bb2e240c66ec1e4e11bf8cba73819c6532cc -test/extractor-tests/generated/TypeAlias/TypeAlias.ql 2b120c7fe640b233540f6982153fddf50ddc089b8284dca321b4c48eecf93dfd 6d40a0d8c927dd499fd92fd95638c50eeca8f956aa1706c17913dbf83f0f500c +test/extractor-tests/generated/TypeAlias/TypeAlias.ql cbd2ed23ffff6bae81b121e32c9a7efce43c23d33f82fbfcee833b1043892c60 abf9779da9ee2b267a3dc3be7143f111cac8441c378828329749457bb56aeee3 test/extractor-tests/generated/TypeArg/TypeArg.ql e1ca286c03bd2d44054f5dd75aac250382037f243046c49ec752ad8d65e4c0ba f316d5fa84a721427c0aadf6bfa0ed4cfd86e4d318cfb0fe82efc52e65c4733b test/extractor-tests/generated/TypeBound/TypeBound.ql 41d0a7b6538de12797c5aa4152ea701517abe685b1160615f2d74203e7a00d34 f57128c66df37791f93db269451b1c617c991d8723ecb9efe4b8ff8b2559472c 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/Union/Union.ql 71e367ea4b541ee4ae831c69d0dfa2d1ba0c2d3dd9e9aba770dd00fd1f546ef8 61dbc6364a9f486d0de8c27cacbb9d1027282d92f89058e93e2c376588d809f9 +test/extractor-tests/generated/Use/Use.ql 1f084f3b49c910c6e01d2a81be2443e84c2836a5855b89874965efaf25d17511 d5bf37ba65f4d280312ca798bae22d2735c00cf91ff05ed6321f69b76b4551bc 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/Variant/Variant.ql 6b1936698cec413f1645d52e3f4d6d995968d432466241eb823c1ae635c852dd 0b5b0248f09ae01b683ea835299d51fa26f6b5a584e889c538b0f0cf13106d0f 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 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 4ec7fbbc2e3..71cd100d3f2 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -136,7 +136,6 @@ /lib/codeql/rust/elements/RefPat.qll linguist-generated /lib/codeql/rust/elements/RefTypeRepr.qll linguist-generated /lib/codeql/rust/elements/Rename.qll linguist-generated -/lib/codeql/rust/elements/Resolvable.qll linguist-generated /lib/codeql/rust/elements/RestPat.qll linguist-generated /lib/codeql/rust/elements/RetTypeRepr.qll linguist-generated /lib/codeql/rust/elements/ReturnExpr.qll linguist-generated @@ -370,7 +369,6 @@ /lib/codeql/rust/elements/internal/RefTypeReprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RenameConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RenameImpl.qll linguist-generated -/lib/codeql/rust/elements/internal/ResolvableImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RestPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RetTypeReprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RetTypeReprImpl.qll linguist-generated @@ -596,7 +594,6 @@ /lib/codeql/rust/elements/internal/generated/RefPat.qll linguist-generated /lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Rename.qll linguist-generated -/lib/codeql/rust/elements/internal/generated/Resolvable.qll linguist-generated /lib/codeql/rust/elements/internal/generated/RestPat.qll linguist-generated /lib/codeql/rust/elements/internal/generated/RetTypeRepr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ReturnExpr.qll linguist-generated diff --git a/rust/ql/lib/CHANGELOG.md b/rust/ql/lib/CHANGELOG.md index 20275537b0c..6ff2f1072c7 100644 --- a/rust/ql/lib/CHANGELOG.md +++ b/rust/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.1.15 + +### Major Analysis Improvements + +* Path resolution has been removed from the Rust extractor. For the majority of purposes CodeQL computed paths have been in use for several previous releases, this completes the transition. Extraction is now faster and more reliable. + +### Minor Analysis Improvements + +* Attribute macros are now taken into account when identifying macro-expanded code. This affects the queries `rust/unused-variable` and `rust/unused-value`, which exclude results in macro-expanded code. +* Improved modelling of the `std::fs`, `async_std::fs` and `tokio::fs` libraries. This may cause more alerts to be found by Rust injection queries, particularly `rust/path-injection`. + ## 0.1.14 ### Minor Analysis Improvements diff --git a/rust/ql/lib/change-notes/2025-08-22-fs.md b/rust/ql/lib/change-notes/2025-08-22-fs.md deleted file mode 100644 index 4de91616bb3..00000000000 --- a/rust/ql/lib/change-notes/2025-08-22-fs.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Improved modelling of the `std::fs`, `async_std::fs` and `tokio::fs` libraries. This may cause more alerts to be found by Rust injection queries, particularly `rust/path-injection`. diff --git a/rust/ql/lib/change-notes/2025-08-25-in-macro-expansion.md b/rust/ql/lib/change-notes/2025-08-25-in-macro-expansion.md deleted file mode 100644 index 1778c42d9b8..00000000000 --- a/rust/ql/lib/change-notes/2025-08-25-in-macro-expansion.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Attribute macros are now taken into account when identifying macro-expanded code. This affects the queries `rust/unused-variable` and `rust/unused-value`, which exclude results in macro-expanded code. \ No newline at end of file diff --git a/rust/ql/lib/change-notes/released/0.1.15.md b/rust/ql/lib/change-notes/released/0.1.15.md new file mode 100644 index 00000000000..fa07f2597b1 --- /dev/null +++ b/rust/ql/lib/change-notes/released/0.1.15.md @@ -0,0 +1,10 @@ +## 0.1.15 + +### Major Analysis Improvements + +* Path resolution has been removed from the Rust extractor. For the majority of purposes CodeQL computed paths have been in use for several previous releases, this completes the transition. Extraction is now faster and more reliable. + +### Minor Analysis Improvements + +* Attribute macros are now taken into account when identifying macro-expanded code. This affects the queries `rust/unused-variable` and `rust/unused-value`, which exclude results in macro-expanded code. +* Improved modelling of the `std::fs`, `async_std::fs` and `tokio::fs` libraries. This may cause more alerts to be found by Rust injection queries, particularly `rust/path-injection`. diff --git a/rust/ql/lib/codeql-pack.release.yml b/rust/ql/lib/codeql-pack.release.yml index 76f7b27fb4e..74719634743 100644 --- a/rust/ql/lib/codeql-pack.release.yml +++ b/rust/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.14 +lastReleaseVersion: 0.1.15 diff --git a/rust/ql/lib/codeql/rust/controlflow/BasicBlocks.qll b/rust/ql/lib/codeql/rust/controlflow/BasicBlocks.qll index 4a4b637f3d3..4ed93544023 100644 --- a/rust/ql/lib/codeql/rust/controlflow/BasicBlocks.qll +++ b/rust/ql/lib/codeql/rust/controlflow/BasicBlocks.qll @@ -1,7 +1,10 @@ +private import codeql.controlflow.BasicBlock as BB +private import codeql.Locations +private import codeql.rust.controlflow.ControlFlowGraph as ControlFlowGraph private import internal.ControlFlowGraphImpl as CfgImpl private import CfgImpl::BasicBlocks as BasicBlocksImpl -final class BasicBlock = BasicBlocksImpl::BasicBlock; +class BasicBlock = BasicBlocksImpl::BasicBlock; final class EntryBasicBlock = BasicBlocksImpl::EntryBasicBlock; @@ -14,3 +17,13 @@ final class ConditionBasicBlock = BasicBlocksImpl::ConditionBasicBlock; final class JoinBasicBlock = BasicBlocksImpl::JoinBasicBlock; final class JoinPredecessorBasicBlock = BasicBlocksImpl::JoinPredecessorBasicBlock; + +module Cfg implements BB::CfgSig { + class ControlFlowNode = ControlFlowGraph::CfgNode; + + class BasicBlock = BasicBlocksImpl::BasicBlock; + + class EntryBasicBlock = BasicBlocksImpl::EntryBasicBlock; + + predicate dominatingEdge = BasicBlocksImpl::dominatingEdge/2; +} diff --git a/rust/ql/lib/codeql/rust/controlflow/ControlFlowGraph.qll b/rust/ql/lib/codeql/rust/controlflow/ControlFlowGraph.qll index eb8dbdea39f..b586a1aafee 100644 --- a/rust/ql/lib/codeql/rust/controlflow/ControlFlowGraph.qll +++ b/rust/ql/lib/codeql/rust/controlflow/ControlFlowGraph.qll @@ -1,25 +1,9 @@ /** Provides classes representing the control flow graph. */ private import internal.ControlFlowGraphImpl -private import internal.SuccessorType private import internal.Scope as Scope +import codeql.controlflow.SuccessorType final class CfgScope = Scope::CfgScope; -final class SuccessorType = SuccessorTypeImpl; - -final class NormalSuccessor = NormalSuccessorImpl; - -final class ConditionalSuccessor = ConditionalSuccessorImpl; - -final class BooleanSuccessor = BooleanSuccessorImpl; - -final class MatchSuccessor = MatchSuccessorImpl; - -final class BreakSuccessor = BreakSuccessorImpl; - -final class ContinueSuccessor = ContinueSuccessorImpl; - -final class ReturnSuccessor = ReturnSuccessorImpl; - final class CfgNode = Node; diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll index 01169ce2727..0250f1cbc43 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll @@ -1,7 +1,6 @@ private import codeql.util.Boolean private import codeql.rust.controlflow.ControlFlowGraph private import rust -private import SuccessorType newtype TCompletion = TSimpleCompletion() or @@ -32,7 +31,7 @@ abstract class NormalCompletion extends Completion { } /** A simple (normal) completion. */ class SimpleCompletion extends NormalCompletion, TSimpleCompletion { - override NormalSuccessor getAMatchingSuccessorType() { any() } + override DirectSuccessor getAMatchingSuccessorType() { any() } // `SimpleCompletion` is the "default" completion type, thus it is valid for // any node where there isn't another more specific completion type. @@ -184,7 +183,7 @@ class MatchCompletion extends TMatchCompletion, ConditionalCompletion { e instanceof TryExpr and value = true } - override MatchSuccessor getAMatchingSuccessorType() { result.getValue() = value } + override MatchingSuccessor getAMatchingSuccessorType() { result.getValue() = value } /** Gets the dual match completion. */ override MatchCompletion getDual() { result = TMatchCompletion(value.booleanNot()) } diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index e989931e069..ddc4dae9b95 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -29,19 +29,11 @@ private module CfgInput implements InputSig { Stages::CfgStage::ref() } - class SuccessorType = Cfg::SuccessorType; + private class SuccessorType = Cfg::SuccessorType; /** Gets a successor type that matches completion `c`. */ SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } - /** - * Hold if `c` represents simple (normal) evaluation of a statement or an expression. - */ - predicate successorTypeIsSimple(SuccessorType t) { t instanceof Cfg::NormalSuccessor } - - /** Holds if `t` is an abnormal exit type out of a CFG scope. */ - predicate isAbnormalExitType(SuccessorType t) { none() } - /** Hold if `t` represents a conditional successor type. */ predicate successorTypeIsCondition(SuccessorType t) { t instanceof Cfg::BooleanSuccessor } diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/SuccessorType.qll b/rust/ql/lib/codeql/rust/controlflow/internal/SuccessorType.qll deleted file mode 100644 index 658d2a66706..00000000000 --- a/rust/ql/lib/codeql/rust/controlflow/internal/SuccessorType.qll +++ /dev/null @@ -1,74 +0,0 @@ -private import rust -private import codeql.util.Boolean -private import Completion -private import codeql.rust.internal.CachedStages - -cached -newtype TSuccessorType = - TNormalSuccessor() { Stages::CfgStage::ref() } or - TBooleanSuccessor(Boolean b) or - TMatchSuccessor(Boolean b) or - TBreakSuccessor() or - TContinueSuccessor() or - TReturnSuccessor() - -/** The type of a control flow successor. */ -abstract class SuccessorTypeImpl extends TSuccessorType { - /** Gets a textual representation of successor type. */ - abstract string toString(); -} - -/** A normal control flow successor. */ -class NormalSuccessorImpl extends SuccessorTypeImpl, TNormalSuccessor { - override string toString() { result = "successor" } -} - -/** A conditional control flow successor. */ -abstract class ConditionalSuccessorImpl extends SuccessorTypeImpl { - boolean value; - - bindingset[value] - ConditionalSuccessorImpl() { exists(value) } - - /** Gets the Boolean value of this successor. */ - boolean getValue() { result = value } -} - -/** A Boolean control flow successor for a boolean conditon. */ -class BooleanSuccessorImpl extends ConditionalSuccessorImpl, TBooleanSuccessor { - BooleanSuccessorImpl() { this = TBooleanSuccessor(value) } - - override string toString() { result = this.getValue().toString() } -} - -/** - * A control flow successor of a pattern match. - */ -class MatchSuccessorImpl extends ConditionalSuccessorImpl, TMatchSuccessor { - MatchSuccessorImpl() { this = TMatchSuccessor(value) } - - override string toString() { - if this.getValue() = true then result = "match" else result = "no-match" - } -} - -/** - * A control flow successor of a `break` expression. - */ -class BreakSuccessorImpl extends SuccessorTypeImpl, TBreakSuccessor { - override string toString() { result = "break" } -} - -/** - * A control flow successor of a `continue` expression. - */ -class ContinueSuccessorImpl extends SuccessorTypeImpl, TContinueSuccessor { - override string toString() { result = "continue" } -} - -/** - * A `return` control flow successor. - */ -class ReturnSuccessorImpl extends SuccessorTypeImpl, TReturnSuccessor { - override string toString() { result = "return" } -} diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index 727f14bb94a..c63d2330ca2 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -53,7 +53,9 @@ final class DataFlowCallable extends TDataFlowCallable { } /** Gets the location of this callable. */ - Location getLocation() { result = this.asCfgScope().getLocation() } + Location getLocation() { + result = [this.asCfgScope().getLocation(), this.asSummarizedCallable().getLocation()] + } } final class DataFlowCall extends TDataFlowCall { @@ -196,7 +198,8 @@ private ExprCfgNode getALastEvalNode(ExprCfgNode e) { /** * Holds if a reverse local flow step should be added from the post-update node - * for `e` to the post-update node for the result. + * for `e` to the post-update node for the result. `preservesValue` is true + * if the step is value preserving. * * This is needed to allow for side-effects on compound expressions to propagate * to sub components. For example, in @@ -844,6 +847,7 @@ module RustDataFlow implements InputSig { module VariableCapture { private import codeql.rust.internal.CachedStages private import codeql.dataflow.VariableCapture as SharedVariableCapture + private import codeql.rust.controlflow.BasicBlocks as BasicBlocks private predicate closureFlowStep(ExprCfgNode e1, ExprCfgNode e2) { Stages::DataFlowStage::ref() and @@ -855,22 +859,13 @@ module VariableCapture { ) } - private module CaptureInput implements SharedVariableCapture::InputSig { + private module CaptureInput implements + SharedVariableCapture::InputSig + { private import rust as Ast - private import codeql.rust.controlflow.BasicBlocks as BasicBlocks private import codeql.rust.elements.Variable as Variable - class BasicBlock extends BasicBlocks::BasicBlock { - Callable getEnclosingCallable() { result = this.getScope() } - } - - class ControlFlowNode = CfgNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { - result = bb.getImmediateDominator() - } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } + Callable basicBlockGetEnclosingCallable(BasicBlocks::BasicBlock bb) { result = bb.getScope() } class CapturedVariable extends Variable { CapturedVariable() { this.isCaptured() } @@ -887,7 +882,7 @@ module VariableCapture { } class Expr extends CfgNode { - predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } + predicate hasCfgNode(BasicBlocks::BasicBlock bb, int i) { this = bb.getNode(i) } } class VariableWrite extends Expr { @@ -949,7 +944,7 @@ module VariableCapture { class CapturedVariable = CaptureInput::CapturedVariable; - module Flow = SharedVariableCapture::Flow; + module Flow = SharedVariableCapture::Flow; private Flow::ClosureNode asClosureNode(Node n) { result = n.(CaptureNode).getSynthesizedCaptureNode() diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index 7f8df8d144b..067ef98b2fc 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -51,7 +51,8 @@ private import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprB /** * Holds if in a call to the function with canonical path `path`, the value referred - * to by `output` is a flow source of the given `kind`. + * to by `output` is a flow source of the given `kind` and `madId` is the data + * extension row number. * * `output = "ReturnValue"` simply means the result of the call itself. * @@ -64,7 +65,8 @@ extensible predicate sourceModel( /** * Holds if in a call to the function with canonical path `path`, the value referred - * to by `input` is a flow sink of the given `kind`. + * to by `input` is a flow sink of the given `kind` and `madId` is the data + * extension row number. * * For example, `input = Argument[0]` means the first argument of the call. * @@ -77,7 +79,8 @@ extensible predicate sinkModel( /** * Holds if in a call to the function with canonical path `path`, the value referred - * to by `input` can flow to the value referred to by `output`. + * to by `input` can flow to the value referred to by `output` and `madId` is the data + * extension row number. * * `kind` should be either `value` or `taint`, for value-preserving or taint-preserving * steps, respectively. diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll index 9b6d254dec1..df0824fcdfc 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll @@ -54,15 +54,7 @@ private predicate variableReadCertain(BasicBlock bb, int i, VariableAccess va, V ) } -module SsaInput implements SsaImplCommon::InputSig { - class BasicBlock = BasicBlocks::BasicBlock; - - class ControlFlowNode = CfgNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result = bb.getImmediateDominator() } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - +module SsaInput implements SsaImplCommon::InputSig { class SourceVariable = Variable; predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) { @@ -91,7 +83,7 @@ module SsaInput implements SsaImplCommon::InputSig { } } -import SsaImplCommon::Make as Impl +import SsaImplCommon::Make as Impl class Definition = Impl::Definition; @@ -324,7 +316,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu private import codeql.util.Boolean class Expr extends CfgNodes::AstCfgNode { - predicate hasCfgNode(SsaInput::BasicBlock bb, int i) { this = bb.getNode(i) } + predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } } Expr getARead(Definition def) { result = Cached::getARead(def) } @@ -357,9 +349,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu * Holds if the evaluation of this guard to `branch` corresponds to the edge * from `bb1` to `bb2`. */ - predicate hasValueBranchEdge( - SsaInput::BasicBlock bb1, SsaInput::BasicBlock bb2, GuardValue branch - ) { + predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) { exists(Cfg::ConditionalSuccessor s | this = bb1.getANode() and bb2 = bb1.getASuccessor(s) and @@ -372,15 +362,13 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu * branch edge from `bb1` to `bb2`. That is, following the edge from * `bb1` to `bb2` implies that this guard evaluated to `branch`. */ - predicate valueControlsBranchEdge( - SsaInput::BasicBlock bb1, SsaInput::BasicBlock bb2, GuardValue branch - ) { + predicate valueControlsBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) { this.hasValueBranchEdge(bb1, bb2, branch) } } /** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */ - predicate guardDirectlyControlsBlock(Guard guard, SsaInput::BasicBlock bb, GuardValue branch) { + predicate guardDirectlyControlsBlock(Guard guard, BasicBlock bb, GuardValue branch) { exists(ConditionBasicBlock conditionBlock, ConditionalSuccessor s | guard = conditionBlock.getLastNode() and s.getValue() = branch and diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll index 0ae6aacb430..b702c514c1a 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll @@ -41,13 +41,15 @@ module RustTaintTracking implements InputSig { succ.asExpr() = index ) or - // Although data flow through collections is modeled using stores/reads, - // we also allow taint to flow out of a tainted collection. This is - // needed in order to support taint-tracking configurations where the - // source is a collection. - exists(SingletonContentSet cs | - RustDataFlow::readStep(pred, cs, succ) and + // Although data flow through collections and references is modeled using + // stores/reads, we also allow taint to flow out of a tainted collection + // or reference. + // This is needed in order to support taint-tracking configurations where + // the source is a collection or reference. + exists(SingletonContentSet cs | RustDataFlow::readStep(pred, cs, succ) | cs.getContent() instanceof ElementContent + or + cs.getContent() instanceof ReferenceContent ) or exists(FormatArgsExprCfgNode format | succ.asExpr() = format | diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index 64e497000a0..b42a93efc6c 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -139,7 +139,6 @@ import codeql.rust.elements.RefExpr import codeql.rust.elements.RefPat import codeql.rust.elements.RefTypeRepr import codeql.rust.elements.Rename -import codeql.rust.elements.Resolvable import codeql.rust.elements.RestPat import codeql.rust.elements.RetTypeRepr import codeql.rust.elements.ReturnExpr diff --git a/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll b/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll index c3d62106100..fca8b086134 100644 --- a/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/MethodCallExpr.qll @@ -8,7 +8,6 @@ import codeql.rust.elements.CallExprBase import codeql.rust.elements.Expr import codeql.rust.elements.GenericArgList import codeql.rust.elements.NameRef -import codeql.rust.elements.Resolvable /** * A method call expression. For example: diff --git a/rust/ql/lib/codeql/rust/elements/PathAstNode.qll b/rust/ql/lib/codeql/rust/elements/PathAstNode.qll index c8ff02e634c..2e97383cf73 100644 --- a/rust/ql/lib/codeql/rust/elements/PathAstNode.qll +++ b/rust/ql/lib/codeql/rust/elements/PathAstNode.qll @@ -4,8 +4,8 @@ */ private import internal.PathAstNodeImpl +import codeql.rust.elements.AstNode import codeql.rust.elements.Path -import codeql.rust.elements.Resolvable /** * An AST element wrapping a path (`PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat`). diff --git a/rust/ql/lib/codeql/rust/elements/Resolvable.qll b/rust/ql/lib/codeql/rust/elements/Resolvable.qll deleted file mode 100644 index 6a2304a3be7..00000000000 --- a/rust/ql/lib/codeql/rust/elements/Resolvable.qll +++ /dev/null @@ -1,12 +0,0 @@ -// generated by codegen, do not edit -/** - * This module provides the public class `Resolvable`. - */ - -private import internal.ResolvableImpl -import codeql.rust.elements.AstNode - -/** - * One of `PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat` or `MethodCallExpr`. - */ -final class Resolvable = Impl::Resolvable; diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll index cdccc3f31d9..19abc6e3df3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll @@ -5,7 +5,6 @@ */ private import codeql.rust.elements.internal.generated.CallExprBase -private import codeql.rust.elements.Resolvable /** * INTERNAL: This module contains the customizable definition of `CallExprBase` and should not @@ -15,13 +14,6 @@ module Impl { private import rust private import codeql.rust.internal.TypeInference as TypeInference - pragma[nomagic] - Resolvable getCallResolvable(CallExprBase call) { - result = call.(MethodCallExpr) - or - result = call.(CallExpr).getFunction().(PathExpr) - } - // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A function or method call expression. See `CallExpr` and `MethodCallExpr` for further details. diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll index ac6e08bb9cf..020b50594a6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll @@ -123,11 +123,10 @@ module Impl { } class CallExprMethodCall extends Call instanceof CallExpr { - Path qualifier; string methodName; boolean selfIsRef; - CallExprMethodCall() { callIsMethodCall(this, qualifier, methodName, selfIsRef) } + CallExprMethodCall() { callIsMethodCall(this, _, methodName, selfIsRef) } /** * Holds if this call must have an explicit borrow for the `self` argument, diff --git a/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll deleted file mode 100644 index 893708164d8..00000000000 --- a/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll +++ /dev/null @@ -1,19 +0,0 @@ -// generated by codegen, remove this comment if you wish to edit this file -/** - * This module provides a hand-modifiable wrapper around the generated class `Resolvable`. - * - * INTERNAL: Do not use. - */ - -private import codeql.rust.elements.internal.generated.Resolvable - -/** - * INTERNAL: This module contains the customizable definition of `Resolvable` and should not - * be referenced directly. - */ -module Impl { - /** - * One of `PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat` or `MethodCallExpr`. - */ - class Resolvable extends Generated::Resolvable { } -} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Addressable.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Addressable.qll index 9d4ba1e976a..b51d8b1ec6a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Addressable.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Addressable.qll @@ -20,39 +20,5 @@ module Generated { * INTERNAL: Do not reference the `Generated::Addressable` class directly. * Use the subclass `Addressable`, where the following predicates are available. */ - class Addressable extends Synth::TAddressable, AstNodeImpl::AstNode { - /** - * Gets the extended canonical path of this addressable, if it exists. - * - * Either a canonical path (see https://doc.rust-lang.org/reference/paths.html#canonical-paths), - * or `{}::name` for addressable items defined in an anonymous block (and only - * addressable there-in). - * INTERNAL: Do not use. - */ - string getExtendedCanonicalPath() { - result = Synth::convertAddressableToRaw(this).(Raw::Addressable).getExtendedCanonicalPath() - } - - /** - * Holds if `getExtendedCanonicalPath()` exists. - * INTERNAL: Do not use. - */ - final predicate hasExtendedCanonicalPath() { exists(this.getExtendedCanonicalPath()) } - - /** - * Gets the crate origin of this addressable, if it exists. - * - * One of `rustc:`, `repo::` or `lang:`. - * INTERNAL: Do not use. - */ - string getCrateOrigin() { - result = Synth::convertAddressableToRaw(this).(Raw::Addressable).getCrateOrigin() - } - - /** - * Holds if `getCrateOrigin()` exists. - * INTERNAL: Do not use. - */ - final predicate hasCrateOrigin() { exists(this.getCrateOrigin()) } - } + class Addressable extends Synth::TAddressable, AstNodeImpl::AstNode { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll index 116488ae6ef..8908b71b7af 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll @@ -10,7 +10,6 @@ import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl import codeql.rust.elements.Expr import codeql.rust.elements.GenericArgList import codeql.rust.elements.NameRef -import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl /** * INTERNAL: This module contains the fully generated definition of `MethodCallExpr` and should not @@ -26,9 +25,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::MethodCallExpr` class directly. * Use the subclass `MethodCallExpr`, where the following predicates are available. */ - class MethodCallExpr extends Synth::TMethodCallExpr, CallExprBaseImpl::CallExprBase, - ResolvableImpl::Resolvable - { + class MethodCallExpr extends Synth::TMethodCallExpr, CallExprBaseImpl::CallExprBase { override string getAPrimaryQlClass() { result = "MethodCallExpr" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index 4aff5eec64d..6d2ab30fc68 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -1669,6 +1669,18 @@ private module Impl { ) } + private Element getImmediateChildOfPathPat(PathPat e, int index, string partialPredicateCall) { + exists(int n, int nPath | + n = 0 and + nPath = n + 1 and + ( + none() + or + index = n and result = e.getPath() and partialPredicateCall = "Path()" + ) + ) + } + private Element getImmediateChildOfPathTypeRepr( PathTypeRepr e, int index, string partialPredicateCall ) { @@ -1870,6 +1882,23 @@ private module Impl { ) } + 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() + or + index = n and result = e.getPath() and partialPredicateCall = "Path()" + or + index = nPath and + result = e.getStructExprFieldList() and + partialPredicateCall = "StructExprFieldList()" + ) + ) + } + private Element getImmediateChildOfStructFieldList( StructFieldList e, int index, string partialPredicateCall ) { @@ -1885,6 +1914,23 @@ private module Impl { ) } + 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 + ( + none() + or + index = n and result = e.getPath() and partialPredicateCall = "Path()" + or + index = nPath and + result = e.getStructPatFieldList() and + partialPredicateCall = "StructPatFieldList()" + ) + ) + } + private Element getImmediateChildOfTryExpr(TryExpr e, int index, string partialPredicateCall) { exists(int n, int nAttr, int nExpr | n = 0 and @@ -1946,6 +1992,24 @@ private module Impl { ) } + 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 + ( + none() + or + index = n and result = e.getPath() and partialPredicateCall = "Path()" + or + result = e.getField(index - nPath) and + partialPredicateCall = "Field(" + (index - nPath).toString() + ")" + ) + ) + } + private Element getImmediateChildOfTupleTypeRepr( TupleTypeRepr e, int index, string partialPredicateCall ) { @@ -2433,52 +2497,6 @@ private module Impl { ) } - private Element getImmediateChildOfPathPat(PathPat e, int index, string partialPredicateCall) { - exists(int n, int nPath | - n = 0 and - nPath = n + 1 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() - or - index = n and result = e.getPath() and partialPredicateCall = "Path()" - or - index = nPath and - result = e.getStructExprFieldList() and - partialPredicateCall = "StructExprFieldList()" - ) - ) - } - - 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 - ( - none() - or - index = n and result = e.getPath() and partialPredicateCall = "Path()" - or - index = nPath and - result = e.getStructPatFieldList() and - partialPredicateCall = "StructPatFieldList()" - ) - ) - } - private Element getImmediateChildOfTrait(Trait e, int index, string partialPredicateCall) { exists( int n, int nAttributeMacroExpansion, int nAssocItemList, int nAttr, int nGenericParamList, @@ -2568,24 +2586,6 @@ private module Impl { ) } - 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 - ( - none() - or - index = n and result = e.getPath() and partialPredicateCall = "Path()" - 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 @@ -3249,6 +3249,8 @@ private module Impl { or result = getImmediateChildOfParenTypeRepr(e, index, partialAccessor) or + result = getImmediateChildOfPathPat(e, index, partialAccessor) + or result = getImmediateChildOfPathTypeRepr(e, index, partialAccessor) or result = getImmediateChildOfPrefixExpr(e, index, partialAccessor) @@ -3275,8 +3277,12 @@ private module Impl { or result = getImmediateChildOfSliceTypeRepr(e, index, partialAccessor) or + result = getImmediateChildOfStructExpr(e, index, partialAccessor) + or result = getImmediateChildOfStructFieldList(e, index, partialAccessor) or + result = getImmediateChildOfStructPat(e, index, partialAccessor) + or result = getImmediateChildOfTryExpr(e, index, partialAccessor) or result = getImmediateChildOfTupleExpr(e, index, partialAccessor) @@ -3285,6 +3291,8 @@ private module Impl { or result = getImmediateChildOfTuplePat(e, index, partialAccessor) or + result = getImmediateChildOfTupleStructPat(e, index, partialAccessor) + or result = getImmediateChildOfTupleTypeRepr(e, index, partialAccessor) or result = getImmediateChildOfTypeArg(e, index, partialAccessor) @@ -3329,18 +3337,10 @@ private module Impl { or result = getImmediateChildOfPathExpr(e, index, partialAccessor) or - result = getImmediateChildOfPathPat(e, index, partialAccessor) - or - result = getImmediateChildOfStructExpr(e, index, partialAccessor) - or - result = getImmediateChildOfStructPat(e, index, partialAccessor) - or result = getImmediateChildOfTrait(e, index, partialAccessor) or result = getImmediateChildOfTraitAlias(e, index, partialAccessor) or - result = getImmediateChildOfTupleStructPat(e, index, partialAccessor) - or result = getImmediateChildOfUse(e, index, partialAccessor) or result = getImmediateChildOfConst(e, index, partialAccessor) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PathAstNode.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PathAstNode.qll index a69957e7545..b250b94ef9a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PathAstNode.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PathAstNode.qll @@ -6,8 +6,8 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl import codeql.rust.elements.Path -import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl /** * INTERNAL: This module contains the fully generated definition of `PathAstNode` and should not @@ -19,7 +19,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::PathAstNode` class directly. * Use the subclass `PathAstNode`, where the following predicates are available. */ - class PathAstNode extends Synth::TPathAstNode, ResolvableImpl::Resolvable { + class PathAstNode extends Synth::TPathAstNode, AstNodeImpl::AstNode { /** * Gets the path of this path ast node, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index bc07329dbcd..abf844b77f5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -138,23 +138,7 @@ module Raw { * * TODO: This does not yet include all possible cases. */ - class Addressable extends @addressable, AstNode { - /** - * Gets the extended canonical path of this addressable, if it exists. - * - * Either a canonical path (see https://doc.rust-lang.org/reference/paths.html#canonical-paths), - * or `{}::name` for addressable items defined in an anonymous block (and only - * addressable there-in). - */ - string getExtendedCanonicalPath() { addressable_extended_canonical_paths(this, result) } - - /** - * Gets the crate origin of this addressable, if it exists. - * - * One of `rustc:`, `repo::` or `lang:`. - */ - string getCrateOrigin() { addressable_crate_origins(this, result) } - } + class Addressable extends @addressable, AstNode { } /** * INTERNAL: Do not use. @@ -803,6 +787,17 @@ module Raw { PathSegment getSegment() { path_segments_(this, result) } } + /** + * INTERNAL: Do not use. + * An AST element wrapping a path (`PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat`). + */ + class PathAstNode extends @path_ast_node, AstNode { + /** + * Gets the path of this path ast node, if it exists. + */ + Path getPath() { path_ast_node_paths(this, result) } + } + /** * INTERNAL: Do not use. * A path segment, which is one part of a whole path. @@ -873,22 +868,6 @@ module Raw { Name getName() { rename_names(this, result) } } - /** - * INTERNAL: Do not use. - * One of `PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat` or `MethodCallExpr`. - */ - class Resolvable extends @resolvable, AstNode { - /** - * Gets the resolved path of this resolvable, if it exists. - */ - string getResolvedPath() { resolvable_resolved_paths(this, result) } - - /** - * Gets the resolved crate origin of this resolvable, if it exists. - */ - string getResolvedCrateOrigin() { resolvable_resolved_crate_origins(this, result) } - } - /** * INTERNAL: Do not use. * A return type in a function signature. @@ -2902,23 +2881,26 @@ module Raw { TypeRepr getTypeRepr() { paren_type_repr_type_reprs(this, result) } } - /** - * INTERNAL: Do not use. - * An AST element wrapping a path (`PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat`). - */ - class PathAstNode extends @path_ast_node, Resolvable { - /** - * Gets the path of this path ast node, if it exists. - */ - Path getPath() { path_ast_node_paths(this, result) } - } - /** * INTERNAL: Do not use. * A path expression or a variable access in a formatting template. See `PathExpr` and `FormatTemplateVariableAccess` for further details. */ class PathExprBase extends @path_expr_base, Expr { } + /** + * INTERNAL: Do not use. + * A path pattern. For example: + * ```rust + * match x { + * Foo::Bar => "ok", + * _ => "fail", + * } + * ``` + */ + class PathPat extends @path_pat, Pat, PathAstNode { + override string toString() { result = "PathPat" } + } + /** * INTERNAL: Do not use. * A path referring to a type. For example: @@ -3277,6 +3259,27 @@ module Raw { TypeRepr getTypeRepr() { slice_type_repr_type_reprs(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 }; + * let n = Foo { a: 1, b: 2 }.b; + * Foo { a: m, .. } = 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 list of fields in a struct declaration. @@ -3296,6 +3299,25 @@ module Raw { StructField getField(int index) { struct_field_list_fields(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 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 try expression using the `?` operator. @@ -3379,6 +3401,26 @@ module Raw { Pat getField(int index) { tuple_pat_fields(this, index, result) } } + /** + * INTERNAL: Do not use. + * A tuple struct pattern. For example: + * ```rust + * match x { + * Tuple("a", 1, 2, 3) => "great", + * Tuple(.., 3) => "fine", + * Tuple(..) => "fail", + * }; + * ``` + */ + class TupleStructPat extends @tuple_struct_pat, Pat, PathAstNode { + override string toString() { result = "TupleStructPat" } + + /** + * Gets the `index`th field of this tuple struct pattern (0-based). + */ + Pat getField(int index) { tuple_struct_pat_fields(this, index, result) } + } + /** * INTERNAL: Do not use. * A tuple type. @@ -3937,7 +3979,7 @@ module Raw { * x.foo::(42); * ``` */ - class MethodCallExpr extends @method_call_expr, CallExprBase, Resolvable { + class MethodCallExpr extends @method_call_expr, CallExprBase { override string toString() { result = "MethodCallExpr" } /** @@ -4011,60 +4053,6 @@ module Raw { Attr getAttr(int index) { path_expr_attrs(this, index, result) } } - /** - * INTERNAL: Do not use. - * A path pattern. For example: - * ```rust - * match x { - * Foo::Bar => "ok", - * _ => "fail", - * } - * ``` - */ - class PathPat extends @path_pat, Pat, PathAstNode { - override string toString() { result = "PathPat" } - } - - /** - * INTERNAL: Do not use. - * A struct expression. For example: - * ```rust - * let first = Foo { a: 1, b: 2 }; - * let second = Foo { a: 2, ..first }; - * let n = Foo { a: 1, b: 2 }.b; - * Foo { a: m, .. } = 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: @@ -4170,26 +4158,6 @@ module Raw { WhereClause getWhereClause() { trait_alias_where_clauses(this, result) } } - /** - * INTERNAL: Do not use. - * A tuple struct pattern. For example: - * ```rust - * match x { - * Tuple("a", 1, 2, 3) => "great", - * Tuple(.., 3) => "fine", - * Tuple(..) => "fail", - * }; - * ``` - */ - class TupleStructPat extends @tuple_struct_pat, Pat, PathAstNode { - override string toString() { result = "TupleStructPat" } - - /** - * Gets the `index`th field of this tuple struct pattern (0-based). - */ - Pat getField(int index) { tuple_struct_pat_fields(this, index, result) } - } - /** * INTERNAL: Do not use. * A `use` statement. For example: diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Resolvable.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Resolvable.qll deleted file mode 100644 index fb0d7975cf9..00000000000 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Resolvable.qll +++ /dev/null @@ -1,52 +0,0 @@ -// generated by codegen, do not edit -/** - * This module provides the generated definition of `Resolvable`. - * INTERNAL: Do not import directly. - */ - -private import codeql.rust.elements.internal.generated.Synth -private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl - -/** - * INTERNAL: This module contains the fully generated definition of `Resolvable` and should not - * be referenced directly. - */ -module Generated { - /** - * One of `PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat` or `MethodCallExpr`. - * INTERNAL: Do not reference the `Generated::Resolvable` class directly. - * Use the subclass `Resolvable`, where the following predicates are available. - */ - class Resolvable extends Synth::TResolvable, AstNodeImpl::AstNode { - /** - * Gets the resolved path of this resolvable, if it exists. - * - * INTERNAL: Do not use. - */ - string getResolvedPath() { - result = Synth::convertResolvableToRaw(this).(Raw::Resolvable).getResolvedPath() - } - - /** - * Holds if `getResolvedPath()` exists. - * INTERNAL: Do not use. - */ - final predicate hasResolvedPath() { exists(this.getResolvedPath()) } - - /** - * Gets the resolved crate origin of this resolvable, if it exists. - * - * INTERNAL: Do not use. - */ - string getResolvedCrateOrigin() { - result = Synth::convertResolvableToRaw(this).(Raw::Resolvable).getResolvedCrateOrigin() - } - - /** - * Holds if `getResolvedCrateOrigin()` exists. - * INTERNAL: Do not use. - */ - final predicate hasResolvedCrateOrigin() { exists(this.getResolvedCrateOrigin()) } - } -} 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 42d5c99eb0a..9ed7961f63c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -722,8 +722,8 @@ module Synth { TExternItemList or TFieldList or TForBinder 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 + TParamList or TParenthesizedArgList or TPat or TPath or TPathAstNode or TPathSegment or + TRename 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 @@ -815,11 +815,6 @@ module Synth { */ class TPathExprBase = TFormatTemplateVariableAccess or TPathExpr; - /** - * INTERNAL: Do not use. - */ - class TResolvable = TMethodCallExpr or TPathAstNode; - /** * INTERNAL: Do not use. */ @@ -1999,12 +1994,12 @@ module Synth { or result = convertPathFromRaw(e) or + result = convertPathAstNodeFromRaw(e) + or result = convertPathSegmentFromRaw(e) or result = convertRenameFromRaw(e) or - result = convertResolvableFromRaw(e) - or result = convertRetTypeReprFromRaw(e) or result = convertReturnTypeSyntaxFromRaw(e) @@ -2354,16 +2349,6 @@ module Synth { result = convertPathExprFromRaw(e) } - /** - * INTERNAL: Do not use. - * Converts a raw DB element to a synthesized `TResolvable`, if possible. - */ - TResolvable convertResolvableFromRaw(Raw::Element e) { - result = convertMethodCallExprFromRaw(e) - or - result = convertPathAstNodeFromRaw(e) - } - /** * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TStmt`, if possible. @@ -3585,12 +3570,12 @@ module Synth { or result = convertPathToRaw(e) or + result = convertPathAstNodeToRaw(e) + or result = convertPathSegmentToRaw(e) or result = convertRenameToRaw(e) or - result = convertResolvableToRaw(e) - or result = convertRetTypeReprToRaw(e) or result = convertReturnTypeSyntaxToRaw(e) @@ -3940,16 +3925,6 @@ module Synth { result = convertPathExprToRaw(e) } - /** - * INTERNAL: Do not use. - * Converts a synthesized `TResolvable` to a raw DB element, if possible. - */ - Raw::Element convertResolvableToRaw(TResolvable e) { - result = convertMethodCallExprToRaw(e) - or - result = convertPathAstNodeToRaw(e) - } - /** * INTERNAL: Do not use. * Converts a synthesized `TStmt` to a raw DB element, if possible. diff --git a/rust/ql/lib/codeql/rust/internal/CachedStages.qll b/rust/ql/lib/codeql/rust/internal/CachedStages.qll index c2dc2166178..cfd3d690522 100644 --- a/rust/ql/lib/codeql/rust/internal/CachedStages.qll +++ b/rust/ql/lib/codeql/rust/internal/CachedStages.qll @@ -65,7 +65,6 @@ module Stages { cached module CfgStage { private import codeql.rust.controlflow.internal.Splitting - private import codeql.rust.controlflow.internal.SuccessorType private import codeql.rust.controlflow.internal.ControlFlowGraphImpl private import codeql.rust.controlflow.CfgNodes @@ -87,8 +86,6 @@ module Stages { or exists(TConditionalCompletionSplitKind()) or - exists(TNormalSuccessor()) - or exists(AstCfgNode n) or exists(CallExprCfgNode n | exists(n.getFunction())) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index b78b8e47b96..77faaa747b9 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -216,7 +216,7 @@ abstract class ItemNode extends Locatable { // items made available through `use` are available to nodes that contain the `use` exists(UseItemNode use | use = this.getASuccessor(_, _) and - result = use.(ItemNode).getASuccessor(name, kind) + result = use.getASuccessor(name, kind) ) or exists(ExternCrateItemNode ec | result = ec.(ItemNode).getASuccessor(name, kind) | @@ -240,12 +240,7 @@ abstract class ItemNode extends Locatable { ) or // items made available by an implementation where `this` is the implementing type - exists(ItemNode node | - this = node.(ImplItemNodeImpl).resolveSelfTyCand() and - result = node.getASuccessor(name, kind) and - kind.isExternalOrBoth() and - result instanceof AssocItemNode - ) + typeImplEdge(this, _, name, kind, result) or // trait items with default implementations made available in an implementation exists(ImplItemNodeImpl impl, ItemNode trait | @@ -1311,6 +1306,7 @@ private predicate declares(ItemNode item, Namespace ns, string name) { class RelevantPath extends Path { RelevantPath() { not this = any(VariableAccess va).(PathExpr).getPath() } + /** Holds if this is an unqualified path with the textual value `name`. */ pragma[nomagic] predicate isUnqualified(string name) { not exists(this.getQualifier()) and @@ -1421,6 +1417,35 @@ private ItemNode unqualifiedPathLookup(RelevantPath p, Namespace ns, SuccessorKi pragma[nomagic] private predicate isUnqualifiedSelfPath(RelevantPath path) { path.isUnqualified("Self") } +/** Provides the input to `TraitIsVisible`. */ +signature predicate relevantTraitVisibleSig(Element element, Trait trait); + +/** + * Provides the `traitIsVisible` predicate for determining if a trait is visible + * at a given element. + */ +module TraitIsVisible { + /** Holds if the trait might be looked up in `encl`. */ + private predicate traitLookup(ItemNode encl, Element element, Trait trait) { + // lookup in immediately enclosing item + relevantTraitVisible(element, trait) and + encl.getADescendant() = element + or + // lookup in an outer scope, but only if the trait is not declared in inner scope + exists(ItemNode mid | + traitLookup(mid, element, trait) and + not trait = mid.getASuccessor(_, _) and + encl = getOuterScope(mid) + ) + } + + /** Holds if the trait `trait` is visible at `element`. */ + pragma[nomagic] + predicate traitIsVisible(Element element, Trait trait) { + exists(ItemNode encl | traitLookup(encl, element, trait) and trait = encl.getASuccessor(_, _)) + } +} + pragma[nomagic] private ItemNode resolvePathCand0(RelevantPath path, Namespace ns) { exists(ItemNode res | @@ -1446,6 +1471,10 @@ private ItemNode resolvePathCandQualifier(RelevantPath qualifier, RelevantPath p name = path.getText() } +/** + * Gets the item that `path` resolves to in `ns` when `qualifier` is the + * qualifier of `path` and `qualifier` resolves to `q`, if any. + */ pragma[nomagic] private ItemNode resolvePathCandQualified( RelevantPath qualifier, ItemNode q, RelevantPath path, Namespace ns @@ -1520,11 +1549,31 @@ private ItemNode resolvePathCand(RelevantPath path) { ) } +/** Get a trait that should be visible when `path` resolves to `node`, if any. */ +private Trait getResolvePathTraitUsed(RelevantPath path, AssocItemNode node) { + exists(TypeItemNode type, ImplItemNodeImpl impl | + node = resolvePathCandQualified(_, type, path, _) and + typeImplEdge(type, impl, _, _, node) and + result = impl.resolveTraitTyCand() + ) +} + +private predicate pathTraitUsed(Element path, Trait trait) { + trait = getResolvePathTraitUsed(path, _) +} + /** Gets the item that `path` resolves to, if any. */ cached ItemNode resolvePath(RelevantPath path) { result = resolvePathCand(path) and - not path = any(Path parent | exists(resolvePathCand(parent))).getQualifier() + not path = any(Path parent | exists(resolvePathCand(parent))).getQualifier() and + ( + // When the result is an associated item of a trait implementation the + // implemented trait must be visible. + TraitIsVisible::traitIsVisible(path, getResolvePathTraitUsed(path, result)) + or + not exists(getResolvePathTraitUsed(path, result)) + ) or // if `path` is the qualifier of a resolvable `parent`, then we should // resolve `path` to something consistent with what `parent` resolves to @@ -1606,8 +1655,16 @@ private predicate useImportEdge(Use use, string name, ItemNode item, SuccessorKi not tree.hasRename() and name = item.getName() or - name = tree.getRename().getName().getText() and - name != "_" + exists(Rename rename | rename = tree.getRename() | + name = rename.getName().getText() + or + // When the rename doesn't have a name it's an underscore import. This + // makes the imported item visible but unnameable. We represent this + // by using the name `_` which can never occur in a path. See also: + // https://doc.rust-lang.org/reference/items/use-declarations.html#r-items.use.as-underscore + not rename.hasName() and + name = "_" + ) ) ) ) @@ -1629,6 +1686,18 @@ private predicate externCrateEdge(ExternCrateItemNode ec, string name, CrateItem ) } +/** + * Holds if `typeItem` is the implementing type of `impl` and the implementation + * makes `assoc` available as `name` at `kind`. + */ +private predicate typeImplEdge( + TypeItemNode typeItem, ImplItemNodeImpl impl, string name, SuccessorKind kind, AssocItemNode assoc +) { + typeItem = impl.resolveSelfTyCand() and + assoc = impl.getASuccessor(name, kind) and + kind.isExternalOrBoth() +} + pragma[nomagic] private predicate preludeItem(string name, ItemNode i) { exists(Crate stdOrCore, ModuleLikeNode mod, ModuleItemNode prelude, ModuleItemNode rust | @@ -1693,7 +1762,7 @@ private module Debug { useImportEdge(use, name, item, kind) } - ItemNode debuggetASuccessor(ItemNode i, string name, SuccessorKind kind) { + ItemNode debugGetASuccessor(ItemNode i, string name, SuccessorKind kind) { i = getRelevantLocatable() and result = i.getASuccessor(name, kind) } diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index 56c179354b4..eaa7e83fc6d 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -620,9 +620,7 @@ final class TypeBoundTypeAbstraction extends TypeAbstraction, TypeBound { } final class SelfTypeBoundTypeAbstraction extends TypeAbstraction, Name { - private TraitTypeAbstraction trait; - - SelfTypeBoundTypeAbstraction() { trait.getName() = this } + SelfTypeBoundTypeAbstraction() { any(TraitTypeAbstraction trait).getName() = this } override TypeParameter getATypeParameter() { none() } } diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 7668ab88651..ade1a5514f6 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -257,7 +257,7 @@ private Type inferAnnotatedType(AstNode n, TypePath path) { } /** Module for inferring certain type information. */ -private module CertainTypeInference { +module CertainTypeInference { pragma[nomagic] private predicate callResolvesTo(CallExpr ce, Path p, Function f) { p = CallExprImpl::getFunctionPath(ce) and @@ -286,7 +286,7 @@ private module CertainTypeInference { } pragma[nomagic] - Type inferCertainCallExprType(CallExpr ce, TypePath path) { + private Type inferCertainCallExprType(CallExpr ce, TypePath path) { exists(Type ty, TypePath prefix, Path p | ty = getCertainCallExprType(ce, p, prefix) | exists(TypePath suffix, TypeParam tp | tp = ty.(TypeParamTypeParameter).getTypeParam() and @@ -1891,7 +1891,7 @@ private predicate methodCandidate(Type type, string name, int arity, Impl impl) */ pragma[nomagic] private predicate methodCandidateTrait(Type type, Trait trait, string name, int arity, Impl impl) { - trait = resolvePath(impl.(ImplItemNode).getTraitPath()) and + trait = impl.(ImplItemNode).resolveTraitTy() and methodCandidate(type, name, arity, impl) } @@ -1903,19 +1903,53 @@ private predicate isMethodCall(MethodCall mc, Type rootType, string name, int ar } private module IsInstantiationOfInput implements IsInstantiationOfInputSig { + /** Holds if `mc` specifies a trait and might target a method in `impl`. */ pragma[nomagic] - predicate potentialInstantiationOf(MethodCall mc, TypeAbstraction impl, TypeMention constraint) { + private predicate methodCallTraitCandidate(MethodCall mc, Impl impl) { exists(Type rootType, string name, int arity | isMethodCall(mc, rootType, name, arity) and - constraint = impl.(ImplTypeAbstraction).getSelfTy() - | methodCandidateTrait(rootType, mc.getTrait(), name, arity, impl) - or + ) + } + + /** Holds if `mc` does not specify a trait and might target a method in `impl`. */ + pragma[nomagic] + private predicate methodCallCandidate(MethodCall mc, Impl impl) { + exists(Type rootType, string name, int arity | not exists(mc.getTrait()) and + isMethodCall(mc, rootType, name, arity) and methodCandidate(rootType, name, arity, impl) ) } + private predicate relevantTraitVisible(Element mc, Trait trait) { + trait = any(ImplItemNode impl | methodCallCandidate(mc, impl)).resolveTraitTy() + } + + bindingset[impl] + pragma[inline_late] + private TypeRepr getImplSelfTy(Impl impl) { result = impl.getSelfTy() } + + pragma[nomagic] + predicate potentialInstantiationOf(MethodCall mc, TypeAbstraction impl, TypeMention constraint) { + constraint = getImplSelfTy(impl) and + ( + methodCallTraitCandidate(mc, impl) + or + methodCallCandidate(mc, impl) and + ( + not exists(impl.(ImplItemNode).resolveTraitTy()) + or + // If the `impl` block implements a trait, that trait must be visible in + // order for the `impl` to be valid. + exists(Trait trait | + pragma[only_bind_into](trait) = impl.(ImplItemNode).resolveTraitTy() and + TraitIsVisible::traitIsVisible(mc, pragma[only_bind_into](trait)) + ) + ) + ) + } + predicate relevantTypeMention(TypeMention constraint) { exists(Impl impl | methodCandidate(_, _, _, impl) and constraint = impl.getSelfTy()) } diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index 68121096b5e..6b78c2d50ad 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.1.15-dev +version: 0.1.16-dev groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index b41e55c0dba..dfade44a27b 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -200,9 +200,9 @@ named_crates( | @parenthesized_arg_list | @pat | @path +| @path_ast_node | @path_segment | @rename -| @resolvable | @ret_type_repr | @return_type_syntax | @source_file @@ -282,18 +282,6 @@ abi_abi_strings( | @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 ); @@ -747,6 +735,20 @@ path_segments_( int segment: @path_segment 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_segments( unique int id: @path_segment ); @@ -803,23 +805,6 @@ rename_names( 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 ); @@ -2211,24 +2196,14 @@ paren_type_repr_type_reprs( 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_pats( + unique int id: @path_pat +); + path_type_reprs( unique int id: @path_type_repr ); @@ -2476,6 +2451,16 @@ slice_type_repr_type_reprs( int type_repr: @type_repr 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_field_lists( unique int id: @struct_field_list ); @@ -2487,6 +2472,16 @@ struct_field_list_fields( int field: @struct_field 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 +); + try_exprs( unique int id: @try_expr ); @@ -2544,6 +2539,17 @@ tuple_pat_fields( int field: @pat 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 +); + tuple_type_reprs( unique int id: @tuple_type_repr ); @@ -3044,30 +3050,6 @@ path_expr_attrs( 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 ); @@ -3166,17 +3148,6 @@ trait_alias_where_clauses( 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 ); diff --git a/rust/ql/lib/upgrades/b41e55c0dba14a139d01dbee713aca5efe5b818a/old.dbscheme b/rust/ql/lib/upgrades/b41e55c0dba14a139d01dbee713aca5efe5b818a/old.dbscheme new file mode 100644 index 00000000000..b41e55c0dba --- /dev/null +++ b/rust/ql/lib/upgrades/b41e55c0dba14a139d01dbee713aca5efe5b818a/old.dbscheme @@ -0,0 +1,3644 @@ +// 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 +); + +overlayChangedFiles( + string path: 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 +| @expr +| @extern_item_list +| @field_list +| @for_binder +| @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 +); + +@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 +; + +for_binders( + unique int id: @for_binder +); + +#keyset[id] +for_binder_generic_param_lists( + int id: @for_binder ref, + int generic_param_list: @generic_param_list ref +); + +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_for_binders( + int id: @type_bound ref, + int for_binder: @for_binder ref +); + +#keyset[id] +type_bound_is_async( + int id: @type_bound ref +); + +#keyset[id] +type_bound_is_const( + int id: @type_bound ref +); + +#keyset[id] +type_bound_lifetimes( + int id: @type_bound ref, + 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_for_binders( + int id: @where_pred ref, + int for_binder: @for_binder 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_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_for_binders( + int id: @closure_expr ref, + int for_binder: @for_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_for_binders( + int id: @for_type_repr ref, + int for_binder: @for_binder 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 +| @asm_expr +| @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, index] +macro_block_expr_statements( + int id: @macro_block_expr ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +macro_block_expr_tail_exprs( + int id: @macro_block_expr ref, + int tail_expr: @expr 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 +); + +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 +); + +@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/b41e55c0dba14a139d01dbee713aca5efe5b818a/rust.dbscheme b/rust/ql/lib/upgrades/b41e55c0dba14a139d01dbee713aca5efe5b818a/rust.dbscheme new file mode 100644 index 00000000000..dfade44a27b --- /dev/null +++ b/rust/ql/lib/upgrades/b41e55c0dba14a139d01dbee713aca5efe5b818a/rust.dbscheme @@ -0,0 +1,3615 @@ +// 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 +); + +overlayChangedFiles( + string path: 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 +| @expr +| @extern_item_list +| @field_list +| @for_binder +| @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_ast_node +| @path_segment +| @rename +| @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 +; + +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 +); + +@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 +; + +for_binders( + unique int id: @for_binder +); + +#keyset[id] +for_binder_generic_param_lists( + int id: @for_binder ref, + int generic_param_list: @generic_param_list ref +); + +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_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_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 +); + +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_for_binders( + int id: @type_bound ref, + int for_binder: @for_binder ref +); + +#keyset[id] +type_bound_is_async( + int id: @type_bound ref +); + +#keyset[id] +type_bound_is_const( + int id: @type_bound ref +); + +#keyset[id] +type_bound_lifetimes( + int id: @type_bound ref, + 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_for_binders( + int id: @where_pred ref, + int for_binder: @for_binder 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_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_for_binders( + int id: @closure_expr ref, + int for_binder: @for_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_for_binders( + int id: @for_type_repr ref, + int for_binder: @for_binder 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 +| @asm_expr +| @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, index] +macro_block_expr_statements( + int id: @macro_block_expr ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +macro_block_expr_tail_exprs( + int id: @macro_block_expr ref, + int tail_expr: @expr 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_expr_base = + @path_expr +; + +path_pats( + unique int id: @path_pat +); + +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_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_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 +); + +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 +); + +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_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 +); + +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 +); + +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 +); + +@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 +); + +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 +); + +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/b41e55c0dba14a139d01dbee713aca5efe5b818a/upgrade.properties b/rust/ql/lib/upgrades/b41e55c0dba14a139d01dbee713aca5efe5b818a/upgrade.properties new file mode 100644 index 00000000000..b50f4c8228c --- /dev/null +++ b/rust/ql/lib/upgrades/b41e55c0dba14a139d01dbee713aca5efe5b818a/upgrade.properties @@ -0,0 +1,6 @@ +description: Remove extractor generated paths +compatibility: full +addressable_extended_canonical_paths.rel: delete +addressable_crate_origins.rel: delete +resolvable_resolved_paths.rel: delete +resolvable_resolved_crate_origins.rel: delete diff --git a/rust/ql/src/CHANGELOG.md b/rust/ql/src/CHANGELOG.md index 94231f13170..b8ca5b71568 100644 --- a/rust/ql/src/CHANGELOG.md +++ b/rust/ql/src/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.1.15 + +### New Queries + +* Added a new query, `rust/log-injection`, for detecting cases where log entries could be forged by a malicious user. + +### Bug Fixes + +* The "Low Rust analysis quality" query (`rust/diagnostic/database-quality`) has been tuned so that it won't trigger on databases that have extracted normally. This will remove spurious messages of "Low Rust analysis quality" on the CodeQL status page. +* Fixed an inconsistency across languages where most have a `Customizations.qll` file for adding customizations, but not all did. + ## 0.1.14 ### New Queries diff --git a/rust/ql/src/change-notes/2025-08-18-log-injection.md b/rust/ql/src/change-notes/2025-08-18-log-injection.md deleted file mode 100644 index 0d8b9eee355..00000000000 --- a/rust/ql/src/change-notes/2025-08-18-log-injection.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query, `rust/log-injection`, for detecting cases where log entries could be forged by a malicious user. diff --git a/rust/ql/src/change-notes/2025-08-28-diagnostic-database-quality.md b/rust/ql/src/change-notes/2025-08-28-diagnostic-database-quality.md deleted file mode 100644 index 0aeb9d52d27..00000000000 --- a/rust/ql/src/change-notes/2025-08-28-diagnostic-database-quality.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* The "Low Rust analysis quality" query (`rust/diagnostic/database-quality`) has been tuned so that it won't trigger on databases that have extracted normally. This will remove spurious messages of "Low Rust analysis quality" on the CodeQL status page. diff --git a/rust/ql/src/change-notes/released/0.1.15.md b/rust/ql/src/change-notes/released/0.1.15.md new file mode 100644 index 00000000000..eb88879de2c --- /dev/null +++ b/rust/ql/src/change-notes/released/0.1.15.md @@ -0,0 +1,10 @@ +## 0.1.15 + +### New Queries + +* Added a new query, `rust/log-injection`, for detecting cases where log entries could be forged by a malicious user. + +### Bug Fixes + +* The "Low Rust analysis quality" query (`rust/diagnostic/database-quality`) has been tuned so that it won't trigger on databases that have extracted normally. This will remove spurious messages of "Low Rust analysis quality" on the CodeQL status page. +* Fixed an inconsistency across languages where most have a `Customizations.qll` file for adding customizations, but not all did. diff --git a/rust/ql/src/codeql-pack.release.yml b/rust/ql/src/codeql-pack.release.yml index 76f7b27fb4e..74719634743 100644 --- a/rust/ql/src/codeql-pack.release.yml +++ b/rust/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.14 +lastReleaseVersion: 0.1.15 diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index 8057cbc0e68..54c742df0b5 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.15-dev +version: 0.1.16-dev groups: - rust - queries diff --git a/rust/ql/src/queries/security/CWE-798/HardcodedCryptographicValue.ql b/rust/ql/src/queries/security/CWE-798/HardcodedCryptographicValue.ql index cd0dca79119..f5a43c5419c 100644 --- a/rust/ql/src/queries/security/CWE-798/HardcodedCryptographicValue.ql +++ b/rust/ql/src/queries/security/CWE-798/HardcodedCryptographicValue.ql @@ -39,12 +39,6 @@ module HardcodedCryptographicValueConfig implements DataFlow::ConfigSig { // case like `[0, 0, 0, 0]`) isSource(node) } - - predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { - // flow out from reference content at sinks. - isSink(node) and - c.getAReadContent() instanceof ReferenceContent - } } module HardcodedCryptographicValueFlow = TaintTracking::Global; diff --git a/rust/ql/src/queries/telemetry/ExtractorInformation.ql b/rust/ql/src/queries/telemetry/ExtractorInformation.ql index d47dc04ace7..f61dfe515a9 100644 --- a/rust/ql/src/queries/telemetry/ExtractorInformation.ql +++ b/rust/ql/src/queries/telemetry/ExtractorInformation.ql @@ -8,7 +8,6 @@ import rust import DatabaseQuality -import RustAnalyzerComparison import codeql.rust.Diagnostics predicate fileCount(string key, int value) { @@ -42,20 +41,6 @@ predicate extractorDiagnostics(string key, int value) { ) } -predicate pathResolutionCompare(string key, int value) { - exists(string suffix | - PathResolutionCompare::summary(suffix, value) and - key = "Rust-analyzer path resolution comparison: " + suffix - ) -} - -predicate callGraphCompare(string key, int value) { - exists(string suffix | - CallGraphCompare::summary(suffix, value) and - key = "Rust-analyzer call graph comparison: " + suffix - ) -} - from string key, float value where ( @@ -69,9 +54,7 @@ where CallTargetStatsReport::percentageOfOk(key, value) or MacroCallTargetStatsReport::numberOfOk(key, value) or MacroCallTargetStatsReport::numberOfNotOk(key, value) or - MacroCallTargetStatsReport::percentageOfOk(key, value) or - pathResolutionCompare(key, value) or - callGraphCompare(key, value) + MacroCallTargetStatsReport::percentageOfOk(key, value) ) and /* Infinity */ value != 1.0 / 0.0 and diff --git a/rust/ql/src/queries/telemetry/RustAnalyzerComparison.qll b/rust/ql/src/queries/telemetry/RustAnalyzerComparison.qll deleted file mode 100644 index 21460e8ba9b..00000000000 --- a/rust/ql/src/queries/telemetry/RustAnalyzerComparison.qll +++ /dev/null @@ -1,167 +0,0 @@ -/** - * INTERNAL: Do not use. - * - * Provides functionality for comparing data from `rust-analyzer` with data computed - * in QL. - */ - -import rust - -pragma[nomagic] -private predicate resolvesAsItem(Resolvable r, Item i) { - none() - // r.getResolvedPath() = i.getExtendedCanonicalPath() and - // ( - // r.getResolvedCrateOrigin() = i.getCrateOrigin() - // or - // not r.hasResolvedCrateOrigin() and not i.hasCrateOrigin() - // ) -} - -private signature module ResolvableSig { - class Source { - string toString(); - - Location getLocation(); - } - - class Target { - string toString(); - - Location getLocation(); - } -} - -private signature module CompareSig { - predicate isResolvable(R::Source s); - - R::Target resolve(R::Source s); -} - -private module Compare RustAnalyzer, CompareSig Ql> { - private import R - - predicate same(Source s, Target t) { - t = RustAnalyzer::resolve(s) and - t = Ql::resolve(s) - } - - predicate sameCount(int c) { c = count(Source s | same(s, _)) } - - predicate diff(Source s, Target t1, Target t2) { - t1 = RustAnalyzer::resolve(s) and - t2 = Ql::resolve(s) and - t1 != t2 - } - - predicate diffCount(int c) { c = count(Source s | not same(s, _) and diff(s, _, _)) } - - predicate rustAnalyzerUnique(Source s) { - RustAnalyzer::isResolvable(s) and - not Ql::isResolvable(s) - } - - predicate rustAnalyzerUniqueCount(int c) { c = count(Source s | rustAnalyzerUnique(s)) } - - predicate qlUnique(Source s) { - not RustAnalyzer::isResolvable(s) and - Ql::isResolvable(s) - } - - predicate qlUniqueCount(int c) { c = count(Source s | qlUnique(s)) } - - // debug predicates to find missing targets in QL implementation - private module Debug { - predicate qlMissing(Source s, Target t) { - t = RustAnalyzer::resolve(s) and - not t = Ql::resolve(s) - } - - predicate qlMissingWithCount(Source s, Target t, int c) { - qlMissing(s, t) and - c = strictcount(Source s0 | qlMissing(s0, t)) - } - } - - predicate summary(string key, int value) { - key = "rust-analyzer unique" and rustAnalyzerUniqueCount(value) - or - key = "QL unique" and qlUniqueCount(value) - or - key = "same" and sameCount(value) - or - key = "different" and diffCount(value) - } -} - -private module PathResolution implements ResolvableSig { - class Source extends Resolvable { - Source() { not this instanceof MethodCallExpr } - } - - class Target = Item; -} - -private module RustAnalyzerPathResolution implements CompareSig { - predicate isResolvable(PathResolution::Source s) { - none() - //s.hasResolvedPath() - } - - Item resolve(PathResolution::Source s) { resolvesAsItem(s, result) } -} - -private module QlPathResolution implements CompareSig { - private import codeql.rust.internal.PathResolution - - private Path getPath(Resolvable r) { - result = r.(PathExpr).getPath() - or - result = r.(StructExpr).getPath() - or - result = r.(PathPat).getPath() - or - result = r.(StructPat).getPath() - or - result = r.(TupleStructPat).getPath() - } - - predicate isResolvable(PathResolution::Source s) { exists(resolve(s)) } - - Item resolve(PathResolution::Source s) { result = resolvePath(getPath(s)) } -} - -module PathResolutionCompare = - Compare; - -private module CallGraph implements ResolvableSig { - class Source = CallExprBase; - - class Target = Item; -} - -private module RustAnalyzerCallGraph implements CompareSig { - private import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl - - predicate isResolvable(CallExprBase c) { - CallExprBaseImpl::getCallResolvable(c).hasResolvedPath() - } - - Item resolve(CallExprBase c) { resolvesAsItem(CallExprBaseImpl::getCallResolvable(c), result) } -} - -private module QlCallGraph implements CompareSig { - private import codeql.rust.internal.PathResolution as PathResolution - - predicate isResolvable(CallExprBase c) { exists(resolve(c)) } - - Item resolve(CallExprBase c) { result = c.getStaticTarget() } -} - -module CallGraphCompare = Compare; - -predicate qlMissingCanonicalPath(Addressable a, string path) { - none() - // path = a.getExtendedCanonicalPath() and - // not exists(a.getCanonicalPath(_)) -} diff --git a/rust/ql/test/extractor-tests/canonical_path_disabled/Cargo.lock b/rust/ql/test/extractor-tests/canonical_path_disabled/Cargo.lock deleted file mode 100644 index b9856cfaf77..00000000000 --- a/rust/ql/test/extractor-tests/canonical_path_disabled/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/canonical_path_disabled/anonymous.rs b/rust/ql/test/extractor-tests/canonical_path_disabled/anonymous.rs deleted file mode 100644 index a5a6abd136c..00000000000 --- a/rust/ql/test/extractor-tests/canonical_path_disabled/anonymous.rs +++ /dev/null @@ -1,39 +0,0 @@ -// would prefer to write `include!("../canonical_paths/anonymous.rs");` -// but `include!` does not work with out-of-dir files - -use super::regular::Trait; - -fn canonicals() { - struct OtherStruct; - - trait OtherTrait { - fn g(&self); - } - - impl OtherTrait for OtherStruct { - fn g(&self) {} - } - - impl OtherTrait for crate::regular::Struct { - fn g(&self) {} - } - - impl crate::regular::Trait for OtherStruct { - fn f(&self) {} - } - - fn nested() { - struct OtherStruct; - } - - fn usage() { - let s = OtherStruct {}; - s.f(); - s.g(); - nested(); - } -} - -fn other() { - struct OtherStruct; -} diff --git a/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected deleted file mode 100644 index fa5b23518d4..00000000000 --- a/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected +++ /dev/null @@ -1,26 +0,0 @@ -| anonymous.rs:6:1:35:1 | fn canonicals | test::anonymous::canonicals | -| anonymous.rs:37:1:39:1 | fn other | test::anonymous::other | -| {EXTERNAL LOCATION} | fn trim | ::trim | -| lib.rs:1:1:1:18 | mod anonymous | test::anonymous | -| lib.rs:2:1:2:16 | mod regular | test::regular | -| regular.rs:4:1:5:18 | struct Struct | test::regular::Struct | -| regular.rs:5:12:5:17 | fn eq | ::eq | -| regular.rs:5:12:5:17 | impl ...::Eq for Struct::<...> { ... } | | -| regular.rs:5:12:5:17 | impl ...::PartialEq for Struct::<...> { ... } | | -| regular.rs:7:1:9:1 | trait Trait | test::regular::Trait | -| regular.rs:8:5:8:16 | fn f | <_ as test::regular::Trait>::f | -| regular.rs:11:1:13:1 | impl Trait for Struct { ... } | | -| regular.rs:12:5:12:18 | fn f | ::f | -| regular.rs:15:1:17:1 | impl Struct { ... } | | -| regular.rs:16:5:16:18 | fn g | ::g | -| regular.rs:19:1:21:1 | trait TraitWithBlanketImpl | test::regular::TraitWithBlanketImpl | -| regular.rs:20:5:20:16 | fn h | <_ as test::regular::TraitWithBlanketImpl>::h | -| regular.rs:27:1:27:12 | fn free | test::regular::free | -| regular.rs:29:1:35:1 | fn usage | test::regular::usage | -| regular.rs:37:1:41:1 | enum MyEnum | test::regular::MyEnum | -| regular.rs:38:5:38:12 | Variant1 | test::regular::MyEnum::Variant1 | -| regular.rs:39:5:39:19 | Variant2 | test::regular::MyEnum::Variant2 | -| regular.rs:40:5:40:25 | Variant3 | test::regular::MyEnum::Variant3 | -| regular.rs:43:1:49:1 | fn enum_qualified_usage | test::regular::enum_qualified_usage | -| regular.rs:51:1:58:1 | fn enum_unqualified_usage | test::regular::enum_unqualified_usage | -| regular.rs:60:1:66:1 | fn enum_match | test::regular::enum_match | diff --git a/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.qlref b/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.qlref deleted file mode 100644 index 9a5712b5135..00000000000 --- a/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.qlref +++ /dev/null @@ -1,2 +0,0 @@ -query: extractor-tests/canonical_path/canonical_paths.ql -postprocess: utils/test/ExternalLocationPostProcessing.ql \ No newline at end of file diff --git a/rust/ql/test/extractor-tests/canonical_path_disabled/options.yml b/rust/ql/test/extractor-tests/canonical_path_disabled/options.yml deleted file mode 100644 index baee4ba5afe..00000000000 --- a/rust/ql/test/extractor-tests/canonical_path_disabled/options.yml +++ /dev/null @@ -1 +0,0 @@ -skip_path_resolution: true diff --git a/rust/ql/test/extractor-tests/canonical_path_disabled/regular.rs b/rust/ql/test/extractor-tests/canonical_path_disabled/regular.rs deleted file mode 100644 index b958e0c02da..00000000000 --- a/rust/ql/test/extractor-tests/canonical_path_disabled/regular.rs +++ /dev/null @@ -1,66 +0,0 @@ -// would prefer to write `include!("../canonical_path/regular.rs"); -// but `include!` does not work with out-of-dir files - -#[derive(Eq, PartialEq)] -pub struct Struct; - -pub trait Trait { - fn f(&self); -} - -impl Trait for Struct { - fn f(&self) {} -} - -impl Struct { - fn g(&self) {} -} - -trait TraitWithBlanketImpl { - fn h(&self); -} - -impl TraitWithBlanketImpl for T { - fn h(&self) {} -} - -fn free() {} - -fn usage() { - let s = Struct {}; - s.f(); - s.g(); - s.h(); - free(); -} - -enum MyEnum { - Variant1, - Variant2(usize), - Variant3 { x: usize }, -} - -fn enum_qualified_usage() { - _ = Option::None::<()>; - _ = Option::Some(0); - _ = MyEnum::Variant1; - _ = MyEnum::Variant2(0); - _ = MyEnum::Variant3 { x: 1 }; -} - -fn enum_unqualified_usage() { - _ = None::<()>; - _ = Some(0); - use MyEnum::*; - _ = Variant1; - _ = Variant2(0); - _ = Variant3 { x: 1 }; -} - -fn enum_match(e: MyEnum) { - match e { - MyEnum::Variant1 => {} - MyEnum::Variant2(_) => {} - MyEnum::Variant3 { .. } => {} - } -} diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.expected b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.expected index d4cc7cbe67c..8deb774356c 100644 --- a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.expected +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.expected @@ -1,7 +1,5 @@ instances | gen_asm_expr.rs:6:9:7:59 | AsmExpr | -getExtendedCanonicalPath -getCrateOrigin getAttributeMacroExpansion getAsmPiece | gen_asm_expr.rs:6:9:7:59 | AsmExpr | 0 | gen_asm_expr.rs:7:39:7:47 | AsmOperandNamed | diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.ql b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.ql index bedbccdd1be..e802491c326 100644 --- a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.ql +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.ql @@ -4,14 +4,6 @@ import TestUtils query predicate instances(AsmExpr x) { toBeTested(x) and not x.isUnknown() } -query predicate getExtendedCanonicalPath(AsmExpr x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(AsmExpr x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - query predicate getAttributeMacroExpansion(AsmExpr x, MacroItems getAttributeMacroExpansion) { toBeTested(x) and not x.isUnknown() and diff --git a/rust/ql/test/extractor-tests/generated/Const/Const.expected b/rust/ql/test/extractor-tests/generated/Const/Const.expected index 64b20c95e26..cc1f282193f 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const.expected +++ b/rust/ql/test/extractor-tests/generated/Const/Const.expected @@ -1,7 +1,5 @@ instances | gen_const.rs:4:5:7:22 | Const | isConst: | yes | isDefault: | no | hasImplementation: | yes | -getExtendedCanonicalPath -getCrateOrigin getAttributeMacroExpansion getAttr getBody diff --git a/rust/ql/test/extractor-tests/generated/Const/Const.ql b/rust/ql/test/extractor-tests/generated/Const/Const.ql index ef88f980fc0..70420980d67 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const.ql +++ b/rust/ql/test/extractor-tests/generated/Const/Const.ql @@ -16,14 +16,6 @@ query predicate instances( 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 diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum.expected index 45154c93e48..de3c33c0a7c 100644 --- a/rust/ql/test/extractor-tests/generated/Enum/Enum.expected +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum.expected @@ -1,7 +1,5 @@ instances | gen_enum.rs:4:5:7:34 | enum E | -getExtendedCanonicalPath -getCrateOrigin getAttributeMacroExpansion getDeriveMacroExpansion getAttr diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum.ql index e5c4c12693e..0aa1bda8041 100644 --- a/rust/ql/test/extractor-tests/generated/Enum/Enum.ql +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum.ql @@ -4,14 +4,6 @@ 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) { toBeTested(x) and not x.isUnknown() and diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.expected b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.expected index 8e061f24a56..1083af0cbcf 100644 --- a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.expected +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.expected @@ -1,7 +1,5 @@ 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 | diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql index 2f07e5dfcae..9769e173593 100644 --- a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql @@ -9,14 +9,6 @@ query predicate instances(ExternBlock x, string isUnsafe__label, string isUnsafe 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 diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.expected index 6e1b1a84e1a..07b1cf161d2 100644 --- a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.expected +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.expected @@ -1,7 +1,5 @@ instances | gen_extern_crate.rs:4:5:7:23 | ExternCrate | -getExtendedCanonicalPath -getCrateOrigin getAttributeMacroExpansion getAttr getIdentifier diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql index b0c2c372896..2898d60f487 100644 --- a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql @@ -4,14 +4,6 @@ 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) { toBeTested(x) and not x.isUnknown() and diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.expected b/rust/ql/test/extractor-tests/generated/Function/Function.expected index db434cf918d..7a91b7aefe6 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.expected +++ b/rust/ql/test/extractor-tests/generated/Function/Function.expected @@ -1,12 +1,6 @@ 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 | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.ql b/rust/ql/test/extractor-tests/generated/Function/Function.ql index 4f76623cb20..c4e480d4d13 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.ql +++ b/rust/ql/test/extractor-tests/generated/Function/Function.ql @@ -23,14 +23,6 @@ query predicate instances( 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 diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl.expected index 2a47a4e20f6..ec5e5705529 100644 --- a/rust/ql/test/extractor-tests/generated/Impl/Impl.expected +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl.expected @@ -1,7 +1,5 @@ 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 | diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl.ql index c64bae752c3..1d73e09a1a7 100644 --- a/rust/ql/test/extractor-tests/generated/Impl/Impl.ql +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl.ql @@ -16,14 +16,6 @@ query predicate instances( 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 diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected index dc076731def..e73178f5a4f 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected @@ -1,8 +1,6 @@ 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 diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql index 48fddccf341..5081eca422e 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql @@ -4,14 +4,6 @@ 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) { toBeTested(x) and not x.isUnknown() and diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected index b9b6ddc10cd..ba510853f06 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected @@ -1,7 +1,5 @@ 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 | diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql index e85173597cb..18aece7ccb5 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql @@ -4,14 +4,6 @@ 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) { toBeTested(x) and not x.isUnknown() and diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.expected index 4bfb98220f2..cb40220291a 100644 --- a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.expected +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.expected @@ -1,7 +1,5 @@ instances | gen_macro_rules.rs:4:5:9:5 | MacroRules | -getExtendedCanonicalPath -getCrateOrigin getAttributeMacroExpansion getAttr getName diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql index ef051f77c9e..4dc862c73d7 100644 --- a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql @@ -4,14 +4,6 @@ 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) { toBeTested(x) and not x.isUnknown() and diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected index 61054a3841a..0eedcc70b5d 100644 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected @@ -8,8 +8,6 @@ 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 diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql index 73ddf8e7d2e..d1b6d5a1304 100644 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql @@ -16,14 +16,6 @@ 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() } diff --git a/rust/ql/test/extractor-tests/generated/Module/Module.expected b/rust/ql/test/extractor-tests/generated/Module/Module.expected index 9fcf65f5658..d0259df5ee8 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module.expected +++ b/rust/ql/test/extractor-tests/generated/Module/Module.expected @@ -2,14 +2,6 @@ instances | gen_module.rs:3:1:4:8 | mod foo | | gen_module.rs:5:1:7:1 | mod bar | | lib.rs:1:1:1:19 | 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:19 | 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:19 | mod gen_module | repo::test | getAttributeMacroExpansion getAttr getItemList diff --git a/rust/ql/test/extractor-tests/generated/Module/Module.ql b/rust/ql/test/extractor-tests/generated/Module/Module.ql index 48a141bbc1f..8bd4b7af92f 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module.ql +++ b/rust/ql/test/extractor-tests/generated/Module/Module.ql @@ -4,14 +4,6 @@ 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) { toBeTested(x) and not x.isUnknown() and diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected index 5a2df7ee29f..9a26eca5b66 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected @@ -5,8 +5,6 @@ instances | 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 | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql b/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql index 70bff600ace..87017b801ec 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql @@ -4,14 +4,6 @@ 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() } diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat.expected b/rust/ql/test/extractor-tests/generated/Path/PathPat.expected index 9bcce903558..d211f4c05d2 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathPat.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat.expected @@ -1,6 +1,4 @@ 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 | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat.ql b/rust/ql/test/extractor-tests/generated/Path/PathPat.ql index 9c5a874cabf..78138ed5d82 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathPat.ql +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat.ql @@ -4,14 +4,6 @@ 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() } diff --git a/rust/ql/test/extractor-tests/generated/Static/Static.expected b/rust/ql/test/extractor-tests/generated/Static/Static.expected index ee87d07a2c1..074c6600f8c 100644 --- a/rust/ql/test/extractor-tests/generated/Static/Static.expected +++ b/rust/ql/test/extractor-tests/generated/Static/Static.expected @@ -1,7 +1,5 @@ instances | gen_static.rs:4:5:7:23 | Static | isMut: | no | isStatic: | yes | isUnsafe: | no | -getExtendedCanonicalPath -getCrateOrigin getAttributeMacroExpansion getAttr getBody diff --git a/rust/ql/test/extractor-tests/generated/Static/Static.ql b/rust/ql/test/extractor-tests/generated/Static/Static.ql index 58ade5f044f..dfd2dd93918 100644 --- a/rust/ql/test/extractor-tests/generated/Static/Static.ql +++ b/rust/ql/test/extractor-tests/generated/Static/Static.ql @@ -16,14 +16,6 @@ query predicate instances( 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 diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct.expected index ad34c13babe..040a035c249 100644 --- a/rust/ql/test/extractor-tests/generated/Struct/Struct.expected +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct.expected @@ -1,7 +1,5 @@ instances | gen_struct.rs:4:5:8:5 | struct Point | -getExtendedCanonicalPath -getCrateOrigin getAttributeMacroExpansion getDeriveMacroExpansion getAttr diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct.ql index 185c1125f5c..25a980701c5 100644 --- a/rust/ql/test/extractor-tests/generated/Struct/Struct.ql +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct.ql @@ -4,14 +4,6 @@ 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) { toBeTested(x) and not x.isUnknown() and diff --git a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.expected b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.expected index 23e4e3e4917..988d3ec6299 100644 --- a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.expected +++ b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.expected @@ -3,8 +3,6 @@ instances | gen_struct_expr.rs:6:18:6:38 | Foo {...} | | gen_struct_expr.rs:7:13:7:30 | Foo {...} | | gen_struct_expr.rs:8:5:8:20 | 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 | diff --git a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.ql b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.ql index 4a71efa31ee..858a0812024 100644 --- a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.ql +++ b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.ql @@ -4,14 +4,6 @@ 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() } diff --git a/rust/ql/test/extractor-tests/generated/StructPat/StructPat.expected b/rust/ql/test/extractor-tests/generated/StructPat/StructPat.expected index 894e52fb196..5f1a7bed844 100644 --- a/rust/ql/test/extractor-tests/generated/StructPat/StructPat.expected +++ b/rust/ql/test/extractor-tests/generated/StructPat/StructPat.expected @@ -1,8 +1,6 @@ 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 | diff --git a/rust/ql/test/extractor-tests/generated/StructPat/StructPat.ql b/rust/ql/test/extractor-tests/generated/StructPat/StructPat.ql index 4aad29aede9..d117695d090 100644 --- a/rust/ql/test/extractor-tests/generated/StructPat/StructPat.ql +++ b/rust/ql/test/extractor-tests/generated/StructPat/StructPat.ql @@ -4,14 +4,6 @@ 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() } diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait.expected index ff60871f40b..e0f91737d5e 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait.expected @@ -1,12 +1,6 @@ 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 | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait.ql index 35725fcd526..20e9b7f1e24 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait.ql +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait.ql @@ -13,14 +13,6 @@ query predicate instances( 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 diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.expected index f8fc1628036..5daf06da1c3 100644 --- a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.expected +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.expected @@ -1,7 +1,5 @@ instances | gen_trait_alias.rs:7:5:7:26 | TraitAlias | -getExtendedCanonicalPath -getCrateOrigin getAttributeMacroExpansion getAttr getGenericParamList diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql index 2d65541f50c..c0fee75678a 100644 --- a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql @@ -4,14 +4,6 @@ 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) { toBeTested(x) and not x.isUnknown() and diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected index c5ce2e2640a..dcefb6cb7a4 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected @@ -2,8 +2,6 @@ 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 | diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql index 408c892ea3c..e6bde1d82aa 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql @@ -4,14 +4,6 @@ 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() } diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected index b9b58485752..e3b0620ddcd 100644 --- a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected @@ -1,8 +1,6 @@ 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 diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql index 014bd119d33..925be1f44a3 100644 --- a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql @@ -9,14 +9,6 @@ query predicate instances(TypeAlias x, string isDefault__label, string isDefault 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 diff --git a/rust/ql/test/extractor-tests/generated/Union/Union.expected b/rust/ql/test/extractor-tests/generated/Union/Union.expected index 110643aeac9..b83a39b708d 100644 --- a/rust/ql/test/extractor-tests/generated/Union/Union.expected +++ b/rust/ql/test/extractor-tests/generated/Union/Union.expected @@ -1,7 +1,5 @@ instances | gen_union.rs:4:5:7:32 | union U | -getExtendedCanonicalPath -getCrateOrigin getAttributeMacroExpansion getDeriveMacroExpansion getAttr diff --git a/rust/ql/test/extractor-tests/generated/Union/Union.ql b/rust/ql/test/extractor-tests/generated/Union/Union.ql index 147a8fca09e..9c555d1e590 100644 --- a/rust/ql/test/extractor-tests/generated/Union/Union.ql +++ b/rust/ql/test/extractor-tests/generated/Union/Union.ql @@ -4,14 +4,6 @@ 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) { toBeTested(x) and not x.isUnknown() and diff --git a/rust/ql/test/extractor-tests/generated/Use/Use.expected b/rust/ql/test/extractor-tests/generated/Use/Use.expected index 23057c691dc..079cb9e8aa3 100644 --- a/rust/ql/test/extractor-tests/generated/Use/Use.expected +++ b/rust/ql/test/extractor-tests/generated/Use/Use.expected @@ -1,7 +1,5 @@ instances | gen_use.rs:4:5:5:34 | use ...::HashMap | -getExtendedCanonicalPath -getCrateOrigin getAttributeMacroExpansion getAttr getUseTree diff --git a/rust/ql/test/extractor-tests/generated/Use/Use.ql b/rust/ql/test/extractor-tests/generated/Use/Use.ql index bfce3bcc89c..e6940ef9e24 100644 --- a/rust/ql/test/extractor-tests/generated/Use/Use.ql +++ b/rust/ql/test/extractor-tests/generated/Use/Use.ql @@ -4,14 +4,6 @@ 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) { toBeTested(x) and not x.isUnknown() and diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant.expected index ad970afe530..4c67e1684b0 100644 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant.expected +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant.expected @@ -2,8 +2,6 @@ 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 diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant.ql index 088f610637a..61c14267116 100644 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant.ql +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant.ql @@ -4,14 +4,6 @@ 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) } diff --git a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected index aab630af29f..11f670aabff 100644 --- a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected +++ b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected @@ -98,10 +98,10 @@ | 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:13:334:55 | ...::block_on(...) | {EXTERNAL LOCATION} | 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:5:337:62 | ...::block_on(...) | {EXTERNAL LOCATION} | 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 | diff --git a/rust/ql/test/library-tests/dataflow/global/viableCallable.qlref b/rust/ql/test/library-tests/dataflow/global/viableCallable.qlref new file mode 100644 index 00000000000..29d8fc7b11a --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/global/viableCallable.qlref @@ -0,0 +1,2 @@ +query: viableCallable.ql +postprocess: utils/test/ExternalLocationPostProcessing.ql \ No newline at end of file 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 ca419a552fa..8448e7cd99a 100644 --- a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected @@ -11,11 +11,8 @@ multipleCallTargets | test.rs:179:30:179:68 | ...::_print(...) | | test.rs:188:26:188:105 | ...::_print(...) | | test.rs:229:22:229:72 | ... .read_to_string(...) | -| test.rs:513:22:513:50 | file.read_to_end(...) | -| test.rs:519:22:519:53 | file.read_to_string(...) | | test.rs:697:18:697:38 | ...::_print(...) | | test.rs:702:18:702:45 | ...::_print(...) | -| test.rs:706:25:706:49 | address.to_socket_addrs() | | test.rs:720:38:720:42 | ...::_print(...) | | test.rs:724:38:724:54 | ...::_print(...) | | test.rs:729:38:729:51 | ...::_print(...) | @@ -76,12 +73,6 @@ multipleCallTargets | test.rs:977:14:977:29 | ...::_print(...) | | test.rs:979:27:979:36 | ...::_print(...) | | test.rs:980:28:980:41 | ...::_print(...) | -| test_futures_io.rs:35:26:35:63 | pinned.poll_read(...) | -| test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) | -| test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) | -| test_futures_io.rs:93:26:93:63 | pinned.poll_read(...) | -| test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) | -| test_futures_io.rs:145:26:145:49 | ...::with_capacity(...) | | web_frameworks.rs:13:14:13:22 | a.as_str() | | web_frameworks.rs:13:14:13:23 | a.as_str() | | web_frameworks.rs:14:14:14:24 | a.as_bytes() | diff --git a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected index a33303c2bc2..be270de025f 100644 --- a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected @@ -1,10 +1,11 @@ models -| 1 | Summary: ::from; Argument[0]; ReturnValue; value | -| 2 | Summary: ::add; Argument[self]; ReturnValue; value | -| 3 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 4 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 5 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | -| 6 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 1 | Summary: ::from; Argument[0].Reference; ReturnValue; value | +| 2 | Summary: ::from; Argument[0]; ReturnValue; value | +| 3 | Summary: ::add; Argument[self]; ReturnValue; value | +| 4 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 5 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 6 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | +| 7 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | edges | main.rs:26:9:26:9 | s | main.rs:27:19:27:25 | s[...] | provenance | | | main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | s | provenance | | @@ -15,46 +16,47 @@ edges | main.rs:32:9:32:10 | s1 | main.rs:35:14:35:15 | s1 | provenance | | | main.rs:32:14:32:23 | source(...) | main.rs:32:9:32:10 | s1 | provenance | | | main.rs:35:9:35:10 | s4 | main.rs:38:10:38:11 | s4 | provenance | | -| main.rs:35:14:35:15 | s1 | main.rs:35:14:35:20 | ... + ... | provenance | MaD:2 | +| main.rs:35:14:35:15 | s1 | main.rs:35:14:35:20 | ... + ... | provenance | MaD:3 | | main.rs:35:14:35:20 | ... + ... | main.rs:35:9:35:10 | s4 | provenance | | | main.rs:51:9:51:10 | s1 | main.rs:52:27:52:28 | s1 | provenance | | | main.rs:51:14:51:29 | source_slice(...) | main.rs:51:9:51:10 | s1 | provenance | | | main.rs:52:9:52:10 | s2 | main.rs:53:10:53:11 | s2 | provenance | | | main.rs:52:14:52:29 | ...::from(...) | main.rs:52:9:52:10 | s2 | provenance | | | main.rs:52:27:52:28 | s1 | main.rs:52:14:52:29 | ...::from(...) | provenance | MaD:1 | +| main.rs:52:27:52:28 | s1 | main.rs:52:14:52:29 | ...::from(...) | provenance | MaD:2 | | main.rs:63:9:63:9 | s | main.rs:64:16:64:16 | s | provenance | | -| main.rs:63:9:63:9 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:3 | | main.rs:63:9:63:9 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:4 | +| main.rs:63:9:63:9 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:5 | | main.rs:63:13:63:22 | source(...) | main.rs:63:9:63:9 | s | provenance | | -| main.rs:64:16:64:16 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:3 | | main.rs:64:16:64:16 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:4 | +| main.rs:64:16:64:16 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:5 | | main.rs:68:9:68:9 | s | main.rs:70:34:70:61 | MacroExpr | provenance | | | main.rs:68:9:68:9 | s | main.rs:73:34:73:59 | MacroExpr | provenance | | | main.rs:68:13:68:22 | source(...) | main.rs:68:9:68:9 | s | provenance | | | main.rs:70:9:70:18 | formatted1 | main.rs:71:10:71:19 | formatted1 | provenance | | | main.rs:70:22:70:62 | ...::format(...) | main.rs:70:9:70:18 | formatted1 | provenance | | -| main.rs:70:34:70:61 | MacroExpr | main.rs:70:22:70:62 | ...::format(...) | provenance | MaD:5 | +| main.rs:70:34:70:61 | MacroExpr | main.rs:70:22:70:62 | ...::format(...) | provenance | MaD:6 | | main.rs:73:9:73:18 | formatted2 | main.rs:74:10:74:19 | formatted2 | provenance | | | main.rs:73:22:73:60 | ...::format(...) | main.rs:73:9:73:18 | formatted2 | provenance | | -| main.rs:73:34:73:59 | MacroExpr | main.rs:73:22:73:60 | ...::format(...) | provenance | MaD:5 | +| main.rs:73:34:73:59 | MacroExpr | main.rs:73:22:73:60 | ...::format(...) | provenance | MaD:6 | | main.rs:76:9:76:13 | width | main.rs:77:34:77:74 | MacroExpr | provenance | | | main.rs:76:17:76:32 | source_usize(...) | main.rs:76:9:76:13 | width | provenance | | | main.rs:77:9:77:18 | formatted3 | main.rs:78:10:78:19 | formatted3 | provenance | | | main.rs:77:22:77:75 | ...::format(...) | main.rs:77:9:77:18 | formatted3 | provenance | | -| main.rs:77:34:77:74 | MacroExpr | main.rs:77:22:77:75 | ...::format(...) | provenance | MaD:5 | +| main.rs:77:34:77:74 | MacroExpr | main.rs:77:22:77:75 | ...::format(...) | provenance | MaD:6 | | main.rs:82:9:82:10 | s1 | main.rs:86:18:86:25 | MacroExpr | provenance | | | main.rs:82:9:82:10 | s1 | main.rs:87:18:87:32 | MacroExpr | provenance | | | main.rs:82:14:82:23 | source(...) | main.rs:82:9:82:10 | s1 | provenance | | | main.rs:86:10:86:16 | res | main.rs:86:18:86:25 | { ... } | provenance | | | main.rs:86:18:86:25 | ...::format(...) | main.rs:86:10:86:16 | res | provenance | | | main.rs:86:18:86:25 | ...::must_use(...) | main.rs:86:10:86:26 | MacroExpr | provenance | | -| main.rs:86:18:86:25 | MacroExpr | main.rs:86:18:86:25 | ...::format(...) | provenance | MaD:5 | -| main.rs:86:18:86:25 | { ... } | main.rs:86:18:86:25 | ...::must_use(...) | provenance | MaD:6 | +| main.rs:86:18:86:25 | MacroExpr | main.rs:86:18:86:25 | ...::format(...) | provenance | MaD:6 | +| main.rs:86:18:86:25 | { ... } | main.rs:86:18:86:25 | ...::must_use(...) | provenance | MaD:7 | | main.rs:87:10:87:16 | res | main.rs:87:18:87:32 | { ... } | provenance | | | main.rs:87:18:87:32 | ...::format(...) | main.rs:87:10:87:16 | res | provenance | | | main.rs:87:18:87:32 | ...::must_use(...) | main.rs:87:10:87:33 | MacroExpr | provenance | | -| main.rs:87:18:87:32 | MacroExpr | main.rs:87:18:87:32 | ...::format(...) | provenance | MaD:5 | -| main.rs:87:18:87:32 | { ... } | main.rs:87:18:87:32 | ...::must_use(...) | provenance | MaD:6 | +| main.rs:87:18:87:32 | MacroExpr | main.rs:87:18:87:32 | ...::format(...) | provenance | MaD:6 | +| main.rs:87:18:87:32 | { ... } | main.rs:87:18:87:32 | ...::must_use(...) | provenance | MaD:7 | nodes | main.rs:26:9:26:9 | s | semmle.label | s | | main.rs:26:13:26:22 | source(...) | semmle.label | source(...) | diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index f58d82826d6..1de91a60fe4 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -460,6 +460,58 @@ mod m16 { } // I83 } +mod trait_visibility { + mod m { + pub trait Foo { + fn a_method(&self); // Foo::a_method + } // Foo + + pub trait Bar { + fn a_method(&self); // Bar::a_method + } // Bar + + pub struct X; + #[rustfmt::skip] + impl Foo for X { // $ item=Foo item=X + fn a_method(&self) { + println!("foo!"); + } // X_Foo::a_method + } + #[rustfmt::skip] + impl Bar for X { // $ item=Bar item=X + fn a_method(&self) { + println!("bar!"); + } // X_Bar::a_method + } + } + + use m::X; // $ item=X + + pub fn f() { + let x = X; // $ item=X + { + // Only the `Foo` trait is visible + use m::Foo; // $ item=Foo + X::a_method(&x); // $ item=X_Foo::a_method + } + { + // Only the `Bar` trait is visible + use m::Bar; // $ item=Bar + X::a_method(&x); // $ item=X_Bar::a_method + } + { + // Only the `Bar` trait is visible (but unnameable) + use m::Bar as _; // $ item=Bar + X::a_method(&x); // $ item=X_Bar::a_method + } + { + // The `Bar` trait is not visible, but we can refer to its method + // with a full path. + m::Bar::a_method(&x); // $ item=Bar::a_method + } + } // trait_visibility::f +} + mod m17 { trait MyTrait { fn f(&self); // I1 @@ -730,6 +782,7 @@ fn main() { m11::f(); // $ item=I63 m15::f(); // $ item=I75 m16::f(); // $ item=I83 + trait_visibility::f(); // $ item=trait_visibility::f m17::f(); // $ item=I99 nested6::f(); // $ item=I116 nested8::f(); // $ item=I119 diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index cc4d0330891..a51816a5228 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -19,16 +19,18 @@ mod | main.rs:287:5:295:5 | mod m14 | | main.rs:298:1:367:1 | mod m15 | | main.rs:369:1:461:1 | mod m16 | -| main.rs:463:1:493:1 | mod m17 | -| main.rs:495:1:513:1 | mod m18 | -| main.rs:500:5:512:5 | mod m19 | -| main.rs:505:9:511:9 | mod m20 | -| main.rs:515:1:540:1 | mod m21 | -| main.rs:516:5:522:5 | mod m22 | -| main.rs:524:5:539:5 | mod m33 | -| main.rs:542:1:567:1 | mod m23 | -| main.rs:569:1:637:1 | mod m24 | -| main.rs:654:1:706:1 | mod associated_types | +| main.rs:463:1:513:1 | mod trait_visibility | +| main.rs:464:5:486:5 | mod m | +| main.rs:515:1:545:1 | mod m17 | +| main.rs:547:1:565:1 | mod m18 | +| main.rs:552:5:564:5 | mod m19 | +| main.rs:557:9:563:9 | mod m20 | +| main.rs:567:1:592:1 | mod m21 | +| main.rs:568:5:574:5 | mod m22 | +| main.rs:576:5:591:5 | mod m33 | +| main.rs:594:1:619:1 | mod m23 | +| main.rs:621:1:689:1 | mod m24 | +| main.rs:706:1:758:1 | mod associated_types | | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:12:1:12:12 | mod my3 | | my2/mod.rs:14:1:15:10 | mod mymod | @@ -62,7 +64,7 @@ resolvePath | main.rs:30:17:30:21 | super | main.rs:18:5:36:5 | mod m2 | | main.rs:30:17:30:24 | ...::f | main.rs:19:9:21:9 | fn f | | main.rs:33:17:33:17 | f | main.rs:19:9:21:9 | fn f | -| main.rs:40:9:40:13 | super | main.rs:1:1:746:2 | SourceFile | +| main.rs:40:9:40:13 | super | main.rs:1:1:799:2 | SourceFile | | main.rs:40:9:40:17 | ...::m1 | main.rs:13:1:37:1 | mod m1 | | main.rs:40:9:40:21 | ...::m2 | main.rs:18:5:36:5 | mod m2 | | main.rs:40:9:40:24 | ...::g | main.rs:23:9:27:9 | fn g | @@ -74,7 +76,7 @@ resolvePath | main.rs:61:17:61:19 | Foo | main.rs:59:9:59:21 | struct Foo | | main.rs:64:13:64:15 | Foo | main.rs:53:5:53:17 | struct Foo | | main.rs:66:5:66:5 | f | main.rs:55:5:62:5 | fn f | -| main.rs:68:5:68:8 | self | main.rs:1:1:746:2 | SourceFile | +| main.rs:68:5:68:8 | self | main.rs:1:1:799:2 | SourceFile | | main.rs:68:5:68:11 | ...::i | main.rs:71:1:83:1 | fn i | | main.rs:74:13:74:15 | Foo | main.rs:48:1:48:13 | struct Foo | | main.rs:78:16:78:18 | i32 | {EXTERNAL LOCATION} | struct i32 | @@ -89,7 +91,7 @@ resolvePath | main.rs:87:57:87:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g | | main.rs:87:80:87:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | | main.rs:100:5:100:22 | f_defined_in_macro | main.rs:99:18:99:42 | fn f_defined_in_macro | -| main.rs:117:13:117:17 | super | main.rs:1:1:746:2 | SourceFile | +| main.rs:117:13:117:17 | super | main.rs:1:1:799:2 | SourceFile | | main.rs:117:13:117:21 | ...::m5 | main.rs:103:1:107:1 | mod m5 | | main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f | | main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f | @@ -223,169 +225,193 @@ resolvePath | main.rs:455:10:455:10 | S | main.rs:403:5:403:13 | struct S | | main.rs:456:14:458:11 | Trait1::<...> | main.rs:370:5:386:5 | trait Trait1 | | main.rs:457:13:457:13 | S | main.rs:403:5:403:13 | struct S | -| main.rs:471:10:471:16 | MyTrait | main.rs:464:5:466:5 | trait MyTrait | -| main.rs:472:9:472:9 | S | main.rs:468:5:468:13 | struct S | -| main.rs:480:7:480:13 | MyTrait | main.rs:464:5:466:5 | trait MyTrait | -| main.rs:481:10:481:10 | T | main.rs:479:10:479:10 | T | -| main.rs:483:9:483:9 | T | main.rs:479:10:479:10 | T | -| main.rs:483:9:483:12 | ...::f | main.rs:465:9:465:20 | fn f | -| main.rs:484:9:484:15 | MyTrait | main.rs:464:5:466:5 | trait MyTrait | -| main.rs:484:9:484:18 | ...::f | main.rs:465:9:465:20 | fn f | -| main.rs:489:9:489:9 | g | main.rs:478:5:485:5 | fn g | -| main.rs:490:11:490:11 | S | main.rs:468:5:468:13 | struct S | -| main.rs:508:17:508:21 | super | main.rs:500:5:512:5 | mod m19 | -| main.rs:508:17:508:24 | ...::f | main.rs:501:9:503:9 | fn f | -| main.rs:509:17:509:21 | super | main.rs:500:5:512:5 | mod m19 | -| main.rs:509:17:509:28 | ...::super | main.rs:495:1:513:1 | mod m18 | -| main.rs:509:17:509:31 | ...::f | main.rs:496:5:498:5 | fn f | -| main.rs:526:13:526:17 | super | main.rs:515:1:540:1 | mod m21 | -| main.rs:526:13:526:22 | ...::m22 | main.rs:516:5:522:5 | mod m22 | -| main.rs:526:13:526:30 | ...::MyEnum | main.rs:517:9:519:9 | enum MyEnum | -| main.rs:527:13:527:16 | self | main.rs:517:9:519:9 | enum MyEnum | -| main.rs:531:13:531:17 | super | main.rs:515:1:540:1 | mod m21 | -| main.rs:531:13:531:22 | ...::m22 | main.rs:516:5:522:5 | mod m22 | -| main.rs:531:13:531:32 | ...::MyStruct | main.rs:521:9:521:28 | struct MyStruct | -| main.rs:532:13:532:16 | self | main.rs:521:9:521:28 | struct MyStruct | -| main.rs:536:21:536:26 | MyEnum | main.rs:517:9:519:9 | enum MyEnum | -| main.rs:536:21:536:29 | ...::A | main.rs:518:13:518:13 | A | -| main.rs:537:21:537:28 | MyStruct | main.rs:521:9:521:28 | struct MyStruct | -| main.rs:553:10:555:5 | Trait1::<...> | main.rs:543:5:548:5 | trait Trait1 | -| main.rs:554:7:554:10 | Self | main.rs:550:5:550:13 | struct S | -| main.rs:556:11:556:11 | S | main.rs:550:5:550:13 | struct S | -| main.rs:564:17:564:17 | S | main.rs:550:5:550:13 | struct S | -| main.rs:580:15:580:15 | T | main.rs:579:26:579:26 | T | -| main.rs:585:9:585:24 | GenericStruct::<...> | main.rs:578:5:581:5 | struct GenericStruct | -| main.rs:585:23:585:23 | T | main.rs:584:10:584:10 | T | -| main.rs:587:9:587:9 | T | main.rs:584:10:584:10 | T | -| main.rs:587:12:587:17 | TraitA | main.rs:570:5:572:5 | trait TraitA | -| main.rs:596:9:596:24 | GenericStruct::<...> | main.rs:578:5:581:5 | struct GenericStruct | -| main.rs:596:23:596:23 | T | main.rs:595:10:595:10 | T | -| main.rs:598:9:598:9 | T | main.rs:595:10:595:10 | T | -| main.rs:598:12:598:17 | TraitB | main.rs:574:5:576:5 | trait TraitB | -| main.rs:599:9:599:9 | T | main.rs:595:10:595:10 | T | -| main.rs:599:12:599:17 | TraitA | main.rs:570:5:572:5 | trait TraitA | -| main.rs:610:10:610:15 | TraitA | main.rs:570:5:572:5 | trait TraitA | -| main.rs:610:21:610:31 | Implementor | main.rs:607:5:607:23 | struct Implementor | -| main.rs:617:10:617:15 | TraitB | main.rs:574:5:576:5 | trait TraitB | -| main.rs:617:21:617:31 | Implementor | main.rs:607:5:607:23 | struct Implementor | -| main.rs:625:24:625:34 | Implementor | main.rs:607:5:607:23 | struct Implementor | -| main.rs:626:23:626:35 | GenericStruct | main.rs:578:5:581:5 | struct GenericStruct | -| main.rs:632:9:632:36 | GenericStruct::<...> | main.rs:578:5:581:5 | struct GenericStruct | -| main.rs:632:9:632:50 | ...::call_trait_a | main.rs:589:9:591:9 | fn call_trait_a | -| main.rs:632:25:632:35 | Implementor | main.rs:607:5:607:23 | struct Implementor | -| main.rs:635:9:635:36 | GenericStruct::<...> | main.rs:578:5:581:5 | struct GenericStruct | -| main.rs:635:9:635:47 | ...::call_both | main.rs:601:9:604:9 | fn call_both | -| main.rs:635:25:635:35 | Implementor | main.rs:607:5:607:23 | struct Implementor | -| main.rs:641:3:641:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:641:3:641:24 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | -| main.rs:645:6:645:12 | AStruct | main.rs:644:1:644:17 | struct AStruct | -| main.rs:647:7:647:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:647:7:647:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | -| main.rs:650:7:650:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:650:7:650:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | -| main.rs:655:9:655:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:655:9:655:19 | ...::marker | {EXTERNAL LOCATION} | mod marker | -| main.rs:655:9:655:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:656:9:656:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:656:9:656:19 | ...::result | {EXTERNAL LOCATION} | mod result | -| main.rs:656:9:656:27 | ...::Result | {EXTERNAL LOCATION} | enum Result | -| main.rs:664:19:664:22 | Self | main.rs:658:5:666:5 | trait Reduce | -| main.rs:664:19:664:29 | ...::Input | main.rs:659:9:659:19 | type Input | -| main.rs:665:14:665:46 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:665:21:665:24 | Self | main.rs:658:5:666:5 | trait Reduce | -| main.rs:665:21:665:32 | ...::Output | main.rs:660:21:661:20 | type Output | -| main.rs:665:35:665:38 | Self | main.rs:658:5:666:5 | trait Reduce | -| main.rs:665:35:665:45 | ...::Error | main.rs:659:21:660:19 | type Error | -| main.rs:669:17:669:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:669:29:669:33 | Input | main.rs:668:19:668:23 | Input | -| main.rs:670:17:670:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:670:29:670:33 | Error | main.rs:668:26:668:30 | Error | -| main.rs:677:11:677:16 | Reduce | main.rs:658:5:666:5 | trait Reduce | -| main.rs:678:13:681:9 | MyImpl::<...> | main.rs:668:5:671:5 | struct MyImpl | -| main.rs:679:13:679:17 | Input | main.rs:675:13:675:17 | Input | -| main.rs:680:13:680:17 | Error | main.rs:676:13:676:17 | Error | -| main.rs:683:22:686:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:684:13:684:17 | Input | main.rs:675:13:675:17 | Input | -| main.rs:685:13:685:16 | Self | main.rs:673:5:705:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:685:13:685:23 | ...::Error | main.rs:687:11:691:9 | type Error | -| main.rs:688:22:690:9 | Option::<...> | {EXTERNAL LOCATION} | enum Option | -| main.rs:689:11:689:15 | Error | main.rs:676:13:676:17 | Error | -| main.rs:693:13:693:17 | Input | main.rs:675:13:675:17 | Input | -| main.rs:698:19:698:22 | Self | main.rs:673:5:705:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:698:19:698:29 | ...::Input | main.rs:683:9:687:9 | type Input | -| main.rs:699:14:702:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:700:13:700:16 | Self | main.rs:673:5:705:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:700:13:700:24 | ...::Output | main.rs:691:11:694:9 | type Output | -| main.rs:701:13:701:16 | Self | main.rs:673:5:705:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:701:13:701:23 | ...::Error | main.rs:687:11:691:9 | type Error | -| main.rs:708:5:708:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:708:11:708:14 | self | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:710:15:710:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:710:15:710:25 | ...::string | {EXTERNAL LOCATION} | mod string | -| main.rs:710:15:710:33 | ...::String | {EXTERNAL LOCATION} | struct String | -| main.rs:713:5:713:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:713:5:713:14 | ...::nested | my.rs:1:1:1:15 | mod nested | -| main.rs:713:5:713:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | -| main.rs:713:5:713:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | -| main.rs:713:5:713:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | -| main.rs:714:5:714:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:714:5:714:9 | ...::f | my.rs:5:1:7:1 | fn f | -| main.rs:715:5:715:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:715:5:715:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | -| main.rs:715:5:715:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:715:5:715:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:716:5:716:5 | f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:717:5:717:5 | g | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:718:5:718:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:718:5:718:12 | ...::h | main.rs:50:1:69:1 | fn h | -| main.rs:719:5:719:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:719:5:719:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:719:5:719:13 | ...::g | main.rs:23:9:27:9 | fn g | -| main.rs:720:5:720:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:720:5:720:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:720:5:720:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | -| main.rs:720:5:720:17 | ...::h | main.rs:30:27:34:13 | fn h | -| main.rs:721:5:721:6 | m4 | main.rs:39:1:46:1 | mod m4 | -| main.rs:721:5:721:9 | ...::i | main.rs:42:5:45:5 | fn i | -| main.rs:722:5:722:5 | h | main.rs:50:1:69:1 | fn h | -| main.rs:723:5:723:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:724:5:724:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:725:5:725:5 | j | main.rs:97:1:101:1 | fn j | -| main.rs:726:5:726:6 | m6 | main.rs:109:1:120:1 | mod m6 | -| main.rs:726:5:726:9 | ...::g | main.rs:114:5:119:5 | fn g | -| main.rs:727:5:727:6 | m7 | main.rs:122:1:141:1 | mod m7 | -| main.rs:727:5:727:9 | ...::f | main.rs:133:5:140:5 | fn f | -| main.rs:728:5:728:6 | m8 | main.rs:143:1:197:1 | mod m8 | -| main.rs:728:5:728:9 | ...::g | main.rs:181:5:196:5 | fn g | -| main.rs:729:5:729:6 | m9 | main.rs:199:1:207:1 | mod m9 | -| main.rs:729:5:729:9 | ...::f | main.rs:202:5:206:5 | fn f | -| main.rs:730:5:730:7 | m11 | main.rs:230:1:267:1 | mod m11 | -| main.rs:730:5:730:10 | ...::f | main.rs:235:5:238:5 | fn f | -| main.rs:731:5:731:7 | m15 | main.rs:298:1:367:1 | mod m15 | -| main.rs:731:5:731:10 | ...::f | main.rs:354:5:366:5 | fn f | -| main.rs:732:5:732:7 | m16 | main.rs:369:1:461:1 | mod m16 | -| main.rs:732:5:732:10 | ...::f | main.rs:436:5:460:5 | fn f | -| main.rs:733:5:733:7 | m17 | main.rs:463:1:493:1 | mod m17 | -| main.rs:733:5:733:10 | ...::f | main.rs:487:5:492:5 | fn f | -| main.rs:734:5:734:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | -| main.rs:734:5:734:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | -| main.rs:735:5:735:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | -| main.rs:735:5:735:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | -| main.rs:736:5:736:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | -| main.rs:736:5:736:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | -| main.rs:737:5:737:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | -| main.rs:738:5:738:7 | m18 | main.rs:495:1:513:1 | mod m18 | -| main.rs:738:5:738:12 | ...::m19 | main.rs:500:5:512:5 | mod m19 | -| main.rs:738:5:738:17 | ...::m20 | main.rs:505:9:511:9 | mod m20 | -| main.rs:738:5:738:20 | ...::g | main.rs:506:13:510:13 | fn g | -| main.rs:739:5:739:7 | m23 | main.rs:542:1:567:1 | mod m23 | -| main.rs:739:5:739:10 | ...::f | main.rs:562:5:566:5 | fn f | -| main.rs:740:5:740:7 | m24 | main.rs:569:1:637:1 | mod m24 | -| main.rs:740:5:740:10 | ...::f | main.rs:623:5:636:5 | fn f | -| main.rs:741:5:741:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:741:5:741:11 | ...::h | main.rs:50:1:69:1 | fn h | -| main.rs:743:5:743:11 | AStruct | main.rs:644:1:644:17 | struct AStruct | -| main.rs:744:5:744:11 | AStruct | main.rs:644:1:644:17 | struct AStruct | +| main.rs:475:14:475:16 | Foo | main.rs:465:9:467:9 | trait Foo | +| main.rs:475:22:475:22 | X | main.rs:473:9:473:21 | struct X | +| main.rs:481:14:481:16 | Bar | main.rs:469:9:471:9 | trait Bar | +| main.rs:481:22:481:22 | X | main.rs:473:9:473:21 | struct X | +| main.rs:488:9:488:9 | m | main.rs:464:5:486:5 | mod m | +| main.rs:488:9:488:12 | ...::X | main.rs:473:9:473:21 | struct X | +| main.rs:491:17:491:17 | X | main.rs:473:9:473:21 | struct X | +| main.rs:494:17:494:17 | m | main.rs:464:5:486:5 | mod m | +| main.rs:494:17:494:22 | ...::Foo | main.rs:465:9:467:9 | trait Foo | +| main.rs:495:13:495:13 | X | main.rs:473:9:473:21 | struct X | +| main.rs:495:13:495:23 | ...::a_method | main.rs:475:26:478:13 | fn a_method | +| main.rs:499:17:499:17 | m | main.rs:464:5:486:5 | mod m | +| main.rs:499:17:499:22 | ...::Bar | main.rs:469:9:471:9 | trait Bar | +| main.rs:500:13:500:13 | X | main.rs:473:9:473:21 | struct X | +| main.rs:500:13:500:23 | ...::a_method | main.rs:481:26:484:13 | fn a_method | +| main.rs:504:17:504:17 | m | main.rs:464:5:486:5 | mod m | +| main.rs:504:17:504:22 | ...::Bar | main.rs:469:9:471:9 | trait Bar | +| main.rs:505:13:505:13 | X | main.rs:473:9:473:21 | struct X | +| main.rs:505:13:505:23 | ...::a_method | main.rs:481:26:484:13 | fn a_method | +| main.rs:510:13:510:13 | m | main.rs:464:5:486:5 | mod m | +| main.rs:510:13:510:18 | ...::Bar | main.rs:469:9:471:9 | trait Bar | +| main.rs:510:13:510:28 | ...::a_method | main.rs:470:13:470:31 | fn a_method | +| main.rs:523:10:523:16 | MyTrait | main.rs:516:5:518:5 | trait MyTrait | +| main.rs:524:9:524:9 | S | main.rs:520:5:520:13 | struct S | +| main.rs:532:7:532:13 | MyTrait | main.rs:516:5:518:5 | trait MyTrait | +| main.rs:533:10:533:10 | T | main.rs:531:10:531:10 | T | +| main.rs:535:9:535:9 | T | main.rs:531:10:531:10 | T | +| main.rs:535:9:535:12 | ...::f | main.rs:517:9:517:20 | fn f | +| main.rs:536:9:536:15 | MyTrait | main.rs:516:5:518:5 | trait MyTrait | +| main.rs:536:9:536:18 | ...::f | main.rs:517:9:517:20 | fn f | +| main.rs:541:9:541:9 | g | main.rs:530:5:537:5 | fn g | +| main.rs:542:11:542:11 | S | main.rs:520:5:520:13 | struct S | +| main.rs:560:17:560:21 | super | main.rs:552:5:564:5 | mod m19 | +| main.rs:560:17:560:24 | ...::f | main.rs:553:9:555:9 | fn f | +| main.rs:561:17:561:21 | super | main.rs:552:5:564:5 | mod m19 | +| main.rs:561:17:561:28 | ...::super | main.rs:547:1:565:1 | mod m18 | +| main.rs:561:17:561:31 | ...::f | main.rs:548:5:550:5 | fn f | +| main.rs:578:13:578:17 | super | main.rs:567:1:592:1 | mod m21 | +| main.rs:578:13:578:22 | ...::m22 | main.rs:568:5:574:5 | mod m22 | +| main.rs:578:13:578:30 | ...::MyEnum | main.rs:569:9:571:9 | enum MyEnum | +| main.rs:579:13:579:16 | self | main.rs:569:9:571:9 | enum MyEnum | +| main.rs:583:13:583:17 | super | main.rs:567:1:592:1 | mod m21 | +| main.rs:583:13:583:22 | ...::m22 | main.rs:568:5:574:5 | mod m22 | +| main.rs:583:13:583:32 | ...::MyStruct | main.rs:573:9:573:28 | struct MyStruct | +| main.rs:584:13:584:16 | self | main.rs:573:9:573:28 | struct MyStruct | +| main.rs:588:21:588:26 | MyEnum | main.rs:569:9:571:9 | enum MyEnum | +| main.rs:588:21:588:29 | ...::A | main.rs:570:13:570:13 | A | +| main.rs:589:21:589:28 | MyStruct | main.rs:573:9:573:28 | struct MyStruct | +| main.rs:605:10:607:5 | Trait1::<...> | main.rs:595:5:600:5 | trait Trait1 | +| main.rs:606:7:606:10 | Self | main.rs:602:5:602:13 | struct S | +| main.rs:608:11:608:11 | S | main.rs:602:5:602:13 | struct S | +| main.rs:616:17:616:17 | S | main.rs:602:5:602:13 | struct S | +| main.rs:632:15:632:15 | T | main.rs:631:26:631:26 | T | +| main.rs:637:9:637:24 | GenericStruct::<...> | main.rs:630:5:633:5 | struct GenericStruct | +| main.rs:637:23:637:23 | T | main.rs:636:10:636:10 | T | +| main.rs:639:9:639:9 | T | main.rs:636:10:636:10 | T | +| main.rs:639:12:639:17 | TraitA | main.rs:622:5:624:5 | trait TraitA | +| main.rs:648:9:648:24 | GenericStruct::<...> | main.rs:630:5:633:5 | struct GenericStruct | +| main.rs:648:23:648:23 | T | main.rs:647:10:647:10 | T | +| main.rs:650:9:650:9 | T | main.rs:647:10:647:10 | T | +| main.rs:650:12:650:17 | TraitB | main.rs:626:5:628:5 | trait TraitB | +| main.rs:651:9:651:9 | T | main.rs:647:10:647:10 | T | +| main.rs:651:12:651:17 | TraitA | main.rs:622:5:624:5 | trait TraitA | +| main.rs:662:10:662:15 | TraitA | main.rs:622:5:624:5 | trait TraitA | +| main.rs:662:21:662:31 | Implementor | main.rs:659:5:659:23 | struct Implementor | +| main.rs:669:10:669:15 | TraitB | main.rs:626:5:628:5 | trait TraitB | +| main.rs:669:21:669:31 | Implementor | main.rs:659:5:659:23 | struct Implementor | +| main.rs:677:24:677:34 | Implementor | main.rs:659:5:659:23 | struct Implementor | +| main.rs:678:23:678:35 | GenericStruct | main.rs:630:5:633:5 | struct GenericStruct | +| main.rs:684:9:684:36 | GenericStruct::<...> | main.rs:630:5:633:5 | struct GenericStruct | +| main.rs:684:9:684:50 | ...::call_trait_a | main.rs:641:9:643:9 | fn call_trait_a | +| main.rs:684:25:684:35 | Implementor | main.rs:659:5:659:23 | struct Implementor | +| main.rs:687:9:687:36 | GenericStruct::<...> | main.rs:630:5:633:5 | struct GenericStruct | +| main.rs:687:9:687:47 | ...::call_both | main.rs:653:9:656:9 | fn call_both | +| main.rs:687:25:687:35 | Implementor | main.rs:659:5:659:23 | struct Implementor | +| main.rs:693:3:693:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:693:3:693:24 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:697:6:697:12 | AStruct | main.rs:696:1:696:17 | struct AStruct | +| main.rs:699:7:699:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:699:7:699:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:702:7:702:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:702:7:702:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:707:9:707:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:707:9:707:19 | ...::marker | {EXTERNAL LOCATION} | mod marker | +| main.rs:707:9:707:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:708:9:708:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:708:9:708:19 | ...::result | {EXTERNAL LOCATION} | mod result | +| main.rs:708:9:708:27 | ...::Result | {EXTERNAL LOCATION} | enum Result | +| main.rs:716:19:716:22 | Self | main.rs:710:5:718:5 | trait Reduce | +| main.rs:716:19:716:29 | ...::Input | main.rs:711:9:711:19 | type Input | +| main.rs:717:14:717:46 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:717:21:717:24 | Self | main.rs:710:5:718:5 | trait Reduce | +| main.rs:717:21:717:32 | ...::Output | main.rs:712:21:713:20 | type Output | +| main.rs:717:35:717:38 | Self | main.rs:710:5:718:5 | trait Reduce | +| main.rs:717:35:717:45 | ...::Error | main.rs:711:21:712:19 | type Error | +| main.rs:721:17:721:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:721:29:721:33 | Input | main.rs:720:19:720:23 | Input | +| main.rs:722:17:722:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:722:29:722:33 | Error | main.rs:720:26:720:30 | Error | +| main.rs:729:11:729:16 | Reduce | main.rs:710:5:718:5 | trait Reduce | +| main.rs:730:13:733:9 | MyImpl::<...> | main.rs:720:5:723:5 | struct MyImpl | +| main.rs:731:13:731:17 | Input | main.rs:727:13:727:17 | Input | +| main.rs:732:13:732:17 | Error | main.rs:728:13:728:17 | Error | +| main.rs:735:22:738:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:736:13:736:17 | Input | main.rs:727:13:727:17 | Input | +| main.rs:737:13:737:16 | Self | main.rs:725:5:757:5 | impl Reduce for MyImpl::<...> { ... } | +| main.rs:737:13:737:23 | ...::Error | main.rs:739:11:743:9 | type Error | +| main.rs:740:22:742:9 | Option::<...> | {EXTERNAL LOCATION} | enum Option | +| main.rs:741:11:741:15 | Error | main.rs:728:13:728:17 | Error | +| main.rs:745:13:745:17 | Input | main.rs:727:13:727:17 | Input | +| main.rs:750:19:750:22 | Self | main.rs:725:5:757:5 | impl Reduce for MyImpl::<...> { ... } | +| main.rs:750:19:750:29 | ...::Input | main.rs:735:9:739:9 | type Input | +| main.rs:751:14:754:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:752:13:752:16 | Self | main.rs:725:5:757:5 | impl Reduce for MyImpl::<...> { ... } | +| main.rs:752:13:752:24 | ...::Output | main.rs:743:11:746:9 | type Output | +| main.rs:753:13:753:16 | Self | main.rs:725:5:757:5 | impl Reduce for MyImpl::<...> { ... } | +| main.rs:753:13:753:23 | ...::Error | main.rs:739:11:743:9 | type Error | +| main.rs:760:5:760:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:760:11:760:14 | self | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:762:15:762:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:762:15:762:25 | ...::string | {EXTERNAL LOCATION} | mod string | +| main.rs:762:15:762:33 | ...::String | {EXTERNAL LOCATION} | struct String | +| main.rs:765:5:765:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:765:5:765:14 | ...::nested | my.rs:1:1:1:15 | mod nested | +| main.rs:765:5:765:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | +| main.rs:765:5:765:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | +| main.rs:765:5:765:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | +| main.rs:766:5:766:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:766:5:766:9 | ...::f | my.rs:5:1:7:1 | fn f | +| main.rs:767:5:767:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:767:5:767:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | +| main.rs:767:5:767:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:767:5:767:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:768:5:768:5 | f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:769:5:769:5 | g | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:770:5:770:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:770:5:770:12 | ...::h | main.rs:50:1:69:1 | fn h | +| main.rs:771:5:771:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:771:5:771:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:771:5:771:13 | ...::g | main.rs:23:9:27:9 | fn g | +| main.rs:772:5:772:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:772:5:772:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:772:5:772:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | +| main.rs:772:5:772:17 | ...::h | main.rs:30:27:34:13 | fn h | +| main.rs:773:5:773:6 | m4 | main.rs:39:1:46:1 | mod m4 | +| main.rs:773:5:773:9 | ...::i | main.rs:42:5:45:5 | fn i | +| main.rs:774:5:774:5 | h | main.rs:50:1:69:1 | fn h | +| main.rs:775:5:775:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:776:5:776:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:777:5:777:5 | j | main.rs:97:1:101:1 | fn j | +| main.rs:778:5:778:6 | m6 | main.rs:109:1:120:1 | mod m6 | +| main.rs:778:5:778:9 | ...::g | main.rs:114:5:119:5 | fn g | +| main.rs:779:5:779:6 | m7 | main.rs:122:1:141:1 | mod m7 | +| main.rs:779:5:779:9 | ...::f | main.rs:133:5:140:5 | fn f | +| main.rs:780:5:780:6 | m8 | main.rs:143:1:197:1 | mod m8 | +| main.rs:780:5:780:9 | ...::g | main.rs:181:5:196:5 | fn g | +| main.rs:781:5:781:6 | m9 | main.rs:199:1:207:1 | mod m9 | +| main.rs:781:5:781:9 | ...::f | main.rs:202:5:206:5 | fn f | +| main.rs:782:5:782:7 | m11 | main.rs:230:1:267:1 | mod m11 | +| main.rs:782:5:782:10 | ...::f | main.rs:235:5:238:5 | fn f | +| main.rs:783:5:783:7 | m15 | main.rs:298:1:367:1 | mod m15 | +| main.rs:783:5:783:10 | ...::f | main.rs:354:5:366:5 | fn f | +| main.rs:784:5:784:7 | m16 | main.rs:369:1:461:1 | mod m16 | +| main.rs:784:5:784:10 | ...::f | main.rs:436:5:460:5 | fn f | +| main.rs:785:5:785:20 | trait_visibility | main.rs:463:1:513:1 | mod trait_visibility | +| main.rs:785:5:785:23 | ...::f | main.rs:490:5:512:5 | fn f | +| main.rs:786:5:786:7 | m17 | main.rs:515:1:545:1 | mod m17 | +| main.rs:786:5:786:10 | ...::f | main.rs:539:5:544:5 | fn f | +| main.rs:787:5:787:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | +| main.rs:787:5:787:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | +| main.rs:788:5:788:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | +| main.rs:788:5:788:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | +| main.rs:789:5:789:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | +| main.rs:789:5:789:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | +| main.rs:790:5:790:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | +| main.rs:791:5:791:7 | m18 | main.rs:547:1:565:1 | mod m18 | +| main.rs:791:5:791:12 | ...::m19 | main.rs:552:5:564:5 | mod m19 | +| main.rs:791:5:791:17 | ...::m20 | main.rs:557:9:563:9 | mod m20 | +| main.rs:791:5:791:20 | ...::g | main.rs:558:13:562:13 | fn g | +| main.rs:792:5:792:7 | m23 | main.rs:594:1:619:1 | mod m23 | +| main.rs:792:5:792:10 | ...::f | main.rs:614:5:618:5 | fn f | +| main.rs:793:5:793:7 | m24 | main.rs:621:1:689:1 | mod m24 | +| main.rs:793:5:793:10 | ...::f | main.rs:675:5:688:5 | fn f | +| main.rs:794:5:794:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:794:5:794:11 | ...::h | main.rs:50:1:69:1 | fn h | +| main.rs:796:5:796:11 | AStruct | main.rs:696:1:696:17 | struct AStruct | +| main.rs:797:5:797:11 | AStruct | main.rs:696:1:696:17 | struct AStruct | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | | my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | @@ -401,7 +427,7 @@ resolvePath | my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g | | my2/my3/mod.rs:4:5:4:5 | h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:17:30 | SourceFile | -| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:746:2 | SourceFile | +| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:799:2 | SourceFile | | my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:17:30 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | 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 d2fded7a073..d2aa2f396c7 100644 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -1,8 +1,8 @@ multipleCallTargets | dereference.rs:61:15:61:24 | e1.deref() | -| main.rs:2308:13:2308:31 | ...::from(...) | -| main.rs:2309:13:2309:31 | ...::from(...) | -| main.rs:2310:13:2310:31 | ...::from(...) | -| main.rs:2316:13:2316:31 | ...::from(...) | -| main.rs:2317:13:2317:31 | ...::from(...) | -| main.rs:2318:13:2318:31 | ...::from(...) | +| main.rs:2357:13:2357:31 | ...::from(...) | +| main.rs:2358:13:2358:31 | ...::from(...) | +| main.rs:2359:13:2359:31 | ...::from(...) | +| main.rs:2365:13:2365:31 | ...::from(...) | +| main.rs:2366:13:2366:31 | ...::from(...) | +| main.rs:2367:13:2367:31 | ...::from(...) | diff --git a/rust/ql/test/library-tests/type-inference/closure.rs b/rust/ql/test/library-tests/type-inference/closure.rs index 1b11335947c..43b26819325 100644 --- a/rust/ql/test/library-tests/type-inference/closure.rs +++ b/rust/ql/test/library-tests/type-inference/closure.rs @@ -5,7 +5,7 @@ mod simple_closures { // A simple closure without type annotations or invocations. let my_closure = |a, b| a && b; - let x: i64 = 1i64; // $ type=x:i64 + let x: i64 = 1i64; // $ certainType=x:i64 let add_one = |n| n + 1i64; // $ target=add let _y = add_one(x); // $ type=_y:i64 @@ -27,7 +27,7 @@ mod simple_closures { // The return type of `id2` is inferred from the type of the call expression. let id2 = |b| b; let arg = Default::default(); // $ target=default type=arg:bool - let _b2: bool = id2(arg); // $ type=_b2:bool + let _b2: bool = id2(arg); // $ certainType=_b2:bool } } @@ -60,7 +60,7 @@ mod fn_once_trait { let _r = apply(f, true); // $ target=apply type=_r:i64 let f = |x| x + 1; // $ MISSING: type=x:i64 target=add - let _r2 = apply_two(f); // $ target=apply_two type=_r2:i64 + let _r2 = apply_two(f); // $ target=apply_two certainType=_r2:i64 } } diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 6685b80ae75..a6395c5af9f 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -121,6 +121,55 @@ mod trait_impl { } } +mod trait_visibility { + // In this test the correct method target depends on which trait is visible. + + mod m { + pub trait Foo { + // Foo::a_method + fn a_method(&self) { + println!("foo!"); + } + } + + pub trait Bar { + // Bar::a_method + fn a_method(&self) { + println!("bar!"); + } + } + + pub struct X; + impl Foo for X {} + impl Bar for X {} + } + + use m::X; + + fn main() { + let x = X; + { + use m::Foo; + x.a_method(); // $ target=Foo::a_method + } + { + use m::Bar; + x.a_method(); // $ target=Bar::a_method + } + { + use m::Bar as _; + x.a_method(); // $ target=Bar::a_method + } + { + use m::Bar; + use m::Foo; + // x.a_method(); // This would be ambiguous + Foo::a_method(&x); // $ target=Foo::a_method + Bar::a_method(&x); // $ target=Bar::a_method + } + } +} + mod method_non_parametric_impl { #[derive(Debug)] struct MyThing { @@ -1140,20 +1189,20 @@ mod type_aliases { println!("{:?}", p1); // Type can be only inferred from the type alias - let p2: MyPair = PairOption::PairNone(); // $ type=p2:Fst.S1 type=p2:Snd.S2 + let p2: MyPair = PairOption::PairNone(); // $ certainType=p2:Fst.S1 certainType=p2:Snd.S2 println!("{:?}", p2); // First type from alias, second from constructor - let p3: AnotherPair<_> = PairOption::PairSnd(S3); // $ type=p3:Fst.S2 + let p3: AnotherPair<_> = PairOption::PairSnd(S3); // $ certainType=p3:Fst.S2 println!("{:?}", p3); // First type from alias definition, second from argument to alias - let p3: AnotherPair = PairOption::PairNone(); // $ type=p3:Fst.S2 type=p3:Snd.S3 + let p3: AnotherPair = PairOption::PairNone(); // $ certainType=p3:Fst.S2 certainType=p3:Snd.S3 println!("{:?}", p3); g(PairOption::PairSnd(PairOption::PairSnd(S3))); // $ target=g - let x: S7; // $ type=x:Result $ type=x:E.S1 $ type=x:T.S4 $ type=x:T.T41.S2 $ type=x:T.T42.S5 $ type=x:T.T42.T5.S2 + let x: S7; // $ certainType=x:Result $ certainType=x:E.S1 $ certainType=x:T.S4 $ certainType=x:T.T41.S2 $ certainType=x:T.T42.S5 $ certainType=x:T.T42.T5.S2 let y = GenS(true).get_input(); // $ type=y:Result type=y:T.bool type=y:E.bool target=get_input } @@ -1199,7 +1248,7 @@ mod option_methods { struct S; pub fn f() { - let x1 = MyOption::::new(); // $ type=x1:T.S target=new + let x1 = MyOption::::new(); // $ certainType=x1:T.S target=new println!("{:?}", x1); let mut x2 = MyOption::new(); // $ target=new @@ -1327,7 +1376,7 @@ mod method_call_type_conversion { let t = x7.m1(); // $ target=m1 type=t:& type=t:&T.S2 println!("{:?}", x7); - let x9: String = "Hello".to_string(); // $ type=x9:String + let x9: String = "Hello".to_string(); // $ certainType=x9:String // Implicit `String` -> `str` conversion happens via the `Deref` trait: // https://doc.rust-lang.org/std/string/struct.String.html#deref. @@ -1502,23 +1551,23 @@ mod try_expressions { mod builtins { pub fn f() { - let x: i32 = 1; // $ type=x:i32 + let x: i32 = 1; // $ certainType=x:i32 let y = 2; // $ type=y:i32 let z = x + y; // $ type=z:i32 target=add let z = x.abs(); // $ target=abs $ type=z:i32 - let c = 'c'; // $ type=c:char - let hello = "Hello"; // $ type=hello:&T.str - let f = 123.0f64; // $ type=f:f64 - let t = true; // $ type=t:bool - let f = false; // $ type=f:bool + let c = 'c'; // $ certainType=c:char + let hello = "Hello"; // $ certainType=hello:&T.str + let f = 123.0f64; // $ certainType=f:f64 + let t = true; // $ certainType=t:bool + let f = false; // $ certainType=f:bool } } // Tests for non-overloaded operators. mod operators { pub fn f() { - let x = true && false; // $ type=x:bool - let y = true || false; // $ type=y:bool + let x = true && false; // $ certainType=x:bool + let y = true || false; // $ certainType=y:bool let mut a; let cond = 34 == 33; // $ target=eq @@ -2292,10 +2341,10 @@ mod loops { 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 + let vals3: [u32; 3] = [1, 2, 3]; // $ certainType=vals3:[T;...].u32 for u in vals3 {} // $ type=u:u32 - let vals4: [u64; 3] = [1; 3]; // $ type=vals4:[T;...].u64 + let vals4: [u64; 3] = [1; 3]; // $ certainType=vals4:[T;...].u64 for u in vals4 {} // $ type=u:u64 let mut strings1 = ["foo", "bar", "baz"]; // $ type=strings1:[T;...].&T.str @@ -2330,9 +2379,9 @@ mod loops { for i in 0..10 {} // $ type=i:i32 for u in [0u8..10] {} // $ type=u:Range type=u:Idx.u8 - let range = 0..10; // $ type=range:Range type=range:Idx.i32 + let range = 0..10; // $ certainType=range:Range type=range:Idx.i32 for i in range {} // $ type=i:i32 - let range_full = ..; // $ type=range_full:RangeFull + let range_full = ..; // $ certainType=range_full:RangeFull for i in &[1i64, 2i64, 3i64][range_full] {} // $ target=index MISSING: type=i:&T.i64 let range1 = // $ type=range1:Range type=range1:Idx.u16 @@ -2347,19 +2396,19 @@ mod loops { 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 + let vals4a: Vec = [1u16, 2, 3].to_vec(); // $ certainType=vals4a:Vec certainType=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 target=from type=vals5:T.u32 + let vals5 = Vec::from([1u32, 2, 3]); // $ certainType=vals5:Vec target=from type=vals5:T.u32 for u in vals5 {} // $ type=u:u32 - let vals6: Vec<&u64> = [1u64, 2, 3].iter().collect(); // $ type=vals6:Vec type=vals6:T.&T.u64 + let vals6: Vec<&u64> = [1u64, 2, 3].iter().collect(); // $ certainType=vals6:Vec certainType=vals6:T.&T.u64 for u in vals6 {} // $ type=u:&T.u64 - let mut vals7 = Vec::new(); // $ target=new type=vals7:Vec type=vals7:T.u8 + let mut vals7 = Vec::new(); // $ target=new certainType=vals7:Vec type=vals7:T.u8 vals7.push(1u8); // $ target=push for u in vals7 {} // $ type=u:u8 @@ -2380,11 +2429,11 @@ mod loops { // while loops - let mut a: i64 = 0; // $ type=a:i64 + let mut a: i64 = 0; // $ certainType=a:i64 #[rustfmt::skip] - let _ = while a < 10 // $ target=lt type=a:i64 + let _ = while a < 10 // $ target=lt certainType=a:i64 { - a += 1; // $ type=a:i64 MISSING: target=add_assign + a += 1; // $ certainType=a:i64 MISSING: target=add_assign }; } } @@ -2422,11 +2471,11 @@ mod explicit_type_args { } pub fn f() { - let x1: Option> = S1::assoc_fun(); // $ type=x1:T.T.S2 target=assoc_fun - let x2 = S1::::assoc_fun(); // $ type=x2:T.T.S2 target=assoc_fun - let x3 = S3::assoc_fun(); // $ type=x3:T.T.S2 target=assoc_fun - let x4 = S1::::method(S1::default()); // $ target=method target=default type=x4:T.S2 - let x5 = S3::method(S1::default()); // $ target=method target=default type=x5:T.S2 + let x1: Option> = S1::assoc_fun(); // $ certainType=x1:T.T.S2 target=assoc_fun + let x2 = S1::::assoc_fun(); // $ certainType=x2:T.T.S2 target=assoc_fun + let x3 = S3::assoc_fun(); // $ certainType=x3:T.T.S2 target=assoc_fun + let x4 = S1::::method(S1::default()); // $ target=method target=default certainType=x4:T.S2 + let x5 = S3::method(S1::default()); // $ target=method target=default certainType=x5:T.S2 let x6 = S4::(Default::default()); // $ type=x6:T4.S2 target=default let x7 = S4(S2); // $ type=x7:T4.S2 let x8 = S4(0); // $ type=x8:T4.i32 @@ -2441,7 +2490,7 @@ mod explicit_type_args { { field: S2::default(), // $ target=default }; - let x14 = foo::(Default::default()); // $ type=x14:i32 target=default target=foo + let x14 = foo::(Default::default()); // $ certainType=x14:i32 target=default target=foo } } @@ -2457,8 +2506,8 @@ mod tuples { } pub fn f() { - let a = S1::get_pair(); // $ target=get_pair type=a:(T_2) - let mut b = S1::get_pair(); // $ target=get_pair type=b:(T_2) + let a = S1::get_pair(); // $ target=get_pair certainType=a:(T_2) + let mut b = S1::get_pair(); // $ target=get_pair certainType=b:(T_2) let (c, d) = S1::get_pair(); // $ target=get_pair type=c:S1 type=d:S1 let (mut e, f) = S1::get_pair(); // $ target=get_pair type=e:S1 type=f:S1 let (mut g, mut h) = S1::get_pair(); // $ target=get_pair type=g:S1 type=h:S1 @@ -2593,11 +2642,11 @@ pub mod path_buf { } pub fn f() { - let path1 = Path::new(); // $ target=new type=path1:Path + let path1 = Path::new(); // $ target=new certainType=path1:Path let path2 = path1.canonicalize(); // $ target=canonicalize let path3 = path2.unwrap(); // $ target=unwrap type=path3:PathBuf - let pathbuf1 = PathBuf::new(); // $ target=new type=pathbuf1:PathBuf + let pathbuf1 = PathBuf::new(); // $ target=new certainType=pathbuf1:PathBuf let pathbuf2 = pathbuf1.canonicalize(); // $ MISSING: target=canonicalize let pathbuf3 = pathbuf2.unwrap(); // $ MISSING: target=unwrap type=pathbuf3:PathBuf } diff --git a/rust/ql/test/library-tests/type-inference/pattern_matching.rs b/rust/ql/test/library-tests/type-inference/pattern_matching.rs index 30ddd61444e..9e40560f18c 100755 --- a/rust/ql/test/library-tests/type-inference/pattern_matching.rs +++ b/rust/ql/test/library-tests/type-inference/pattern_matching.rs @@ -171,15 +171,15 @@ pub fn literal_patterns() { match value { // LiteralPat - Literal patterns (including negative literals) 42 => { - let literal_match = value; // $ type=literal_match:i32 + let literal_match = value; // $ certainType=literal_match:i32 println!("Literal pattern: {}", literal_match); } -1 => { - let negative_literal = value; // $ type=negative_literal:i32 + let negative_literal = value; // $ certainType=negative_literal:i32 println!("Negative literal: {}", negative_literal); } 0 => { - let zero_literal = value; // $ type=zero_literal:i32 + let zero_literal = value; // $ certainType=zero_literal:i32 println!("Zero literal: {}", zero_literal); } _ => {} @@ -188,7 +188,7 @@ pub fn literal_patterns() { let float_val = 3.14f64; match float_val { 3.14 => { - let pi_match = float_val; // $ type=pi_match:f64 + let pi_match = float_val; // $ certainType=pi_match:f64 println!("Pi matched: {}", pi_match); } _ => {} @@ -197,7 +197,7 @@ pub fn literal_patterns() { let string_val = "hello"; match string_val { "hello" => { - let hello_match = string_val; // $ type=hello_match:&T.str + let hello_match = string_val; // $ certainType=hello_match:&T.str println!("String literal: {}", hello_match); } _ => {} @@ -206,11 +206,11 @@ pub fn literal_patterns() { let bool_val = true; match bool_val { true => { - let true_match = bool_val; // $ type=true_match:bool + let true_match = bool_val; // $ certainType=true_match:bool println!("True literal: {}", true_match); } false => { - let false_match = bool_val; // $ type=false_match:bool + let false_match = bool_val; // $ certainType=false_match:bool println!("False literal: {}", false_match); } } @@ -283,7 +283,7 @@ pub fn wildcard_patterns() { 42 => println!("Specific match"), // WildcardPat - Wildcard pattern _ => { - let wildcard_context = value; // $ type=wildcard_context:i32 + let wildcard_context = value; // $ certainType=wildcard_context:i32 println!("Wildcard pattern for: {}", wildcard_context); } } @@ -295,15 +295,15 @@ pub fn range_patterns() { match value { // RangePat - Range patterns 1..=10 => { - let range_inclusive = value; // $ type=range_inclusive:i32 + let range_inclusive = value; // $ certainType=range_inclusive:i32 println!("Range inclusive: {}", range_inclusive); } 11.. => { - let range_from = value; // $ type=range_from:i32 + let range_from = value; // $ certainType=range_from:i32 println!("Range from 11: {}", range_from); } ..=0 => { - let range_to_inclusive = value; // $ type=range_to_inclusive:i32 + let range_to_inclusive = value; // $ certainType=range_to_inclusive:i32 println!("Range to 0 inclusive: {}", range_to_inclusive); } _ => {} @@ -312,11 +312,11 @@ pub fn range_patterns() { let char_val = 'c'; match char_val { 'a'..='z' => { - let lowercase_char = char_val; // $ type=lowercase_char:char + let lowercase_char = char_val; // $ certainType=lowercase_char:char println!("Lowercase char: {}", lowercase_char); } 'A'..='Z' => { - let uppercase_char = char_val; // $ type=uppercase_char:char + let uppercase_char = char_val; // $ certainType=uppercase_char:char println!("Uppercase char: {}", uppercase_char); } _ => {} @@ -330,7 +330,7 @@ pub fn reference_patterns() { // RefPat - Reference patterns match &value { &42 => { - let deref_match = value; // $ type=deref_match:i32 + let deref_match = value; // $ certainType=deref_match:i32 println!("Dereferenced match: {}", deref_match); } &x => { @@ -446,7 +446,7 @@ pub fn tuple_patterns() { // TuplePat - Tuple patterns match tuple { (1, 2, 3.0) => { - let exact_tuple = tuple; // $ type=exact_tuple:(T_3) + let exact_tuple = tuple; // $ certainType=exact_tuple:(T_3) println!("Exact tuple: {:?}", exact_tuple); } (a, b, c) => { @@ -469,7 +469,7 @@ pub fn tuple_patterns() { let unit = (); match unit { () => { - let unit_value = unit; // $ type=unit_value:() + let unit_value = unit; // $ certainType=unit_value:() println!("Unit value: {:?}", unit_value); } } @@ -525,7 +525,7 @@ pub fn slice_patterns() { // SlicePat - Slice patterns match slice { [] => { - let empty_slice = slice; // $ type=empty_slice:&T.[T].i32 + let empty_slice = slice; // $ certainType=empty_slice:&T.[T].i32 println!("Empty slice: {:?}", empty_slice); } [x] => { @@ -569,7 +569,7 @@ pub fn path_patterns() { match value { CONSTANT => { - let const_match = value; // $ type=const_match:i32 + let const_match = value; // $ certainType=const_match:i32 println!("Matches constant: {}", const_match); } _ => {} @@ -606,11 +606,11 @@ pub fn or_patterns() { // OrPat - Or patterns match value { 1 | 2 | 3 => { - let small_num = value; // $ type=small_num:i32 + let small_num = value; // $ certainType=small_num:i32 println!("Small number: {}", small_num); } 10 | 20 => { - let round_num = value; // $ type=round_num:i32 + let round_num = value; // $ certainType=round_num:i32 println!("Round number: {}", round_num); } _ => {} @@ -630,7 +630,7 @@ pub fn or_patterns() { // Or pattern with ranges match value { 1..=10 | 90..=100 => { - let range_or_value = value; // $ type=range_or_value:i32 + let range_or_value = value; // $ certainType=range_or_value:i32 println!("In range: {}", range_or_value); } _ => {} @@ -750,11 +750,11 @@ pub fn patterns_in_let_statements() { // Let with reference pattern let value = 42i32; let ref ref_val = value; - let let_ref = ref_val; // $ type=let_ref:&T.i32 + let let_ref = ref_val; // $ certainType=let_ref:&T.i32 // Let with mutable pattern let mut mut_val = 10i32; - let let_mut = mut_val; // $ type=let_mut:i32 + let let_mut = mut_val; // $ certainType=let_mut:i32 } pub fn patterns_in_function_parameters() { @@ -779,13 +779,13 @@ pub fn patterns_in_function_parameters() { // Call the functions to use them let point = Point { x: 5, y: 10 }; - let extracted = extract_point(point); // $ target=extract_point type=extracted:0(2).i32 type=extracted:1(2).i32 + let extracted = extract_point(point); // $ target=extract_point certainType=extracted:0(2).i32 certainType=extracted:1(2).i32 let color = Color(200, 100, 50); - let red = extract_color(color); // $ target=extract_color type=red:u8 + let red = extract_color(color); // $ target=extract_color certainType=red:u8 let tuple = (42i32, 3.14f64, true); - let tuple_extracted = extract_tuple(tuple); // $ target=extract_tuple type=tuple_extracted:0(2).i32 type=tuple_extracted:1(2).bool + let tuple_extracted = extract_tuple(tuple); // $ target=extract_tuple certainType=tuple_extracted:0(2).i32 certainType=tuple_extracted:1(2).bool } #[rustfmt::skip] 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 4d2960c5f28..158af57728f 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -787,4215 +787,4238 @@ inferType | main.rs:120:13:120:13 | b | | {EXTERNAL LOCATION} | bool | | main.rs:120:17:120:40 | ...::trait_method(...) | | {EXTERNAL LOCATION} | bool | | main.rs:120:39:120:39 | y | | main.rs:99:5:102:5 | MyThing | -| main.rs:137:15:137:18 | SelfParam | | main.rs:125:5:128:5 | MyThing | -| main.rs:137:15:137:18 | SelfParam | A | main.rs:130:5:131:14 | S1 | -| main.rs:137:27:139:9 | { ... } | | main.rs:130:5:131:14 | S1 | -| main.rs:138:13:138:16 | self | | main.rs:125:5:128:5 | MyThing | -| main.rs:138:13:138:16 | self | A | main.rs:130:5:131:14 | S1 | -| main.rs:138:13:138:18 | self.a | | main.rs:130:5:131:14 | S1 | -| main.rs:144:15:144:18 | SelfParam | | main.rs:125:5:128:5 | MyThing | -| main.rs:144:15:144:18 | SelfParam | A | main.rs:132:5:133:14 | S2 | -| main.rs:144:29:146:9 | { ... } | | main.rs:125:5:128:5 | MyThing | -| main.rs:144:29:146:9 | { ... } | A | main.rs:132:5:133:14 | S2 | -| main.rs:145:13:145:30 | Self {...} | | main.rs:125:5:128:5 | MyThing | -| main.rs:145:13:145:30 | Self {...} | A | main.rs:132:5:133:14 | S2 | -| main.rs:145:23:145:26 | self | | main.rs:125:5:128:5 | MyThing | -| main.rs:145:23:145:26 | self | A | main.rs:132:5:133:14 | S2 | -| main.rs:145:23:145:28 | self.a | | main.rs:132:5:133:14 | S2 | -| main.rs:150:15:150:18 | SelfParam | | main.rs:125:5:128:5 | MyThing | -| main.rs:150:15:150:18 | SelfParam | A | main.rs:149:10:149:10 | T | -| main.rs:150:26:152:9 | { ... } | | main.rs:149:10:149:10 | T | -| main.rs:151:13:151:16 | self | | main.rs:125:5:128:5 | MyThing | -| main.rs:151:13:151:16 | self | A | main.rs:149:10:149:10 | T | -| main.rs:151:13:151:18 | self.a | | main.rs:149:10:149:10 | T | -| main.rs:156:13:156:13 | x | | main.rs:125:5:128:5 | MyThing | -| main.rs:156:13:156:13 | x | A | main.rs:130:5:131:14 | S1 | -| main.rs:156:17:156:33 | MyThing {...} | | main.rs:125:5:128:5 | MyThing | -| main.rs:156:17:156:33 | MyThing {...} | A | main.rs:130:5:131:14 | S1 | -| main.rs:156:30:156:31 | S1 | | main.rs:130:5:131:14 | S1 | -| main.rs:157:13:157:13 | y | | main.rs:125:5:128:5 | MyThing | -| main.rs:157:13:157:13 | y | A | main.rs:132:5:133:14 | S2 | -| main.rs:157:17:157:33 | MyThing {...} | | main.rs:125:5:128:5 | MyThing | -| main.rs:157:17:157:33 | MyThing {...} | A | main.rs:132:5:133:14 | S2 | -| main.rs:157:30:157:31 | S2 | | main.rs:132:5:133:14 | S2 | -| main.rs:160:18:160:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:160:18:160:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:160:18:160:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:160:18:160:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:160:26:160:26 | x | | main.rs:125:5:128:5 | MyThing | -| main.rs:160:26:160:26 | x | A | main.rs:130:5:131:14 | S1 | -| main.rs:160:26:160:28 | x.a | | main.rs:130:5:131:14 | S1 | -| main.rs:161:18:161:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:161:18:161:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:161:18:161:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:161:18:161:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:161:26:161:26 | y | | main.rs:125:5:128:5 | MyThing | -| main.rs:161:26:161:26 | y | A | main.rs:132:5:133:14 | S2 | -| main.rs:161:26:161:28 | y.a | | main.rs:132:5:133:14 | S2 | -| main.rs:163:18:163:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:163:18:163:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:163:18:163:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:163:18:163:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:163:26:163:26 | x | | main.rs:125:5:128:5 | MyThing | -| main.rs:163:26:163:26 | x | A | main.rs:130:5:131:14 | S1 | -| main.rs:163:26:163:31 | x.m1() | | main.rs:130:5:131:14 | S1 | -| main.rs:164:18:164:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:164:18:164:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:164:18:164:33 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:164:18:164:33 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:164:26:164:26 | y | | main.rs:125:5:128:5 | MyThing | -| main.rs:164:26:164:26 | y | A | main.rs:132:5:133:14 | S2 | -| main.rs:164:26:164:31 | y.m1() | | main.rs:125:5:128:5 | MyThing | -| main.rs:164:26:164:31 | y.m1() | A | main.rs:132:5:133:14 | S2 | -| main.rs:164:26:164:33 | ... .a | | main.rs:132:5:133:14 | S2 | -| main.rs:166:13:166:13 | x | | main.rs:125:5:128:5 | MyThing | -| main.rs:166:13:166:13 | x | A | main.rs:130:5:131:14 | S1 | -| main.rs:166:17:166:33 | MyThing {...} | | main.rs:125:5:128:5 | MyThing | -| main.rs:166:17:166:33 | MyThing {...} | A | main.rs:130:5:131:14 | S1 | -| main.rs:166:30:166:31 | S1 | | main.rs:130:5:131:14 | S1 | -| main.rs:167:13:167:13 | y | | main.rs:125:5:128:5 | MyThing | -| main.rs:167:13:167:13 | y | A | main.rs:132:5:133:14 | S2 | -| main.rs:167:17:167:33 | MyThing {...} | | main.rs:125:5:128:5 | MyThing | -| main.rs:167:17:167:33 | MyThing {...} | A | main.rs:132:5:133:14 | S2 | -| main.rs:167:30:167:31 | S2 | | main.rs:132:5:133:14 | S2 | -| main.rs:169:18:169:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:169:18:169:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:169:18:169:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:169:18:169:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:169:26:169:26 | x | | main.rs:125:5:128:5 | MyThing | -| main.rs:169:26:169:26 | x | A | main.rs:130:5:131:14 | S1 | -| main.rs:169:26:169:31 | x.m2() | | main.rs:130:5:131:14 | S1 | -| main.rs:170:18:170:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:170:18:170:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:170:18:170:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:170:18:170:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:170:26:170:26 | y | | main.rs:125:5:128:5 | MyThing | -| main.rs:170:26:170:26 | y | A | main.rs:132:5:133:14 | S2 | -| main.rs:170:26:170:31 | y.m2() | | main.rs:132:5:133:14 | S2 | -| main.rs:194:15:194:18 | SelfParam | | main.rs:193:5:202:5 | Self [trait MyTrait] | -| main.rs:196:15:196:18 | SelfParam | | main.rs:193:5:202:5 | Self [trait MyTrait] | -| main.rs:199:9:201:9 | { ... } | | main.rs:193:5:202:5 | Self [trait MyTrait] | -| main.rs:200:13:200:16 | self | | main.rs:193:5:202:5 | Self [trait MyTrait] | -| main.rs:206:16:206:19 | SelfParam | | main.rs:204:5:209:5 | Self [trait MyProduct] | -| main.rs:208:16:208:19 | SelfParam | | main.rs:204:5:209:5 | Self [trait MyProduct] | -| main.rs:211:43:211:43 | x | | main.rs:211:26:211:40 | T2 | -| main.rs:211:56:213:5 | { ... } | | main.rs:211:22:211:23 | T1 | -| main.rs:212:9:212:9 | x | | main.rs:211:26:211:40 | T2 | -| main.rs:212:9:212:14 | x.m1() | | main.rs:211:22:211:23 | T1 | -| main.rs:217:15:217:18 | SelfParam | | main.rs:175:5:178:5 | MyThing | -| main.rs:217:15:217:18 | SelfParam | A | main.rs:186:5:187:14 | S1 | -| main.rs:217:27:219:9 | { ... } | | main.rs:186:5:187:14 | S1 | -| main.rs:218:13:218:16 | self | | main.rs:175:5:178:5 | MyThing | -| main.rs:218:13:218:16 | self | A | main.rs:186:5:187:14 | S1 | -| main.rs:218:13:218:18 | self.a | | main.rs:186:5:187:14 | S1 | -| main.rs:224:15:224:18 | SelfParam | | main.rs:175:5:178:5 | MyThing | -| main.rs:224:15:224:18 | SelfParam | A | main.rs:188:5:189:14 | S2 | -| main.rs:224:29:226:9 | { ... } | | main.rs:175:5:178:5 | MyThing | -| main.rs:224:29:226:9 | { ... } | A | main.rs:188:5:189:14 | S2 | -| main.rs:225:13:225:30 | Self {...} | | main.rs:175:5:178:5 | MyThing | -| main.rs:225:13:225:30 | Self {...} | A | main.rs:188:5:189:14 | S2 | -| main.rs:225:23:225:26 | self | | main.rs:175:5:178:5 | MyThing | -| main.rs:225:23:225:26 | self | A | main.rs:188:5:189:14 | S2 | -| main.rs:225:23:225:28 | self.a | | main.rs:188:5:189:14 | S2 | -| main.rs:236:15:236:18 | SelfParam | | main.rs:175:5:178:5 | MyThing | -| main.rs:236:15:236:18 | SelfParam | A | main.rs:190:5:191:14 | S3 | -| main.rs:236:27:238:9 | { ... } | | main.rs:231:10:231:11 | TD | -| main.rs:237:13:237:25 | ...::default(...) | | main.rs:231:10:231:11 | TD | -| main.rs:243:15:243:18 | SelfParam | | main.rs:180:5:184:5 | MyPair | -| main.rs:243:15:243:18 | SelfParam | P1 | main.rs:241:10:241:10 | I | -| main.rs:243:15:243:18 | SelfParam | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:243:26:245:9 | { ... } | | main.rs:241:10:241:10 | I | -| main.rs:244:13:244:16 | self | | main.rs:180:5:184:5 | MyPair | -| main.rs:244:13:244:16 | self | P1 | main.rs:241:10:241:10 | I | -| main.rs:244:13:244:16 | self | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:244:13:244:19 | self.p1 | | main.rs:241:10:241:10 | I | -| main.rs:250:15:250:18 | SelfParam | | main.rs:180:5:184:5 | MyPair | -| main.rs:250:15:250:18 | SelfParam | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:250:15:250:18 | SelfParam | P2 | main.rs:188:5:189:14 | S2 | -| main.rs:250:27:252:9 | { ... } | | main.rs:190:5:191:14 | S3 | -| main.rs:251:13:251:14 | S3 | | main.rs:190:5:191:14 | S3 | -| main.rs:257:15:257:18 | SelfParam | | main.rs:180:5:184:5 | MyPair | -| main.rs:257:15:257:18 | SelfParam | P1 | main.rs:175:5:178:5 | MyThing | -| main.rs:257:15:257:18 | SelfParam | P1.A | main.rs:255:10:255:11 | TT | -| main.rs:257:15:257:18 | SelfParam | P2 | main.rs:190:5:191:14 | S3 | -| main.rs:257:27:260:9 | { ... } | | main.rs:255:10:255:11 | TT | -| main.rs:258:17:258:21 | alpha | | main.rs:175:5:178:5 | MyThing | -| main.rs:258:17:258:21 | alpha | A | main.rs:255:10:255:11 | TT | -| main.rs:258:25:258:28 | self | | main.rs:180:5:184:5 | MyPair | -| main.rs:258:25:258:28 | self | P1 | main.rs:175:5:178:5 | MyThing | -| main.rs:258:25:258:28 | self | P1.A | main.rs:255:10:255:11 | TT | -| main.rs:258:25:258:28 | self | P2 | main.rs:190:5:191:14 | S3 | -| main.rs:258:25:258:31 | self.p1 | | main.rs:175:5:178:5 | MyThing | -| main.rs:258:25:258:31 | self.p1 | A | main.rs:255:10:255:11 | TT | -| main.rs:259:13:259:17 | alpha | | main.rs:175:5:178:5 | MyThing | -| main.rs:259:13:259:17 | alpha | A | main.rs:255:10:255:11 | TT | -| main.rs:259:13:259:19 | alpha.a | | main.rs:255:10:255:11 | TT | -| main.rs:266:16:266:19 | SelfParam | | main.rs:180:5:184:5 | MyPair | -| main.rs:266:16:266:19 | SelfParam | P1 | main.rs:264:10:264:10 | A | -| main.rs:266:16:266:19 | SelfParam | P2 | main.rs:264:10:264:10 | A | -| main.rs:266:27:268:9 | { ... } | | main.rs:264:10:264:10 | A | -| main.rs:267:13:267:16 | self | | main.rs:180:5:184:5 | MyPair | -| main.rs:267:13:267:16 | self | P1 | main.rs:264:10:264:10 | A | -| main.rs:267:13:267:16 | self | P2 | main.rs:264:10:264:10 | A | -| main.rs:267:13:267:19 | self.p1 | | main.rs:264:10:264:10 | A | -| main.rs:271:16:271:19 | SelfParam | | main.rs:180:5:184:5 | MyPair | -| main.rs:271:16:271:19 | SelfParam | P1 | main.rs:264:10:264:10 | A | -| main.rs:271:16:271:19 | SelfParam | P2 | main.rs:264:10:264:10 | A | -| main.rs:271:27:273:9 | { ... } | | main.rs:264:10:264:10 | A | -| main.rs:272:13:272:16 | self | | main.rs:180:5:184:5 | MyPair | -| main.rs:272:13:272:16 | self | P1 | main.rs:264:10:264:10 | A | -| main.rs:272:13:272:16 | self | P2 | main.rs:264:10:264:10 | A | -| main.rs:272:13:272:19 | self.p2 | | main.rs:264:10:264:10 | A | -| main.rs:279:16:279:19 | SelfParam | | main.rs:180:5:184:5 | MyPair | -| main.rs:279:16:279:19 | SelfParam | P1 | main.rs:188:5:189:14 | S2 | -| main.rs:279:16:279:19 | SelfParam | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:279:28:281:9 | { ... } | | main.rs:186:5:187:14 | S1 | -| main.rs:280:13:280:16 | self | | main.rs:180:5:184:5 | MyPair | -| main.rs:280:13:280:16 | self | P1 | main.rs:188:5:189:14 | S2 | -| main.rs:280:13:280:16 | self | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:280:13:280:19 | self.p2 | | main.rs:186:5:187:14 | S1 | -| main.rs:284:16:284:19 | SelfParam | | main.rs:180:5:184:5 | MyPair | -| main.rs:284:16:284:19 | SelfParam | P1 | main.rs:188:5:189:14 | S2 | -| main.rs:284:16:284:19 | SelfParam | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:284:28:286:9 | { ... } | | main.rs:188:5:189:14 | S2 | -| main.rs:285:13:285:16 | self | | main.rs:180:5:184:5 | MyPair | -| main.rs:285:13:285:16 | self | P1 | main.rs:188:5:189:14 | S2 | -| main.rs:285:13:285:16 | self | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:285:13:285:19 | self.p1 | | main.rs:188:5:189:14 | S2 | -| main.rs:289:46:289:46 | p | | main.rs:289:24:289:43 | P | -| main.rs:289:58:291:5 | { ... } | | main.rs:289:16:289:17 | V1 | -| main.rs:290:9:290:9 | p | | main.rs:289:24:289:43 | P | -| main.rs:290:9:290:15 | p.fst() | | main.rs:289:16:289:17 | V1 | -| main.rs:293:46:293:46 | p | | main.rs:293:24:293:43 | P | -| main.rs:293:58:295:5 | { ... } | | main.rs:293:20:293:21 | V2 | -| main.rs:294:9:294:9 | p | | main.rs:293:24:293:43 | P | -| main.rs:294:9:294:15 | p.snd() | | main.rs:293:20:293:21 | V2 | -| main.rs:297:54:297:54 | p | | main.rs:180:5:184:5 | MyPair | -| main.rs:297:54:297:54 | p | P1 | main.rs:297:20:297:21 | V0 | -| main.rs:297:54:297:54 | p | P2 | main.rs:297:32:297:51 | P | -| main.rs:297:78:299:5 | { ... } | | main.rs:297:24:297:25 | V1 | -| main.rs:298:9:298:9 | p | | main.rs:180:5:184:5 | MyPair | -| main.rs:298:9:298:9 | p | P1 | main.rs:297:20:297:21 | V0 | -| main.rs:298:9:298:9 | p | P2 | main.rs:297:32:297:51 | P | -| main.rs:298:9:298:12 | p.p2 | | main.rs:297:32:297:51 | P | -| main.rs:298:9:298:18 | ... .fst() | | main.rs:297:24:297:25 | V1 | -| main.rs:303:23:303:26 | SelfParam | | main.rs:301:5:304:5 | Self [trait ConvertTo] | -| main.rs:308:23:308:26 | SelfParam | | main.rs:306:10:306:23 | T | -| main.rs:308:35:310:9 | { ... } | | main.rs:186:5:187:14 | S1 | -| main.rs:309:13:309:16 | self | | main.rs:306:10:306:23 | T | -| main.rs:309:13:309:21 | self.m1() | | main.rs:186:5:187:14 | S1 | -| main.rs:313:41:313:45 | thing | | main.rs:313:23:313:38 | T | -| main.rs:313:57:315:5 | { ... } | | main.rs:313:19:313:20 | TS | -| main.rs:314:9:314:13 | thing | | main.rs:313:23:313:38 | T | -| main.rs:314:9:314:26 | thing.convert_to() | | main.rs:313:19:313:20 | TS | -| main.rs:317:56:317:60 | thing | | main.rs:317:39:317:53 | TP | -| main.rs:317:73:320:5 | { ... } | | main.rs:186:5:187:14 | S1 | -| main.rs:319:9:319:13 | thing | | main.rs:317:39:317:53 | TP | -| main.rs:319:9:319:26 | thing.convert_to() | | main.rs:186:5:187:14 | S1 | -| main.rs:323:13:323:20 | thing_s1 | | main.rs:175:5:178:5 | MyThing | -| main.rs:323:13:323:20 | thing_s1 | A | main.rs:186:5:187:14 | S1 | -| main.rs:323:24:323:40 | MyThing {...} | | main.rs:175:5:178:5 | MyThing | -| main.rs:323:24:323:40 | MyThing {...} | A | main.rs:186:5:187:14 | S1 | -| main.rs:323:37:323:38 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:324:13:324:20 | thing_s2 | | main.rs:175:5:178:5 | MyThing | -| main.rs:324:13:324:20 | thing_s2 | A | main.rs:188:5:189:14 | S2 | -| main.rs:324:24:324:40 | MyThing {...} | | main.rs:175:5:178:5 | MyThing | -| main.rs:324:24:324:40 | MyThing {...} | A | main.rs:188:5:189:14 | S2 | -| main.rs:324:37:324:38 | S2 | | main.rs:188:5:189:14 | S2 | -| main.rs:325:13:325:20 | thing_s3 | | main.rs:175:5:178:5 | MyThing | -| main.rs:325:13:325:20 | thing_s3 | A | main.rs:190:5:191:14 | S3 | -| main.rs:325:24:325:40 | MyThing {...} | | main.rs:175:5:178:5 | MyThing | -| main.rs:325:24:325:40 | MyThing {...} | A | main.rs:190:5:191:14 | S3 | -| main.rs:325:37:325:38 | S3 | | main.rs:190:5:191:14 | S3 | -| main.rs:329:18:329:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:329:18:329:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:329:18:329:38 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:329:18:329:38 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:329:26:329:33 | thing_s1 | | main.rs:175:5:178:5 | MyThing | -| main.rs:329:26:329:33 | thing_s1 | A | main.rs:186:5:187:14 | S1 | -| main.rs:329:26:329:38 | thing_s1.m1() | | main.rs:186:5:187:14 | S1 | -| main.rs:330:18:330:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:330:18:330:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:330:18:330:40 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:330:18:330:40 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:330:26:330:33 | thing_s2 | | main.rs:175:5:178:5 | MyThing | -| main.rs:330:26:330:33 | thing_s2 | A | main.rs:188:5:189:14 | S2 | -| main.rs:330:26:330:38 | thing_s2.m1() | | main.rs:175:5:178:5 | MyThing | -| main.rs:330:26:330:38 | thing_s2.m1() | A | main.rs:188:5:189:14 | S2 | -| main.rs:330:26:330:40 | ... .a | | main.rs:188:5:189:14 | S2 | -| main.rs:331:13:331:14 | s3 | | main.rs:190:5:191:14 | S3 | -| main.rs:331:22:331:29 | thing_s3 | | main.rs:175:5:178:5 | MyThing | -| main.rs:331:22:331:29 | thing_s3 | A | main.rs:190:5:191:14 | S3 | -| main.rs:331:22:331:34 | thing_s3.m1() | | main.rs:190:5:191:14 | S3 | -| main.rs:332:18:332:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:332:18:332:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:332:18:332:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:332:18:332:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:332:26:332:27 | s3 | | main.rs:190:5:191:14 | S3 | -| main.rs:334:13:334:14 | p1 | | main.rs:180:5:184:5 | MyPair | -| main.rs:334:13:334:14 | p1 | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:334:13:334:14 | p1 | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:334:18:334:42 | MyPair {...} | | main.rs:180:5:184:5 | MyPair | -| main.rs:334:18:334:42 | MyPair {...} | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:334:18:334:42 | MyPair {...} | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:334:31:334:32 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:334:39:334:40 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:335:18:335:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:335:18:335:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:335:18:335:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:335:18:335:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:335:26:335:27 | p1 | | main.rs:180:5:184:5 | MyPair | -| main.rs:335:26:335:27 | p1 | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:335:26:335:27 | p1 | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:335:26:335:32 | p1.m1() | | main.rs:186:5:187:14 | S1 | -| main.rs:337:13:337:14 | p2 | | main.rs:180:5:184:5 | MyPair | -| main.rs:337:13:337:14 | p2 | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:337:13:337:14 | p2 | P2 | main.rs:188:5:189:14 | S2 | -| main.rs:337:18:337:42 | MyPair {...} | | main.rs:180:5:184:5 | MyPair | -| main.rs:337:18:337:42 | MyPair {...} | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:337:18:337:42 | MyPair {...} | P2 | main.rs:188:5:189:14 | S2 | -| main.rs:337:31:337:32 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:337:39:337:40 | S2 | | main.rs:188:5:189:14 | S2 | -| main.rs:338:18:338:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:338:18:338:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:338:18:338:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:338:18:338:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:338:26:338:27 | p2 | | main.rs:180:5:184:5 | MyPair | -| main.rs:338:26:338:27 | p2 | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:338:26:338:27 | p2 | P2 | main.rs:188:5:189:14 | S2 | -| main.rs:338:26:338:32 | p2.m1() | | main.rs:190:5:191:14 | S3 | -| main.rs:340:13:340:14 | p3 | | main.rs:180:5:184:5 | MyPair | -| main.rs:340:13:340:14 | p3 | P1 | main.rs:175:5:178:5 | MyThing | -| main.rs:340:13:340:14 | p3 | P1.A | main.rs:186:5:187:14 | S1 | -| main.rs:340:13:340:14 | p3 | P2 | main.rs:190:5:191:14 | S3 | -| main.rs:340:18:343:9 | MyPair {...} | | main.rs:180:5:184:5 | MyPair | -| main.rs:340:18:343:9 | MyPair {...} | P1 | main.rs:175:5:178:5 | MyThing | -| main.rs:340:18:343:9 | MyPair {...} | P1.A | main.rs:186:5:187:14 | S1 | -| main.rs:340:18:343:9 | MyPair {...} | P2 | main.rs:190:5:191:14 | S3 | -| main.rs:341:17:341:33 | MyThing {...} | | main.rs:175:5:178:5 | MyThing | -| main.rs:341:17:341:33 | MyThing {...} | A | main.rs:186:5:187:14 | S1 | -| main.rs:341:30:341:31 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:342:17:342:18 | S3 | | main.rs:190:5:191:14 | S3 | -| main.rs:344:18:344:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:344:18:344:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:344:18:344:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:344:18:344:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:344:26:344:27 | p3 | | main.rs:180:5:184:5 | MyPair | -| main.rs:344:26:344:27 | p3 | P1 | main.rs:175:5:178:5 | MyThing | -| main.rs:344:26:344:27 | p3 | P1.A | main.rs:186:5:187:14 | S1 | -| main.rs:344:26:344:27 | p3 | P2 | main.rs:190:5:191:14 | S3 | -| main.rs:344:26:344:32 | p3.m1() | | main.rs:186:5:187:14 | S1 | -| main.rs:347:13:347:13 | a | | main.rs:180:5:184:5 | MyPair | -| main.rs:347:13:347:13 | a | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:347:13:347:13 | a | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:347:17:347:41 | MyPair {...} | | main.rs:180:5:184:5 | MyPair | -| main.rs:347:17:347:41 | MyPair {...} | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:347:17:347:41 | MyPair {...} | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:347:30:347:31 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:347:38:347:39 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:348:13:348:13 | x | | main.rs:186:5:187:14 | S1 | -| main.rs:348:17:348:17 | a | | main.rs:180:5:184:5 | MyPair | -| main.rs:348:17:348:17 | a | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:348:17:348:17 | a | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:348:17:348:23 | a.fst() | | main.rs:186:5:187:14 | S1 | -| main.rs:349:18:349:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:349:18:349:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:349:18:349:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:349:18:349:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:349:26:349:26 | x | | main.rs:186:5:187:14 | S1 | -| main.rs:350:13:350:13 | y | | main.rs:186:5:187:14 | S1 | -| main.rs:350:17:350:17 | a | | main.rs:180:5:184:5 | MyPair | -| main.rs:350:17:350:17 | a | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:350:17:350:17 | a | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:350:17:350:23 | a.snd() | | main.rs:186:5:187:14 | S1 | -| main.rs:351:18:351:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:351:18:351:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:351:18:351:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:351:18:351:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:351:26:351:26 | y | | main.rs:186:5:187:14 | S1 | -| main.rs:357:13:357:13 | b | | main.rs:180:5:184:5 | MyPair | -| main.rs:357:13:357:13 | b | P1 | main.rs:188:5:189:14 | S2 | -| main.rs:357:13:357:13 | b | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:357:17:357:41 | MyPair {...} | | main.rs:180:5:184:5 | MyPair | -| main.rs:357:17:357:41 | MyPair {...} | P1 | main.rs:188:5:189:14 | S2 | -| main.rs:357:17:357:41 | MyPair {...} | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:357:30:357:31 | S2 | | main.rs:188:5:189:14 | S2 | -| main.rs:357:38:357:39 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:358:13:358:13 | x | | main.rs:186:5:187:14 | S1 | -| main.rs:358:17:358:17 | b | | main.rs:180:5:184:5 | MyPair | -| main.rs:358:17:358:17 | b | P1 | main.rs:188:5:189:14 | S2 | -| main.rs:358:17:358:17 | b | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:358:17:358:23 | b.fst() | | main.rs:186:5:187:14 | S1 | -| main.rs:359:18:359:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:359:18:359:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:359:18:359:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:359:18:359:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:359:26:359:26 | x | | main.rs:186:5:187:14 | S1 | -| main.rs:360:13:360:13 | y | | main.rs:188:5:189:14 | S2 | -| main.rs:360:17:360:17 | b | | main.rs:180:5:184:5 | MyPair | -| main.rs:360:17:360:17 | b | P1 | main.rs:188:5:189:14 | S2 | -| main.rs:360:17:360:17 | b | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:360:17:360:23 | b.snd() | | main.rs:188:5:189:14 | S2 | -| main.rs:361:18:361:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:361:18:361:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:361:18:361:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:361:18:361:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:361:26:361:26 | y | | main.rs:188:5:189:14 | S2 | -| main.rs:365:13:365:13 | x | | main.rs:186:5:187:14 | S1 | -| main.rs:365:17:365:39 | call_trait_m1(...) | | main.rs:186:5:187:14 | S1 | -| main.rs:365:31:365:38 | thing_s1 | | main.rs:175:5:178:5 | MyThing | -| main.rs:365:31:365:38 | thing_s1 | A | main.rs:186:5:187:14 | S1 | -| main.rs:366:18:366:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:366:18:366:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:366:18:366:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:366:18:366:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:366:26:366:26 | x | | main.rs:186:5:187:14 | S1 | -| main.rs:367:13:367:13 | y | | main.rs:175:5:178:5 | MyThing | -| main.rs:367:13:367:13 | y | A | main.rs:188:5:189:14 | S2 | -| main.rs:367:17:367:39 | call_trait_m1(...) | | main.rs:175:5:178:5 | MyThing | -| main.rs:367:17:367:39 | call_trait_m1(...) | A | main.rs:188:5:189:14 | S2 | -| main.rs:367:31:367:38 | thing_s2 | | main.rs:175:5:178:5 | MyThing | -| main.rs:367:31:367:38 | thing_s2 | A | main.rs:188:5:189:14 | S2 | -| main.rs:368:18:368:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:368:18:368:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:368:18:368:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:368:18:368:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:368:26:368:26 | y | | main.rs:175:5:178:5 | MyThing | -| main.rs:368:26:368:26 | y | A | main.rs:188:5:189:14 | S2 | -| main.rs:368:26:368:28 | y.a | | main.rs:188:5:189:14 | S2 | -| main.rs:371:13:371:13 | a | | main.rs:180:5:184:5 | MyPair | -| main.rs:371:13:371:13 | a | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:371:13:371:13 | a | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:371:17:371:41 | MyPair {...} | | main.rs:180:5:184:5 | MyPair | -| main.rs:371:17:371:41 | MyPair {...} | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:371:17:371:41 | MyPair {...} | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:371:30:371:31 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:371:38:371:39 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:372:13:372:13 | x | | main.rs:186:5:187:14 | S1 | -| main.rs:372:17:372:26 | get_fst(...) | | main.rs:186:5:187:14 | S1 | -| main.rs:372:25:372:25 | a | | main.rs:180:5:184:5 | MyPair | -| main.rs:372:25:372:25 | a | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:372:25:372:25 | a | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:373:18:373:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:373:18:373:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:373:18:373:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:373:18:373:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:373:26:373:26 | x | | main.rs:186:5:187:14 | S1 | -| main.rs:374:13:374:13 | y | | main.rs:186:5:187:14 | S1 | -| main.rs:374:17:374:26 | get_snd(...) | | main.rs:186:5:187:14 | S1 | -| main.rs:374:25:374:25 | a | | main.rs:180:5:184:5 | MyPair | -| main.rs:374:25:374:25 | a | P1 | main.rs:186:5:187:14 | S1 | -| main.rs:374:25:374:25 | a | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:375:18:375:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:375:18:375:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:375:18:375:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:375:18:375:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:375:26:375:26 | y | | main.rs:186:5:187:14 | S1 | -| main.rs:378:13:378:13 | b | | main.rs:180:5:184:5 | MyPair | -| main.rs:378:13:378:13 | b | P1 | main.rs:188:5:189:14 | S2 | -| main.rs:378:13:378:13 | b | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:378:17:378:41 | MyPair {...} | | main.rs:180:5:184:5 | MyPair | -| main.rs:378:17:378:41 | MyPair {...} | P1 | main.rs:188:5:189:14 | S2 | -| main.rs:378:17:378:41 | MyPair {...} | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:378:30:378:31 | S2 | | main.rs:188:5:189:14 | S2 | -| main.rs:378:38:378:39 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:379:13:379:13 | x | | main.rs:186:5:187:14 | S1 | -| main.rs:379:17:379:26 | get_fst(...) | | main.rs:186:5:187:14 | S1 | -| main.rs:379:25:379:25 | b | | main.rs:180:5:184:5 | MyPair | -| main.rs:379:25:379:25 | b | P1 | main.rs:188:5:189:14 | S2 | -| main.rs:379:25:379:25 | b | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:380:18:380:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:380:18:380:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:380:18:380:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:380:18:380:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:380:26:380:26 | x | | main.rs:186:5:187:14 | S1 | -| main.rs:381:13:381:13 | y | | main.rs:188:5:189:14 | S2 | -| main.rs:381:17:381:26 | get_snd(...) | | main.rs:188:5:189:14 | S2 | -| main.rs:381:25:381:25 | b | | main.rs:180:5:184:5 | MyPair | -| main.rs:381:25:381:25 | b | P1 | main.rs:188:5:189:14 | S2 | -| main.rs:381:25:381:25 | b | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:382:18:382:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:382:18:382:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:382:18:382:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:382:18:382:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:382:26:382:26 | y | | main.rs:188:5:189:14 | S2 | -| main.rs:384:13:384:13 | c | | main.rs:180:5:184:5 | MyPair | -| main.rs:384:13:384:13 | c | P1 | main.rs:190:5:191:14 | S3 | -| main.rs:384:13:384:13 | c | P2 | main.rs:180:5:184:5 | MyPair | -| main.rs:384:13:384:13 | c | P2.P1 | main.rs:188:5:189:14 | S2 | -| main.rs:384:13:384:13 | c | P2.P2 | main.rs:186:5:187:14 | S1 | -| main.rs:384:17:387:9 | MyPair {...} | | main.rs:180:5:184:5 | MyPair | -| main.rs:384:17:387:9 | MyPair {...} | P1 | main.rs:190:5:191:14 | S3 | -| main.rs:384:17:387:9 | MyPair {...} | P2 | main.rs:180:5:184:5 | MyPair | -| main.rs:384:17:387:9 | MyPair {...} | P2.P1 | main.rs:188:5:189:14 | S2 | -| main.rs:384:17:387:9 | MyPair {...} | P2.P2 | main.rs:186:5:187:14 | S1 | -| main.rs:385:17:385:18 | S3 | | main.rs:190:5:191:14 | S3 | -| main.rs:386:17:386:41 | MyPair {...} | | main.rs:180:5:184:5 | MyPair | -| main.rs:386:17:386:41 | MyPair {...} | P1 | main.rs:188:5:189:14 | S2 | -| main.rs:386:17:386:41 | MyPair {...} | P2 | main.rs:186:5:187:14 | S1 | -| main.rs:386:30:386:31 | S2 | | main.rs:188:5:189:14 | S2 | -| main.rs:386:38:386:39 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:388:13:388:13 | x | | main.rs:186:5:187:14 | S1 | -| main.rs:388:17:388:30 | get_snd_fst(...) | | main.rs:186:5:187:14 | S1 | -| main.rs:388:29:388:29 | c | | main.rs:180:5:184:5 | MyPair | -| main.rs:388:29:388:29 | c | P1 | main.rs:190:5:191:14 | S3 | -| main.rs:388:29:388:29 | c | P2 | main.rs:180:5:184:5 | MyPair | -| main.rs:388:29:388:29 | c | P2.P1 | main.rs:188:5:189:14 | S2 | -| main.rs:388:29:388:29 | c | P2.P2 | main.rs:186:5:187:14 | S1 | -| main.rs:390:13:390:17 | thing | | main.rs:175:5:178:5 | MyThing | -| main.rs:390:13:390:17 | thing | A | main.rs:186:5:187:14 | S1 | -| main.rs:390:21:390:37 | MyThing {...} | | main.rs:175:5:178:5 | MyThing | -| main.rs:390:21:390:37 | MyThing {...} | A | main.rs:186:5:187:14 | S1 | -| main.rs:390:34:390:35 | S1 | | main.rs:186:5:187:14 | S1 | -| main.rs:391:17:391:21 | thing | | main.rs:175:5:178:5 | MyThing | -| main.rs:391:17:391:21 | thing | A | main.rs:186:5:187:14 | S1 | -| main.rs:392:13:392:13 | j | | main.rs:186:5:187:14 | S1 | -| main.rs:392:17:392:33 | convert_to(...) | | main.rs:186:5:187:14 | S1 | -| main.rs:392:28:392:32 | thing | | main.rs:175:5:178:5 | MyThing | -| main.rs:392:28:392:32 | thing | A | main.rs:186:5:187:14 | S1 | -| main.rs:401:26:401:29 | SelfParam | | main.rs:400:5:404:5 | Self [trait OverlappingTrait] | -| main.rs:403:28:403:31 | SelfParam | | main.rs:400:5:404:5 | Self [trait OverlappingTrait] | -| 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: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: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" | | file://:0:0:0:0 | & | -| main.rs:491:18:491:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:491:18:491:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:491:18:491:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| 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" | | file://:0:0:0:0 | & | -| main.rs:492:18:492:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:492:18:492:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:492:18:492:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| 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" | | file://:0:0:0:0 | & | -| main.rs:495:18:495:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:495:18:495:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:495:18:495:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| 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" | | file://:0:0:0:0 | & | -| main.rs:498:18:498:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:498:18:498:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:498:18:498:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| 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" | | file://:0:0:0:0 | & | -| main.rs:501:18:501:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:501:18:501:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:501:18:501:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| 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" | | file://:0:0:0:0 | & | -| main.rs:529:18:529:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:529:18:529:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:529:18:529:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| 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" | | file://:0:0:0:0 | & | -| main.rs:535:18:535:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:535:18:535:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:535:18:535:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| 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:130:25:130:29 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:130:25:130:29 | SelfParam | &T | main.rs:128:9:133:9 | Self [trait Foo] | +| main.rs:131:26:131:31 | "foo!\\n" | | file://:0:0:0:0 | & | +| main.rs:131:26:131:31 | "foo!\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:131:26:131:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:131:26:131:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:137:25:137:29 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:137:25:137:29 | SelfParam | &T | main.rs:135:9:140:9 | Self [trait Bar] | +| main.rs:138:26:138:31 | "bar!\\n" | | file://:0:0:0:0 | & | +| main.rs:138:26:138:31 | "bar!\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:138:26:138:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:138:26:138:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:150:13:150:13 | x | | main.rs:142:9:142:21 | X | +| main.rs:150:17:150:17 | X | | main.rs:142:9:142:21 | X | +| main.rs:153:13:153:13 | x | | main.rs:142:9:142:21 | X | +| main.rs:157:13:157:13 | x | | main.rs:142:9:142:21 | X | +| main.rs:161:13:161:13 | x | | main.rs:142:9:142:21 | X | +| main.rs:167:27:167:28 | &x | | file://:0:0:0:0 | & | +| main.rs:167:27:167:28 | &x | &T | main.rs:142:9:142:21 | X | +| main.rs:167:28:167:28 | x | | main.rs:142:9:142:21 | X | +| main.rs:168:27:168:28 | &x | | file://:0:0:0:0 | & | +| main.rs:168:27:168:28 | &x | &T | main.rs:142:9:142:21 | X | +| main.rs:168:28:168:28 | x | | main.rs:142:9:142:21 | X | +| main.rs:186:15:186:18 | SelfParam | | main.rs:174:5:177:5 | MyThing | +| main.rs:186:15:186:18 | SelfParam | A | main.rs:179:5:180:14 | S1 | +| main.rs:186:27:188:9 | { ... } | | main.rs:179:5:180:14 | S1 | +| main.rs:187:13:187:16 | self | | main.rs:174:5:177:5 | MyThing | +| main.rs:187:13:187:16 | self | A | main.rs:179:5:180:14 | S1 | +| main.rs:187:13:187:18 | self.a | | main.rs:179:5:180:14 | S1 | +| main.rs:193:15:193:18 | SelfParam | | main.rs:174:5:177:5 | MyThing | +| main.rs:193:15:193:18 | SelfParam | A | main.rs:181:5:182:14 | S2 | +| main.rs:193:29:195:9 | { ... } | | main.rs:174:5:177:5 | MyThing | +| main.rs:193:29:195:9 | { ... } | A | main.rs:181:5:182:14 | S2 | +| main.rs:194:13:194:30 | Self {...} | | main.rs:174:5:177:5 | MyThing | +| main.rs:194:13:194:30 | Self {...} | A | main.rs:181:5:182:14 | S2 | +| main.rs:194:23:194:26 | self | | main.rs:174:5:177:5 | MyThing | +| main.rs:194:23:194:26 | self | A | main.rs:181:5:182:14 | S2 | +| main.rs:194:23:194:28 | self.a | | main.rs:181:5:182:14 | S2 | +| main.rs:199:15:199:18 | SelfParam | | main.rs:174:5:177:5 | MyThing | +| main.rs:199:15:199:18 | SelfParam | A | main.rs:198:10:198:10 | T | +| main.rs:199:26:201:9 | { ... } | | main.rs:198:10:198:10 | T | +| main.rs:200:13:200:16 | self | | main.rs:174:5:177:5 | MyThing | +| main.rs:200:13:200:16 | self | A | main.rs:198:10:198:10 | T | +| main.rs:200:13:200:18 | self.a | | main.rs:198:10:198:10 | T | +| main.rs:205:13:205:13 | x | | main.rs:174:5:177:5 | MyThing | +| main.rs:205:13:205:13 | x | A | main.rs:179:5:180:14 | S1 | +| main.rs:205:17:205:33 | MyThing {...} | | main.rs:174:5:177:5 | MyThing | +| main.rs:205:17:205:33 | MyThing {...} | A | main.rs:179:5:180:14 | S1 | +| main.rs:205:30:205:31 | S1 | | main.rs:179:5:180:14 | S1 | +| main.rs:206:13:206:13 | y | | main.rs:174:5:177:5 | MyThing | +| main.rs:206:13:206:13 | y | A | main.rs:181:5:182:14 | S2 | +| main.rs:206:17:206:33 | MyThing {...} | | main.rs:174:5:177:5 | MyThing | +| main.rs:206:17:206:33 | MyThing {...} | A | main.rs:181:5:182:14 | S2 | +| main.rs:206:30:206:31 | S2 | | main.rs:181:5:182:14 | S2 | +| main.rs:209:18:209:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:209:18:209:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:209:18:209:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:209:18:209:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:209:26:209:26 | x | | main.rs:174:5:177:5 | MyThing | +| main.rs:209:26:209:26 | x | A | main.rs:179:5:180:14 | S1 | +| main.rs:209:26:209:28 | x.a | | main.rs:179:5:180:14 | S1 | +| main.rs:210:18:210:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:210:18:210:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:210:18:210:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:210:18:210:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:210:26:210:26 | y | | main.rs:174:5:177:5 | MyThing | +| main.rs:210:26:210:26 | y | A | main.rs:181:5:182:14 | S2 | +| main.rs:210:26:210:28 | y.a | | main.rs:181:5:182:14 | S2 | +| main.rs:212:18:212:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:212:18:212:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:212:18:212:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:212:18:212:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:212:26:212:26 | x | | main.rs:174:5:177:5 | MyThing | +| main.rs:212:26:212:26 | x | A | main.rs:179:5:180:14 | S1 | +| main.rs:212:26:212:31 | x.m1() | | main.rs:179:5:180:14 | S1 | +| main.rs:213:18:213:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:213:18:213:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:213:18:213:33 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:213:18:213:33 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:213:26:213:26 | y | | main.rs:174:5:177:5 | MyThing | +| main.rs:213:26:213:26 | y | A | main.rs:181:5:182:14 | S2 | +| main.rs:213:26:213:31 | y.m1() | | main.rs:174:5:177:5 | MyThing | +| main.rs:213:26:213:31 | y.m1() | A | main.rs:181:5:182:14 | S2 | +| main.rs:213:26:213:33 | ... .a | | main.rs:181:5:182:14 | S2 | +| main.rs:215:13:215:13 | x | | main.rs:174:5:177:5 | MyThing | +| main.rs:215:13:215:13 | x | A | main.rs:179:5:180:14 | S1 | +| main.rs:215:17:215:33 | MyThing {...} | | main.rs:174:5:177:5 | MyThing | +| main.rs:215:17:215:33 | MyThing {...} | A | main.rs:179:5:180:14 | S1 | +| main.rs:215:30:215:31 | S1 | | main.rs:179:5:180:14 | S1 | +| main.rs:216:13:216:13 | y | | main.rs:174:5:177:5 | MyThing | +| main.rs:216:13:216:13 | y | A | main.rs:181:5:182:14 | S2 | +| main.rs:216:17:216:33 | MyThing {...} | | main.rs:174:5:177:5 | MyThing | +| main.rs:216:17:216:33 | MyThing {...} | A | main.rs:181:5:182:14 | S2 | +| main.rs:216:30:216:31 | S2 | | main.rs:181:5:182:14 | S2 | +| main.rs:218:18:218:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:218:18:218:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:218:18:218:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:218:18:218:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:218:26:218:26 | x | | main.rs:174:5:177:5 | MyThing | +| main.rs:218:26:218:26 | x | A | main.rs:179:5:180:14 | S1 | +| main.rs:218:26:218:31 | x.m2() | | main.rs:179:5:180:14 | S1 | +| main.rs:219:18:219:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:219:18:219:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:219:18:219:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:219:18:219:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:219:26:219:26 | y | | main.rs:174:5:177:5 | MyThing | +| main.rs:219:26:219:26 | y | A | main.rs:181:5:182:14 | S2 | +| main.rs:219:26:219:31 | y.m2() | | main.rs:181:5:182:14 | S2 | +| main.rs:243:15:243:18 | SelfParam | | main.rs:242:5:251:5 | Self [trait MyTrait] | +| main.rs:245:15:245:18 | SelfParam | | main.rs:242:5:251:5 | Self [trait MyTrait] | +| main.rs:248:9:250:9 | { ... } | | main.rs:242:5:251:5 | Self [trait MyTrait] | +| main.rs:249:13:249:16 | self | | main.rs:242:5:251:5 | Self [trait MyTrait] | +| main.rs:255:16:255:19 | SelfParam | | main.rs:253:5:258:5 | Self [trait MyProduct] | +| main.rs:257:16:257:19 | SelfParam | | main.rs:253:5:258:5 | Self [trait MyProduct] | +| main.rs:260:43:260:43 | x | | main.rs:260:26:260:40 | T2 | +| main.rs:260:56:262:5 | { ... } | | main.rs:260:22:260:23 | T1 | +| main.rs:261:9:261:9 | x | | main.rs:260:26:260:40 | T2 | +| main.rs:261:9:261:14 | x.m1() | | main.rs:260:22:260:23 | T1 | +| main.rs:266:15:266:18 | SelfParam | | main.rs:224:5:227:5 | MyThing | +| main.rs:266:15:266:18 | SelfParam | A | main.rs:235:5:236:14 | S1 | +| main.rs:266:27:268:9 | { ... } | | main.rs:235:5:236:14 | S1 | +| main.rs:267:13:267:16 | self | | main.rs:224:5:227:5 | MyThing | +| main.rs:267:13:267:16 | self | A | main.rs:235:5:236:14 | S1 | +| main.rs:267:13:267:18 | self.a | | main.rs:235:5:236:14 | S1 | +| main.rs:273:15:273:18 | SelfParam | | main.rs:224:5:227:5 | MyThing | +| main.rs:273:15:273:18 | SelfParam | A | main.rs:237:5:238:14 | S2 | +| main.rs:273:29:275:9 | { ... } | | main.rs:224:5:227:5 | MyThing | +| main.rs:273:29:275:9 | { ... } | A | main.rs:237:5:238:14 | S2 | +| main.rs:274:13:274:30 | Self {...} | | main.rs:224:5:227:5 | MyThing | +| main.rs:274:13:274:30 | Self {...} | A | main.rs:237:5:238:14 | S2 | +| main.rs:274:23:274:26 | self | | main.rs:224:5:227:5 | MyThing | +| main.rs:274:23:274:26 | self | A | main.rs:237:5:238:14 | S2 | +| main.rs:274:23:274:28 | self.a | | main.rs:237:5:238:14 | S2 | +| main.rs:285:15:285:18 | SelfParam | | main.rs:224:5:227:5 | MyThing | +| main.rs:285:15:285:18 | SelfParam | A | main.rs:239:5:240:14 | S3 | +| main.rs:285:27:287:9 | { ... } | | main.rs:280:10:280:11 | TD | +| main.rs:286:13:286:25 | ...::default(...) | | main.rs:280:10:280:11 | TD | +| main.rs:292:15:292:18 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:292:15:292:18 | SelfParam | P1 | main.rs:290:10:290:10 | I | +| main.rs:292:15:292:18 | SelfParam | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:292:26:294:9 | { ... } | | main.rs:290:10:290:10 | I | +| main.rs:293:13:293:16 | self | | main.rs:229:5:233:5 | MyPair | +| main.rs:293:13:293:16 | self | P1 | main.rs:290:10:290:10 | I | +| main.rs:293:13:293:16 | self | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:293:13:293:19 | self.p1 | | main.rs:290:10:290:10 | I | +| main.rs:299:15:299:18 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:299:15:299:18 | SelfParam | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:299:15:299:18 | SelfParam | P2 | main.rs:237:5:238:14 | S2 | +| main.rs:299:27:301:9 | { ... } | | main.rs:239:5:240:14 | S3 | +| main.rs:300:13:300:14 | S3 | | main.rs:239:5:240:14 | S3 | +| main.rs:306:15:306:18 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:306:15:306:18 | SelfParam | P1 | main.rs:224:5:227:5 | MyThing | +| main.rs:306:15:306:18 | SelfParam | P1.A | main.rs:304:10:304:11 | TT | +| main.rs:306:15:306:18 | SelfParam | P2 | main.rs:239:5:240:14 | S3 | +| main.rs:306:27:309:9 | { ... } | | main.rs:304:10:304:11 | TT | +| main.rs:307:17:307:21 | alpha | | main.rs:224:5:227:5 | MyThing | +| main.rs:307:17:307:21 | alpha | A | main.rs:304:10:304:11 | TT | +| main.rs:307:25:307:28 | self | | main.rs:229:5:233:5 | MyPair | +| main.rs:307:25:307:28 | self | P1 | main.rs:224:5:227:5 | MyThing | +| main.rs:307:25:307:28 | self | P1.A | main.rs:304:10:304:11 | TT | +| main.rs:307:25:307:28 | self | P2 | main.rs:239:5:240:14 | S3 | +| main.rs:307:25:307:31 | self.p1 | | main.rs:224:5:227:5 | MyThing | +| main.rs:307:25:307:31 | self.p1 | A | main.rs:304:10:304:11 | TT | +| main.rs:308:13:308:17 | alpha | | main.rs:224:5:227:5 | MyThing | +| main.rs:308:13:308:17 | alpha | A | main.rs:304:10:304:11 | TT | +| main.rs:308:13:308:19 | alpha.a | | main.rs:304:10:304:11 | TT | +| main.rs:315:16:315:19 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:315:16:315:19 | SelfParam | P1 | main.rs:313:10:313:10 | A | +| main.rs:315:16:315:19 | SelfParam | P2 | main.rs:313:10:313:10 | A | +| main.rs:315:27:317:9 | { ... } | | main.rs:313:10:313:10 | A | +| main.rs:316:13:316:16 | self | | main.rs:229:5:233:5 | MyPair | +| main.rs:316:13:316:16 | self | P1 | main.rs:313:10:313:10 | A | +| main.rs:316:13:316:16 | self | P2 | main.rs:313:10:313:10 | A | +| main.rs:316:13:316:19 | self.p1 | | main.rs:313:10:313:10 | A | +| main.rs:320:16:320:19 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:320:16:320:19 | SelfParam | P1 | main.rs:313:10:313:10 | A | +| main.rs:320:16:320:19 | SelfParam | P2 | main.rs:313:10:313:10 | A | +| main.rs:320:27:322:9 | { ... } | | main.rs:313:10:313:10 | A | +| main.rs:321:13:321:16 | self | | main.rs:229:5:233:5 | MyPair | +| main.rs:321:13:321:16 | self | P1 | main.rs:313:10:313:10 | A | +| main.rs:321:13:321:16 | self | P2 | main.rs:313:10:313:10 | A | +| main.rs:321:13:321:19 | self.p2 | | main.rs:313:10:313:10 | A | +| main.rs:328:16:328:19 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:328:16:328:19 | SelfParam | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:328:16:328:19 | SelfParam | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:328:28:330:9 | { ... } | | main.rs:235:5:236:14 | S1 | +| main.rs:329:13:329:16 | self | | main.rs:229:5:233:5 | MyPair | +| main.rs:329:13:329:16 | self | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:329:13:329:16 | self | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:329:13:329:19 | self.p2 | | main.rs:235:5:236:14 | S1 | +| main.rs:333:16:333:19 | SelfParam | | main.rs:229:5:233:5 | MyPair | +| main.rs:333:16:333:19 | SelfParam | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:333:16:333:19 | SelfParam | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:333:28:335:9 | { ... } | | main.rs:237:5:238:14 | S2 | +| main.rs:334:13:334:16 | self | | main.rs:229:5:233:5 | MyPair | +| main.rs:334:13:334:16 | self | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:334:13:334:16 | self | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:334:13:334:19 | self.p1 | | main.rs:237:5:238:14 | S2 | +| main.rs:338:46:338:46 | p | | main.rs:338:24:338:43 | P | +| main.rs:338:58:340:5 | { ... } | | main.rs:338:16:338:17 | V1 | +| main.rs:339:9:339:9 | p | | main.rs:338:24:338:43 | P | +| main.rs:339:9:339:15 | p.fst() | | main.rs:338:16:338:17 | V1 | +| main.rs:342:46:342:46 | p | | main.rs:342:24:342:43 | P | +| main.rs:342:58:344:5 | { ... } | | main.rs:342:20:342:21 | V2 | +| main.rs:343:9:343:9 | p | | main.rs:342:24:342:43 | P | +| main.rs:343:9:343:15 | p.snd() | | main.rs:342:20:342:21 | V2 | +| main.rs:346:54:346:54 | p | | main.rs:229:5:233:5 | MyPair | +| main.rs:346:54:346:54 | p | P1 | main.rs:346:20:346:21 | V0 | +| main.rs:346:54:346:54 | p | P2 | main.rs:346:32:346:51 | P | +| main.rs:346:78:348:5 | { ... } | | main.rs:346:24:346:25 | V1 | +| main.rs:347:9:347:9 | p | | main.rs:229:5:233:5 | MyPair | +| main.rs:347:9:347:9 | p | P1 | main.rs:346:20:346:21 | V0 | +| main.rs:347:9:347:9 | p | P2 | main.rs:346:32:346:51 | P | +| main.rs:347:9:347:12 | p.p2 | | main.rs:346:32:346:51 | P | +| main.rs:347:9:347:18 | ... .fst() | | main.rs:346:24:346:25 | V1 | +| main.rs:352:23:352:26 | SelfParam | | main.rs:350:5:353:5 | Self [trait ConvertTo] | +| main.rs:357:23:357:26 | SelfParam | | main.rs:355:10:355:23 | T | +| main.rs:357:35:359:9 | { ... } | | main.rs:235:5:236:14 | S1 | +| main.rs:358:13:358:16 | self | | main.rs:355:10:355:23 | T | +| main.rs:358:13:358:21 | self.m1() | | main.rs:235:5:236:14 | S1 | +| main.rs:362:41:362:45 | thing | | main.rs:362:23:362:38 | T | +| main.rs:362:57:364:5 | { ... } | | main.rs:362:19:362:20 | TS | +| main.rs:363:9:363:13 | thing | | main.rs:362:23:362:38 | T | +| main.rs:363:9:363:26 | thing.convert_to() | | main.rs:362:19:362:20 | TS | +| main.rs:366:56:366:60 | thing | | main.rs:366:39:366:53 | TP | +| main.rs:366:73:369:5 | { ... } | | main.rs:235:5:236:14 | S1 | +| main.rs:368:9:368:13 | thing | | main.rs:366:39:366:53 | TP | +| main.rs:368:9:368:26 | thing.convert_to() | | main.rs:235:5:236:14 | S1 | +| main.rs:372:13:372:20 | thing_s1 | | main.rs:224:5:227:5 | MyThing | +| main.rs:372:13:372:20 | thing_s1 | A | main.rs:235:5:236:14 | S1 | +| main.rs:372:24:372:40 | MyThing {...} | | main.rs:224:5:227:5 | MyThing | +| main.rs:372:24:372:40 | MyThing {...} | A | main.rs:235:5:236:14 | S1 | +| main.rs:372:37:372:38 | S1 | | main.rs:235:5:236:14 | S1 | +| main.rs:373:13:373:20 | thing_s2 | | main.rs:224:5:227:5 | MyThing | +| main.rs:373:13:373:20 | thing_s2 | A | main.rs:237:5:238:14 | S2 | +| main.rs:373:24:373:40 | MyThing {...} | | main.rs:224:5:227:5 | MyThing | +| main.rs:373:24:373:40 | MyThing {...} | A | main.rs:237:5:238:14 | S2 | +| main.rs:373:37:373:38 | S2 | | main.rs:237:5:238:14 | S2 | +| main.rs:374:13:374:20 | thing_s3 | | main.rs:224:5:227:5 | MyThing | +| main.rs:374:13:374:20 | thing_s3 | A | main.rs:239:5:240:14 | S3 | +| main.rs:374:24:374:40 | MyThing {...} | | main.rs:224:5:227:5 | MyThing | +| main.rs:374:24:374:40 | MyThing {...} | A | main.rs:239:5:240:14 | S3 | +| main.rs:374:37:374:38 | S3 | | main.rs:239:5:240:14 | S3 | +| main.rs:378:18:378:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:378:18:378:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:378:18:378:38 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:378:18:378:38 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:378:26:378:33 | thing_s1 | | main.rs:224:5:227:5 | MyThing | +| main.rs:378:26:378:33 | thing_s1 | A | main.rs:235:5:236:14 | S1 | +| main.rs:378:26:378:38 | thing_s1.m1() | | main.rs:235:5:236:14 | S1 | +| main.rs:379:18:379:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:379:18:379:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:379:18:379:40 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:379:18:379:40 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:379:26:379:33 | thing_s2 | | main.rs:224:5:227:5 | MyThing | +| main.rs:379:26:379:33 | thing_s2 | A | main.rs:237:5:238:14 | S2 | +| main.rs:379:26:379:38 | thing_s2.m1() | | main.rs:224:5:227:5 | MyThing | +| main.rs:379:26:379:38 | thing_s2.m1() | A | main.rs:237:5:238:14 | S2 | +| main.rs:379:26:379:40 | ... .a | | main.rs:237:5:238:14 | S2 | +| main.rs:380:13:380:14 | s3 | | main.rs:239:5:240:14 | S3 | +| main.rs:380:22:380:29 | thing_s3 | | main.rs:224:5:227:5 | MyThing | +| main.rs:380:22:380:29 | thing_s3 | A | main.rs:239:5:240:14 | S3 | +| main.rs:380:22:380:34 | thing_s3.m1() | | main.rs:239:5:240:14 | S3 | +| main.rs:381:18:381:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:381:18:381:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:381:18:381:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:381:18:381:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:381:26:381:27 | s3 | | main.rs:239:5:240:14 | S3 | +| main.rs:383:13:383:14 | p1 | | main.rs:229:5:233:5 | MyPair | +| main.rs:383:13:383:14 | p1 | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:383:13:383:14 | p1 | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:383:18:383:42 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:383:18:383:42 | MyPair {...} | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:383:18:383:42 | MyPair {...} | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:383:31:383:32 | S1 | | main.rs:235:5:236:14 | S1 | +| main.rs:383:39:383:40 | S1 | | main.rs:235:5:236:14 | S1 | +| main.rs:384:18:384:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:384:18:384:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:384:18:384:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:384:18:384:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:384:26:384:27 | p1 | | main.rs:229:5:233:5 | MyPair | +| main.rs:384:26:384:27 | p1 | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:384:26:384:27 | p1 | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:384:26:384:32 | p1.m1() | | main.rs:235:5:236:14 | S1 | +| main.rs:386:13:386:14 | p2 | | main.rs:229:5:233:5 | MyPair | +| main.rs:386:13:386:14 | p2 | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:386:13:386:14 | p2 | P2 | main.rs:237:5:238:14 | S2 | +| main.rs:386:18:386:42 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:386:18:386:42 | MyPair {...} | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:386:18:386:42 | MyPair {...} | P2 | main.rs:237:5:238:14 | S2 | +| main.rs:386:31:386:32 | S1 | | main.rs:235:5:236:14 | S1 | +| main.rs:386:39:386:40 | S2 | | main.rs:237:5:238:14 | S2 | +| main.rs:387:18:387:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:387:18:387:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:387:18:387:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:387:18:387:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:387:26:387:27 | p2 | | main.rs:229:5:233:5 | MyPair | +| main.rs:387:26:387:27 | p2 | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:387:26:387:27 | p2 | P2 | main.rs:237:5:238:14 | S2 | +| main.rs:387:26:387:32 | p2.m1() | | main.rs:239:5:240:14 | S3 | +| main.rs:389:13:389:14 | p3 | | main.rs:229:5:233:5 | MyPair | +| main.rs:389:13:389:14 | p3 | P1 | main.rs:224:5:227:5 | MyThing | +| main.rs:389:13:389:14 | p3 | P1.A | main.rs:235:5:236:14 | S1 | +| main.rs:389:13:389:14 | p3 | P2 | main.rs:239:5:240:14 | S3 | +| main.rs:389:18:392:9 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:389:18:392:9 | MyPair {...} | P1 | main.rs:224:5:227:5 | MyThing | +| main.rs:389:18:392:9 | MyPair {...} | P1.A | main.rs:235:5:236:14 | S1 | +| main.rs:389:18:392:9 | MyPair {...} | P2 | main.rs:239:5:240:14 | S3 | +| main.rs:390:17:390:33 | MyThing {...} | | main.rs:224:5:227:5 | MyThing | +| main.rs:390:17:390:33 | MyThing {...} | A | main.rs:235:5:236:14 | S1 | +| main.rs:390:30:390:31 | S1 | | main.rs:235:5:236:14 | S1 | +| main.rs:391:17:391:18 | S3 | | main.rs:239:5:240:14 | S3 | +| main.rs:393:18:393:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:393:18:393:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:393:18:393:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:393:18:393:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:393:26:393:27 | p3 | | main.rs:229:5:233:5 | MyPair | +| main.rs:393:26:393:27 | p3 | P1 | main.rs:224:5:227:5 | MyThing | +| main.rs:393:26:393:27 | p3 | P1.A | main.rs:235:5:236:14 | S1 | +| main.rs:393:26:393:27 | p3 | P2 | main.rs:239:5:240:14 | S3 | +| main.rs:393:26:393:32 | p3.m1() | | main.rs:235:5:236:14 | S1 | +| main.rs:396:13:396:13 | a | | main.rs:229:5:233:5 | MyPair | +| main.rs:396:13:396:13 | a | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:396:13:396:13 | a | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:396:17:396:41 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:396:17:396:41 | MyPair {...} | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:396:17:396:41 | MyPair {...} | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:396:30:396:31 | S1 | | main.rs:235:5:236:14 | S1 | +| main.rs:396:38:396:39 | S1 | | main.rs:235:5:236:14 | S1 | +| main.rs:397:13:397:13 | x | | main.rs:235:5:236:14 | S1 | +| main.rs:397:17:397:17 | a | | main.rs:229:5:233:5 | MyPair | +| main.rs:397:17:397:17 | a | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:397:17:397:17 | a | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:397:17:397:23 | a.fst() | | main.rs:235:5:236:14 | S1 | +| main.rs:398:18:398:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:398:18:398:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:398:18:398:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:398:18:398:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:398:26:398:26 | x | | main.rs:235:5:236:14 | S1 | +| main.rs:399:13:399:13 | y | | main.rs:235:5:236:14 | S1 | +| main.rs:399:17:399:17 | a | | main.rs:229:5:233:5 | MyPair | +| main.rs:399:17:399:17 | a | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:399:17:399:17 | a | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:399:17:399:23 | a.snd() | | main.rs:235:5:236:14 | S1 | +| main.rs:400:18:400:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:400:18:400:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:400:18:400:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:400:18:400:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:400:26:400:26 | y | | main.rs:235:5:236:14 | S1 | +| main.rs:406:13:406:13 | b | | main.rs:229:5:233:5 | MyPair | +| main.rs:406:13:406:13 | b | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:406:13:406:13 | b | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:406:17:406:41 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:406:17:406:41 | MyPair {...} | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:406:17:406:41 | MyPair {...} | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:406:30:406:31 | S2 | | main.rs:237:5:238:14 | S2 | +| main.rs:406:38:406:39 | S1 | | main.rs:235:5:236:14 | S1 | +| main.rs:407:13:407:13 | x | | main.rs:235:5:236:14 | S1 | +| main.rs:407:17:407:17 | b | | main.rs:229:5:233:5 | MyPair | +| main.rs:407:17:407:17 | b | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:407:17:407:17 | b | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:407:17:407:23 | b.fst() | | main.rs:235:5:236:14 | S1 | +| main.rs:408:18:408:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:408:18:408:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:408:18:408:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:408:18:408:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:408:26:408:26 | x | | main.rs:235:5:236:14 | S1 | +| main.rs:409:13:409:13 | y | | main.rs:237:5:238:14 | S2 | +| main.rs:409:17:409:17 | b | | main.rs:229:5:233:5 | MyPair | +| main.rs:409:17:409:17 | b | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:409:17:409:17 | b | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:409:17:409:23 | b.snd() | | main.rs:237:5:238:14 | S2 | +| main.rs:410:18:410:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:410:18:410:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:410:18:410:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:410:18:410:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:410:26:410:26 | y | | main.rs:237:5:238:14 | S2 | +| main.rs:414:13:414:13 | x | | main.rs:235:5:236:14 | S1 | +| main.rs:414:17:414:39 | call_trait_m1(...) | | main.rs:235:5:236:14 | S1 | +| main.rs:414:31:414:38 | thing_s1 | | main.rs:224:5:227:5 | MyThing | +| main.rs:414:31:414:38 | thing_s1 | A | main.rs:235:5:236:14 | S1 | +| main.rs:415:18:415:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:415:18:415:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:415:18:415:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:415:18:415:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:415:26:415:26 | x | | main.rs:235:5:236:14 | S1 | +| main.rs:416:13:416:13 | y | | main.rs:224:5:227:5 | MyThing | +| main.rs:416:13:416:13 | y | A | main.rs:237:5:238:14 | S2 | +| main.rs:416:17:416:39 | call_trait_m1(...) | | main.rs:224:5:227:5 | MyThing | +| main.rs:416:17:416:39 | call_trait_m1(...) | A | main.rs:237:5:238:14 | S2 | +| main.rs:416:31:416:38 | thing_s2 | | main.rs:224:5:227:5 | MyThing | +| main.rs:416:31:416:38 | thing_s2 | A | main.rs:237:5:238:14 | S2 | +| main.rs:417:18:417:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:417:18:417:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:417:18:417:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:417:18:417:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:417:26:417:26 | y | | main.rs:224:5:227:5 | MyThing | +| main.rs:417:26:417:26 | y | A | main.rs:237:5:238:14 | S2 | +| main.rs:417:26:417:28 | y.a | | main.rs:237:5:238:14 | S2 | +| main.rs:420:13:420:13 | a | | main.rs:229:5:233:5 | MyPair | +| main.rs:420:13:420:13 | a | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:420:13:420:13 | a | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:420:17:420:41 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:420:17:420:41 | MyPair {...} | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:420:17:420:41 | MyPair {...} | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:420:30:420:31 | S1 | | main.rs:235:5:236:14 | S1 | +| main.rs:420:38:420:39 | S1 | | main.rs:235:5:236:14 | S1 | +| main.rs:421:13:421:13 | x | | main.rs:235:5:236:14 | S1 | +| main.rs:421:17:421:26 | get_fst(...) | | main.rs:235:5:236:14 | S1 | +| main.rs:421:25:421:25 | a | | main.rs:229:5:233:5 | MyPair | +| main.rs:421:25:421:25 | a | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:421:25:421:25 | a | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:422:18:422:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:422:18:422:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:422:18:422:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:422:18:422:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:422:26:422:26 | x | | main.rs:235:5:236:14 | S1 | +| main.rs:423:13:423:13 | y | | main.rs:235:5:236:14 | S1 | +| main.rs:423:17:423:26 | get_snd(...) | | main.rs:235:5:236:14 | S1 | +| main.rs:423:25:423:25 | a | | main.rs:229:5:233:5 | MyPair | +| main.rs:423:25:423:25 | a | P1 | main.rs:235:5:236:14 | S1 | +| main.rs:423:25:423:25 | a | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:424:18:424:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:424:18:424:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:424:18:424:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:424:18:424:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:424:26:424:26 | y | | main.rs:235:5:236:14 | S1 | +| main.rs:427:13:427:13 | b | | main.rs:229:5:233:5 | MyPair | +| main.rs:427:13:427:13 | b | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:427:13:427:13 | b | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:427:17:427:41 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:427:17:427:41 | MyPair {...} | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:427:17:427:41 | MyPair {...} | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:427:30:427:31 | S2 | | main.rs:237:5:238:14 | S2 | +| main.rs:427:38:427:39 | S1 | | main.rs:235:5:236:14 | S1 | +| main.rs:428:13:428:13 | x | | main.rs:235:5:236:14 | S1 | +| main.rs:428:17:428:26 | get_fst(...) | | main.rs:235:5:236:14 | S1 | +| main.rs:428:25:428:25 | b | | main.rs:229:5:233:5 | MyPair | +| main.rs:428:25:428:25 | b | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:428:25:428:25 | b | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:429:18:429:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:429:18:429:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:429:18:429:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:429:18:429:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:429:26:429:26 | x | | main.rs:235:5:236:14 | S1 | +| main.rs:430:13:430:13 | y | | main.rs:237:5:238:14 | S2 | +| main.rs:430:17:430:26 | get_snd(...) | | main.rs:237:5:238:14 | S2 | +| main.rs:430:25:430:25 | b | | main.rs:229:5:233:5 | MyPair | +| main.rs:430:25:430:25 | b | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:430:25:430:25 | b | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:431:18:431:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:431:18:431:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:431:18:431:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:431:18:431:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:431:26:431:26 | y | | main.rs:237:5:238:14 | S2 | +| main.rs:433:13:433:13 | c | | main.rs:229:5:233:5 | MyPair | +| main.rs:433:13:433:13 | c | P1 | main.rs:239:5:240:14 | S3 | +| main.rs:433:13:433:13 | c | P2 | main.rs:229:5:233:5 | MyPair | +| main.rs:433:13:433:13 | c | P2.P1 | main.rs:237:5:238:14 | S2 | +| main.rs:433:13:433:13 | c | P2.P2 | main.rs:235:5:236:14 | S1 | +| main.rs:433:17:436:9 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:433:17:436:9 | MyPair {...} | P1 | main.rs:239:5:240:14 | S3 | +| main.rs:433:17:436:9 | MyPair {...} | P2 | main.rs:229:5:233:5 | MyPair | +| main.rs:433:17:436:9 | MyPair {...} | P2.P1 | main.rs:237:5:238:14 | S2 | +| main.rs:433:17:436:9 | MyPair {...} | P2.P2 | main.rs:235:5:236:14 | S1 | +| main.rs:434:17:434:18 | S3 | | main.rs:239:5:240:14 | S3 | +| main.rs:435:17:435:41 | MyPair {...} | | main.rs:229:5:233:5 | MyPair | +| main.rs:435:17:435:41 | MyPair {...} | P1 | main.rs:237:5:238:14 | S2 | +| main.rs:435:17:435:41 | MyPair {...} | P2 | main.rs:235:5:236:14 | S1 | +| main.rs:435:30:435:31 | S2 | | main.rs:237:5:238:14 | S2 | +| main.rs:435:38:435:39 | S1 | | main.rs:235:5:236:14 | S1 | +| main.rs:437:13:437:13 | x | | main.rs:235:5:236:14 | S1 | +| main.rs:437:17:437:30 | get_snd_fst(...) | | main.rs:235:5:236:14 | S1 | +| main.rs:437:29:437:29 | c | | main.rs:229:5:233:5 | MyPair | +| main.rs:437:29:437:29 | c | P1 | main.rs:239:5:240:14 | S3 | +| main.rs:437:29:437:29 | c | P2 | main.rs:229:5:233:5 | MyPair | +| main.rs:437:29:437:29 | c | P2.P1 | main.rs:237:5:238:14 | S2 | +| main.rs:437:29:437:29 | c | P2.P2 | main.rs:235:5:236:14 | S1 | +| main.rs:439:13:439:17 | thing | | main.rs:224:5:227:5 | MyThing | +| main.rs:439:13:439:17 | thing | A | main.rs:235:5:236:14 | S1 | +| main.rs:439:21:439:37 | MyThing {...} | | main.rs:224:5:227:5 | MyThing | +| main.rs:439:21:439:37 | MyThing {...} | A | main.rs:235:5:236:14 | S1 | +| main.rs:439:34:439:35 | S1 | | main.rs:235:5:236:14 | S1 | +| main.rs:440:17:440:21 | thing | | main.rs:224:5:227:5 | MyThing | +| main.rs:440:17:440:21 | thing | A | main.rs:235:5:236:14 | S1 | +| main.rs:441:13:441:13 | j | | main.rs:235:5:236:14 | S1 | +| main.rs:441:17:441:33 | convert_to(...) | | main.rs:235:5:236:14 | S1 | +| main.rs:441:28:441:32 | thing | | main.rs:224:5:227:5 | MyThing | +| main.rs:441:28:441:32 | thing | A | main.rs:235:5:236:14 | S1 | +| main.rs:450:26:450:29 | SelfParam | | main.rs:449:5:453:5 | Self [trait OverlappingTrait] | +| main.rs:452:28:452:31 | SelfParam | | main.rs:449:5:453:5 | Self [trait OverlappingTrait] | +| main.rs:452:34:452:35 | s1 | | main.rs:446:5:447:14 | S1 | +| main.rs:457:26:457:29 | SelfParam | | main.rs:446:5:447:14 | S1 | +| main.rs:457:38:459:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:458:13:458:14 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:462:28:462:31 | SelfParam | | main.rs:446:5:447:14 | S1 | +| main.rs:462:34:462:35 | s1 | | main.rs:446:5:447:14 | S1 | +| main.rs:462:48:464:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:463:13:463:14 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:469:26:469:29 | SelfParam | | main.rs:446:5:447:14 | S1 | +| main.rs:469:38:471:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:470:13:470:16 | self | | main.rs:446:5:447:14 | S1 | +| main.rs:474:28:474:31 | SelfParam | | main.rs:446:5:447:14 | S1 | +| main.rs:474:40:476:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:475:13:475:16 | self | | main.rs:446:5:447:14 | S1 | +| main.rs:483:26:483:29 | SelfParam | | main.rs:479:5:479:22 | S2 | +| main.rs:483:26:483:29 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:483:38:485:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:484:13:484:14 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:488:28:488:31 | SelfParam | | main.rs:479:5:479:22 | S2 | +| main.rs:488:28:488:31 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:488:40:490:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:489:13:489:14 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:495:26:495:29 | SelfParam | | main.rs:479:5:479:22 | S2 | +| main.rs:495:26:495:29 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:495:38:497:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:496:13:496:14 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:500:28:500:31 | SelfParam | | main.rs:479:5:479:22 | S2 | +| main.rs:500:28:500:31 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:500:34:500:35 | s1 | | main.rs:446:5:447:14 | S1 | +| main.rs:500:48:502:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:501:13:501:14 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:507:26:507:29 | SelfParam | | main.rs:479:5:479:22 | S2 | +| main.rs:507:26:507:29 | SelfParam | T2 | main.rs:446:5:447:14 | S1 | +| main.rs:507:38:509:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:508:13:508:14 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:512:28:512:31 | SelfParam | | main.rs:479:5:479:22 | S2 | +| main.rs:512:28:512:31 | SelfParam | T2 | main.rs:446:5:447:14 | S1 | +| main.rs:512:34:512:35 | s1 | | main.rs:446:5:447:14 | S1 | +| main.rs:512:48:514:9 | { ... } | | main.rs:446:5:447:14 | S1 | +| main.rs:513:13:513:14 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:521:14:521:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:521:14:521:18 | SelfParam | &T | main.rs:520:5:522:5 | Self [trait OverlappingTrait2] | +| main.rs:521:21:521:21 | x | | file://:0:0:0:0 | & | +| main.rs:521:21:521:21 | x | &T | main.rs:520:29:520:29 | T | +| main.rs:526:14:526:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:526:14:526:18 | SelfParam | &T | main.rs:517:5:518:22 | S3 | +| main.rs:526:14:526:18 | SelfParam | &T.T3 | main.rs:524:10:524:10 | T | +| main.rs:526:21:526:21 | x | | file://:0:0:0:0 | & | +| main.rs:526:21:526:21 | x | &T | main.rs:524:10:524:10 | T | +| main.rs:526:37:528:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:526:37:528:9 | { ... } | &T | main.rs:517:5:518:22 | S3 | +| main.rs:526:37:528:9 | { ... } | &T.T3 | main.rs:524:10:524:10 | T | +| main.rs:527:13:527:16 | self | | file://:0:0:0:0 | & | +| main.rs:527:13:527:16 | self | &T | main.rs:517:5:518:22 | S3 | +| main.rs:527:13:527:16 | self | &T.T3 | main.rs:524:10:524:10 | T | +| main.rs:533:14:533:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:533:14:533:18 | SelfParam | &T | main.rs:517:5:518:22 | S3 | +| main.rs:533:14:533:18 | SelfParam | &T.T3 | main.rs:531:10:531:10 | T | +| main.rs:533:21:533:21 | x | | main.rs:531:10:531:10 | T | +| main.rs:533:36:535:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:533:36:535:9 | { ... } | &T | main.rs:517:5:518:22 | S3 | +| main.rs:533:36:535:9 | { ... } | &T.T3 | main.rs:531:10:531:10 | T | +| main.rs:534:13:534:16 | self | | file://:0:0:0:0 | & | +| main.rs:534:13:534:16 | self | &T | main.rs:517:5:518:22 | S3 | +| main.rs:534:13:534:16 | self | &T.T3 | main.rs:531:10:531:10 | T | +| main.rs:539:13:539:13 | x | | main.rs:446:5:447:14 | S1 | +| main.rs:539:17:539:18 | S1 | | main.rs:446:5:447:14 | S1 | | main.rs:540:18:540:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:540:18:540:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:540:18:540:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:540:18:540:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| 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" | | file://:0:0:0:0 | & | -| main.rs:545:18:545:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:545:18:545:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:545:18:545:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:545:26:545:26 | s | | main.rs:508:5:509:14 | S1 | -| main.rs:548:43:548:43 | x | | main.rs:548:40:548:40 | T | -| main.rs:552:13:552:13 | s | | main.rs:508:5:509:14 | S1 | -| main.rs:552:17:552:17 | x | | main.rs:548:40:548:40 | T | -| main.rs:552:17:552:26 | x.method() | | main.rs:508:5:509:14 | S1 | -| main.rs:553:18:553:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:553:18:553:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:553:18:553:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:553:18:553:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:553:26:553:26 | s | | main.rs:508:5:509:14 | S1 | -| main.rs:557:16:557:19 | SelfParam | | main.rs:556:5:560:5 | Self [trait Pair] | -| main.rs:559:16:559:19 | SelfParam | | main.rs:556:5:560:5 | Self [trait Pair] | -| main.rs:562:53:562:53 | x | | main.rs:562:50:562:50 | T | -| main.rs:562:59:562:59 | y | | main.rs:562:50:562:50 | T | -| main.rs:567:13:567:13 | _ | | main.rs:508:5:509:14 | S1 | -| main.rs:567:17:567:17 | x | | main.rs:562:50:562:50 | T | -| main.rs:567:17:567:23 | x.fst() | | main.rs:508:5:509:14 | S1 | -| main.rs:568:13:568:13 | _ | | main.rs:508:5:509:14 | S1 | -| main.rs:568:17:568:17 | y | | main.rs:562:50:562:50 | T | -| main.rs:568:17:568:26 | y.method() | | main.rs:508:5:509:14 | S1 | -| main.rs:571:58:571:58 | x | | main.rs:571:41:571:55 | T | -| main.rs:571:64:571:64 | y | | main.rs:571:41:571:55 | T | -| main.rs:573:13:573:14 | s1 | | main.rs:508:5:509:14 | S1 | -| main.rs:573:18:573:18 | x | | main.rs:571:41:571:55 | T | -| main.rs:573:18:573:24 | x.fst() | | main.rs:508:5:509:14 | S1 | -| main.rs:574:13:574:14 | s2 | | main.rs:511:5:512:14 | S2 | -| main.rs:574:18:574:18 | y | | main.rs:571:41:571:55 | T | -| main.rs:574:18:574:24 | y.snd() | | main.rs:511:5:512:14 | S2 | -| main.rs:575:18:575:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:575:18:575:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:575:18:575:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:575:18:575:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:575:32:575:33 | s1 | | main.rs:508:5:509:14 | S1 | -| main.rs:575:36:575:37 | s2 | | main.rs:511:5:512:14 | S2 | -| main.rs:578:69:578:69 | x | | main.rs:578:52:578:66 | T | -| main.rs:578:75:578:75 | y | | main.rs:578:52:578:66 | T | -| main.rs:580:13:580:14 | s1 | | main.rs:508:5:509:14 | S1 | -| main.rs:580:18:580:18 | x | | main.rs:578:52:578:66 | T | -| main.rs:580:18:580:24 | x.fst() | | main.rs:508:5:509:14 | S1 | -| main.rs:581:13:581:14 | s2 | | main.rs:578:41:578:49 | T2 | -| main.rs:581:18:581:18 | y | | main.rs:578:52:578:66 | T | -| main.rs:581:18:581:24 | y.snd() | | main.rs:578:41:578:49 | T2 | -| main.rs:582:18:582:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:582:18:582:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:582:18:582:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:582:18:582:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:582:32:582:33 | s1 | | main.rs:508:5:509:14 | S1 | -| main.rs:582:36:582:37 | s2 | | main.rs:578:41:578:49 | T2 | -| main.rs:585:50:585:50 | x | | main.rs:585:41:585:47 | T | -| main.rs:585:56:585:56 | y | | main.rs:585:41:585:47 | T | -| main.rs:587:13:587:14 | s1 | | {EXTERNAL LOCATION} | bool | -| main.rs:587:18:587:18 | x | | main.rs:585:41:585:47 | T | -| main.rs:587:18:587:24 | x.fst() | | {EXTERNAL LOCATION} | bool | -| main.rs:588:13:588:14 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:588:18:588:18 | y | | main.rs:585:41:585:47 | T | -| main.rs:588:18:588:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | -| main.rs:589:18:589:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:589:18:589:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:589:18:589:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:589:18:589:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:589:32:589:33 | s1 | | {EXTERNAL LOCATION} | bool | -| main.rs:589:36:589:37 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:592:54:592:54 | x | | main.rs:592:41:592:51 | T | -| main.rs:592:60:592:60 | y | | main.rs:592:41:592:51 | T | -| main.rs:594:13:594:14 | s1 | | {EXTERNAL LOCATION} | u8 | -| main.rs:594:18:594:18 | x | | main.rs:592:41:592:51 | T | -| main.rs:594:18:594:24 | x.fst() | | {EXTERNAL LOCATION} | u8 | -| main.rs:595:13:595:14 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:595:18:595:18 | y | | main.rs:592:41:592:51 | T | -| main.rs:595:18:595:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | -| main.rs:596:18:596:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:596:18:596:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:596:18:596:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:596:18:596:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:596:32:596:33 | s1 | | {EXTERNAL LOCATION} | u8 | -| main.rs:596:36:596:37 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:612:15:612:18 | SelfParam | | main.rs:611:5:620:5 | Self [trait MyTrait] | -| main.rs:614:15:614:18 | SelfParam | | main.rs:611:5:620:5 | Self [trait MyTrait] | -| main.rs:617:9:619:9 | { ... } | | main.rs:611:19:611:19 | A | -| main.rs:618:13:618:16 | self | | main.rs:611:5:620:5 | Self [trait MyTrait] | -| main.rs:618:13:618:21 | self.m1() | | main.rs:611:19:611:19 | A | -| main.rs:624:43:624:43 | x | | main.rs:624:26:624:40 | T2 | -| main.rs:624:56:626:5 | { ... } | | main.rs:624:22:624:23 | T1 | -| main.rs:625:9:625:9 | x | | main.rs:624:26:624:40 | T2 | -| main.rs:625:9:625:14 | x.m1() | | main.rs:624:22:624:23 | T1 | -| main.rs:630:49:630:49 | x | | main.rs:601:5:604:5 | MyThing | -| main.rs:630:49:630:49 | x | T | main.rs:630:32:630:46 | T2 | -| main.rs:630:71:632:5 | { ... } | | main.rs:630:28:630:29 | T1 | -| main.rs:631:9:631:9 | x | | main.rs:601:5:604:5 | MyThing | -| main.rs:631:9:631:9 | x | T | main.rs:630:32:630:46 | T2 | -| main.rs:631:9:631:11 | x.a | | main.rs:630:32:630:46 | T2 | -| main.rs:631:9:631:16 | ... .m1() | | main.rs:630:28:630:29 | T1 | -| main.rs:635:15:635:18 | SelfParam | | main.rs:601:5:604:5 | MyThing | -| main.rs:635:15:635:18 | SelfParam | T | main.rs:634:10:634:10 | T | -| main.rs:635:26:637:9 | { ... } | | main.rs:634:10:634:10 | T | -| main.rs:636:13:636:16 | self | | main.rs:601:5:604:5 | MyThing | -| main.rs:636:13:636:16 | self | T | main.rs:634:10:634:10 | T | -| main.rs:636:13:636:18 | self.a | | main.rs:634:10:634:10 | T | -| main.rs:641:13:641:13 | x | | main.rs:601:5:604:5 | MyThing | -| main.rs:641:13:641:13 | x | T | main.rs:606:5:607:14 | S1 | -| main.rs:641:17:641:33 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | -| main.rs:641:17:641:33 | MyThing {...} | T | main.rs:606:5:607:14 | S1 | -| main.rs:641:30:641:31 | S1 | | main.rs:606:5:607:14 | S1 | -| main.rs:642:13:642:13 | y | | main.rs:601:5:604:5 | MyThing | -| main.rs:642:13:642:13 | y | T | main.rs:608:5:609:14 | S2 | -| main.rs:642:17:642:33 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | -| main.rs:642:17:642:33 | MyThing {...} | T | main.rs:608:5:609:14 | S2 | -| main.rs:642:30:642:31 | S2 | | main.rs:608:5:609:14 | S2 | -| main.rs:644:18:644:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:644:18:644:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:644:18:644:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:644:18:644:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:644:26:644:26 | x | | main.rs:601:5:604:5 | MyThing | -| main.rs:644:26:644:26 | x | T | main.rs:606:5:607:14 | S1 | -| main.rs:644:26:644:31 | x.m1() | | main.rs:606:5:607:14 | S1 | -| main.rs:645:18:645:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:645:18:645:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:645:18:645:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:645:18:645:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:645:26:645:26 | y | | main.rs:601:5:604:5 | MyThing | -| main.rs:645:26:645:26 | y | T | main.rs:608:5:609:14 | S2 | -| main.rs:645:26:645:31 | y.m1() | | main.rs:608:5:609:14 | S2 | -| main.rs:647:13:647:13 | x | | main.rs:601:5:604:5 | MyThing | -| main.rs:647:13:647:13 | x | T | main.rs:606:5:607:14 | S1 | -| main.rs:647:17:647:33 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | -| main.rs:647:17:647:33 | MyThing {...} | T | main.rs:606:5:607:14 | S1 | -| main.rs:647:30:647:31 | S1 | | main.rs:606:5:607:14 | S1 | -| main.rs:648:13:648:13 | y | | main.rs:601:5:604:5 | MyThing | -| main.rs:648:13:648:13 | y | T | main.rs:608:5:609:14 | S2 | -| main.rs:648:17:648:33 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | -| main.rs:648:17:648:33 | MyThing {...} | T | main.rs:608:5:609:14 | S2 | -| main.rs:648:30:648:31 | S2 | | main.rs:608:5:609:14 | S2 | -| main.rs:650:18:650:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:650:18:650:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:650:18:650:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:650:18:650:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:650:26:650:26 | x | | main.rs:601:5:604:5 | MyThing | -| main.rs:650:26:650:26 | x | T | main.rs:606:5:607:14 | S1 | -| main.rs:650:26:650:31 | x.m2() | | main.rs:606:5:607:14 | S1 | -| main.rs:651:18:651:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:651:18:651:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:651:18:651:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:651:18:651:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:651:26:651:26 | y | | main.rs:601:5:604:5 | MyThing | -| main.rs:651:26:651:26 | y | T | main.rs:608:5:609:14 | S2 | -| main.rs:651:26:651:31 | y.m2() | | main.rs:608:5:609:14 | S2 | -| main.rs:653:13:653:14 | x2 | | main.rs:601:5:604:5 | MyThing | -| main.rs:653:13:653:14 | x2 | T | main.rs:606:5:607:14 | S1 | -| main.rs:653:18:653:34 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | -| main.rs:653:18:653:34 | MyThing {...} | T | main.rs:606:5:607:14 | S1 | -| main.rs:653:31:653:32 | S1 | | main.rs:606:5:607:14 | S1 | -| main.rs:654:13:654:14 | y2 | | main.rs:601:5:604:5 | MyThing | -| main.rs:654:13:654:14 | y2 | T | main.rs:608:5:609:14 | S2 | -| main.rs:654:18:654:34 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | -| main.rs:654:18:654:34 | MyThing {...} | T | main.rs:608:5:609:14 | S2 | -| main.rs:654:31:654:32 | S2 | | main.rs:608:5:609:14 | S2 | -| main.rs:656:18:656:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:656:18:656:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:656:18:656:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:656:18:656:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:656:26:656:42 | call_trait_m1(...) | | main.rs:606:5:607:14 | S1 | -| main.rs:656:40:656:41 | x2 | | main.rs:601:5:604:5 | MyThing | -| main.rs:656:40:656:41 | x2 | T | main.rs:606:5:607:14 | S1 | -| main.rs:657:18:657:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:657:18:657:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:657:18:657:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:657:18:657:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:657:26:657:42 | call_trait_m1(...) | | main.rs:608:5:609:14 | S2 | -| main.rs:657:40:657:41 | y2 | | main.rs:601:5:604:5 | MyThing | -| main.rs:657:40:657:41 | y2 | T | main.rs:608:5:609:14 | S2 | -| main.rs:659:13:659:14 | x3 | | main.rs:601:5:604:5 | MyThing | -| main.rs:659:13:659:14 | x3 | T | main.rs:601:5:604:5 | MyThing | -| main.rs:659:13:659:14 | x3 | T.T | main.rs:606:5:607:14 | S1 | -| main.rs:659:18:661:9 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | -| main.rs:659:18:661:9 | MyThing {...} | T | main.rs:601:5:604:5 | MyThing | -| main.rs:659:18:661:9 | MyThing {...} | T.T | main.rs:606:5:607:14 | S1 | -| main.rs:660:16:660:32 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | -| main.rs:660:16:660:32 | MyThing {...} | T | main.rs:606:5:607:14 | S1 | -| main.rs:660:29:660:30 | S1 | | main.rs:606:5:607:14 | S1 | -| main.rs:662:13:662:14 | y3 | | main.rs:601:5:604:5 | MyThing | -| main.rs:662:13:662:14 | y3 | T | main.rs:601:5:604:5 | MyThing | -| main.rs:662:13:662:14 | y3 | T.T | main.rs:608:5:609:14 | S2 | -| main.rs:662:18:664:9 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | -| main.rs:662:18:664:9 | MyThing {...} | T | main.rs:601:5:604:5 | MyThing | -| main.rs:662:18:664:9 | MyThing {...} | T.T | main.rs:608:5:609:14 | S2 | -| main.rs:663:16:663:32 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | -| main.rs:663:16:663:32 | MyThing {...} | T | main.rs:608:5:609:14 | S2 | -| main.rs:663:29:663:30 | S2 | | main.rs:608:5:609:14 | S2 | -| main.rs:666:13:666:13 | a | | main.rs:606:5:607:14 | S1 | -| main.rs:666:17:666:39 | call_trait_thing_m1(...) | | main.rs:606:5:607:14 | S1 | -| main.rs:666:37:666:38 | x3 | | main.rs:601:5:604:5 | MyThing | -| main.rs:666:37:666:38 | x3 | T | main.rs:601:5:604:5 | MyThing | -| main.rs:666:37:666:38 | x3 | T.T | main.rs:606:5:607:14 | S1 | -| main.rs:667:18:667:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:667:18:667:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:667:18:667:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:667:18:667:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:667:26:667:26 | a | | main.rs:606:5:607:14 | S1 | -| main.rs:668:13:668:13 | b | | main.rs:608:5:609:14 | S2 | -| main.rs:668:17:668:39 | call_trait_thing_m1(...) | | main.rs:608:5:609:14 | S2 | -| main.rs:668:37:668:38 | y3 | | main.rs:601:5:604:5 | MyThing | -| main.rs:668:37:668:38 | y3 | T | main.rs:601:5:604:5 | MyThing | -| main.rs:668:37:668:38 | y3 | T.T | main.rs:608:5:609:14 | S2 | -| main.rs:669:18:669:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:669:18:669:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:669:18:669:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:669:18:669:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:669:26:669:26 | b | | main.rs:608:5:609:14 | S2 | -| main.rs:680:19:680:22 | SelfParam | | main.rs:674:5:677:5 | Wrapper | -| main.rs:680:19:680:22 | SelfParam | A | main.rs:679:10:679:10 | A | -| main.rs:680:30:682:9 | { ... } | | main.rs:679:10:679:10 | A | -| main.rs:681:13:681:16 | self | | main.rs:674:5:677:5 | Wrapper | -| main.rs:681:13:681:16 | self | A | main.rs:679:10:679:10 | A | -| main.rs:681:13:681:22 | self.field | | main.rs:679:10:679:10 | A | -| main.rs:689:15:689:18 | SelfParam | | main.rs:685:5:699:5 | Self [trait MyTrait] | -| main.rs:691:15:691:18 | SelfParam | | main.rs:685:5:699:5 | Self [trait MyTrait] | -| main.rs:695:9:698:9 | { ... } | | main.rs:686:9:686:28 | AssociatedType | -| main.rs:696:13:696:16 | self | | main.rs:685:5:699:5 | Self [trait MyTrait] | -| main.rs:696:13:696:21 | self.m1() | | main.rs:686:9:686:28 | AssociatedType | -| main.rs:697:13:697:43 | ...::default(...) | | main.rs:686:9:686:28 | AssociatedType | -| main.rs:705:19:705:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:705:19:705:23 | SelfParam | &T | main.rs:701:5:711:5 | Self [trait MyTraitAssoc2] | -| main.rs:705:26:705:26 | a | | main.rs:705:16:705:16 | A | -| main.rs:707:22:707:26 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:707:22:707:26 | SelfParam | &T | main.rs:701:5:711:5 | Self [trait MyTraitAssoc2] | -| main.rs:707:29:707:29 | a | | main.rs:707:19:707:19 | A | -| main.rs:707:35:707:35 | b | | main.rs:707:19:707:19 | A | -| main.rs:707:75:710:9 | { ... } | | main.rs:702:9:702:52 | GenericAssociatedType | -| main.rs:708:13:708:16 | self | | file://:0:0:0:0 | & | -| main.rs:708:13:708:16 | self | &T | main.rs:701:5:711:5 | Self [trait MyTraitAssoc2] | -| main.rs:708:13:708:23 | self.put(...) | | main.rs:702:9:702:52 | GenericAssociatedType | -| main.rs:708:22:708:22 | a | | main.rs:707:19:707:19 | A | -| main.rs:709:13:709:16 | self | | file://:0:0:0:0 | & | -| main.rs:709:13:709:16 | self | &T | main.rs:701:5:711:5 | Self [trait MyTraitAssoc2] | -| main.rs:709:13:709:23 | self.put(...) | | main.rs:702:9:702:52 | GenericAssociatedType | -| main.rs:709:22:709:22 | b | | main.rs:707:19:707:19 | A | -| main.rs:718:21:718:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:718:21:718:25 | SelfParam | &T | main.rs:713:5:723:5 | Self [trait TraitMultipleAssoc] | -| main.rs:720:20:720:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:720:20:720:24 | SelfParam | &T | main.rs:713:5:723:5 | Self [trait TraitMultipleAssoc] | -| main.rs:722:20:722:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:722:20:722:24 | SelfParam | &T | main.rs:713:5:723:5 | Self [trait TraitMultipleAssoc] | -| main.rs:738:15:738:18 | SelfParam | | main.rs:725:5:726:13 | S | -| main.rs:738:45:740:9 | { ... } | | main.rs:731:5:732:14 | AT | -| main.rs:739:13:739:14 | AT | | main.rs:731:5:732:14 | AT | -| main.rs:748:19:748:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:748:19:748:23 | SelfParam | &T | main.rs:725:5:726:13 | S | -| main.rs:748:26:748:26 | a | | main.rs:748:16:748:16 | A | -| main.rs:748:46:750:9 | { ... } | | main.rs:674:5:677:5 | Wrapper | -| main.rs:748:46:750:9 | { ... } | A | main.rs:748:16:748:16 | A | -| main.rs:749:13:749:32 | Wrapper {...} | | main.rs:674:5:677:5 | Wrapper | -| main.rs:749:13:749:32 | Wrapper {...} | A | main.rs:748:16:748:16 | A | -| main.rs:749:30:749:30 | a | | main.rs:748:16:748:16 | A | -| main.rs:757:15:757:18 | SelfParam | | main.rs:728:5:729:14 | S2 | -| main.rs:757:45:759:9 | { ... } | | main.rs:674:5:677:5 | Wrapper | -| main.rs:757:45:759:9 | { ... } | A | main.rs:728:5:729:14 | S2 | -| main.rs:758:13:758:35 | Wrapper {...} | | main.rs:674:5:677:5 | Wrapper | -| main.rs:758:13:758:35 | Wrapper {...} | A | main.rs:728:5:729:14 | S2 | -| main.rs:758:30:758:33 | self | | main.rs:728:5:729:14 | S2 | -| main.rs:764:30:766:9 | { ... } | | main.rs:674:5:677:5 | Wrapper | -| main.rs:764:30:766:9 | { ... } | A | main.rs:728:5:729:14 | S2 | -| main.rs:765:13:765:33 | Wrapper {...} | | main.rs:674:5:677:5 | Wrapper | -| main.rs:765:13:765:33 | Wrapper {...} | A | main.rs:728:5:729:14 | S2 | -| main.rs:765:30:765:31 | S2 | | main.rs:728:5:729:14 | S2 | -| main.rs:771:22:771:26 | thing | | main.rs:771:10:771:19 | T | -| main.rs:772:9:772:13 | thing | | main.rs:771:10:771:19 | T | -| main.rs:779:21:779:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:779:21:779:25 | SelfParam | &T | main.rs:731:5:732:14 | AT | -| main.rs:779:34:781:9 | { ... } | | main.rs:731:5:732:14 | AT | -| main.rs:780:13:780:14 | AT | | main.rs:731:5:732:14 | AT | -| main.rs:783:20:783:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:783:20:783:24 | SelfParam | &T | main.rs:731:5:732:14 | AT | -| main.rs:783:43:785:9 | { ... } | | main.rs:725:5:726:13 | S | -| main.rs:784:13:784:13 | S | | main.rs:725:5:726:13 | S | -| main.rs:787:20:787:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:787:20:787:24 | SelfParam | &T | main.rs:731:5:732:14 | AT | -| main.rs:787:43:789:9 | { ... } | | main.rs:728:5:729:14 | S2 | -| main.rs:788:13:788:14 | S2 | | main.rs:728:5:729:14 | S2 | -| main.rs:793:13:793:14 | x1 | | main.rs:725:5:726:13 | S | -| main.rs:793:18:793:18 | S | | main.rs:725:5:726:13 | S | -| main.rs:795:18:795:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:795:18:795:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:795:18:795:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:795:18:795:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:795:26:795:27 | x1 | | main.rs:725:5:726:13 | S | -| main.rs:795:26:795:32 | x1.m1() | | main.rs:731:5:732:14 | AT | -| main.rs:797:13:797:14 | x2 | | main.rs:725:5:726:13 | S | -| main.rs:797:18:797:18 | S | | main.rs:725:5:726:13 | S | -| main.rs:799:13:799:13 | y | | main.rs:731:5:732:14 | AT | -| main.rs:799:17:799:18 | x2 | | main.rs:725:5:726:13 | S | -| main.rs:799:17:799:23 | x2.m2() | | main.rs:731:5:732:14 | AT | -| main.rs:800:18:800:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:800:18:800:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:800:18:800:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:800:18:800:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:800:26:800:26 | y | | main.rs:731:5:732:14 | AT | -| main.rs:802:13:802:14 | x3 | | main.rs:725:5:726:13 | S | -| main.rs:802:18:802:18 | S | | main.rs:725:5:726:13 | S | -| main.rs:804:18:804:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:804:18:804:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:804:18:804:43 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:804:18:804:43 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:804:26:804:27 | x3 | | main.rs:725:5:726:13 | S | -| main.rs:804:26:804:34 | x3.put(...) | | main.rs:674:5:677:5 | Wrapper | -| main.rs:804:26:804:34 | x3.put(...) | A | {EXTERNAL LOCATION} | i32 | -| main.rs:804:26:804:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | -| main.rs:804:33:804:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:807:18:807:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:807:18:807:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:807:18:807:49 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:807:18:807:49 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:807:26:807:27 | x3 | | main.rs:725:5:726:13 | S | -| main.rs:807:26:807:40 | x3.putTwo(...) | | main.rs:674:5:677:5 | Wrapper | -| main.rs:807:26:807:40 | x3.putTwo(...) | A | main.rs:745:36:745:50 | AssociatedParam | -| main.rs:807:26:807:49 | ... .unwrap() | | main.rs:745:36:745:50 | AssociatedParam | -| main.rs:807:36:807:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:807:39:807:39 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:809:20:809:20 | S | | main.rs:725:5:726:13 | S | -| main.rs:810:18:810:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:810:18:810:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:810:18:810:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:810:18:810:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:812:13:812:14 | x5 | | main.rs:728:5:729:14 | S2 | -| main.rs:812:18:812:19 | S2 | | main.rs:728:5:729:14 | S2 | -| main.rs:813:18:813:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:813:18:813:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:813:18:813:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:813:18:813:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:813:26:813:27 | x5 | | main.rs:728:5:729:14 | S2 | -| main.rs:813:26:813:32 | x5.m1() | | main.rs:674:5:677:5 | Wrapper | -| main.rs:813:26:813:32 | x5.m1() | A | main.rs:728:5:729:14 | S2 | -| main.rs:814:13:814:14 | x6 | | main.rs:728:5:729:14 | S2 | -| main.rs:814:18:814:19 | S2 | | main.rs:728:5:729:14 | S2 | -| main.rs:815:18:815:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:815:18:815:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:815:18:815:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:815:18:815:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:815:26:815:27 | x6 | | main.rs:728:5:729:14 | S2 | -| main.rs:815:26:815:32 | x6.m2() | | main.rs:674:5:677:5 | Wrapper | -| main.rs:815:26:815:32 | x6.m2() | A | main.rs:728:5:729:14 | S2 | -| main.rs:817:13:817:22 | assoc_zero | | main.rs:731:5:732:14 | AT | -| main.rs:817:26:817:27 | AT | | main.rs:731:5:732:14 | AT | -| main.rs:817:26:817:38 | AT.get_zero() | | main.rs:731:5:732:14 | AT | -| main.rs:818:13:818:21 | assoc_one | | main.rs:725:5:726:13 | S | -| main.rs:818:25:818:26 | AT | | main.rs:731:5:732:14 | AT | -| main.rs:818:25:818:36 | AT.get_one() | | main.rs:725:5:726:13 | S | -| main.rs:819:13:819:21 | assoc_two | | main.rs:728:5:729:14 | S2 | -| main.rs:819:25:819:26 | AT | | main.rs:731:5:732:14 | AT | -| main.rs:819:25:819:36 | AT.get_two() | | main.rs:728:5:729:14 | S2 | -| main.rs:827:19:827:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:827:19:827:23 | SelfParam | &T | main.rs:824:5:828:5 | Self [trait Supertrait] | -| main.rs:827:26:827:32 | content | | main.rs:825:9:825:21 | Content | -| main.rs:832:24:832:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:832:24:832:28 | SelfParam | &T | main.rs:830:5:833:5 | Self [trait Subtrait] | -| main.rs:841:23:841:27 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:841:23:841:27 | SelfParam | &T | main.rs:835:5:845:5 | Self [trait Subtrait2] | -| main.rs:841:30:841:31 | c1 | | main.rs:825:9:825:21 | Content | -| main.rs:841:49:841:50 | c2 | | main.rs:825:9:825:21 | Content | -| main.rs:842:13:842:16 | self | | file://:0:0:0:0 | & | -| main.rs:842:13:842:16 | self | &T | main.rs:835:5:845:5 | Self [trait Subtrait2] | -| main.rs:842:25:842:26 | c1 | | main.rs:825:9:825:21 | Content | -| main.rs:843:13:843:16 | self | | file://:0:0:0:0 | & | -| main.rs:843:13:843:16 | self | &T | main.rs:835:5:845:5 | Self [trait Subtrait2] | -| main.rs:843:25:843:26 | c2 | | main.rs:825:9:825:21 | Content | -| main.rs:851:19:851:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:851:19:851:23 | SelfParam | &T | main.rs:847:5:847:24 | MyType | -| main.rs:851:19:851:23 | SelfParam | &T.T | main.rs:849:10:849:10 | T | -| main.rs:851:26:851:33 | _content | | main.rs:849:10:849:10 | T | -| main.rs:852:22:852:42 | "Inserting content: \\n" | | file://:0:0:0:0 | & | -| main.rs:852:22:852:42 | "Inserting content: \\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:852:22:852:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:852:22:852:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:858:24:858:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:858:24:858:28 | SelfParam | &T | main.rs:847:5:847:24 | MyType | -| main.rs:858:24:858:28 | SelfParam | &T.T | main.rs:856:10:856:17 | T | -| main.rs:858:48:860:9 | { ... } | | main.rs:856:10:856:17 | T | -| main.rs:859:13:859:19 | (...) | | main.rs:847:5:847:24 | MyType | -| main.rs:859:13:859:19 | (...) | T | main.rs:856:10:856:17 | T | -| main.rs:859:13:859:21 | ... .0 | | main.rs:856:10:856:17 | T | -| main.rs:859:13:859:29 | ... .clone() | | main.rs:856:10:856:17 | T | -| main.rs:859:14:859:18 | * ... | | main.rs:847:5:847:24 | MyType | -| main.rs:859:14:859:18 | * ... | T | main.rs:856:10:856:17 | T | -| main.rs:859:15:859:18 | self | | file://:0:0:0:0 | & | -| main.rs:859:15:859:18 | self | &T | main.rs:847:5:847:24 | MyType | -| main.rs:859:15:859:18 | self | &T.T | main.rs:856:10:856:17 | T | -| main.rs:863:33:863:36 | item | | file://:0:0:0:0 | & | -| main.rs:863:33:863:36 | item | &T | main.rs:863:20:863:30 | T | -| main.rs:863:57:865:5 | { ... } | | main.rs:825:9:825:21 | Content | -| main.rs:864:9:864:12 | item | | file://:0:0:0:0 | & | -| main.rs:864:9:864:12 | item | &T | main.rs:863:20:863:30 | T | -| main.rs:864:9:864:26 | item.get_content() | | main.rs:825:9:825:21 | Content | -| main.rs:867:35:867:38 | item | | file://:0:0:0:0 | & | -| main.rs:867:35:867:38 | item | &T | main.rs:867:21:867:32 | T | -| main.rs:867:45:867:46 | c1 | | main.rs:825:9:825:21 | Content | -| main.rs:867:61:867:62 | c2 | | main.rs:825:9:825:21 | Content | -| main.rs:867:77:867:78 | c3 | | main.rs:825:9:825:21 | Content | -| main.rs:868:9:868:12 | item | | file://:0:0:0:0 | & | -| main.rs:868:9:868:12 | item | &T | main.rs:867:21:867:32 | T | -| main.rs:868:21:868:22 | c1 | | main.rs:825:9:825:21 | Content | -| main.rs:869:9:869:12 | item | | file://:0:0:0:0 | & | -| main.rs:869:9:869:12 | item | &T | main.rs:867:21:867:32 | T | -| main.rs:869:25:869:26 | c2 | | main.rs:825:9:825:21 | Content | -| main.rs:869:29:869:30 | c3 | | main.rs:825:9:825:21 | Content | -| main.rs:873:13:873:17 | item1 | | main.rs:847:5:847:24 | MyType | -| main.rs:873:13:873:17 | item1 | T | {EXTERNAL LOCATION} | i64 | -| main.rs:873:21:873:33 | MyType(...) | | main.rs:847:5:847:24 | MyType | -| main.rs:873:21:873:33 | MyType(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:873:28:873:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:874:25:874:29 | item1 | | main.rs:847:5:847:24 | MyType | -| main.rs:874:25:874:29 | item1 | T | {EXTERNAL LOCATION} | i64 | -| main.rs:876:13:876:17 | item2 | | main.rs:847:5:847:24 | MyType | -| main.rs:876:13:876:17 | item2 | T | {EXTERNAL LOCATION} | bool | -| main.rs:876:21:876:32 | MyType(...) | | main.rs:847:5:847:24 | MyType | -| main.rs:876:21:876:32 | MyType(...) | T | {EXTERNAL LOCATION} | bool | -| main.rs:876:28:876:31 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:877:37:877:42 | &item2 | | file://:0:0:0:0 | & | -| main.rs:877:37:877:42 | &item2 | &T | main.rs:847:5:847:24 | MyType | -| main.rs:877:37:877:42 | &item2 | &T.T | {EXTERNAL LOCATION} | bool | -| main.rs:877:38:877:42 | item2 | | main.rs:847:5:847:24 | MyType | -| main.rs:877:38:877:42 | item2 | T | {EXTERNAL LOCATION} | bool | -| main.rs:894:15:894:18 | SelfParam | | main.rs:882:5:886:5 | MyEnum | -| main.rs:894:15:894:18 | SelfParam | A | main.rs:893:10:893:10 | T | -| main.rs:894:26:899:9 | { ... } | | main.rs:893:10:893:10 | T | -| main.rs:895:13:898:13 | match self { ... } | | main.rs:893:10:893:10 | T | -| main.rs:895:19:895:22 | self | | main.rs:882:5:886:5 | MyEnum | -| main.rs:895:19:895:22 | self | A | main.rs:893:10:893:10 | T | -| main.rs:896:17:896:29 | ...::C1(...) | | main.rs:882:5:886:5 | MyEnum | -| main.rs:896:17:896:29 | ...::C1(...) | A | main.rs:893:10:893:10 | T | -| main.rs:896:28:896:28 | a | | main.rs:893:10:893:10 | T | -| main.rs:896:34:896:34 | a | | main.rs:893:10:893:10 | T | -| main.rs:897:17:897:32 | ...::C2 {...} | | main.rs:882:5:886:5 | MyEnum | -| main.rs:897:17:897:32 | ...::C2 {...} | A | main.rs:893:10:893:10 | T | -| main.rs:897:30:897:30 | a | | main.rs:893:10:893:10 | T | -| main.rs:897:37:897:37 | a | | main.rs:893:10:893:10 | T | -| main.rs:903:13:903:13 | x | | main.rs:882:5:886:5 | MyEnum | -| main.rs:903:13:903:13 | x | A | main.rs:888:5:889:14 | S1 | -| main.rs:903:17:903:30 | ...::C1(...) | | main.rs:882:5:886:5 | MyEnum | -| main.rs:903:17:903:30 | ...::C1(...) | A | main.rs:888:5:889:14 | S1 | -| main.rs:903:28:903:29 | S1 | | main.rs:888:5:889:14 | S1 | -| main.rs:904:13:904:13 | y | | main.rs:882:5:886:5 | MyEnum | -| main.rs:904:13:904:13 | y | A | main.rs:890:5:891:14 | S2 | -| main.rs:904:17:904:36 | ...::C2 {...} | | main.rs:882:5:886:5 | MyEnum | -| main.rs:904:17:904:36 | ...::C2 {...} | A | main.rs:890:5:891:14 | S2 | -| main.rs:904:33:904:34 | S2 | | main.rs:890:5:891:14 | S2 | -| main.rs:906:18:906:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:906:18:906:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:906:18:906:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:906:18:906:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:906:26:906:26 | x | | main.rs:882:5:886:5 | MyEnum | -| main.rs:906:26:906:26 | x | A | main.rs:888:5:889:14 | S1 | -| main.rs:906:26:906:31 | x.m1() | | main.rs:888:5:889:14 | S1 | -| main.rs:907:18:907:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:907:18:907:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:907:18:907:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:907:18:907:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:907:26:907:26 | y | | main.rs:882:5:886:5 | MyEnum | -| main.rs:907:26:907:26 | y | A | main.rs:890:5:891:14 | S2 | -| main.rs:907:26:907:31 | y.m1() | | main.rs:890:5:891:14 | S2 | -| main.rs:929:15:929:18 | SelfParam | | main.rs:927:5:930:5 | Self [trait MyTrait1] | -| main.rs:934:15:934:18 | SelfParam | | main.rs:932:5:944:5 | Self [trait MyTrait2] | -| main.rs:937:9:943:9 | { ... } | | main.rs:932:20:932:22 | Tr2 | -| main.rs:938:13:942:13 | if ... {...} else {...} | | main.rs:932:20:932:22 | Tr2 | -| main.rs:938:16:938:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:938:16:938:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:938:20:938:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:938:22:940:13 | { ... } | | main.rs:932:20:932:22 | Tr2 | -| main.rs:939:17:939:20 | self | | main.rs:932:5:944:5 | Self [trait MyTrait2] | -| main.rs:939:17:939:25 | self.m1() | | main.rs:932:20:932:22 | Tr2 | -| main.rs:940:20:942:13 | { ... } | | main.rs:932:20:932:22 | Tr2 | -| main.rs:941:17:941:30 | ...::m1(...) | | main.rs:932:20:932:22 | Tr2 | -| main.rs:941:26:941:29 | self | | main.rs:932:5:944:5 | Self [trait MyTrait2] | -| main.rs:948:15:948:18 | SelfParam | | main.rs:946:5:958:5 | Self [trait MyTrait3] | -| main.rs:951:9:957:9 | { ... } | | main.rs:946:20:946:22 | Tr3 | -| main.rs:952:13:956:13 | if ... {...} else {...} | | main.rs:946:20:946:22 | Tr3 | -| main.rs:952:16:952:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:952:16:952:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:952:20:952:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:952:22:954:13 | { ... } | | main.rs:946:20:946:22 | Tr3 | -| main.rs:953:17:953:20 | self | | main.rs:946:5:958:5 | Self [trait MyTrait3] | -| main.rs:953:17:953:25 | self.m2() | | main.rs:912:5:915:5 | MyThing | -| main.rs:953:17:953:25 | self.m2() | A | main.rs:946:20:946:22 | Tr3 | -| main.rs:953:17:953:27 | ... .a | | main.rs:946:20:946:22 | Tr3 | -| main.rs:954:20:956:13 | { ... } | | main.rs:946:20:946:22 | Tr3 | -| main.rs:955:17:955:30 | ...::m2(...) | | main.rs:912:5:915:5 | MyThing | -| main.rs:955:17:955:30 | ...::m2(...) | A | main.rs:946:20:946:22 | Tr3 | -| main.rs:955:17:955:32 | ... .a | | main.rs:946:20:946:22 | Tr3 | -| main.rs:955:26:955:29 | self | | main.rs:946:5:958:5 | Self [trait MyTrait3] | -| main.rs:962:15:962:18 | SelfParam | | main.rs:912:5:915:5 | MyThing | -| main.rs:962:15:962:18 | SelfParam | A | main.rs:960:10:960:10 | T | -| main.rs:962:26:964:9 | { ... } | | main.rs:960:10:960:10 | T | -| main.rs:963:13:963:16 | self | | main.rs:912:5:915:5 | MyThing | -| main.rs:963:13:963:16 | self | A | main.rs:960:10:960:10 | T | -| main.rs:963:13:963:18 | self.a | | main.rs:960:10:960:10 | T | -| main.rs:971:15:971:18 | SelfParam | | main.rs:917:5:920:5 | MyThing2 | -| main.rs:971:15:971:18 | SelfParam | A | main.rs:969:10:969:10 | T | -| main.rs:971:35:973:9 | { ... } | | main.rs:912:5:915:5 | MyThing | -| main.rs:971:35:973:9 | { ... } | A | main.rs:969:10:969:10 | T | -| main.rs:972:13:972:33 | MyThing {...} | | main.rs:912:5:915:5 | MyThing | -| main.rs:972:13:972:33 | MyThing {...} | A | main.rs:969:10:969:10 | T | -| main.rs:972:26:972:29 | self | | main.rs:917:5:920:5 | MyThing2 | -| main.rs:972:26:972:29 | self | A | main.rs:969:10:969:10 | T | -| main.rs:972:26:972:31 | self.a | | main.rs:969:10:969:10 | T | -| main.rs:980:44:980:44 | x | | main.rs:980:26:980:41 | T2 | -| main.rs:980:57:982:5 | { ... } | | main.rs:980:22:980:23 | T1 | -| main.rs:981:9:981:9 | x | | main.rs:980:26:980:41 | T2 | -| main.rs:981:9:981:14 | x.m1() | | main.rs:980:22:980:23 | T1 | -| main.rs:984:56:984:56 | x | | main.rs:984:39:984:53 | T | -| main.rs:986:13:986:13 | a | | main.rs:912:5:915:5 | MyThing | -| main.rs:986:13:986:13 | a | A | main.rs:922:5:923:14 | S1 | -| main.rs:986:17:986:17 | x | | main.rs:984:39:984:53 | T | -| main.rs:986:17:986:22 | x.m1() | | main.rs:912:5:915:5 | MyThing | -| main.rs:986:17:986:22 | x.m1() | A | main.rs:922:5:923:14 | S1 | -| main.rs:987:18:987:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:987:18:987:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:987:18:987:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:987:18:987:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:987:26:987:26 | a | | main.rs:912:5:915:5 | MyThing | -| main.rs:987:26:987:26 | a | A | main.rs:922:5:923:14 | S1 | -| main.rs:991:13:991:13 | x | | main.rs:912:5:915:5 | MyThing | -| main.rs:991:13:991:13 | x | A | main.rs:922:5:923:14 | S1 | -| main.rs:991:17:991:33 | MyThing {...} | | main.rs:912:5:915:5 | MyThing | -| main.rs:991:17:991:33 | MyThing {...} | A | main.rs:922:5:923:14 | S1 | -| main.rs:991:30:991:31 | S1 | | main.rs:922:5:923:14 | S1 | -| main.rs:992:13:992:13 | y | | main.rs:912:5:915:5 | MyThing | -| main.rs:992:13:992:13 | y | A | main.rs:924:5:925:14 | S2 | -| main.rs:992:17:992:33 | MyThing {...} | | main.rs:912:5:915:5 | MyThing | -| main.rs:992:17:992:33 | MyThing {...} | A | main.rs:924:5:925:14 | S2 | -| main.rs:992:30:992:31 | S2 | | main.rs:924:5:925:14 | S2 | -| main.rs:994:18:994:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:994:18:994:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:994:18:994:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:994:18:994:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:994:26:994:26 | x | | main.rs:912:5:915:5 | MyThing | -| main.rs:994:26:994:26 | x | A | main.rs:922:5:923:14 | S1 | -| main.rs:994:26:994:31 | x.m1() | | main.rs:922:5:923:14 | S1 | -| main.rs:995:18:995:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:995:18:995:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:995:18:995:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:995:18:995:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:995:26:995:26 | y | | main.rs:912:5:915:5 | MyThing | -| main.rs:995:26:995:26 | y | A | main.rs:924:5:925:14 | S2 | -| main.rs:995:26:995:31 | y.m1() | | main.rs:924:5:925:14 | S2 | -| main.rs:997:13:997:13 | x | | main.rs:912:5:915:5 | MyThing | -| main.rs:997:13:997:13 | x | A | main.rs:922:5:923:14 | S1 | -| main.rs:997:17:997:33 | MyThing {...} | | main.rs:912:5:915:5 | MyThing | -| main.rs:997:17:997:33 | MyThing {...} | A | main.rs:922:5:923:14 | S1 | -| main.rs:997:30:997:31 | S1 | | main.rs:922:5:923:14 | S1 | -| main.rs:998:13:998:13 | y | | main.rs:912:5:915:5 | MyThing | -| main.rs:998:13:998:13 | y | A | main.rs:924:5:925:14 | S2 | -| main.rs:998:17:998:33 | MyThing {...} | | main.rs:912:5:915:5 | MyThing | -| main.rs:998:17:998:33 | MyThing {...} | A | main.rs:924:5:925:14 | S2 | -| main.rs:998:30:998:31 | S2 | | main.rs:924:5:925:14 | S2 | -| main.rs:1000:18:1000:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1000:18:1000:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1000:18:1000:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1000:18:1000:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1000:26:1000:26 | x | | main.rs:912:5:915:5 | MyThing | -| main.rs:1000:26:1000:26 | x | A | main.rs:922:5:923:14 | S1 | -| main.rs:1000:26:1000:31 | x.m2() | | main.rs:922:5:923:14 | S1 | -| main.rs:1001:18:1001:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1001:18:1001:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1001:18:1001:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1001:18:1001:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1001:26:1001:26 | y | | main.rs:912:5:915:5 | MyThing | -| main.rs:1001:26:1001:26 | y | A | main.rs:924:5:925:14 | S2 | -| main.rs:1001:26:1001:31 | y.m2() | | main.rs:924:5:925:14 | S2 | -| main.rs:1003:13:1003:13 | x | | main.rs:917:5:920:5 | MyThing2 | -| main.rs:1003:13:1003:13 | x | A | main.rs:922:5:923:14 | S1 | -| main.rs:1003:17:1003:34 | MyThing2 {...} | | main.rs:917:5:920:5 | MyThing2 | -| main.rs:1003:17:1003:34 | MyThing2 {...} | A | main.rs:922:5:923:14 | S1 | -| main.rs:1003:31:1003:32 | S1 | | main.rs:922:5:923:14 | S1 | -| main.rs:1004:13:1004:13 | y | | main.rs:917:5:920:5 | MyThing2 | -| main.rs:1004:13:1004:13 | y | A | main.rs:924:5:925:14 | S2 | -| main.rs:1004:17:1004:34 | MyThing2 {...} | | main.rs:917:5:920:5 | MyThing2 | -| main.rs:1004:17:1004:34 | MyThing2 {...} | A | main.rs:924:5:925:14 | S2 | -| main.rs:1004:31:1004:32 | S2 | | main.rs:924:5:925:14 | S2 | -| main.rs:1006:18:1006:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1006:18:1006:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1006:18:1006:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1006:18:1006:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1006:26:1006:26 | x | | main.rs:917:5:920:5 | MyThing2 | -| main.rs:1006:26:1006:26 | x | A | main.rs:922:5:923:14 | S1 | -| main.rs:1006:26:1006:31 | x.m3() | | main.rs:922:5:923:14 | S1 | -| main.rs:1007:18:1007:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1007:18:1007:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1007:18:1007:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1007:18:1007:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1007:26:1007:26 | y | | main.rs:917:5:920:5 | MyThing2 | -| main.rs:1007:26:1007:26 | y | A | main.rs:924:5:925:14 | S2 | -| main.rs:1007:26:1007:31 | y.m3() | | main.rs:924:5:925:14 | S2 | -| main.rs:1009:13:1009:13 | x | | main.rs:912:5:915:5 | MyThing | -| main.rs:1009:13:1009:13 | x | A | main.rs:922:5:923:14 | S1 | -| main.rs:1009:17:1009:33 | MyThing {...} | | main.rs:912:5:915:5 | MyThing | -| main.rs:1009:17:1009:33 | MyThing {...} | A | main.rs:922:5:923:14 | S1 | -| main.rs:1009:30:1009:31 | S1 | | main.rs:922:5:923:14 | S1 | -| main.rs:1010:13:1010:13 | s | | main.rs:922:5:923:14 | S1 | -| main.rs:1010:17:1010:32 | call_trait_m1(...) | | main.rs:922:5:923:14 | S1 | -| main.rs:1010:31:1010:31 | x | | main.rs:912:5:915:5 | MyThing | -| main.rs:1010:31:1010:31 | x | A | main.rs:922:5:923:14 | S1 | -| main.rs:1012:13:1012:13 | x | | main.rs:917:5:920:5 | MyThing2 | -| main.rs:1012:13:1012:13 | x | A | main.rs:924:5:925:14 | S2 | -| main.rs:1012:17:1012:34 | MyThing2 {...} | | main.rs:917:5:920:5 | MyThing2 | -| main.rs:1012:17:1012:34 | MyThing2 {...} | A | main.rs:924:5:925:14 | S2 | -| main.rs:1012:31:1012:32 | S2 | | main.rs:924:5:925:14 | S2 | -| main.rs:1013:13:1013:13 | s | | main.rs:912:5:915:5 | MyThing | -| main.rs:1013:13:1013:13 | s | A | main.rs:924:5:925:14 | S2 | -| main.rs:1013:17:1013:32 | call_trait_m1(...) | | main.rs:912:5:915:5 | MyThing | -| main.rs:1013:17:1013:32 | call_trait_m1(...) | A | main.rs:924:5:925:14 | S2 | -| main.rs:1013:31:1013:31 | x | | main.rs:917:5:920:5 | MyThing2 | -| main.rs:1013:31:1013:31 | x | A | main.rs:924:5:925:14 | S2 | -| main.rs:1030:22:1030:22 | x | | file://:0:0:0:0 | & | -| main.rs:1030:22:1030:22 | x | &T | main.rs:1030:11:1030:19 | T | -| main.rs:1030:35:1032:5 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1030:35:1032:5 | { ... } | &T | main.rs:1030:11:1030:19 | T | -| main.rs:1031:9:1031:9 | x | | file://:0:0:0:0 | & | -| main.rs:1031:9:1031:9 | x | &T | main.rs:1030:11:1030:19 | T | -| main.rs:1035:17:1035:20 | SelfParam | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1035:29:1037:9 | { ... } | | main.rs:1023:5:1024:14 | S2 | -| main.rs:1036:13:1036:14 | S2 | | main.rs:1023:5:1024:14 | S2 | -| main.rs:1040:21:1040:21 | x | | main.rs:1040:13:1040:14 | T1 | -| main.rs:1043:5:1045:5 | { ... } | | main.rs:1040:17:1040:18 | T2 | -| main.rs:1044:9:1044:9 | x | | main.rs:1040:13:1040:14 | T1 | -| main.rs:1044:9:1044:16 | x.into() | | main.rs:1040:17:1040:18 | T2 | -| main.rs:1048:13:1048:13 | x | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1048:17:1048:18 | S1 | | main.rs:1020:5:1021:14 | S1 | +| main.rs:540:18:540:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:540:18:540:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:540:26:540:26 | x | | main.rs:446:5:447:14 | S1 | +| main.rs:540:26:540:42 | x.common_method() | | main.rs:446:5:447:14 | S1 | +| main.rs:541:18:541:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:541:18:541:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:541:18:541:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:541:18:541:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:541:26:541:26 | x | | main.rs:446:5:447:14 | S1 | +| main.rs:541:26:541:44 | x.common_method_2() | | main.rs:446:5:447:14 | S1 | +| main.rs:543:13:543:13 | y | | main.rs:479:5:479:22 | S2 | +| main.rs:543:13:543:13 | y | T2 | main.rs:446:5:447:14 | S1 | +| main.rs:543:17:543:22 | S2(...) | | main.rs:479:5:479:22 | S2 | +| main.rs:543:17:543:22 | S2(...) | T2 | main.rs:446:5:447:14 | S1 | +| main.rs:543:20:543:21 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:544:18:544:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:544:18:544:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:544:18:544:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:544:18:544:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:544:26:544:26 | y | | main.rs:479:5:479:22 | S2 | +| main.rs:544:26:544:26 | y | T2 | main.rs:446:5:447:14 | S1 | +| main.rs:544:26:544:42 | y.common_method() | | main.rs:446:5:447:14 | S1 | +| main.rs:546:13:546:13 | z | | main.rs:479:5:479:22 | S2 | +| main.rs:546:13:546:13 | z | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:546:17:546:21 | S2(...) | | main.rs:479:5:479:22 | S2 | +| main.rs:546:17:546:21 | S2(...) | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:546:20:546:20 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:547:18:547:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:547:18:547:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:547:18:547:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:547:18:547:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:547:26:547:26 | z | | main.rs:479:5:479:22 | S2 | +| main.rs:547:26:547:26 | z | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:547:26:547:42 | z.common_method() | | main.rs:446:5:447:14 | S1 | +| main.rs:549:13:549:13 | w | | main.rs:517:5:518:22 | S3 | +| main.rs:549:13:549:13 | w | T3 | main.rs:446:5:447:14 | S1 | +| main.rs:549:17:549:22 | S3(...) | | main.rs:517:5:518:22 | S3 | +| main.rs:549:17:549:22 | S3(...) | T3 | main.rs:446:5:447:14 | S1 | +| main.rs:549:20:549:21 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:550:18:550:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:550:18:550:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:550:18:550:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:550:18:550:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:550:26:550:26 | w | | main.rs:517:5:518:22 | S3 | +| main.rs:550:26:550:26 | w | T3 | main.rs:446:5:447:14 | S1 | +| main.rs:550:26:550:31 | w.m(...) | | file://:0:0:0:0 | & | +| main.rs:550:26:550:31 | w.m(...) | &T | main.rs:517:5:518:22 | S3 | +| main.rs:550:26:550:31 | w.m(...) | &T.T3 | main.rs:446:5:447:14 | S1 | +| main.rs:550:30:550:30 | x | | main.rs:446:5:447:14 | S1 | +| main.rs:567:19:567:22 | SelfParam | | main.rs:565:5:568:5 | Self [trait FirstTrait] | +| main.rs:572:19:572:22 | SelfParam | | main.rs:570:5:573:5 | Self [trait SecondTrait] | +| main.rs:575:64:575:64 | x | | main.rs:575:45:575:61 | T | +| main.rs:577:13:577:14 | s1 | | main.rs:575:35:575:42 | I | +| main.rs:577:18:577:18 | x | | main.rs:575:45:575:61 | T | +| main.rs:577:18:577:27 | x.method() | | main.rs:575:35:575:42 | I | +| main.rs:578:18:578:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:578:18:578:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:578:18:578:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:578:18:578:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:578:26:578:27 | s1 | | main.rs:575:35:575:42 | I | +| main.rs:581:65:581:65 | x | | main.rs:581:46:581:62 | T | +| main.rs:583:13:583:14 | s2 | | main.rs:581:36:581:43 | I | +| main.rs:583:18:583:18 | x | | main.rs:581:46:581:62 | T | +| main.rs:583:18:583:27 | x.method() | | main.rs:581:36:581:43 | I | +| main.rs:584:18:584:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:584:18:584:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:584:18:584:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:584:18:584:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:584:26:584:27 | s2 | | main.rs:581:36:581:43 | I | +| main.rs:587:49:587:49 | x | | main.rs:587:30:587:46 | T | +| main.rs:588:13:588:13 | s | | main.rs:557:5:558:14 | S1 | +| main.rs:588:17:588:17 | x | | main.rs:587:30:587:46 | T | +| main.rs:588:17:588:26 | x.method() | | main.rs:557:5:558:14 | S1 | +| main.rs:589:18:589:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:589:18:589:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:589:18:589:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:589:18:589:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:589:26:589:26 | s | | main.rs:557:5:558:14 | S1 | +| main.rs:592:53:592:53 | x | | main.rs:592:34:592:50 | T | +| main.rs:593:13:593:13 | s | | main.rs:557:5:558:14 | S1 | +| main.rs:593:17:593:17 | x | | main.rs:592:34:592:50 | T | +| main.rs:593:17:593:26 | x.method() | | main.rs:557:5:558:14 | S1 | +| main.rs:594:18:594:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:594:18:594:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:594:18:594:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:594:18:594:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:594:26:594:26 | s | | main.rs:557:5:558:14 | S1 | +| main.rs:597:43:597:43 | x | | main.rs:597:40:597:40 | T | +| main.rs:601:13:601:13 | s | | main.rs:557:5:558:14 | S1 | +| main.rs:601:17:601:17 | x | | main.rs:597:40:597:40 | T | +| main.rs:601:17:601:26 | x.method() | | main.rs:557:5:558:14 | S1 | +| main.rs:602:18:602:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:602:18:602:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:602:18:602:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:602:18:602:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:602:26:602:26 | s | | main.rs:557:5:558:14 | S1 | +| main.rs:606:16:606:19 | SelfParam | | main.rs:605:5:609:5 | Self [trait Pair] | +| main.rs:608:16:608:19 | SelfParam | | main.rs:605:5:609:5 | Self [trait Pair] | +| main.rs:611:53:611:53 | x | | main.rs:611:50:611:50 | T | +| main.rs:611:59:611:59 | y | | main.rs:611:50:611:50 | T | +| main.rs:616:13:616:13 | _ | | main.rs:557:5:558:14 | S1 | +| main.rs:616:17:616:17 | x | | main.rs:611:50:611:50 | T | +| main.rs:616:17:616:23 | x.fst() | | main.rs:557:5:558:14 | S1 | +| main.rs:617:13:617:13 | _ | | main.rs:557:5:558:14 | S1 | +| main.rs:617:17:617:17 | y | | main.rs:611:50:611:50 | T | +| main.rs:617:17:617:26 | y.method() | | main.rs:557:5:558:14 | S1 | +| main.rs:620:58:620:58 | x | | main.rs:620:41:620:55 | T | +| main.rs:620:64:620:64 | y | | main.rs:620:41:620:55 | T | +| main.rs:622:13:622:14 | s1 | | main.rs:557:5:558:14 | S1 | +| main.rs:622:18:622:18 | x | | main.rs:620:41:620:55 | T | +| main.rs:622:18:622:24 | x.fst() | | main.rs:557:5:558:14 | S1 | +| main.rs:623:13:623:14 | s2 | | main.rs:560:5:561:14 | S2 | +| main.rs:623:18:623:18 | y | | main.rs:620:41:620:55 | T | +| main.rs:623:18:623:24 | y.snd() | | main.rs:560:5:561:14 | S2 | +| main.rs:624:18:624:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:624:18:624:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:624:18:624:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:624:18:624:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:624:32:624:33 | s1 | | main.rs:557:5:558:14 | S1 | +| main.rs:624:36:624:37 | s2 | | main.rs:560:5:561:14 | S2 | +| main.rs:627:69:627:69 | x | | main.rs:627:52:627:66 | T | +| main.rs:627:75:627:75 | y | | main.rs:627:52:627:66 | T | +| main.rs:629:13:629:14 | s1 | | main.rs:557:5:558:14 | S1 | +| main.rs:629:18:629:18 | x | | main.rs:627:52:627:66 | T | +| main.rs:629:18:629:24 | x.fst() | | main.rs:557:5:558:14 | S1 | +| main.rs:630:13:630:14 | s2 | | main.rs:627:41:627:49 | T2 | +| main.rs:630:18:630:18 | y | | main.rs:627:52:627:66 | T | +| main.rs:630:18:630:24 | y.snd() | | main.rs:627:41:627:49 | T2 | +| main.rs:631:18:631:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:631:18:631:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:631:18:631:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:631:18:631:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:631:32:631:33 | s1 | | main.rs:557:5:558:14 | S1 | +| main.rs:631:36:631:37 | s2 | | main.rs:627:41:627:49 | T2 | +| main.rs:634:50:634:50 | x | | main.rs:634:41:634:47 | T | +| main.rs:634:56:634:56 | y | | main.rs:634:41:634:47 | T | +| main.rs:636:13:636:14 | s1 | | {EXTERNAL LOCATION} | bool | +| main.rs:636:18:636:18 | x | | main.rs:634:41:634:47 | T | +| main.rs:636:18:636:24 | x.fst() | | {EXTERNAL LOCATION} | bool | +| main.rs:637:13:637:14 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:637:18:637:18 | y | | main.rs:634:41:634:47 | T | +| main.rs:637:18:637:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | +| main.rs:638:18:638:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:638:18:638:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:638:18:638:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:638:18:638:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:638:32:638:33 | s1 | | {EXTERNAL LOCATION} | bool | +| main.rs:638:36:638:37 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:641:54:641:54 | x | | main.rs:641:41:641:51 | T | +| main.rs:641:60:641:60 | y | | main.rs:641:41:641:51 | T | +| main.rs:643:13:643:14 | s1 | | {EXTERNAL LOCATION} | u8 | +| main.rs:643:18:643:18 | x | | main.rs:641:41:641:51 | T | +| main.rs:643:18:643:24 | x.fst() | | {EXTERNAL LOCATION} | u8 | +| main.rs:644:13:644:14 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:644:18:644:18 | y | | main.rs:641:41:641:51 | T | +| main.rs:644:18:644:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | +| main.rs:645:18:645:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:645:18:645:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:645:18:645:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:645:18:645:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:645:32:645:33 | s1 | | {EXTERNAL LOCATION} | u8 | +| main.rs:645:36:645:37 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:661:15:661:18 | SelfParam | | main.rs:660:5:669:5 | Self [trait MyTrait] | +| main.rs:663:15:663:18 | SelfParam | | main.rs:660:5:669:5 | Self [trait MyTrait] | +| main.rs:666:9:668:9 | { ... } | | main.rs:660:19:660:19 | A | +| main.rs:667:13:667:16 | self | | main.rs:660:5:669:5 | Self [trait MyTrait] | +| main.rs:667:13:667:21 | self.m1() | | main.rs:660:19:660:19 | A | +| main.rs:673:43:673:43 | x | | main.rs:673:26:673:40 | T2 | +| main.rs:673:56:675:5 | { ... } | | main.rs:673:22:673:23 | T1 | +| main.rs:674:9:674:9 | x | | main.rs:673:26:673:40 | T2 | +| main.rs:674:9:674:14 | x.m1() | | main.rs:673:22:673:23 | T1 | +| main.rs:679:49:679:49 | x | | main.rs:650:5:653:5 | MyThing | +| main.rs:679:49:679:49 | x | T | main.rs:679:32:679:46 | T2 | +| main.rs:679:71:681:5 | { ... } | | main.rs:679:28:679:29 | T1 | +| main.rs:680:9:680:9 | x | | main.rs:650:5:653:5 | MyThing | +| main.rs:680:9:680:9 | x | T | main.rs:679:32:679:46 | T2 | +| main.rs:680:9:680:11 | x.a | | main.rs:679:32:679:46 | T2 | +| main.rs:680:9:680:16 | ... .m1() | | main.rs:679:28:679:29 | T1 | +| main.rs:684:15:684:18 | SelfParam | | main.rs:650:5:653:5 | MyThing | +| main.rs:684:15:684:18 | SelfParam | T | main.rs:683:10:683:10 | T | +| main.rs:684:26:686:9 | { ... } | | main.rs:683:10:683:10 | T | +| main.rs:685:13:685:16 | self | | main.rs:650:5:653:5 | MyThing | +| main.rs:685:13:685:16 | self | T | main.rs:683:10:683:10 | T | +| main.rs:685:13:685:18 | self.a | | main.rs:683:10:683:10 | T | +| main.rs:690:13:690:13 | x | | main.rs:650:5:653:5 | MyThing | +| main.rs:690:13:690:13 | x | T | main.rs:655:5:656:14 | S1 | +| main.rs:690:17:690:33 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | +| main.rs:690:17:690:33 | MyThing {...} | T | main.rs:655:5:656:14 | S1 | +| main.rs:690:30:690:31 | S1 | | main.rs:655:5:656:14 | S1 | +| main.rs:691:13:691:13 | y | | main.rs:650:5:653:5 | MyThing | +| main.rs:691:13:691:13 | y | T | main.rs:657:5:658:14 | S2 | +| main.rs:691:17:691:33 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | +| main.rs:691:17:691:33 | MyThing {...} | T | main.rs:657:5:658:14 | S2 | +| main.rs:691:30:691:31 | S2 | | main.rs:657:5:658:14 | S2 | +| main.rs:693:18:693:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:693:18:693:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:693:18:693:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:693:18:693:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:693:26:693:26 | x | | main.rs:650:5:653:5 | MyThing | +| main.rs:693:26:693:26 | x | T | main.rs:655:5:656:14 | S1 | +| main.rs:693:26:693:31 | x.m1() | | main.rs:655:5:656:14 | S1 | +| main.rs:694:18:694:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:694:18:694:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:694:18:694:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:694:18:694:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:694:26:694:26 | y | | main.rs:650:5:653:5 | MyThing | +| main.rs:694:26:694:26 | y | T | main.rs:657:5:658:14 | S2 | +| main.rs:694:26:694:31 | y.m1() | | main.rs:657:5:658:14 | S2 | +| main.rs:696:13:696:13 | x | | main.rs:650:5:653:5 | MyThing | +| main.rs:696:13:696:13 | x | T | main.rs:655:5:656:14 | S1 | +| main.rs:696:17:696:33 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | +| main.rs:696:17:696:33 | MyThing {...} | T | main.rs:655:5:656:14 | S1 | +| main.rs:696:30:696:31 | S1 | | main.rs:655:5:656:14 | S1 | +| main.rs:697:13:697:13 | y | | main.rs:650:5:653:5 | MyThing | +| main.rs:697:13:697:13 | y | T | main.rs:657:5:658:14 | S2 | +| main.rs:697:17:697:33 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | +| main.rs:697:17:697:33 | MyThing {...} | T | main.rs:657:5:658:14 | S2 | +| main.rs:697:30:697:31 | S2 | | main.rs:657:5:658:14 | S2 | +| main.rs:699:18:699:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:699:18:699:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:699:18:699:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:699:18:699:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:699:26:699:26 | x | | main.rs:650:5:653:5 | MyThing | +| main.rs:699:26:699:26 | x | T | main.rs:655:5:656:14 | S1 | +| main.rs:699:26:699:31 | x.m2() | | main.rs:655:5:656:14 | S1 | +| main.rs:700:18:700:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:700:18:700:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:700:18:700:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:700:18:700:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:700:26:700:26 | y | | main.rs:650:5:653:5 | MyThing | +| main.rs:700:26:700:26 | y | T | main.rs:657:5:658:14 | S2 | +| main.rs:700:26:700:31 | y.m2() | | main.rs:657:5:658:14 | S2 | +| main.rs:702:13:702:14 | x2 | | main.rs:650:5:653:5 | MyThing | +| main.rs:702:13:702:14 | x2 | T | main.rs:655:5:656:14 | S1 | +| main.rs:702:18:702:34 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | +| main.rs:702:18:702:34 | MyThing {...} | T | main.rs:655:5:656:14 | S1 | +| main.rs:702:31:702:32 | S1 | | main.rs:655:5:656:14 | S1 | +| main.rs:703:13:703:14 | y2 | | main.rs:650:5:653:5 | MyThing | +| main.rs:703:13:703:14 | y2 | T | main.rs:657:5:658:14 | S2 | +| main.rs:703:18:703:34 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | +| main.rs:703:18:703:34 | MyThing {...} | T | main.rs:657:5:658:14 | S2 | +| main.rs:703:31:703:32 | S2 | | main.rs:657:5:658:14 | S2 | +| main.rs:705:18:705:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:705:18:705:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:705:18:705:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:705:18:705:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:705:26:705:42 | call_trait_m1(...) | | main.rs:655:5:656:14 | S1 | +| main.rs:705:40:705:41 | x2 | | main.rs:650:5:653:5 | MyThing | +| main.rs:705:40:705:41 | x2 | T | main.rs:655:5:656:14 | S1 | +| main.rs:706:18:706:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:706:18:706:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:706:18:706:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:706:18:706:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:706:26:706:42 | call_trait_m1(...) | | main.rs:657:5:658:14 | S2 | +| main.rs:706:40:706:41 | y2 | | main.rs:650:5:653:5 | MyThing | +| main.rs:706:40:706:41 | y2 | T | main.rs:657:5:658:14 | S2 | +| main.rs:708:13:708:14 | x3 | | main.rs:650:5:653:5 | MyThing | +| main.rs:708:13:708:14 | x3 | T | main.rs:650:5:653:5 | MyThing | +| main.rs:708:13:708:14 | x3 | T.T | main.rs:655:5:656:14 | S1 | +| main.rs:708:18:710:9 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | +| main.rs:708:18:710:9 | MyThing {...} | T | main.rs:650:5:653:5 | MyThing | +| main.rs:708:18:710:9 | MyThing {...} | T.T | main.rs:655:5:656:14 | S1 | +| main.rs:709:16:709:32 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | +| main.rs:709:16:709:32 | MyThing {...} | T | main.rs:655:5:656:14 | S1 | +| main.rs:709:29:709:30 | S1 | | main.rs:655:5:656:14 | S1 | +| main.rs:711:13:711:14 | y3 | | main.rs:650:5:653:5 | MyThing | +| main.rs:711:13:711:14 | y3 | T | main.rs:650:5:653:5 | MyThing | +| main.rs:711:13:711:14 | y3 | T.T | main.rs:657:5:658:14 | S2 | +| main.rs:711:18:713:9 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | +| main.rs:711:18:713:9 | MyThing {...} | T | main.rs:650:5:653:5 | MyThing | +| main.rs:711:18:713:9 | MyThing {...} | T.T | main.rs:657:5:658:14 | S2 | +| main.rs:712:16:712:32 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | +| main.rs:712:16:712:32 | MyThing {...} | T | main.rs:657:5:658:14 | S2 | +| main.rs:712:29:712:30 | S2 | | main.rs:657:5:658:14 | S2 | +| main.rs:715:13:715:13 | a | | main.rs:655:5:656:14 | S1 | +| main.rs:715:17:715:39 | call_trait_thing_m1(...) | | main.rs:655:5:656:14 | S1 | +| main.rs:715:37:715:38 | x3 | | main.rs:650:5:653:5 | MyThing | +| main.rs:715:37:715:38 | x3 | T | main.rs:650:5:653:5 | MyThing | +| main.rs:715:37:715:38 | x3 | T.T | main.rs:655:5:656:14 | S1 | +| main.rs:716:18:716:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:716:18:716:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:716:18:716:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:716:18:716:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:716:26:716:26 | a | | main.rs:655:5:656:14 | S1 | +| main.rs:717:13:717:13 | b | | main.rs:657:5:658:14 | S2 | +| main.rs:717:17:717:39 | call_trait_thing_m1(...) | | main.rs:657:5:658:14 | S2 | +| main.rs:717:37:717:38 | y3 | | main.rs:650:5:653:5 | MyThing | +| main.rs:717:37:717:38 | y3 | T | main.rs:650:5:653:5 | MyThing | +| main.rs:717:37:717:38 | y3 | T.T | main.rs:657:5:658:14 | S2 | +| main.rs:718:18:718:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:718:18:718:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:718:18:718:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:718:18:718:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:718:26:718:26 | b | | main.rs:657:5:658:14 | S2 | +| main.rs:729:19:729:22 | SelfParam | | main.rs:723:5:726:5 | Wrapper | +| main.rs:729:19:729:22 | SelfParam | A | main.rs:728:10:728:10 | A | +| main.rs:729:30:731:9 | { ... } | | main.rs:728:10:728:10 | A | +| main.rs:730:13:730:16 | self | | main.rs:723:5:726:5 | Wrapper | +| main.rs:730:13:730:16 | self | A | main.rs:728:10:728:10 | A | +| main.rs:730:13:730:22 | self.field | | main.rs:728:10:728:10 | A | +| main.rs:738:15:738:18 | SelfParam | | main.rs:734:5:748:5 | Self [trait MyTrait] | +| main.rs:740:15:740:18 | SelfParam | | main.rs:734:5:748:5 | Self [trait MyTrait] | +| main.rs:744:9:747:9 | { ... } | | main.rs:735:9:735:28 | AssociatedType | +| main.rs:745:13:745:16 | self | | main.rs:734:5:748:5 | Self [trait MyTrait] | +| main.rs:745:13:745:21 | self.m1() | | main.rs:735:9:735:28 | AssociatedType | +| main.rs:746:13:746:43 | ...::default(...) | | main.rs:735:9:735:28 | AssociatedType | +| main.rs:754:19:754:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:754:19:754:23 | SelfParam | &T | main.rs:750:5:760:5 | Self [trait MyTraitAssoc2] | +| main.rs:754:26:754:26 | a | | main.rs:754:16:754:16 | A | +| main.rs:756:22:756:26 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:756:22:756:26 | SelfParam | &T | main.rs:750:5:760:5 | Self [trait MyTraitAssoc2] | +| main.rs:756:29:756:29 | a | | main.rs:756:19:756:19 | A | +| main.rs:756:35:756:35 | b | | main.rs:756:19:756:19 | A | +| main.rs:756:75:759:9 | { ... } | | main.rs:751:9:751:52 | GenericAssociatedType | +| main.rs:757:13:757:16 | self | | file://:0:0:0:0 | & | +| main.rs:757:13:757:16 | self | &T | main.rs:750:5:760:5 | Self [trait MyTraitAssoc2] | +| main.rs:757:13:757:23 | self.put(...) | | main.rs:751:9:751:52 | GenericAssociatedType | +| main.rs:757:22:757:22 | a | | main.rs:756:19:756:19 | A | +| main.rs:758:13:758:16 | self | | file://:0:0:0:0 | & | +| main.rs:758:13:758:16 | self | &T | main.rs:750:5:760:5 | Self [trait MyTraitAssoc2] | +| main.rs:758:13:758:23 | self.put(...) | | main.rs:751:9:751:52 | GenericAssociatedType | +| main.rs:758:22:758:22 | b | | main.rs:756:19:756:19 | A | +| main.rs:767:21:767:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:767:21:767:25 | SelfParam | &T | main.rs:762:5:772:5 | Self [trait TraitMultipleAssoc] | +| main.rs:769:20:769:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:769:20:769:24 | SelfParam | &T | main.rs:762:5:772:5 | Self [trait TraitMultipleAssoc] | +| main.rs:771:20:771:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:771:20:771:24 | SelfParam | &T | main.rs:762:5:772:5 | Self [trait TraitMultipleAssoc] | +| main.rs:787:15:787:18 | SelfParam | | main.rs:774:5:775:13 | S | +| main.rs:787:45:789:9 | { ... } | | main.rs:780:5:781:14 | AT | +| main.rs:788:13:788:14 | AT | | main.rs:780:5:781:14 | AT | +| main.rs:797:19:797:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:797:19:797:23 | SelfParam | &T | main.rs:774:5:775:13 | S | +| main.rs:797:26:797:26 | a | | main.rs:797:16:797:16 | A | +| main.rs:797:46:799:9 | { ... } | | main.rs:723:5:726:5 | Wrapper | +| main.rs:797:46:799:9 | { ... } | A | main.rs:797:16:797:16 | A | +| main.rs:798:13:798:32 | Wrapper {...} | | main.rs:723:5:726:5 | Wrapper | +| main.rs:798:13:798:32 | Wrapper {...} | A | main.rs:797:16:797:16 | A | +| main.rs:798:30:798:30 | a | | main.rs:797:16:797:16 | A | +| main.rs:806:15:806:18 | SelfParam | | main.rs:777:5:778:14 | S2 | +| main.rs:806:45:808:9 | { ... } | | main.rs:723:5:726:5 | Wrapper | +| main.rs:806:45:808:9 | { ... } | A | main.rs:777:5:778:14 | S2 | +| main.rs:807:13:807:35 | Wrapper {...} | | main.rs:723:5:726:5 | Wrapper | +| main.rs:807:13:807:35 | Wrapper {...} | A | main.rs:777:5:778:14 | S2 | +| main.rs:807:30:807:33 | self | | main.rs:777:5:778:14 | S2 | +| main.rs:813:30:815:9 | { ... } | | main.rs:723:5:726:5 | Wrapper | +| main.rs:813:30:815:9 | { ... } | A | main.rs:777:5:778:14 | S2 | +| main.rs:814:13:814:33 | Wrapper {...} | | main.rs:723:5:726:5 | Wrapper | +| main.rs:814:13:814:33 | Wrapper {...} | A | main.rs:777:5:778:14 | S2 | +| main.rs:814:30:814:31 | S2 | | main.rs:777:5:778:14 | S2 | +| main.rs:820:22:820:26 | thing | | main.rs:820:10:820:19 | T | +| main.rs:821:9:821:13 | thing | | main.rs:820:10:820:19 | T | +| main.rs:828:21:828:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:828:21:828:25 | SelfParam | &T | main.rs:780:5:781:14 | AT | +| main.rs:828:34:830:9 | { ... } | | main.rs:780:5:781:14 | AT | +| main.rs:829:13:829:14 | AT | | main.rs:780:5:781:14 | AT | +| main.rs:832:20:832:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:832:20:832:24 | SelfParam | &T | main.rs:780:5:781:14 | AT | +| main.rs:832:43:834:9 | { ... } | | main.rs:774:5:775:13 | S | +| main.rs:833:13:833:13 | S | | main.rs:774:5:775:13 | S | +| main.rs:836:20:836:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:836:20:836:24 | SelfParam | &T | main.rs:780:5:781:14 | AT | +| main.rs:836:43:838:9 | { ... } | | main.rs:777:5:778:14 | S2 | +| main.rs:837:13:837:14 | S2 | | main.rs:777:5:778:14 | S2 | +| main.rs:842:13:842:14 | x1 | | main.rs:774:5:775:13 | S | +| main.rs:842:18:842:18 | S | | main.rs:774:5:775:13 | S | +| main.rs:844:18:844:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:844:18:844:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:844:18:844:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:844:18:844:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:844:26:844:27 | x1 | | main.rs:774:5:775:13 | S | +| main.rs:844:26:844:32 | x1.m1() | | main.rs:780:5:781:14 | AT | +| main.rs:846:13:846:14 | x2 | | main.rs:774:5:775:13 | S | +| main.rs:846:18:846:18 | S | | main.rs:774:5:775:13 | S | +| main.rs:848:13:848:13 | y | | main.rs:780:5:781:14 | AT | +| main.rs:848:17:848:18 | x2 | | main.rs:774:5:775:13 | S | +| main.rs:848:17:848:23 | x2.m2() | | main.rs:780:5:781:14 | AT | +| main.rs:849:18:849:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:849:18:849:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:849:18:849:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:849:18:849:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:849:26:849:26 | y | | main.rs:780:5:781:14 | AT | +| main.rs:851:13:851:14 | x3 | | main.rs:774:5:775:13 | S | +| main.rs:851:18:851:18 | S | | main.rs:774:5:775:13 | S | +| main.rs:853:18:853:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:853:18:853:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:853:18:853:43 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:853:18:853:43 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:853:26:853:27 | x3 | | main.rs:774:5:775:13 | S | +| main.rs:853:26:853:34 | x3.put(...) | | main.rs:723:5:726:5 | Wrapper | +| main.rs:853:26:853:34 | x3.put(...) | A | {EXTERNAL LOCATION} | i32 | +| main.rs:853:26:853:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | +| main.rs:853:33:853:33 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:856:18:856:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:856:18:856:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:856:18:856:49 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:856:18:856:49 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:856:26:856:27 | x3 | | main.rs:774:5:775:13 | S | +| main.rs:856:26:856:40 | x3.putTwo(...) | | main.rs:723:5:726:5 | Wrapper | +| main.rs:856:26:856:40 | x3.putTwo(...) | A | main.rs:794:36:794:50 | AssociatedParam | +| main.rs:856:26:856:49 | ... .unwrap() | | main.rs:794:36:794:50 | AssociatedParam | +| main.rs:856:36:856:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:856:39:856:39 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:858:20:858:20 | S | | main.rs:774:5:775:13 | S | +| main.rs:859:18:859:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:859:18:859:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:859:18:859:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:859:18:859:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:861:13:861:14 | x5 | | main.rs:777:5:778:14 | S2 | +| main.rs:861:18:861:19 | S2 | | main.rs:777:5:778:14 | S2 | +| main.rs:862:18:862:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:862:18:862:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:862:18:862:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:862:18:862:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:862:26:862:27 | x5 | | main.rs:777:5:778:14 | S2 | +| main.rs:862:26:862:32 | x5.m1() | | main.rs:723:5:726:5 | Wrapper | +| main.rs:862:26:862:32 | x5.m1() | A | main.rs:777:5:778:14 | S2 | +| main.rs:863:13:863:14 | x6 | | main.rs:777:5:778:14 | S2 | +| main.rs:863:18:863:19 | S2 | | main.rs:777:5:778:14 | S2 | +| main.rs:864:18:864:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:864:18:864:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:864:18:864:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:864:18:864:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:864:26:864:27 | x6 | | main.rs:777:5:778:14 | S2 | +| main.rs:864:26:864:32 | x6.m2() | | main.rs:723:5:726:5 | Wrapper | +| main.rs:864:26:864:32 | x6.m2() | A | main.rs:777:5:778:14 | S2 | +| main.rs:866:13:866:22 | assoc_zero | | main.rs:780:5:781:14 | AT | +| main.rs:866:26:866:27 | AT | | main.rs:780:5:781:14 | AT | +| main.rs:866:26:866:38 | AT.get_zero() | | main.rs:780:5:781:14 | AT | +| main.rs:867:13:867:21 | assoc_one | | main.rs:774:5:775:13 | S | +| main.rs:867:25:867:26 | AT | | main.rs:780:5:781:14 | AT | +| main.rs:867:25:867:36 | AT.get_one() | | main.rs:774:5:775:13 | S | +| main.rs:868:13:868:21 | assoc_two | | main.rs:777:5:778:14 | S2 | +| main.rs:868:25:868:26 | AT | | main.rs:780:5:781:14 | AT | +| main.rs:868:25:868:36 | AT.get_two() | | main.rs:777:5:778:14 | S2 | +| main.rs:876:19:876:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:876:19:876:23 | SelfParam | &T | main.rs:873:5:877:5 | Self [trait Supertrait] | +| main.rs:876:26:876:32 | content | | main.rs:874:9:874:21 | Content | +| main.rs:881:24:881:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:881:24:881:28 | SelfParam | &T | main.rs:879:5:882:5 | Self [trait Subtrait] | +| main.rs:890:23:890:27 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:890:23:890:27 | SelfParam | &T | main.rs:884:5:894:5 | Self [trait Subtrait2] | +| main.rs:890:30:890:31 | c1 | | main.rs:874:9:874:21 | Content | +| main.rs:890:49:890:50 | c2 | | main.rs:874:9:874:21 | Content | +| main.rs:891:13:891:16 | self | | file://:0:0:0:0 | & | +| main.rs:891:13:891:16 | self | &T | main.rs:884:5:894:5 | Self [trait Subtrait2] | +| main.rs:891:25:891:26 | c1 | | main.rs:874:9:874:21 | Content | +| main.rs:892:13:892:16 | self | | file://:0:0:0:0 | & | +| main.rs:892:13:892:16 | self | &T | main.rs:884:5:894:5 | Self [trait Subtrait2] | +| main.rs:892:25:892:26 | c2 | | main.rs:874:9:874:21 | Content | +| main.rs:900:19:900:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:900:19:900:23 | SelfParam | &T | main.rs:896:5:896:24 | MyType | +| main.rs:900:19:900:23 | SelfParam | &T.T | main.rs:898:10:898:10 | T | +| main.rs:900:26:900:33 | _content | | main.rs:898:10:898:10 | T | +| main.rs:901:22:901:42 | "Inserting content: \\n" | | file://:0:0:0:0 | & | +| main.rs:901:22:901:42 | "Inserting content: \\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:901:22:901:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:901:22:901:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:907:24:907:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:907:24:907:28 | SelfParam | &T | main.rs:896:5:896:24 | MyType | +| main.rs:907:24:907:28 | SelfParam | &T.T | main.rs:905:10:905:17 | T | +| main.rs:907:48:909:9 | { ... } | | main.rs:905:10:905:17 | T | +| main.rs:908:13:908:19 | (...) | | main.rs:896:5:896:24 | MyType | +| main.rs:908:13:908:19 | (...) | T | main.rs:905:10:905:17 | T | +| main.rs:908:13:908:21 | ... .0 | | main.rs:905:10:905:17 | T | +| main.rs:908:13:908:29 | ... .clone() | | main.rs:905:10:905:17 | T | +| main.rs:908:14:908:18 | * ... | | main.rs:896:5:896:24 | MyType | +| main.rs:908:14:908:18 | * ... | T | main.rs:905:10:905:17 | T | +| main.rs:908:15:908:18 | self | | file://:0:0:0:0 | & | +| main.rs:908:15:908:18 | self | &T | main.rs:896:5:896:24 | MyType | +| main.rs:908:15:908:18 | self | &T.T | main.rs:905:10:905:17 | T | +| main.rs:912:33:912:36 | item | | file://:0:0:0:0 | & | +| main.rs:912:33:912:36 | item | &T | main.rs:912:20:912:30 | T | +| main.rs:912:57:914:5 | { ... } | | main.rs:874:9:874:21 | Content | +| main.rs:913:9:913:12 | item | | file://:0:0:0:0 | & | +| main.rs:913:9:913:12 | item | &T | main.rs:912:20:912:30 | T | +| main.rs:913:9:913:26 | item.get_content() | | main.rs:874:9:874:21 | Content | +| main.rs:916:35:916:38 | item | | file://:0:0:0:0 | & | +| main.rs:916:35:916:38 | item | &T | main.rs:916:21:916:32 | T | +| main.rs:916:45:916:46 | c1 | | main.rs:874:9:874:21 | Content | +| main.rs:916:61:916:62 | c2 | | main.rs:874:9:874:21 | Content | +| main.rs:916:77:916:78 | c3 | | main.rs:874:9:874:21 | Content | +| main.rs:917:9:917:12 | item | | file://:0:0:0:0 | & | +| main.rs:917:9:917:12 | item | &T | main.rs:916:21:916:32 | T | +| main.rs:917:21:917:22 | c1 | | main.rs:874:9:874:21 | Content | +| main.rs:918:9:918:12 | item | | file://:0:0:0:0 | & | +| main.rs:918:9:918:12 | item | &T | main.rs:916:21:916:32 | T | +| main.rs:918:25:918:26 | c2 | | main.rs:874:9:874:21 | Content | +| main.rs:918:29:918:30 | c3 | | main.rs:874:9:874:21 | Content | +| main.rs:922:13:922:17 | item1 | | main.rs:896:5:896:24 | MyType | +| main.rs:922:13:922:17 | item1 | T | {EXTERNAL LOCATION} | i64 | +| main.rs:922:21:922:33 | MyType(...) | | main.rs:896:5:896:24 | MyType | +| main.rs:922:21:922:33 | MyType(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:922:28:922:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:923:25:923:29 | item1 | | main.rs:896:5:896:24 | MyType | +| main.rs:923:25:923:29 | item1 | T | {EXTERNAL LOCATION} | i64 | +| main.rs:925:13:925:17 | item2 | | main.rs:896:5:896:24 | MyType | +| main.rs:925:13:925:17 | item2 | T | {EXTERNAL LOCATION} | bool | +| main.rs:925:21:925:32 | MyType(...) | | main.rs:896:5:896:24 | MyType | +| main.rs:925:21:925:32 | MyType(...) | T | {EXTERNAL LOCATION} | bool | +| main.rs:925:28:925:31 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:926:37:926:42 | &item2 | | file://:0:0:0:0 | & | +| main.rs:926:37:926:42 | &item2 | &T | main.rs:896:5:896:24 | MyType | +| main.rs:926:37:926:42 | &item2 | &T.T | {EXTERNAL LOCATION} | bool | +| main.rs:926:38:926:42 | item2 | | main.rs:896:5:896:24 | MyType | +| main.rs:926:38:926:42 | item2 | T | {EXTERNAL LOCATION} | bool | +| main.rs:943:15:943:18 | SelfParam | | main.rs:931:5:935:5 | MyEnum | +| main.rs:943:15:943:18 | SelfParam | A | main.rs:942:10:942:10 | T | +| main.rs:943:26:948:9 | { ... } | | main.rs:942:10:942:10 | T | +| main.rs:944:13:947:13 | match self { ... } | | main.rs:942:10:942:10 | T | +| main.rs:944:19:944:22 | self | | main.rs:931:5:935:5 | MyEnum | +| main.rs:944:19:944:22 | self | A | main.rs:942:10:942:10 | T | +| main.rs:945:17:945:29 | ...::C1(...) | | main.rs:931:5:935:5 | MyEnum | +| main.rs:945:17:945:29 | ...::C1(...) | A | main.rs:942:10:942:10 | T | +| main.rs:945:28:945:28 | a | | main.rs:942:10:942:10 | T | +| main.rs:945:34:945:34 | a | | main.rs:942:10:942:10 | T | +| main.rs:946:17:946:32 | ...::C2 {...} | | main.rs:931:5:935:5 | MyEnum | +| main.rs:946:17:946:32 | ...::C2 {...} | A | main.rs:942:10:942:10 | T | +| main.rs:946:30:946:30 | a | | main.rs:942:10:942:10 | T | +| main.rs:946:37:946:37 | a | | main.rs:942:10:942:10 | T | +| main.rs:952:13:952:13 | x | | main.rs:931:5:935:5 | MyEnum | +| main.rs:952:13:952:13 | x | A | main.rs:937:5:938:14 | S1 | +| main.rs:952:17:952:30 | ...::C1(...) | | main.rs:931:5:935:5 | MyEnum | +| main.rs:952:17:952:30 | ...::C1(...) | A | main.rs:937:5:938:14 | S1 | +| main.rs:952:28:952:29 | S1 | | main.rs:937:5:938:14 | S1 | +| main.rs:953:13:953:13 | y | | main.rs:931:5:935:5 | MyEnum | +| main.rs:953:13:953:13 | y | A | main.rs:939:5:940:14 | S2 | +| main.rs:953:17:953:36 | ...::C2 {...} | | main.rs:931:5:935:5 | MyEnum | +| main.rs:953:17:953:36 | ...::C2 {...} | A | main.rs:939:5:940:14 | S2 | +| main.rs:953:33:953:34 | S2 | | main.rs:939:5:940:14 | S2 | +| main.rs:955:18:955:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:955:18:955:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:955:18:955:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:955:18:955:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:955:26:955:26 | x | | main.rs:931:5:935:5 | MyEnum | +| main.rs:955:26:955:26 | x | A | main.rs:937:5:938:14 | S1 | +| main.rs:955:26:955:31 | x.m1() | | main.rs:937:5:938:14 | S1 | +| main.rs:956:18:956:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:956:18:956:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:956:18:956:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:956:18:956:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:956:26:956:26 | y | | main.rs:931:5:935:5 | MyEnum | +| main.rs:956:26:956:26 | y | A | main.rs:939:5:940:14 | S2 | +| main.rs:956:26:956:31 | y.m1() | | main.rs:939:5:940:14 | S2 | +| main.rs:978:15:978:18 | SelfParam | | main.rs:976:5:979:5 | Self [trait MyTrait1] | +| main.rs:983:15:983:18 | SelfParam | | main.rs:981:5:993:5 | Self [trait MyTrait2] | +| main.rs:986:9:992:9 | { ... } | | main.rs:981:20:981:22 | Tr2 | +| main.rs:987:13:991:13 | if ... {...} else {...} | | main.rs:981:20:981:22 | Tr2 | +| main.rs:987:16:987:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:987:16:987:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:987:20:987:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:987:22:989:13 | { ... } | | main.rs:981:20:981:22 | Tr2 | +| main.rs:988:17:988:20 | self | | main.rs:981:5:993:5 | Self [trait MyTrait2] | +| main.rs:988:17:988:25 | self.m1() | | main.rs:981:20:981:22 | Tr2 | +| main.rs:989:20:991:13 | { ... } | | main.rs:981:20:981:22 | Tr2 | +| main.rs:990:17:990:30 | ...::m1(...) | | main.rs:981:20:981:22 | Tr2 | +| main.rs:990:26:990:29 | self | | main.rs:981:5:993:5 | Self [trait MyTrait2] | +| main.rs:997:15:997:18 | SelfParam | | main.rs:995:5:1007:5 | Self [trait MyTrait3] | +| main.rs:1000:9:1006:9 | { ... } | | main.rs:995:20:995:22 | Tr3 | +| main.rs:1001:13:1005:13 | if ... {...} else {...} | | main.rs:995:20:995:22 | Tr3 | +| main.rs:1001:16:1001:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1001:16:1001:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1001:20:1001:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1001:22:1003:13 | { ... } | | main.rs:995:20:995:22 | Tr3 | +| main.rs:1002:17:1002:20 | self | | main.rs:995:5:1007:5 | Self [trait MyTrait3] | +| main.rs:1002:17:1002:25 | self.m2() | | main.rs:961:5:964:5 | MyThing | +| main.rs:1002:17:1002:25 | self.m2() | A | main.rs:995:20:995:22 | Tr3 | +| main.rs:1002:17:1002:27 | ... .a | | main.rs:995:20:995:22 | Tr3 | +| main.rs:1003:20:1005:13 | { ... } | | main.rs:995:20:995:22 | Tr3 | +| main.rs:1004:17:1004:30 | ...::m2(...) | | main.rs:961:5:964:5 | MyThing | +| main.rs:1004:17:1004:30 | ...::m2(...) | A | main.rs:995:20:995:22 | Tr3 | +| main.rs:1004:17:1004:32 | ... .a | | main.rs:995:20:995:22 | Tr3 | +| main.rs:1004:26:1004:29 | self | | main.rs:995:5:1007:5 | Self [trait MyTrait3] | +| main.rs:1011:15:1011:18 | SelfParam | | main.rs:961:5:964:5 | MyThing | +| main.rs:1011:15:1011:18 | SelfParam | A | main.rs:1009:10:1009:10 | T | +| main.rs:1011:26:1013:9 | { ... } | | main.rs:1009:10:1009:10 | T | +| main.rs:1012:13:1012:16 | self | | main.rs:961:5:964:5 | MyThing | +| main.rs:1012:13:1012:16 | self | A | main.rs:1009:10:1009:10 | T | +| main.rs:1012:13:1012:18 | self.a | | main.rs:1009:10:1009:10 | T | +| main.rs:1020:15:1020:18 | SelfParam | | main.rs:966:5:969:5 | MyThing2 | +| main.rs:1020:15:1020:18 | SelfParam | A | main.rs:1018:10:1018:10 | T | +| main.rs:1020:35:1022:9 | { ... } | | main.rs:961:5:964:5 | MyThing | +| main.rs:1020:35:1022:9 | { ... } | A | main.rs:1018:10:1018:10 | T | +| main.rs:1021:13:1021:33 | MyThing {...} | | main.rs:961:5:964:5 | MyThing | +| main.rs:1021:13:1021:33 | MyThing {...} | A | main.rs:1018:10:1018:10 | T | +| main.rs:1021:26:1021:29 | self | | main.rs:966:5:969:5 | MyThing2 | +| main.rs:1021:26:1021:29 | self | A | main.rs:1018:10:1018:10 | T | +| main.rs:1021:26:1021:31 | self.a | | main.rs:1018:10:1018:10 | T | +| main.rs:1029:44:1029:44 | x | | main.rs:1029:26:1029:41 | T2 | +| main.rs:1029:57:1031:5 | { ... } | | main.rs:1029:22:1029:23 | T1 | +| main.rs:1030:9:1030:9 | x | | main.rs:1029:26:1029:41 | T2 | +| main.rs:1030:9:1030:14 | x.m1() | | main.rs:1029:22:1029:23 | T1 | +| main.rs:1033:56:1033:56 | x | | main.rs:1033:39:1033:53 | T | +| main.rs:1035:13:1035:13 | a | | main.rs:961:5:964:5 | MyThing | +| main.rs:1035:13:1035:13 | a | A | main.rs:971:5:972:14 | S1 | +| main.rs:1035:17:1035:17 | x | | main.rs:1033:39:1033:53 | T | +| main.rs:1035:17:1035:22 | x.m1() | | main.rs:961:5:964:5 | MyThing | +| main.rs:1035:17:1035:22 | x.m1() | A | main.rs:971:5:972:14 | S1 | +| main.rs:1036:18:1036:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1036:18:1036:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1036:18:1036:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1036:18:1036:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1036:26:1036:26 | a | | main.rs:961:5:964:5 | MyThing | +| main.rs:1036:26:1036:26 | a | A | main.rs:971:5:972:14 | S1 | +| main.rs:1040:13:1040:13 | x | | main.rs:961:5:964:5 | MyThing | +| main.rs:1040:13:1040:13 | x | A | main.rs:971:5:972:14 | S1 | +| main.rs:1040:17:1040:33 | MyThing {...} | | main.rs:961:5:964:5 | MyThing | +| main.rs:1040:17:1040:33 | MyThing {...} | A | main.rs:971:5:972:14 | S1 | +| main.rs:1040:30:1040:31 | S1 | | main.rs:971:5:972:14 | S1 | +| main.rs:1041:13:1041:13 | y | | main.rs:961:5:964:5 | MyThing | +| main.rs:1041:13:1041:13 | y | A | main.rs:973:5:974:14 | S2 | +| main.rs:1041:17:1041:33 | MyThing {...} | | main.rs:961:5:964:5 | MyThing | +| main.rs:1041:17:1041:33 | MyThing {...} | A | main.rs:973:5:974:14 | S2 | +| main.rs:1041:30:1041:31 | S2 | | main.rs:973:5:974:14 | S2 | +| main.rs:1043:18:1043:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1043:18:1043:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1043:18:1043:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1043:18:1043:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1043:26:1043:26 | x | | main.rs:961:5:964:5 | MyThing | +| main.rs:1043:26:1043:26 | x | A | main.rs:971:5:972:14 | S1 | +| main.rs:1043:26:1043:31 | x.m1() | | main.rs:971:5:972:14 | S1 | +| main.rs:1044:18:1044:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1044:18:1044:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1044:18:1044:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1044:18:1044:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1044:26:1044:26 | y | | main.rs:961:5:964:5 | MyThing | +| main.rs:1044:26:1044:26 | y | A | main.rs:973:5:974:14 | S2 | +| main.rs:1044:26:1044:31 | y.m1() | | main.rs:973:5:974:14 | S2 | +| main.rs:1046:13:1046:13 | x | | main.rs:961:5:964:5 | MyThing | +| main.rs:1046:13:1046:13 | x | A | main.rs:971:5:972:14 | S1 | +| main.rs:1046:17:1046:33 | MyThing {...} | | main.rs:961:5:964:5 | MyThing | +| main.rs:1046:17:1046:33 | MyThing {...} | A | main.rs:971:5:972:14 | S1 | +| main.rs:1046:30:1046:31 | S1 | | main.rs:971:5:972:14 | S1 | +| main.rs:1047:13:1047:13 | y | | main.rs:961:5:964:5 | MyThing | +| main.rs:1047:13:1047:13 | y | A | main.rs:973:5:974:14 | S2 | +| main.rs:1047:17:1047:33 | MyThing {...} | | main.rs:961:5:964:5 | MyThing | +| main.rs:1047:17:1047:33 | MyThing {...} | A | main.rs:973:5:974:14 | S2 | +| main.rs:1047:30:1047:31 | S2 | | main.rs:973:5:974:14 | S2 | | main.rs:1049:18:1049:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:1049:18:1049:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1049:18:1049:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1049:18:1049:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1049:26:1049:31 | id(...) | | file://:0:0:0:0 | & | -| main.rs:1049:26:1049:31 | id(...) | &T | main.rs:1020:5:1021:14 | S1 | -| main.rs:1049:29:1049:30 | &x | | file://:0:0:0:0 | & | -| main.rs:1049:29:1049:30 | &x | &T | main.rs:1020:5:1021:14 | S1 | -| main.rs:1049:30:1049:30 | x | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1051:13:1051:13 | x | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1051:17:1051:18 | S1 | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1052:18:1052:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1052:18:1052:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1052:18:1052:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1052:18:1052:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1052:26:1052:37 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:1052:26:1052:37 | id::<...>(...) | &T | main.rs:1020:5:1021:14 | S1 | -| main.rs:1052:35:1052:36 | &x | | file://:0:0:0:0 | & | -| main.rs:1052:35:1052:36 | &x | &T | main.rs:1020:5:1021:14 | S1 | -| main.rs:1052:36:1052:36 | x | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1054:13:1054:13 | x | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1054:13:1054:13 | x | | main.rs:1026:5:1026:25 | dyn Trait | -| main.rs:1054:17:1054:18 | S1 | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1054:17:1054:18 | S1 | | main.rs:1026:5:1026:25 | dyn Trait | +| main.rs:1049:26:1049:26 | x | | main.rs:961:5:964:5 | MyThing | +| main.rs:1049:26:1049:26 | x | A | main.rs:971:5:972:14 | S1 | +| main.rs:1049:26:1049:31 | x.m2() | | main.rs:971:5:972:14 | S1 | +| main.rs:1050:18:1050:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1050:18:1050:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1050:18:1050:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1050:18:1050:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1050:26:1050:26 | y | | main.rs:961:5:964:5 | MyThing | +| main.rs:1050:26:1050:26 | y | A | main.rs:973:5:974:14 | S2 | +| main.rs:1050:26:1050:31 | y.m2() | | main.rs:973:5:974:14 | S2 | +| main.rs:1052:13:1052:13 | x | | main.rs:966:5:969:5 | MyThing2 | +| main.rs:1052:13:1052:13 | x | A | main.rs:971:5:972:14 | S1 | +| main.rs:1052:17:1052:34 | MyThing2 {...} | | main.rs:966:5:969:5 | MyThing2 | +| main.rs:1052:17:1052:34 | MyThing2 {...} | A | main.rs:971:5:972:14 | S1 | +| main.rs:1052:31:1052:32 | S1 | | main.rs:971:5:972:14 | S1 | +| main.rs:1053:13:1053:13 | y | | main.rs:966:5:969:5 | MyThing2 | +| main.rs:1053:13:1053:13 | y | A | main.rs:973:5:974:14 | S2 | +| main.rs:1053:17:1053:34 | MyThing2 {...} | | main.rs:966:5:969:5 | MyThing2 | +| main.rs:1053:17:1053:34 | MyThing2 {...} | A | main.rs:973:5:974:14 | S2 | +| main.rs:1053:31:1053:32 | S2 | | main.rs:973:5:974:14 | S2 | +| main.rs:1055:18:1055:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1055:18:1055:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1055:18:1055:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1055:18:1055:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1055:26:1055:26 | x | | main.rs:966:5:969:5 | MyThing2 | +| main.rs:1055:26:1055:26 | x | A | main.rs:971:5:972:14 | S1 | +| main.rs:1055:26:1055:31 | x.m3() | | main.rs:971:5:972:14 | S1 | | main.rs:1056:18:1056:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:1056:18:1056:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1056:18:1056:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1056:18:1056:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1056:26:1056:44 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:1056:26:1056:44 | id::<...>(...) | &T | main.rs:1026:5:1026:25 | dyn Trait | -| main.rs:1056:42:1056:43 | &x | | file://:0:0:0:0 | & | -| main.rs:1056:42:1056:43 | &x | &T | main.rs:1020:5:1021:14 | S1 | -| main.rs:1056:42:1056:43 | &x | &T | main.rs:1026:5:1026:25 | dyn Trait | -| main.rs:1056:43:1056:43 | x | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1056:43:1056:43 | x | | main.rs:1026:5:1026:25 | dyn Trait | -| main.rs:1058:13:1058:13 | x | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1058:17:1058:18 | S1 | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1059:9:1059:25 | into::<...>(...) | | main.rs:1023:5:1024:14 | S2 | -| main.rs:1059:24:1059:24 | x | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1061:13:1061:13 | x | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1061:17:1061:18 | S1 | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1062:13:1062:13 | y | | main.rs:1023:5:1024:14 | S2 | -| main.rs:1062:21:1062:27 | into(...) | | main.rs:1023:5:1024:14 | S2 | -| main.rs:1062:26:1062:26 | x | | main.rs:1020:5:1021:14 | S1 | -| main.rs:1076:22:1076:25 | SelfParam | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1076:22:1076:25 | SelfParam | Fst | main.rs:1075:10:1075:12 | Fst | -| main.rs:1076:22:1076:25 | SelfParam | Snd | main.rs:1075:15:1075:17 | Snd | -| main.rs:1076:35:1083:9 | { ... } | | main.rs:1075:15:1075:17 | Snd | -| main.rs:1077:13:1082:13 | match self { ... } | | main.rs:1075:15:1075:17 | Snd | -| main.rs:1077:19:1077:22 | self | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1077:19:1077:22 | self | Fst | main.rs:1075:10:1075:12 | Fst | -| main.rs:1077:19:1077:22 | self | Snd | main.rs:1075:15:1075:17 | Snd | -| main.rs:1078:17:1078:38 | ...::PairNone(...) | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1078:17:1078:38 | ...::PairNone(...) | Fst | main.rs:1075:10:1075:12 | Fst | -| main.rs:1078:17:1078:38 | ...::PairNone(...) | Snd | main.rs:1075:15:1075:17 | Snd | -| main.rs:1078:43:1078:82 | MacroExpr | | main.rs:1075:15:1075:17 | Snd | -| main.rs:1078:50:1078:81 | "PairNone has no second elemen... | | file://:0:0:0:0 | & | -| main.rs:1078:50:1078:81 | "PairNone has no second elemen... | &T | {EXTERNAL LOCATION} | str | -| main.rs:1078:50:1078:81 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1078:50:1078:81 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1078:50:1078:81 | MacroExpr | | main.rs:1075:15:1075:17 | Snd | -| main.rs:1078:50:1078:81 | { ... } | | main.rs:1075:15:1075:17 | Snd | -| main.rs:1079:17:1079:38 | ...::PairFst(...) | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1079:17:1079:38 | ...::PairFst(...) | Fst | main.rs:1075:10:1075:12 | Fst | -| main.rs:1079:17:1079:38 | ...::PairFst(...) | Snd | main.rs:1075:15:1075:17 | Snd | -| main.rs:1079:37:1079:37 | _ | | main.rs:1075:10:1075:12 | Fst | -| main.rs:1079:43:1079:81 | MacroExpr | | main.rs:1075:15:1075:17 | Snd | -| main.rs:1079:50:1079:80 | "PairFst has no second element... | | file://:0:0:0:0 | & | -| main.rs:1079:50:1079:80 | "PairFst has no second element... | &T | {EXTERNAL LOCATION} | str | -| main.rs:1079:50:1079:80 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1079:50:1079:80 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1079:50:1079:80 | MacroExpr | | main.rs:1075:15:1075:17 | Snd | -| main.rs:1079:50:1079:80 | { ... } | | main.rs:1075:15:1075:17 | Snd | -| main.rs:1080:17:1080:40 | ...::PairSnd(...) | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1080:17:1080:40 | ...::PairSnd(...) | Fst | main.rs:1075:10:1075:12 | Fst | -| main.rs:1080:17:1080:40 | ...::PairSnd(...) | Snd | main.rs:1075:15:1075:17 | Snd | -| main.rs:1080:37:1080:39 | snd | | main.rs:1075:15:1075:17 | Snd | -| main.rs:1080:45:1080:47 | snd | | main.rs:1075:15:1075:17 | Snd | -| main.rs:1081:17:1081:44 | ...::PairBoth(...) | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1081:17:1081:44 | ...::PairBoth(...) | Fst | main.rs:1075:10:1075:12 | Fst | -| main.rs:1081:17:1081:44 | ...::PairBoth(...) | Snd | main.rs:1075:15:1075:17 | Snd | -| main.rs:1081:38:1081:38 | _ | | main.rs:1075:10:1075:12 | Fst | -| main.rs:1081:41:1081:43 | snd | | main.rs:1075:15:1075:17 | Snd | -| main.rs:1081:49:1081:51 | snd | | main.rs:1075:15:1075:17 | Snd | -| main.rs:1107:10:1107:10 | t | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1107:10:1107:10 | t | Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1107:10:1107:10 | t | Snd | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1107:10:1107:10 | t | Snd.Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1107:10:1107:10 | t | Snd.Snd | main.rs:1092:5:1093:14 | S3 | -| main.rs:1108:13:1108:13 | x | | main.rs:1092:5:1093:14 | S3 | -| main.rs:1108:17:1108:17 | t | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1108:17:1108:17 | t | Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1108:17:1108:17 | t | Snd | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1108:17:1108:17 | t | Snd.Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1108:17:1108:17 | t | Snd.Snd | main.rs:1092:5:1093:14 | S3 | -| main.rs:1108:17:1108:29 | t.unwrapSnd() | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1108:17:1108:29 | t.unwrapSnd() | Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1108:17:1108:29 | t.unwrapSnd() | Snd | main.rs:1092:5:1093:14 | S3 | -| main.rs:1108:17:1108:41 | ... .unwrapSnd() | | main.rs:1092:5:1093:14 | S3 | -| main.rs:1109:18:1109:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1109:18:1109:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1109:18:1109:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1109:18:1109:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1109:26:1109:26 | x | | main.rs:1092:5:1093:14 | S3 | -| main.rs:1124:22:1124:25 | SelfParam | | main.rs:1122:5:1125:5 | Self [trait TraitWithAssocType] | -| main.rs:1132:22:1132:25 | SelfParam | | main.rs:1120:5:1120:28 | GenS | -| main.rs:1132:22:1132:25 | SelfParam | GenT | main.rs:1127:10:1127:15 | Output | -| main.rs:1132:44:1134:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1132:44:1134:9 | { ... } | E | main.rs:1127:10:1127:15 | Output | -| main.rs:1132:44:1134:9 | { ... } | T | main.rs:1127:10:1127:15 | Output | -| main.rs:1133:13:1133:22 | Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1133:13:1133:22 | Ok(...) | E | main.rs:1127:10:1127:15 | Output | -| main.rs:1133:13:1133:22 | Ok(...) | T | main.rs:1127:10:1127:15 | Output | -| main.rs:1133:16:1133:19 | self | | main.rs:1120:5:1120:28 | GenS | -| main.rs:1133:16:1133:19 | self | GenT | main.rs:1127:10:1127:15 | Output | -| main.rs:1133:16:1133:21 | self.0 | | main.rs:1127:10:1127:15 | Output | -| main.rs:1139:13:1139:14 | p1 | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1139:13:1139:14 | p1 | Fst | main.rs:1086:5:1087:14 | S1 | -| main.rs:1139:13:1139:14 | p1 | Snd | main.rs:1089:5:1090:14 | S2 | -| main.rs:1139:26:1139:53 | ...::PairBoth(...) | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1139:26:1139:53 | ...::PairBoth(...) | Fst | main.rs:1086:5:1087:14 | S1 | -| main.rs:1139:26:1139:53 | ...::PairBoth(...) | Snd | main.rs:1089:5:1090:14 | S2 | -| main.rs:1139:47:1139:48 | S1 | | main.rs:1086:5:1087:14 | S1 | -| main.rs:1139:51:1139:52 | S2 | | main.rs:1089:5:1090:14 | S2 | -| main.rs:1140:18:1140:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1140:18:1140:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1140:18:1140:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1140:18:1140:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1140:26:1140:27 | p1 | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1140:26:1140:27 | p1 | Fst | main.rs:1086:5:1087:14 | S1 | -| main.rs:1140:26:1140:27 | p1 | Snd | main.rs:1089:5:1090:14 | S2 | -| main.rs:1143:13:1143:14 | p2 | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1143:13:1143:14 | p2 | Fst | main.rs:1086:5:1087:14 | S1 | -| main.rs:1143:13:1143:14 | p2 | Snd | main.rs:1089:5:1090:14 | S2 | -| main.rs:1143:26:1143:47 | ...::PairNone(...) | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1143:26:1143:47 | ...::PairNone(...) | Fst | main.rs:1086:5:1087:14 | S1 | -| main.rs:1143:26:1143:47 | ...::PairNone(...) | Snd | main.rs:1089:5:1090:14 | S2 | -| main.rs:1144:18:1144:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1144:18:1144:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1144:18:1144:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1144:18:1144:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1144:26:1144:27 | p2 | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1144:26:1144:27 | p2 | Fst | main.rs:1086:5:1087:14 | S1 | -| main.rs:1144:26:1144:27 | p2 | Snd | main.rs:1089:5:1090:14 | S2 | -| main.rs:1147:13:1147:14 | p3 | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1147:13:1147:14 | p3 | Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1147:13:1147:14 | p3 | Snd | main.rs:1092:5:1093:14 | S3 | -| main.rs:1147:34:1147:56 | ...::PairSnd(...) | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1147:34:1147:56 | ...::PairSnd(...) | Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1147:34:1147:56 | ...::PairSnd(...) | Snd | main.rs:1092:5:1093:14 | S3 | -| main.rs:1147:54:1147:55 | S3 | | main.rs:1092:5:1093:14 | S3 | -| main.rs:1148:18:1148:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1148:18:1148:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1148:18:1148:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1148:18:1148:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1148:26:1148:27 | p3 | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1148:26:1148:27 | p3 | Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1148:26:1148:27 | p3 | Snd | main.rs:1092:5:1093:14 | S3 | -| main.rs:1151:13:1151:14 | p3 | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1151:13:1151:14 | p3 | Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1151:13:1151:14 | p3 | Snd | main.rs:1092:5:1093:14 | S3 | -| main.rs:1151:35:1151:56 | ...::PairNone(...) | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1151:35:1151:56 | ...::PairNone(...) | Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1151:35:1151:56 | ...::PairNone(...) | Snd | main.rs:1092:5:1093:14 | S3 | -| main.rs:1152:18:1152:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1152:18:1152:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1152:18:1152:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1152:18:1152:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1152:26:1152:27 | p3 | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1152:26:1152:27 | p3 | Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1152:26:1152:27 | p3 | Snd | main.rs:1092:5:1093:14 | S3 | -| main.rs:1154:11:1154:54 | ...::PairSnd(...) | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1154:11:1154:54 | ...::PairSnd(...) | Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1154:11:1154:54 | ...::PairSnd(...) | Snd | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1154:11:1154:54 | ...::PairSnd(...) | Snd.Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1154:11:1154:54 | ...::PairSnd(...) | Snd.Snd | main.rs:1092:5:1093:14 | S3 | -| main.rs:1154:31:1154:53 | ...::PairSnd(...) | | main.rs:1067:5:1073:5 | PairOption | -| main.rs:1154:31:1154:53 | ...::PairSnd(...) | Fst | main.rs:1089:5:1090:14 | S2 | -| main.rs:1154:31:1154:53 | ...::PairSnd(...) | Snd | main.rs:1092:5:1093:14 | S3 | -| main.rs:1154:51:1154:52 | S3 | | main.rs:1092:5:1093:14 | S3 | -| main.rs:1156:13:1156:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1156:13:1156:13 | x | E | main.rs:1086:5:1087:14 | S1 | -| main.rs:1156:13:1156:13 | x | T | main.rs:1112:5:1112:34 | S4 | -| main.rs:1156:13:1156:13 | x | T.T41 | main.rs:1089:5:1090:14 | S2 | -| main.rs:1156:13:1156:13 | x | T.T42 | main.rs:1114:5:1114:22 | S5 | -| main.rs:1156:13:1156:13 | x | T.T42.T5 | main.rs:1089:5:1090:14 | S2 | -| main.rs:1158:13:1158:13 | y | | {EXTERNAL LOCATION} | Result | -| main.rs:1158:13:1158:13 | y | E | {EXTERNAL LOCATION} | bool | -| main.rs:1158:13:1158:13 | y | T | {EXTERNAL LOCATION} | bool | -| main.rs:1158:17:1158:26 | GenS(...) | | main.rs:1120:5:1120:28 | GenS | -| main.rs:1158:17:1158:26 | GenS(...) | GenT | {EXTERNAL LOCATION} | bool | -| main.rs:1158:17:1158:38 | ... .get_input() | | {EXTERNAL LOCATION} | Result | -| main.rs:1158:17:1158:38 | ... .get_input() | E | {EXTERNAL LOCATION} | bool | -| main.rs:1158:17:1158:38 | ... .get_input() | T | {EXTERNAL LOCATION} | bool | -| main.rs:1158:22:1158:25 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1171:16:1171:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1171:16:1171:24 | SelfParam | &T | main.rs:1169:5:1176:5 | Self [trait MyTrait] | -| main.rs:1171:27:1171:31 | value | | main.rs:1169:19:1169:19 | S | -| main.rs:1173:21:1173:29 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1173:21:1173:29 | SelfParam | &T | main.rs:1169:5:1176:5 | Self [trait MyTrait] | -| main.rs:1173:32:1173:36 | value | | main.rs:1169:19:1169:19 | S | -| main.rs:1174:13:1174:16 | self | | file://:0:0:0:0 | & | -| main.rs:1174:13:1174:16 | self | &T | main.rs:1169:5:1176:5 | Self [trait MyTrait] | -| main.rs:1174:22:1174:26 | value | | main.rs:1169:19:1169:19 | S | -| main.rs:1180:16:1180:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1180:16:1180:24 | SelfParam | &T | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1180:16:1180:24 | SelfParam | &T.T | main.rs:1178:10:1178:10 | T | -| main.rs:1180:27:1180:31 | value | | main.rs:1178:10:1178:10 | T | -| main.rs:1184:26:1186:9 | { ... } | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1184:26:1186:9 | { ... } | T | main.rs:1183:10:1183:10 | T | -| main.rs:1185:13:1185:30 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1185:13:1185:30 | ...::MyNone(...) | T | main.rs:1183:10:1183:10 | T | -| main.rs:1190:20:1190:23 | SelfParam | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1190:20:1190:23 | SelfParam | T | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1190:20:1190:23 | SelfParam | T.T | main.rs:1189:10:1189:10 | T | -| main.rs:1190:41:1195:9 | { ... } | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1190:41:1195:9 | { ... } | T | main.rs:1189:10:1189:10 | T | -| main.rs:1191:13:1194:13 | match self { ... } | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1191:13:1194:13 | match self { ... } | T | main.rs:1189:10:1189:10 | T | -| main.rs:1191:19:1191:22 | self | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1191:19:1191:22 | self | T | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1191:19:1191:22 | self | T.T | main.rs:1189:10:1189:10 | T | -| main.rs:1192:17:1192:34 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1192:17:1192:34 | ...::MyNone(...) | T | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1192:17:1192:34 | ...::MyNone(...) | T.T | main.rs:1189:10:1189:10 | T | -| main.rs:1192:39:1192:56 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1192:39:1192:56 | ...::MyNone(...) | T | main.rs:1189:10:1189:10 | T | -| main.rs:1193:17:1193:35 | ...::MySome(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1193:17:1193:35 | ...::MySome(...) | T | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1193:17:1193:35 | ...::MySome(...) | T.T | main.rs:1189:10:1189:10 | T | -| main.rs:1193:34:1193:34 | x | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1193:34:1193:34 | x | T | main.rs:1189:10:1189:10 | T | -| main.rs:1193:40:1193:40 | x | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1193:40:1193:40 | x | T | main.rs:1189:10:1189:10 | T | -| main.rs:1202:13:1202:14 | x1 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1202:13:1202:14 | x1 | T | main.rs:1198:5:1199:13 | S | -| main.rs:1202:18:1202:37 | ...::new(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1202:18:1202:37 | ...::new(...) | T | main.rs:1198:5:1199:13 | S | -| main.rs:1203:18:1203:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1203:18:1203:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1203:18:1203:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1203:18:1203:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1203:26:1203:27 | x1 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1203:26:1203:27 | x1 | T | main.rs:1198:5:1199:13 | S | -| main.rs:1205:17:1205:18 | x2 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1205:17:1205:18 | x2 | T | main.rs:1198:5:1199:13 | S | -| main.rs:1205:22:1205:36 | ...::new(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1205:22:1205:36 | ...::new(...) | T | main.rs:1198:5:1199:13 | S | -| main.rs:1206:9:1206:10 | x2 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1206:9:1206:10 | x2 | T | main.rs:1198:5:1199:13 | S | -| main.rs:1206:16:1206:16 | S | | main.rs:1198:5:1199:13 | S | -| main.rs:1207:18:1207:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1207:18:1207:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1207:18:1207:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1207:18:1207:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1207:26:1207:27 | x2 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1207:26:1207:27 | x2 | T | main.rs:1198:5:1199:13 | S | -| main.rs:1210:17:1210:18 | x3 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1210:22:1210:36 | ...::new(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1211:9:1211:10 | x3 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1211:21:1211:21 | S | | main.rs:1198:5:1199:13 | S | -| main.rs:1212:18:1212:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1212:18:1212:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1212:18:1212:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1212:18:1212:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1212:26:1212:27 | x3 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1214:17:1214:18 | x4 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1214:17:1214:18 | x4 | T | main.rs:1198:5:1199:13 | S | -| main.rs:1214:22:1214:36 | ...::new(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1214:22:1214:36 | ...::new(...) | T | main.rs:1198:5:1199:13 | S | -| main.rs:1215:23:1215:29 | &mut x4 | | file://:0:0:0:0 | & | -| main.rs:1215:23:1215:29 | &mut x4 | &T | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1215:23:1215:29 | &mut x4 | &T.T | main.rs:1198:5:1199:13 | S | -| main.rs:1215:28:1215:29 | x4 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1215:28:1215:29 | x4 | T | main.rs:1198:5:1199:13 | S | -| main.rs:1215:32:1215:32 | S | | main.rs:1198:5:1199:13 | S | -| main.rs:1216:18:1216:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1216:18:1216:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1216:18:1216:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1216:18:1216:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1216:26:1216:27 | x4 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1216:26:1216:27 | x4 | T | main.rs:1198:5:1199:13 | S | -| main.rs:1218:13:1218:14 | x5 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1218:13:1218:14 | x5 | T | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1218:13:1218:14 | x5 | T.T | main.rs:1198:5:1199:13 | S | -| main.rs:1218:18:1218:58 | ...::MySome(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1218:18:1218:58 | ...::MySome(...) | T | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1218:18:1218:58 | ...::MySome(...) | T.T | main.rs:1198:5:1199:13 | S | -| main.rs:1218:35:1218:57 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1218:35:1218:57 | ...::MyNone(...) | T | main.rs:1198:5:1199:13 | S | -| main.rs:1219:18:1219:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1219:18:1219:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1219:18:1219:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1219:18:1219:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1219:26:1219:27 | x5 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1219:26:1219:27 | x5 | T | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1219:26:1219:27 | x5 | T.T | main.rs:1198:5:1199:13 | S | -| main.rs:1219:26:1219:37 | x5.flatten() | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1219:26:1219:37 | x5.flatten() | T | main.rs:1198:5:1199:13 | S | -| main.rs:1221:13:1221:14 | x6 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1221:13:1221:14 | x6 | T | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1221:13:1221:14 | x6 | T.T | main.rs:1198:5:1199:13 | S | -| main.rs:1221:18:1221:58 | ...::MySome(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1221:18:1221:58 | ...::MySome(...) | T | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1221:18:1221:58 | ...::MySome(...) | T.T | main.rs:1198:5:1199:13 | S | -| main.rs:1221:35:1221:57 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1221:35:1221:57 | ...::MyNone(...) | T | main.rs:1198:5:1199:13 | S | -| main.rs:1222:18:1222:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1222:18:1222:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1222:18:1222:61 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1222:18:1222:61 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1222:26:1222:61 | ...::flatten(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1222:26:1222:61 | ...::flatten(...) | T | main.rs:1198:5:1199:13 | S | -| main.rs:1222:59:1222:60 | x6 | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1222:59:1222:60 | x6 | T | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1222:59:1222:60 | x6 | T.T | main.rs:1198:5:1199:13 | S | -| main.rs:1225:13:1225:19 | from_if | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1225:13:1225:19 | from_if | T | main.rs:1198:5:1199:13 | S | -| main.rs:1225:23:1229:9 | if ... {...} else {...} | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1225:23:1229:9 | if ... {...} else {...} | T | main.rs:1198:5:1199:13 | S | -| main.rs:1225:26:1225:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1225:26:1225:30 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1225:30:1225:30 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1225:32:1227:9 | { ... } | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1225:32:1227:9 | { ... } | T | main.rs:1198:5:1199:13 | S | -| main.rs:1226:13:1226:30 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1226:13:1226:30 | ...::MyNone(...) | T | main.rs:1198:5:1199:13 | S | -| main.rs:1227:16:1229:9 | { ... } | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1227:16:1229:9 | { ... } | T | main.rs:1198:5:1199:13 | S | -| main.rs:1228:13:1228:31 | ...::MySome(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1228:13:1228:31 | ...::MySome(...) | T | main.rs:1198:5:1199:13 | S | -| main.rs:1228:30:1228:30 | S | | main.rs:1198:5:1199:13 | S | -| main.rs:1230:18:1230:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1230:18:1230:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1230:18:1230:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1230:18:1230:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1230:26:1230:32 | from_if | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1230:26:1230:32 | from_if | T | main.rs:1198:5:1199:13 | S | -| main.rs:1233:13:1233:22 | from_match | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1233:13:1233:22 | from_match | T | main.rs:1198:5:1199:13 | S | -| main.rs:1233:26:1236:9 | match ... { ... } | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1233:26:1236:9 | match ... { ... } | T | main.rs:1198:5:1199:13 | S | -| main.rs:1233:32:1233:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1233:32:1233:36 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1233:36:1233:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1234:13:1234:16 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1234:21:1234:38 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1234:21:1234:38 | ...::MyNone(...) | T | main.rs:1198:5:1199:13 | S | -| main.rs:1235:13:1235:17 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1235:22:1235:40 | ...::MySome(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1235:22:1235:40 | ...::MySome(...) | T | main.rs:1198:5:1199:13 | S | -| main.rs:1235:39:1235:39 | S | | main.rs:1198:5:1199:13 | S | -| main.rs:1237:18:1237:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1237:18:1237:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1237:18:1237:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1237:18:1237:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1237:26:1237:35 | from_match | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1237:26:1237:35 | from_match | T | main.rs:1198:5:1199:13 | S | -| main.rs:1240:13:1240:21 | from_loop | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1240:13:1240:21 | from_loop | T | main.rs:1198:5:1199:13 | S | -| main.rs:1240:25:1245:9 | loop { ... } | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1240:25:1245:9 | loop { ... } | T | main.rs:1198:5:1199:13 | S | -| main.rs:1241:16:1241:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1241:16:1241:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1241:20:1241:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1242:23:1242:40 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1242:23:1242:40 | ...::MyNone(...) | T | main.rs:1198:5:1199:13 | S | -| main.rs:1244:19:1244:37 | ...::MySome(...) | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1244:19:1244:37 | ...::MySome(...) | T | main.rs:1198:5:1199:13 | S | -| main.rs:1244:36:1244:36 | S | | main.rs:1198:5:1199:13 | S | -| main.rs:1246:18:1246:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1246:18:1246:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1246:18:1246:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1246:18:1246:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1246:26:1246:34 | from_loop | | main.rs:1163:5:1167:5 | MyOption | -| main.rs:1246:26:1246:34 | from_loop | T | main.rs:1198:5:1199:13 | S | -| main.rs:1264:15:1264:18 | SelfParam | | main.rs:1252:5:1253:19 | S | -| main.rs:1264:15:1264:18 | SelfParam | T | main.rs:1263:10:1263:10 | T | -| main.rs:1264:26:1266:9 | { ... } | | main.rs:1263:10:1263:10 | T | -| main.rs:1265:13:1265:16 | self | | main.rs:1252:5:1253:19 | S | -| main.rs:1265:13:1265:16 | self | T | main.rs:1263:10:1263:10 | T | -| main.rs:1265:13:1265:18 | self.0 | | main.rs:1263:10:1263:10 | T | -| main.rs:1268:15:1268:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1268:15:1268:19 | SelfParam | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1268:15:1268:19 | SelfParam | &T.T | main.rs:1263:10:1263:10 | T | -| main.rs:1268:28:1270:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1268:28:1270:9 | { ... } | &T | main.rs:1263:10:1263:10 | T | -| main.rs:1269:13:1269:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1269:13:1269:19 | &... | &T | main.rs:1263:10:1263:10 | T | -| main.rs:1269:14:1269:17 | self | | file://:0:0:0:0 | & | -| main.rs:1269:14:1269:17 | self | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1269:14:1269:17 | self | &T.T | main.rs:1263:10:1263:10 | T | -| main.rs:1269:14:1269:19 | self.0 | | main.rs:1263:10:1263:10 | T | -| main.rs:1272:15:1272:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1272:15:1272:25 | SelfParam | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1272:15:1272:25 | SelfParam | &T.T | main.rs:1263:10:1263:10 | T | -| main.rs:1272:34:1274:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1272:34:1274:9 | { ... } | &T | main.rs:1263:10:1263:10 | T | -| main.rs:1273:13:1273:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1273:13:1273:19 | &... | &T | main.rs:1263:10:1263:10 | T | -| main.rs:1273:14:1273:17 | self | | file://:0:0:0:0 | & | -| main.rs:1273:14:1273:17 | self | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1273:14:1273:17 | self | &T.T | main.rs:1263:10:1263:10 | T | -| main.rs:1273:14:1273:19 | self.0 | | main.rs:1263:10:1263:10 | T | -| main.rs:1278:29:1278:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1278:29:1278:33 | SelfParam | &T | main.rs:1277:5:1280:5 | Self [trait ATrait] | -| main.rs:1279:33:1279:36 | SelfParam | | main.rs:1277:5:1280:5 | Self [trait ATrait] | -| main.rs:1285:29:1285:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1285:29:1285:33 | SelfParam | &T | file://:0:0:0:0 | & | -| main.rs:1285:29:1285:33 | SelfParam | &T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1285:29:1285:33 | SelfParam | &T.&T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1285:43:1287:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1286:13:1286:22 | (...) | | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1286:13:1286:24 | ... .a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1286:14:1286:21 | * ... | | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1286:15:1286:21 | (...) | | file://:0:0:0:0 | & | -| main.rs:1286:15:1286:21 | (...) | | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1286:15:1286:21 | (...) | &T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1286:16:1286:20 | * ... | | file://:0:0:0:0 | & | -| main.rs:1286:16:1286:20 | * ... | | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1286:16:1286:20 | * ... | &T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1286:17:1286:20 | self | | file://:0:0:0:0 | & | -| main.rs:1286:17:1286:20 | self | &T | file://:0:0:0:0 | & | -| main.rs:1286:17:1286:20 | self | &T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1286:17:1286:20 | self | &T.&T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1290:33:1290:36 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1290:33:1290:36 | SelfParam | &T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1290:46:1292:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1291:13:1291:19 | (...) | | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1291:13:1291:21 | ... .a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1291:14:1291:18 | * ... | | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1291:15:1291:18 | self | | file://:0:0:0:0 | & | -| main.rs:1291:15:1291:18 | self | &T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1296:13:1296:14 | x1 | | main.rs:1252:5:1253:19 | S | -| main.rs:1296:13:1296:14 | x1 | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1296:18:1296:22 | S(...) | | main.rs:1252:5:1253:19 | S | -| main.rs:1296:18:1296:22 | S(...) | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1296:20:1296:21 | S2 | | main.rs:1255:5:1256:14 | S2 | -| main.rs:1297:18:1297:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1297:18:1297:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1297:18:1297:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1297:18:1297:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1297:26:1297:27 | x1 | | main.rs:1252:5:1253:19 | S | -| main.rs:1297:26:1297:27 | x1 | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1297:26:1297:32 | x1.m1() | | main.rs:1255:5:1256:14 | S2 | -| main.rs:1299:13:1299:14 | x2 | | main.rs:1252:5:1253:19 | S | -| main.rs:1299:13:1299:14 | x2 | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1299:18:1299:22 | S(...) | | main.rs:1252:5:1253:19 | S | -| main.rs:1299:18:1299:22 | S(...) | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1299:20:1299:21 | S2 | | main.rs:1255:5:1256:14 | S2 | -| main.rs:1301:18:1301:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1301:18:1301:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1301:18:1301:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1301:18:1301:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1301:26:1301:27 | x2 | | main.rs:1252:5:1253:19 | S | -| main.rs:1301:26:1301:27 | x2 | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1301:26:1301:32 | x2.m2() | | file://:0:0:0:0 | & | -| main.rs:1301:26:1301:32 | x2.m2() | &T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1302:18:1302:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1302:18:1302:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1302:18:1302:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1302:18:1302:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1302:26:1302:27 | x2 | | main.rs:1252:5:1253:19 | S | -| main.rs:1302:26:1302:27 | x2 | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1302:26:1302:32 | x2.m3() | | file://:0:0:0:0 | & | -| main.rs:1302:26:1302:32 | x2.m3() | &T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1304:13:1304:14 | x3 | | main.rs:1252:5:1253:19 | S | -| main.rs:1304:13:1304:14 | x3 | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1304:18:1304:22 | S(...) | | main.rs:1252:5:1253:19 | S | -| main.rs:1304:18:1304:22 | S(...) | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1304:20:1304:21 | S2 | | main.rs:1255:5:1256:14 | S2 | -| main.rs:1306:18:1306:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1306:18:1306:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1306:18:1306:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1306:18:1306:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1306:26:1306:41 | ...::m2(...) | | file://:0:0:0:0 | & | -| main.rs:1306:26:1306:41 | ...::m2(...) | &T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1306:38:1306:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:1306:38:1306:40 | &x3 | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1306:38:1306:40 | &x3 | &T.T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1306:39:1306:40 | x3 | | main.rs:1252:5:1253:19 | S | -| main.rs:1306:39:1306:40 | x3 | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1307:18:1307:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1307:18:1307:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1307:18:1307:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1307:18:1307:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1307:26:1307:41 | ...::m3(...) | | file://:0:0:0:0 | & | -| main.rs:1307:26:1307:41 | ...::m3(...) | &T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1307:38:1307:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:1307:38:1307:40 | &x3 | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1307:38:1307:40 | &x3 | &T.T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1307:39:1307:40 | x3 | | main.rs:1252:5:1253:19 | S | -| main.rs:1307:39:1307:40 | x3 | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1309:13:1309:14 | x4 | | file://:0:0:0:0 | & | -| main.rs:1309:13:1309:14 | x4 | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1309:13:1309:14 | x4 | &T.T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1309:18:1309:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1309:18:1309:23 | &... | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1309:18:1309:23 | &... | &T.T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1309:19:1309:23 | S(...) | | main.rs:1252:5:1253:19 | S | -| main.rs:1309:19:1309:23 | S(...) | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1309:21:1309:22 | S2 | | main.rs:1255:5:1256:14 | S2 | -| main.rs:1311:18:1311:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1311:18:1311:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1311:18:1311:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1311:18:1311:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1311:26:1311:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:1311:26:1311:27 | x4 | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1311:26:1311:27 | x4 | &T.T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1311:26:1311:32 | x4.m2() | | file://:0:0:0:0 | & | -| main.rs:1311:26:1311:32 | x4.m2() | &T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1312:18:1312:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1312:18:1312:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1312:18:1312:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1312:18:1312:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1312:26:1312:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:1312:26:1312:27 | x4 | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1312:26:1312:27 | x4 | &T.T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1312:26:1312:32 | x4.m3() | | file://:0:0:0:0 | & | -| main.rs:1312:26:1312:32 | x4.m3() | &T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1314:13:1314:14 | x5 | | file://:0:0:0:0 | & | -| main.rs:1314:13:1314:14 | x5 | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1314:13:1314:14 | x5 | &T.T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1314:18:1314:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1314:18:1314:23 | &... | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1314:18:1314:23 | &... | &T.T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1314:19:1314:23 | S(...) | | main.rs:1252:5:1253:19 | S | -| main.rs:1314:19:1314:23 | S(...) | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1314:21:1314:22 | S2 | | main.rs:1255:5:1256:14 | S2 | -| main.rs:1316:18:1316:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1316:18:1316:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1316:18:1316:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1316:18:1316:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1316:26:1316:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:1316:26:1316:27 | x5 | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1316:26:1316:27 | x5 | &T.T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1316:26:1316:32 | x5.m1() | | main.rs:1255:5:1256:14 | S2 | -| main.rs:1317:18:1317:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1317:18:1317:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1317:18:1317:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1317:18:1317:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1317:26:1317:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:1317:26:1317:27 | x5 | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1317:26:1317:27 | x5 | &T.T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1317:26:1317:29 | x5.0 | | main.rs:1255:5:1256:14 | S2 | -| main.rs:1319:13:1319:14 | x6 | | file://:0:0:0:0 | & | -| main.rs:1319:13:1319:14 | x6 | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1319:13:1319:14 | x6 | &T.T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1319:18:1319:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1319:18:1319:23 | &... | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1319:18:1319:23 | &... | &T.T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1319:19:1319:23 | S(...) | | main.rs:1252:5:1253:19 | S | -| main.rs:1319:19:1319:23 | S(...) | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1319:21:1319:22 | S2 | | main.rs:1255:5:1256:14 | S2 | -| main.rs:1322:18:1322:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1322:18:1322:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1322:18:1322:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1322:18:1322:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1322:26:1322:30 | (...) | | main.rs:1252:5:1253:19 | S | -| main.rs:1322:26:1322:30 | (...) | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1322:26:1322:35 | ... .m1() | | main.rs:1255:5:1256:14 | S2 | -| main.rs:1322:27:1322:29 | * ... | | main.rs:1252:5:1253:19 | S | -| main.rs:1322:27:1322:29 | * ... | T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1322:28:1322:29 | x6 | | file://:0:0:0:0 | & | -| main.rs:1322:28:1322:29 | x6 | &T | main.rs:1252:5:1253:19 | S | -| main.rs:1322:28:1322:29 | x6 | &T.T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1324:13:1324:14 | x7 | | main.rs:1252:5:1253:19 | S | -| main.rs:1324:13:1324:14 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1324:13:1324:14 | x7 | T.&T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1324:18:1324:23 | S(...) | | main.rs:1252:5:1253:19 | S | -| main.rs:1324:18:1324:23 | S(...) | T | file://:0:0:0:0 | & | -| main.rs:1324:18:1324:23 | S(...) | T.&T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1324:20:1324:22 | &S2 | | file://:0:0:0:0 | & | -| main.rs:1324:20:1324:22 | &S2 | &T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1324:21:1324:22 | S2 | | main.rs:1255:5:1256:14 | S2 | -| main.rs:1327:13:1327:13 | t | | file://:0:0:0:0 | & | -| main.rs:1327:13:1327:13 | t | &T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1327:17:1327:18 | x7 | | main.rs:1252:5:1253:19 | S | -| main.rs:1327:17:1327:18 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1327:17:1327:18 | x7 | T.&T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1327:17:1327:23 | x7.m1() | | file://:0:0:0:0 | & | -| main.rs:1327:17:1327:23 | x7.m1() | &T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1328:18:1328:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1328:18:1328:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1328:18:1328:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1328:18:1328:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1328:26:1328:27 | x7 | | main.rs:1252:5:1253:19 | S | -| main.rs:1328:26:1328:27 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1328:26:1328:27 | x7 | T.&T | main.rs:1255:5:1256:14 | S2 | -| main.rs:1330:13:1330:14 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1330:26:1330:32 | "Hello" | | file://:0:0:0:0 | & | -| main.rs:1330:26:1330:32 | "Hello" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1330:26:1330:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | -| main.rs:1334:13:1334:13 | u | | {EXTERNAL LOCATION} | Result | -| main.rs:1334:13:1334:13 | u | T | {EXTERNAL LOCATION} | u32 | -| main.rs:1334:17:1334:18 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1334:17:1334:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | -| main.rs:1334:17:1334:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | -| main.rs:1336:13:1336:20 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1336:13:1336:20 | my_thing | &T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1336:24:1336:39 | &... | | file://:0:0:0:0 | & | -| main.rs:1336:24:1336:39 | &... | &T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1336:25:1336:39 | MyInt {...} | | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1336:36:1336:37 | 37 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1336:36:1336:37 | 37 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1338:17:1338:24 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1338:17:1338:24 | my_thing | &T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1339:18:1339:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1339:18:1339:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1339:18:1339:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1339:18:1339:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1342:13:1342:20 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1342:13:1342:20 | my_thing | &T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1342:24:1342:39 | &... | | file://:0:0:0:0 | & | -| main.rs:1342:24:1342:39 | &... | &T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1342:25:1342:39 | MyInt {...} | | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1342:36:1342:37 | 38 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1342:36:1342:37 | 38 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1343:17:1343:24 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1343:17:1343:24 | my_thing | &T | main.rs:1258:5:1261:5 | MyInt | -| main.rs:1344:18:1344:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1344:18:1344:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1344:18:1344:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1344:18:1344:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1351:16:1351:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1351:16:1351:20 | SelfParam | &T | main.rs:1349:5:1357:5 | Self [trait MyTrait] | -| main.rs:1354:16:1354:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1354:16:1354:20 | SelfParam | &T | main.rs:1349:5:1357:5 | Self [trait MyTrait] | -| main.rs:1354:32:1356:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1354:32:1356:9 | { ... } | &T | main.rs:1349:5:1357:5 | Self [trait MyTrait] | -| main.rs:1355:13:1355:16 | self | | file://:0:0:0:0 | & | -| main.rs:1355:13:1355:16 | self | &T | main.rs:1349:5:1357:5 | Self [trait MyTrait] | -| main.rs:1355:13:1355:22 | self.foo() | | file://:0:0:0:0 | & | -| main.rs:1355:13:1355:22 | self.foo() | &T | main.rs:1349:5:1357:5 | Self [trait MyTrait] | -| main.rs:1363:16:1363:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1363:16:1363:20 | SelfParam | &T | main.rs:1359:5:1359:20 | MyStruct | -| main.rs:1363:36:1365:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1363:36:1365:9 | { ... } | &T | main.rs:1359:5:1359:20 | MyStruct | -| main.rs:1364:13:1364:16 | self | | file://:0:0:0:0 | & | -| main.rs:1364:13:1364:16 | self | &T | main.rs:1359:5:1359:20 | MyStruct | -| main.rs:1369:13:1369:13 | x | | main.rs:1359:5:1359:20 | MyStruct | -| main.rs:1369:17:1369:24 | MyStruct | | main.rs:1359:5:1359:20 | MyStruct | -| main.rs:1370:9:1370:9 | x | | main.rs:1359:5:1359:20 | MyStruct | -| main.rs:1370:9:1370:15 | x.bar() | | file://:0:0:0:0 | & | -| main.rs:1370:9:1370:15 | x.bar() | &T | main.rs:1359:5:1359:20 | MyStruct | -| main.rs:1380:16:1380:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1380:16:1380:20 | SelfParam | &T | main.rs:1377:5:1377:26 | MyStruct | -| main.rs:1380:16:1380:20 | SelfParam | &T.T | main.rs:1379:10:1379:10 | T | -| main.rs:1380:32:1382:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1380:32:1382:9 | { ... } | &T | main.rs:1377:5:1377:26 | MyStruct | -| main.rs:1380:32:1382:9 | { ... } | &T.T | main.rs:1379:10:1379:10 | T | -| main.rs:1381:13:1381:16 | self | | file://:0:0:0:0 | & | -| main.rs:1381:13:1381:16 | self | &T | main.rs:1377:5:1377:26 | MyStruct | -| main.rs:1381:13:1381:16 | self | &T.T | main.rs:1379:10:1379:10 | T | -| main.rs:1386:13:1386:13 | x | | main.rs:1377:5:1377:26 | MyStruct | -| main.rs:1386:13:1386:13 | x | T | main.rs:1375:5:1375:13 | S | -| main.rs:1386:17:1386:27 | MyStruct(...) | | main.rs:1377:5:1377:26 | MyStruct | -| main.rs:1386:17:1386:27 | MyStruct(...) | T | main.rs:1375:5:1375:13 | S | -| main.rs:1386:26:1386:26 | S | | main.rs:1375:5:1375:13 | S | -| main.rs:1387:9:1387:9 | x | | main.rs:1377:5:1377:26 | MyStruct | -| main.rs:1387:9:1387:9 | x | T | main.rs:1375:5:1375:13 | S | -| main.rs:1387:9:1387:15 | x.foo() | | file://:0:0:0:0 | & | -| main.rs:1387:9:1387:15 | x.foo() | &T | main.rs:1377:5:1377:26 | MyStruct | -| main.rs:1387:9:1387:15 | x.foo() | &T.T | main.rs:1375:5:1375:13 | S | -| main.rs:1398:17:1398:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1398:17:1398:25 | SelfParam | &T | main.rs:1392:5:1395:5 | MyFlag | -| main.rs:1399:13:1399:16 | self | | file://:0:0:0:0 | & | -| main.rs:1399:13:1399:16 | self | &T | main.rs:1392:5:1395:5 | MyFlag | -| main.rs:1399:13:1399:21 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1399:13:1399:34 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1399:25:1399:34 | ! ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1399:26:1399:29 | self | | file://:0:0:0:0 | & | -| main.rs:1399:26:1399:29 | self | &T | main.rs:1392:5:1395:5 | MyFlag | -| main.rs:1399:26:1399:34 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1406:15:1406:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1406:15:1406:19 | SelfParam | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1406:31:1408:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1406:31:1408:9 | { ... } | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1407:13:1407:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1407:13:1407:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1407:13:1407:19 | &... | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1407:13:1407:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1407:13:1407:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1407:13:1407:19 | &... | &T.&T.&T.&T | main.rs:1403:5:1403:13 | S | -| main.rs:1407:14:1407:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1407:14:1407:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1407:14:1407:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1407:14:1407:19 | &... | &T.&T.&T | main.rs:1403:5:1403:13 | S | -| main.rs:1407:15:1407:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1407:15:1407:19 | &self | &T | file://:0:0:0:0 | & | -| main.rs:1407:15:1407:19 | &self | &T.&T | main.rs:1403:5:1403:13 | S | -| main.rs:1407:16:1407:19 | self | | file://:0:0:0:0 | & | -| main.rs:1407:16:1407:19 | self | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1410:15:1410:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1410:15:1410:25 | SelfParam | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1410:37:1412:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1410:37:1412:9 | { ... } | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1411:13:1411:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1411:13:1411:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1411:13:1411:19 | &... | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1411:13:1411:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1411:13:1411:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1411:13:1411:19 | &... | &T.&T.&T.&T | main.rs:1403:5:1403:13 | S | -| main.rs:1411:14:1411:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1411:14:1411:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1411:14:1411:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1411:14:1411:19 | &... | &T.&T.&T | main.rs:1403:5:1403:13 | S | -| main.rs:1411:15:1411:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1411:15:1411:19 | &self | &T | file://:0:0:0:0 | & | -| main.rs:1411:15:1411:19 | &self | &T.&T | main.rs:1403:5:1403:13 | S | -| main.rs:1411:16:1411:19 | self | | file://:0:0:0:0 | & | -| main.rs:1411:16:1411:19 | self | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1414:15:1414:15 | x | | file://:0:0:0:0 | & | -| main.rs:1414:15:1414:15 | x | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1414:34:1416:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1414:34:1416:9 | { ... } | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1415:13:1415:13 | x | | file://:0:0:0:0 | & | -| main.rs:1415:13:1415:13 | x | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1418:15:1418:15 | x | | file://:0:0:0:0 | & | -| main.rs:1418:15:1418:15 | x | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1418:34:1420:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1418:34:1420:9 | { ... } | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1419:13:1419:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1419:13:1419:16 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1419:13:1419:16 | &... | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1419:13:1419:16 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1419:13:1419:16 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1419:13:1419:16 | &... | &T.&T.&T.&T | main.rs:1403:5:1403:13 | S | -| main.rs:1419:14:1419:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1419:14:1419:16 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1419:14:1419:16 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1419:14:1419:16 | &... | &T.&T.&T | main.rs:1403:5:1403:13 | S | -| main.rs:1419:15:1419:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1419:15:1419:16 | &x | &T | file://:0:0:0:0 | & | -| main.rs:1419:15:1419:16 | &x | &T.&T | main.rs:1403:5:1403:13 | S | -| main.rs:1419:16:1419:16 | x | | file://:0:0:0:0 | & | -| main.rs:1419:16:1419:16 | x | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1424:13:1424:13 | x | | main.rs:1403:5:1403:13 | S | -| main.rs:1424:17:1424:20 | S {...} | | main.rs:1403:5:1403:13 | S | -| main.rs:1425:9:1425:9 | x | | main.rs:1403:5:1403:13 | S | -| main.rs:1425:9:1425:14 | x.f1() | | file://:0:0:0:0 | & | -| main.rs:1425:9:1425:14 | x.f1() | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1426:9:1426:9 | x | | main.rs:1403:5:1403:13 | S | -| main.rs:1426:9:1426:14 | x.f2() | | file://:0:0:0:0 | & | -| main.rs:1426:9:1426:14 | x.f2() | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1427:9:1427:17 | ...::f3(...) | | file://:0:0:0:0 | & | -| main.rs:1427:9:1427:17 | ...::f3(...) | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1427:15:1427:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1427:15:1427:16 | &x | &T | main.rs:1403:5:1403:13 | S | -| main.rs:1427:16:1427:16 | x | | main.rs:1403:5:1403:13 | S | -| main.rs:1429:13:1429:13 | n | | {EXTERNAL LOCATION} | bool | -| main.rs:1429:17:1429:24 | * ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1429:18:1429:24 | * ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1429:18:1429:24 | * ... | | file://:0:0:0:0 | & | -| main.rs:1429:18:1429:24 | * ... | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1429:19:1429:24 | &... | | file://:0:0:0:0 | & | -| main.rs:1429:19:1429:24 | &... | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1429:19:1429:24 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1429:19:1429:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | -| main.rs:1429:20:1429:24 | &true | | file://:0:0:0:0 | & | -| main.rs:1429:20:1429:24 | &true | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1429:21:1429:24 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1433:17:1433:20 | flag | | main.rs:1392:5:1395:5 | MyFlag | -| main.rs:1433:24:1433:41 | ...::default(...) | | main.rs:1392:5:1395:5 | MyFlag | -| main.rs:1434:22:1434:30 | &mut flag | | file://:0:0:0:0 | & | -| main.rs:1434:22:1434:30 | &mut flag | &T | main.rs:1392:5:1395:5 | MyFlag | -| main.rs:1434:27:1434:30 | flag | | main.rs:1392:5:1395:5 | MyFlag | -| main.rs:1435:18:1435:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1435:18:1435:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1435:18:1435:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1435:18:1435:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1435:26:1435:29 | flag | | main.rs:1392:5:1395:5 | MyFlag | -| main.rs:1450:43:1453:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1450:43:1453:5 | { ... } | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1450:43:1453:5 | { ... } | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1451:13:1451:13 | x | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1451:17:1451:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1451:17:1451:30 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1451:17:1451:31 | TryExpr | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1451:28:1451:29 | S1 | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1452:9:1452:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1452:9:1452:22 | ...::Ok(...) | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1452:9:1452:22 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1452:20:1452:21 | S1 | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1457:46:1461:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1457:46:1461:5 | { ... } | E | main.rs:1445:5:1446:14 | S2 | -| main.rs:1457:46:1461:5 | { ... } | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1458:13:1458:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1458:13:1458:13 | x | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1458:17:1458:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1458:17:1458:30 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1458:28:1458:29 | S1 | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1459:13:1459:13 | y | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1459:17:1459:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1459:17:1459:17 | x | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1459:17:1459:18 | TryExpr | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1460:9:1460:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1460:9:1460:22 | ...::Ok(...) | E | main.rs:1445:5:1446:14 | S2 | -| main.rs:1460:9:1460:22 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1460:20:1460:21 | S1 | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1465:40:1470:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1465:40:1470:5 | { ... } | E | main.rs:1445:5:1446:14 | S2 | -| main.rs:1465:40:1470:5 | { ... } | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1466:13:1466:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1466:13:1466:13 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1466:13:1466:13 | x | T.T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1466:17:1466:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1466:17:1466:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | -| main.rs:1466:17:1466:42 | ...::Ok(...) | T.T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1466:28:1466:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1466:28:1466:41 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1466:39:1466:40 | S1 | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1468:17:1468:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1468:17:1468:17 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1468:17:1468:17 | x | T.T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1468:17:1468:18 | TryExpr | | {EXTERNAL LOCATION} | Result | -| main.rs:1468:17:1468:18 | TryExpr | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1468:17:1468:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1468:24:1468:28 | \|...\| s | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:1468:24:1468:28 | \|...\| s | dyn(Args) | file://:0:0:0:0 | (T_1) | -| main.rs:1469:9:1469:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1469:9:1469:22 | ...::Ok(...) | E | main.rs:1445:5:1446:14 | S2 | -| main.rs:1469:9:1469:22 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1469:20:1469:21 | S1 | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1474:30:1474:34 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1474:30:1474:34 | input | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1474:30:1474:34 | input | T | main.rs:1474:20:1474:27 | T | -| main.rs:1474:69:1481:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1474:69:1481:5 | { ... } | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1474:69:1481:5 | { ... } | T | main.rs:1474:20:1474:27 | T | -| main.rs:1475:13:1475:17 | value | | main.rs:1474:20:1474:27 | T | -| main.rs:1475:21:1475:25 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1475:21:1475:25 | input | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1475:21:1475:25 | input | T | main.rs:1474:20:1474:27 | T | -| main.rs:1475:21:1475:26 | TryExpr | | main.rs:1474:20:1474:27 | T | -| main.rs:1476:22:1476:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1476:22:1476:38 | ...::Ok(...) | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1476:22:1476:38 | ...::Ok(...) | T | main.rs:1474:20:1474:27 | T | -| main.rs:1476:22:1479:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1476:22:1479:10 | ... .and_then(...) | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1476:33:1476:37 | value | | main.rs:1474:20:1474:27 | T | -| main.rs:1476:49:1479:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:1476:49:1479:9 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | -| main.rs:1476:49:1479:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | Result | -| main.rs:1476:49:1479:9 | \|...\| ... | dyn(Output).E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1476:53:1479:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1476:53:1479:9 | { ... } | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1477:22:1477:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1477:22:1477:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1477:22:1477:30 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1477:22:1477:30 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1478:13:1478:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1478:13:1478:34 | ...::Ok::<...>(...) | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1480:9:1480:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1480:9:1480:23 | ...::Err(...) | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1480:9:1480:23 | ...::Err(...) | T | main.rs:1474:20:1474:27 | T | -| main.rs:1480:21:1480:22 | S1 | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1485:16:1485:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1485:16:1485:33 | ...::Ok(...) | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1485:16:1485:33 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1485:27:1485:32 | result | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1485:37:1485:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1485:37:1485:52 | try_same_error(...) | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1485:37:1485:52 | try_same_error(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1486:22:1486:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1486:22:1486:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1486:22:1486:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1486:22:1486:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1486:30:1486:35 | result | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1489:16:1489:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1489:16:1489:33 | ...::Ok(...) | E | main.rs:1445:5:1446:14 | S2 | -| main.rs:1489:16:1489:33 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1489:27:1489:32 | result | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1489:37:1489:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1489:37:1489:55 | try_convert_error(...) | E | main.rs:1445:5:1446:14 | S2 | -| main.rs:1489:37:1489:55 | try_convert_error(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1490:22:1490:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1490:22:1490:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1490:22:1490:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1490:22:1490:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1490:30:1490:35 | result | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1493:16:1493:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1493:16:1493:33 | ...::Ok(...) | E | main.rs:1445:5:1446:14 | S2 | -| main.rs:1493:16:1493:33 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1493:27:1493:32 | result | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1493:37:1493:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1493:37:1493:49 | try_chained(...) | E | main.rs:1445:5:1446:14 | S2 | -| main.rs:1493:37:1493:49 | try_chained(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1494:22:1494:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1494:22:1494:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1494:22:1494:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1494:22:1494:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1494:30:1494:35 | result | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1497:16:1497:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1497:16:1497:33 | ...::Ok(...) | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1497:16:1497:33 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1497:27:1497:32 | result | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1497:37:1497:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1497:37:1497:63 | try_complex(...) | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1497:37:1497:63 | try_complex(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1497:49:1497:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1497:49:1497:62 | ...::Ok(...) | E | main.rs:1442:5:1443:14 | S1 | -| main.rs:1497:49:1497:62 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | -| main.rs:1497:60:1497:61 | S1 | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1498:22:1498:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1498:22:1498:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1498:22:1498:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1498:22:1498:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1498:30:1498:35 | result | | main.rs:1442:5:1443:14 | S1 | -| main.rs:1505:13:1505:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1505:22:1505:22 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1506:13:1506:13 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1506:17:1506:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1507:13:1507:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1507:17:1507:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1507:17:1507:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | -| main.rs:1507:21:1507:21 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1508:13:1508:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1508:17:1508:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1508:17:1508:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | -| main.rs:1509:13:1509:13 | c | | {EXTERNAL LOCATION} | char | -| main.rs:1509:17:1509:19 | 'c' | | {EXTERNAL LOCATION} | char | -| main.rs:1510:13:1510:17 | hello | | file://:0:0:0:0 | & | -| main.rs:1510:13:1510:17 | hello | &T | {EXTERNAL LOCATION} | str | -| main.rs:1510:21:1510:27 | "Hello" | | file://:0:0:0:0 | & | -| main.rs:1510:21:1510:27 | "Hello" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1511:13:1511:13 | f | | {EXTERNAL LOCATION} | f64 | -| main.rs:1511:17:1511:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | -| main.rs:1512:13:1512:13 | t | | {EXTERNAL LOCATION} | bool | -| main.rs:1512:17:1512:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1513:13:1513:13 | f | | {EXTERNAL LOCATION} | bool | -| main.rs:1513:17:1513:21 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1520:13:1520:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:1520:17:1520:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1520:17:1520:29 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1520:25:1520:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1521:13:1521:13 | y | | {EXTERNAL LOCATION} | bool | -| main.rs:1521:17:1521:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1521:17:1521:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1521:25:1521:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1523:17:1523:17 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1524:13:1524:16 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1524:20:1524:21 | 34 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1524:20:1524:27 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1524:26:1524:27 | 33 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1525:12:1525:15 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1526:17:1526:17 | z | | file://:0:0:0:0 | () | -| main.rs:1526:21:1526:27 | (...) | | file://:0:0:0:0 | () | -| main.rs:1526:22:1526:22 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1526:22:1526:26 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1526:26:1526:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1528:13:1528:13 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1528:13:1528:17 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1528:17:1528:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1530:9:1530:9 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1544:30:1546:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1545:13:1545:31 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1545:23:1545:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1545:23:1545:23 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1545:29:1545:29 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1545:29:1545:29 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1552:16:1552:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1552:22:1552:24 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1552:41:1557:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1553:13:1556:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1554:20:1554:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1554:20:1554:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1554:20:1554:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1554:29:1554:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1554:29:1554:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1555:20:1555:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1555:20:1555:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1555:20:1555:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1555:29:1555:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1555:29:1555:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1562:23:1562:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1562:23:1562:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1562:34:1562:36 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1563:13:1563:16 | self | | file://:0:0:0:0 | & | -| main.rs:1563:13:1563:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1563:13:1563:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1563:13:1563:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1563:23:1563:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1563:23:1563:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1564:13:1564:16 | self | | file://:0:0:0:0 | & | -| main.rs:1564:13:1564:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1564:13:1564:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1564:13:1564:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1564:23:1564:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1564:23:1564:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1570:16:1570:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1570:22:1570:24 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1570:41:1575:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1571:13:1574:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1572:20:1572:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1572:20:1572:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1572:20:1572:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1572:29:1572:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1572:29:1572:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1573:20:1573:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1573:20:1573:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1573:20:1573:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1573:29:1573:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1573:29:1573:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1580:23:1580:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1580:23:1580:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1580:34:1580:36 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1581:13:1581:16 | self | | file://:0:0:0:0 | & | -| main.rs:1581:13:1581:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1581:13:1581:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1581:13:1581:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1581:23:1581:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1581:23:1581:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1582:13:1582:16 | self | | file://:0:0:0:0 | & | -| main.rs:1582:13:1582:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1582:13:1582:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1582:13:1582:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1582:23:1582:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1582:23:1582:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1588:16:1588:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1588:22:1588:24 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1588:41:1593:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1589:13:1592:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1590:20:1590:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1590:20:1590:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1590:20:1590:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1590:29:1590:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1590:29:1590:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1591:20:1591:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1591:20:1591:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1591:20:1591:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1591:29:1591:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1591:29:1591:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1597:23:1597:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1597:23:1597:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1597:34:1597:36 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1598:13:1598:16 | self | | file://:0:0:0:0 | & | -| main.rs:1598:13:1598:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1598:13:1598:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1598:13:1598:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1598:23:1598:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1598:23:1598:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1599:13:1599:16 | self | | file://:0:0:0:0 | & | -| main.rs:1599:13:1599:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1599:13:1599:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1599:13:1599:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1599:23:1599:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1599:23:1599:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1605:16:1605:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1605:22:1605:24 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1605:41:1610:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1606:13:1609:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1607:20:1607:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1607:20:1607:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1607:20:1607:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1607:29:1607:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1607:29:1607:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1608:20:1608:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1608:20:1608:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1608:20:1608:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1608:29:1608:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1608:29:1608:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1614:23:1614:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1614:23:1614:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1614:34:1614:36 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1615:13:1615:16 | self | | file://:0:0:0:0 | & | -| main.rs:1615:13:1615:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1615:13:1615:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1615:13:1615:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1615:23:1615:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1615:23:1615:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1616:13:1616:16 | self | | file://:0:0:0:0 | & | -| main.rs:1616:13:1616:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1616:13:1616:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1616:13:1616:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1616:23:1616:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1616:23:1616:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1622:16:1622:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1622:22:1622:24 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1622:41:1627:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1623:13:1626:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1624:20:1624:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1624:20:1624:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1624:20:1624:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1624:29:1624:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1624:29:1624:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1625:20:1625:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1625:20:1625:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1625:20:1625:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1625:29:1625:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1625:29:1625:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1631:23:1631:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1631:23:1631:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1631:34:1631:36 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1632:13:1632:16 | self | | file://:0:0:0:0 | & | -| main.rs:1632:13:1632:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1632:13:1632:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1632:13:1632:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1632:23:1632:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1632:23:1632:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1633:13:1633:16 | self | | file://:0:0:0:0 | & | -| main.rs:1633:13:1633:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1633:13:1633:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1633:13:1633:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1633:23:1633:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1633:23:1633:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1639:19:1639:22 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1639:25:1639:27 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1639:44:1644:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1640:13:1643:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1641:20:1641:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1641:20:1641:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1641:20:1641:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1641:29:1641:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1641:29:1641:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1642:20:1642:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1642:20:1642:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1642:20:1642:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1642:29:1642:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1642:29:1642:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1648:26:1648:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1648:26:1648:34 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1648:37:1648:39 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1649:13:1649:16 | self | | file://:0:0:0:0 | & | -| main.rs:1649:13:1649:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1649:13:1649:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1649:13:1649:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1649:23:1649:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1649:23:1649:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1650:13:1650:16 | self | | file://:0:0:0:0 | & | -| main.rs:1650:13:1650:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1650:13:1650:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1650:13:1650:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1650:23:1650:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1650:23:1650:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1656:18:1656:21 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1656:24:1656:26 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1656:43:1661:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1657:13:1660:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1658:20:1658:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1658:20:1658:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1658:20:1658:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1658:29:1658:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1658:29:1658:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1659:20:1659:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1659:20:1659:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1659:20:1659:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1659:29:1659:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1659:29:1659:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1665:25:1665:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1665:25:1665:33 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1665:36:1665:38 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1666:13:1666:16 | self | | file://:0:0:0:0 | & | -| main.rs:1666:13:1666:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1666:13:1666:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1666:13:1666:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1666:23:1666:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1666:23:1666:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1667:13:1667:16 | self | | file://:0:0:0:0 | & | -| main.rs:1667:13:1667:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1667:13:1667:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1667:13:1667:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1667:23:1667:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1667:23:1667:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1673:19:1673:22 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1673:25:1673:27 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1673:44:1678:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1674:13:1677:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1675:20:1675:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1675:20:1675:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1675:20:1675:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1675:29:1675:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1675:29:1675:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1676:20:1676:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1676:20:1676:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1676:20:1676:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1676:29:1676:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1676:29:1676:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1682:26:1682:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1682:26:1682:34 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1682:37:1682:39 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1683:13:1683:16 | self | | file://:0:0:0:0 | & | -| main.rs:1683:13:1683:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1683:13:1683:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1683:13:1683:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1683:23:1683:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1683:23:1683:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1684:13:1684:16 | self | | file://:0:0:0:0 | & | -| main.rs:1684:13:1684:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1684:13:1684:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1684:13:1684:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1684:23:1684:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1684:23:1684:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1690:16:1690:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1690:22:1690:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1690:40:1695:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1691:13:1694:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1692:20:1692:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1692:20:1692:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1692:20:1692:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1692:30:1692:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1693:20:1693:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1693:20:1693:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1693:20:1693:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1693:30:1693:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1699:23:1699:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1699:23:1699:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1699:34:1699:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1700:13:1700:16 | self | | file://:0:0:0:0 | & | -| main.rs:1700:13:1700:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1700:13:1700:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1700:13:1700:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1700:24:1700:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1701:13:1701:16 | self | | file://:0:0:0:0 | & | -| main.rs:1701:13:1701:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1701:13:1701:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1701:13:1701:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1701:24:1701:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1707:16:1707:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1707:22:1707:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1707:40:1712:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1708:13:1711:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1709:20:1709:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1709:20:1709:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1709:20:1709:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1709:30:1709:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1710:20:1710:23 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1710:20:1710:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1710:20:1710:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1710:30:1710:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1716:23:1716:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1716:23:1716:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1716:34:1716:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1717:13:1717:16 | self | | file://:0:0:0:0 | & | -| main.rs:1717:13:1717:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1717:13:1717:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1717:13:1717:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1717:24:1717:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1718:13:1718:16 | self | | file://:0:0:0:0 | & | -| main.rs:1718:13:1718:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1718:13:1718:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1718:13:1718:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1718:24:1718:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1724:16:1724:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1724:30:1729:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1725:13:1728:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1726:20:1726:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1726:21:1726:24 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1726:21:1726:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1727:20:1727:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1727:21:1727:24 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1727:21:1727:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1734:16:1734:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1734:30:1739:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1735:13:1738:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1736:20:1736:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1736:21:1736:24 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1736:21:1736:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1737:20:1737:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1737:21:1737:24 | self | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1737:21:1737:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1743:15:1743:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1743:15:1743:19 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1743:22:1743:26 | other | | file://:0:0:0:0 | & | -| main.rs:1743:22:1743:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1743:44:1745:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1744:13:1744:16 | self | | file://:0:0:0:0 | & | -| main.rs:1744:13:1744:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1744:13:1744:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1744:13:1744:29 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1744:13:1744:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1744:23:1744:27 | other | | file://:0:0:0:0 | & | -| main.rs:1744:23:1744:27 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1744:23:1744:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1744:34:1744:37 | self | | file://:0:0:0:0 | & | -| main.rs:1744:34:1744:37 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1744:34:1744:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1744:34:1744:50 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1744:44:1744:48 | other | | file://:0:0:0:0 | & | -| main.rs:1744:44:1744:48 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1744:44:1744:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1747:15:1747:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1747:15:1747:19 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1747:22:1747:26 | other | | file://:0:0:0:0 | & | -| main.rs:1747:22:1747:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1747:44:1749:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1748:13:1748:16 | self | | file://:0:0:0:0 | & | -| main.rs:1748:13:1748:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1748:13:1748:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1748:13:1748:29 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1748:13:1748:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1748:23:1748:27 | other | | file://:0:0:0:0 | & | -| main.rs:1748:23:1748:27 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1748:23:1748:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1748:34:1748:37 | self | | file://:0:0:0:0 | & | -| main.rs:1748:34:1748:37 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1748:34:1748:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1748:34:1748:50 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1748:44:1748:48 | other | | file://:0:0:0:0 | & | -| main.rs:1748:44:1748:48 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1748:44:1748:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1753:24:1753:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1753:24:1753:28 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1753:31:1753:35 | other | | file://:0:0:0:0 | & | -| main.rs:1753:31:1753:35 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1753:75:1755:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:1753:75:1755:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1754:13:1754:29 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1754:13:1754:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:1754:13:1754:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1754:14:1754:17 | self | | file://:0:0:0:0 | & | -| main.rs:1754:14:1754:17 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1754:14:1754:19 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1754:14:1754:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1754:23:1754:26 | self | | file://:0:0:0:0 | & | -| main.rs:1754:23:1754:26 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1754:23:1754:28 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1754:43:1754:62 | &... | | file://:0:0:0:0 | & | -| main.rs:1754:43:1754:62 | &... | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1754:44:1754:62 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1754:45:1754:49 | other | | file://:0:0:0:0 | & | -| main.rs:1754:45:1754:49 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1754:45:1754:51 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1754:45:1754:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1754:55:1754:59 | other | | file://:0:0:0:0 | & | -| main.rs:1754:55:1754:59 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1754:55:1754:61 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1757:15:1757:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1757:15:1757:19 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1757:22:1757:26 | other | | file://:0:0:0:0 | & | -| main.rs:1757:22:1757:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1757:44:1759:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1758:13:1758:16 | self | | file://:0:0:0:0 | & | -| main.rs:1758:13:1758:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1758:13:1758:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1758:13:1758:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1758:13:1758:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1758:22:1758:26 | other | | file://:0:0:0:0 | & | -| main.rs:1758:22:1758:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1758:22:1758:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1758:33:1758:36 | self | | file://:0:0:0:0 | & | -| main.rs:1758:33:1758:36 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1758:33:1758:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1758:33:1758:48 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1758:42:1758:46 | other | | file://:0:0:0:0 | & | -| main.rs:1758:42:1758:46 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1758:42:1758:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1761:15:1761:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1761:15:1761:19 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1761:22:1761:26 | other | | file://:0:0:0:0 | & | -| main.rs:1761:22:1761:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1761:44:1763:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1762:13:1762:16 | self | | file://:0:0:0:0 | & | -| main.rs:1762:13:1762:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1762:13:1762:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1762:13:1762:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1762:13:1762:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1762:23:1762:27 | other | | file://:0:0:0:0 | & | -| main.rs:1762:23:1762:27 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1762:23:1762:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1762:34:1762:37 | self | | file://:0:0:0:0 | & | -| main.rs:1762:34:1762:37 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1762:34:1762:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1762:34:1762:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1762:44:1762:48 | other | | file://:0:0:0:0 | & | -| main.rs:1762:44:1762:48 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1762:44:1762:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1765:15:1765:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1765:15:1765:19 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1765:22:1765:26 | other | | file://:0:0:0:0 | & | -| main.rs:1765:22:1765:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1765:44:1767:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1056:18:1056:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1056:18:1056:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1056:26:1056:26 | y | | main.rs:966:5:969:5 | MyThing2 | +| main.rs:1056:26:1056:26 | y | A | main.rs:973:5:974:14 | S2 | +| main.rs:1056:26:1056:31 | y.m3() | | main.rs:973:5:974:14 | S2 | +| main.rs:1058:13:1058:13 | x | | main.rs:961:5:964:5 | MyThing | +| main.rs:1058:13:1058:13 | x | A | main.rs:971:5:972:14 | S1 | +| main.rs:1058:17:1058:33 | MyThing {...} | | main.rs:961:5:964:5 | MyThing | +| main.rs:1058:17:1058:33 | MyThing {...} | A | main.rs:971:5:972:14 | S1 | +| main.rs:1058:30:1058:31 | S1 | | main.rs:971:5:972:14 | S1 | +| main.rs:1059:13:1059:13 | s | | main.rs:971:5:972:14 | S1 | +| main.rs:1059:17:1059:32 | call_trait_m1(...) | | main.rs:971:5:972:14 | S1 | +| main.rs:1059:31:1059:31 | x | | main.rs:961:5:964:5 | MyThing | +| main.rs:1059:31:1059:31 | x | A | main.rs:971:5:972:14 | S1 | +| main.rs:1061:13:1061:13 | x | | main.rs:966:5:969:5 | MyThing2 | +| main.rs:1061:13:1061:13 | x | A | main.rs:973:5:974:14 | S2 | +| main.rs:1061:17:1061:34 | MyThing2 {...} | | main.rs:966:5:969:5 | MyThing2 | +| main.rs:1061:17:1061:34 | MyThing2 {...} | A | main.rs:973:5:974:14 | S2 | +| main.rs:1061:31:1061:32 | S2 | | main.rs:973:5:974:14 | S2 | +| main.rs:1062:13:1062:13 | s | | main.rs:961:5:964:5 | MyThing | +| main.rs:1062:13:1062:13 | s | A | main.rs:973:5:974:14 | S2 | +| main.rs:1062:17:1062:32 | call_trait_m1(...) | | main.rs:961:5:964:5 | MyThing | +| main.rs:1062:17:1062:32 | call_trait_m1(...) | A | main.rs:973:5:974:14 | S2 | +| main.rs:1062:31:1062:31 | x | | main.rs:966:5:969:5 | MyThing2 | +| main.rs:1062:31:1062:31 | x | A | main.rs:973:5:974:14 | S2 | +| main.rs:1079:22:1079:22 | x | | file://:0:0:0:0 | & | +| main.rs:1079:22:1079:22 | x | &T | main.rs:1079:11:1079:19 | T | +| main.rs:1079:35:1081:5 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1079:35:1081:5 | { ... } | &T | main.rs:1079:11:1079:19 | T | +| main.rs:1080:9:1080:9 | x | | file://:0:0:0:0 | & | +| main.rs:1080:9:1080:9 | x | &T | main.rs:1079:11:1079:19 | T | +| main.rs:1084:17:1084:20 | SelfParam | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1084:29:1086:9 | { ... } | | main.rs:1072:5:1073:14 | S2 | +| main.rs:1085:13:1085:14 | S2 | | main.rs:1072:5:1073:14 | S2 | +| main.rs:1089:21:1089:21 | x | | main.rs:1089:13:1089:14 | T1 | +| main.rs:1092:5:1094:5 | { ... } | | main.rs:1089:17:1089:18 | T2 | +| main.rs:1093:9:1093:9 | x | | main.rs:1089:13:1089:14 | T1 | +| main.rs:1093:9:1093:16 | x.into() | | main.rs:1089:17:1089:18 | T2 | +| main.rs:1097:13:1097:13 | x | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1097:17:1097:18 | S1 | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1098:18:1098:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1098:18:1098:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1098:18:1098:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1098:18:1098:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1098:26:1098:31 | id(...) | | file://:0:0:0:0 | & | +| main.rs:1098:26:1098:31 | id(...) | &T | main.rs:1069:5:1070:14 | S1 | +| main.rs:1098:29:1098:30 | &x | | file://:0:0:0:0 | & | +| main.rs:1098:29:1098:30 | &x | &T | main.rs:1069:5:1070:14 | S1 | +| main.rs:1098:30:1098:30 | x | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1100:13:1100:13 | x | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1100:17:1100:18 | S1 | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1101:18:1101:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1101:18:1101:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1101:18:1101:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1101:18:1101:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1101:26:1101:37 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:1101:26:1101:37 | id::<...>(...) | &T | main.rs:1069:5:1070:14 | S1 | +| main.rs:1101:35:1101:36 | &x | | file://:0:0:0:0 | & | +| main.rs:1101:35:1101:36 | &x | &T | main.rs:1069:5:1070:14 | S1 | +| main.rs:1101:36:1101:36 | x | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1103:13:1103:13 | x | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1103:13:1103:13 | x | | main.rs:1075:5:1075:25 | dyn Trait | +| main.rs:1103:17:1103:18 | S1 | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1103:17:1103:18 | S1 | | main.rs:1075:5:1075:25 | dyn Trait | +| main.rs:1105:18:1105:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1105:18:1105:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1105:18:1105:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1105:18:1105:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1105:26:1105:44 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:1105:26:1105:44 | id::<...>(...) | &T | main.rs:1075:5:1075:25 | dyn Trait | +| main.rs:1105:42:1105:43 | &x | | file://:0:0:0:0 | & | +| main.rs:1105:42:1105:43 | &x | &T | main.rs:1069:5:1070:14 | S1 | +| main.rs:1105:42:1105:43 | &x | &T | main.rs:1075:5:1075:25 | dyn Trait | +| main.rs:1105:43:1105:43 | x | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1105:43:1105:43 | x | | main.rs:1075:5:1075:25 | dyn Trait | +| main.rs:1107:13:1107:13 | x | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1107:17:1107:18 | S1 | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1108:9:1108:25 | into::<...>(...) | | main.rs:1072:5:1073:14 | S2 | +| main.rs:1108:24:1108:24 | x | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1110:13:1110:13 | x | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1110:17:1110:18 | S1 | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1111:13:1111:13 | y | | main.rs:1072:5:1073:14 | S2 | +| main.rs:1111:21:1111:27 | into(...) | | main.rs:1072:5:1073:14 | S2 | +| main.rs:1111:26:1111:26 | x | | main.rs:1069:5:1070:14 | S1 | +| main.rs:1125:22:1125:25 | SelfParam | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1125:22:1125:25 | SelfParam | Fst | main.rs:1124:10:1124:12 | Fst | +| main.rs:1125:22:1125:25 | SelfParam | Snd | main.rs:1124:15:1124:17 | Snd | +| main.rs:1125:35:1132:9 | { ... } | | main.rs:1124:15:1124:17 | Snd | +| main.rs:1126:13:1131:13 | match self { ... } | | main.rs:1124:15:1124:17 | Snd | +| main.rs:1126:19:1126:22 | self | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1126:19:1126:22 | self | Fst | main.rs:1124:10:1124:12 | Fst | +| main.rs:1126:19:1126:22 | self | Snd | main.rs:1124:15:1124:17 | Snd | +| main.rs:1127:17:1127:38 | ...::PairNone(...) | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1127:17:1127:38 | ...::PairNone(...) | Fst | main.rs:1124:10:1124:12 | Fst | +| main.rs:1127:17:1127:38 | ...::PairNone(...) | Snd | main.rs:1124:15:1124:17 | Snd | +| main.rs:1127:43:1127:82 | MacroExpr | | main.rs:1124:15:1124:17 | Snd | +| main.rs:1127:50:1127:81 | "PairNone has no second elemen... | | file://:0:0:0:0 | & | +| main.rs:1127:50:1127:81 | "PairNone has no second elemen... | &T | {EXTERNAL LOCATION} | str | +| main.rs:1127:50:1127:81 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1127:50:1127:81 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1127:50:1127:81 | MacroExpr | | main.rs:1124:15:1124:17 | Snd | +| main.rs:1127:50:1127:81 | { ... } | | main.rs:1124:15:1124:17 | Snd | +| main.rs:1128:17:1128:38 | ...::PairFst(...) | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1128:17:1128:38 | ...::PairFst(...) | Fst | main.rs:1124:10:1124:12 | Fst | +| main.rs:1128:17:1128:38 | ...::PairFst(...) | Snd | main.rs:1124:15:1124:17 | Snd | +| main.rs:1128:37:1128:37 | _ | | main.rs:1124:10:1124:12 | Fst | +| main.rs:1128:43:1128:81 | MacroExpr | | main.rs:1124:15:1124:17 | Snd | +| main.rs:1128:50:1128:80 | "PairFst has no second element... | | file://:0:0:0:0 | & | +| main.rs:1128:50:1128:80 | "PairFst has no second element... | &T | {EXTERNAL LOCATION} | str | +| main.rs:1128:50:1128:80 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1128:50:1128:80 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1128:50:1128:80 | MacroExpr | | main.rs:1124:15:1124:17 | Snd | +| main.rs:1128:50:1128:80 | { ... } | | main.rs:1124:15:1124:17 | Snd | +| main.rs:1129:17:1129:40 | ...::PairSnd(...) | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1129:17:1129:40 | ...::PairSnd(...) | Fst | main.rs:1124:10:1124:12 | Fst | +| main.rs:1129:17:1129:40 | ...::PairSnd(...) | Snd | main.rs:1124:15:1124:17 | Snd | +| main.rs:1129:37:1129:39 | snd | | main.rs:1124:15:1124:17 | Snd | +| main.rs:1129:45:1129:47 | snd | | main.rs:1124:15:1124:17 | Snd | +| main.rs:1130:17:1130:44 | ...::PairBoth(...) | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1130:17:1130:44 | ...::PairBoth(...) | Fst | main.rs:1124:10:1124:12 | Fst | +| main.rs:1130:17:1130:44 | ...::PairBoth(...) | Snd | main.rs:1124:15:1124:17 | Snd | +| main.rs:1130:38:1130:38 | _ | | main.rs:1124:10:1124:12 | Fst | +| main.rs:1130:41:1130:43 | snd | | main.rs:1124:15:1124:17 | Snd | +| main.rs:1130:49:1130:51 | snd | | main.rs:1124:15:1124:17 | Snd | +| main.rs:1156:10:1156:10 | t | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1156:10:1156:10 | t | Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1156:10:1156:10 | t | Snd | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1156:10:1156:10 | t | Snd.Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1156:10:1156:10 | t | Snd.Snd | main.rs:1141:5:1142:14 | S3 | +| main.rs:1157:13:1157:13 | x | | main.rs:1141:5:1142:14 | S3 | +| main.rs:1157:17:1157:17 | t | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1157:17:1157:17 | t | Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1157:17:1157:17 | t | Snd | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1157:17:1157:17 | t | Snd.Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1157:17:1157:17 | t | Snd.Snd | main.rs:1141:5:1142:14 | S3 | +| main.rs:1157:17:1157:29 | t.unwrapSnd() | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1157:17:1157:29 | t.unwrapSnd() | Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1157:17:1157:29 | t.unwrapSnd() | Snd | main.rs:1141:5:1142:14 | S3 | +| main.rs:1157:17:1157:41 | ... .unwrapSnd() | | main.rs:1141:5:1142:14 | S3 | +| main.rs:1158:18:1158:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1158:18:1158:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1158:18:1158:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1158:18:1158:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1158:26:1158:26 | x | | main.rs:1141:5:1142:14 | S3 | +| main.rs:1173:22:1173:25 | SelfParam | | main.rs:1171:5:1174:5 | Self [trait TraitWithAssocType] | +| main.rs:1181:22:1181:25 | SelfParam | | main.rs:1169:5:1169:28 | GenS | +| main.rs:1181:22:1181:25 | SelfParam | GenT | main.rs:1176:10:1176:15 | Output | +| main.rs:1181:44:1183:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1181:44:1183:9 | { ... } | E | main.rs:1176:10:1176:15 | Output | +| main.rs:1181:44:1183:9 | { ... } | T | main.rs:1176:10:1176:15 | Output | +| main.rs:1182:13:1182:22 | Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1182:13:1182:22 | Ok(...) | E | main.rs:1176:10:1176:15 | Output | +| main.rs:1182:13:1182:22 | Ok(...) | T | main.rs:1176:10:1176:15 | Output | +| main.rs:1182:16:1182:19 | self | | main.rs:1169:5:1169:28 | GenS | +| main.rs:1182:16:1182:19 | self | GenT | main.rs:1176:10:1176:15 | Output | +| main.rs:1182:16:1182:21 | self.0 | | main.rs:1176:10:1176:15 | Output | +| main.rs:1188:13:1188:14 | p1 | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1188:13:1188:14 | p1 | Fst | main.rs:1135:5:1136:14 | S1 | +| main.rs:1188:13:1188:14 | p1 | Snd | main.rs:1138:5:1139:14 | S2 | +| main.rs:1188:26:1188:53 | ...::PairBoth(...) | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1188:26:1188:53 | ...::PairBoth(...) | Fst | main.rs:1135:5:1136:14 | S1 | +| main.rs:1188:26:1188:53 | ...::PairBoth(...) | Snd | main.rs:1138:5:1139:14 | S2 | +| main.rs:1188:47:1188:48 | S1 | | main.rs:1135:5:1136:14 | S1 | +| main.rs:1188:51:1188:52 | S2 | | main.rs:1138:5:1139:14 | S2 | +| main.rs:1189:18:1189:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1189:18:1189:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1189:18:1189:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1189:18:1189:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1189:26:1189:27 | p1 | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1189:26:1189:27 | p1 | Fst | main.rs:1135:5:1136:14 | S1 | +| main.rs:1189:26:1189:27 | p1 | Snd | main.rs:1138:5:1139:14 | S2 | +| main.rs:1192:13:1192:14 | p2 | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1192:13:1192:14 | p2 | Fst | main.rs:1135:5:1136:14 | S1 | +| main.rs:1192:13:1192:14 | p2 | Snd | main.rs:1138:5:1139:14 | S2 | +| main.rs:1192:26:1192:47 | ...::PairNone(...) | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1192:26:1192:47 | ...::PairNone(...) | Fst | main.rs:1135:5:1136:14 | S1 | +| main.rs:1192:26:1192:47 | ...::PairNone(...) | Snd | main.rs:1138:5:1139:14 | S2 | +| main.rs:1193:18:1193:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1193:18:1193:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1193:18:1193:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1193:18:1193:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1193:26:1193:27 | p2 | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1193:26:1193:27 | p2 | Fst | main.rs:1135:5:1136:14 | S1 | +| main.rs:1193:26:1193:27 | p2 | Snd | main.rs:1138:5:1139:14 | S2 | +| main.rs:1196:13:1196:14 | p3 | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1196:13:1196:14 | p3 | Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1196:13:1196:14 | p3 | Snd | main.rs:1141:5:1142:14 | S3 | +| main.rs:1196:34:1196:56 | ...::PairSnd(...) | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1196:34:1196:56 | ...::PairSnd(...) | Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1196:34:1196:56 | ...::PairSnd(...) | Snd | main.rs:1141:5:1142:14 | S3 | +| main.rs:1196:54:1196:55 | S3 | | main.rs:1141:5:1142:14 | S3 | +| main.rs:1197:18:1197:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1197:18:1197:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1197:18:1197:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1197:18:1197:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1197:26:1197:27 | p3 | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1197:26:1197:27 | p3 | Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1197:26:1197:27 | p3 | Snd | main.rs:1141:5:1142:14 | S3 | +| main.rs:1200:13:1200:14 | p3 | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1200:13:1200:14 | p3 | Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1200:13:1200:14 | p3 | Snd | main.rs:1141:5:1142:14 | S3 | +| main.rs:1200:35:1200:56 | ...::PairNone(...) | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1200:35:1200:56 | ...::PairNone(...) | Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1200:35:1200:56 | ...::PairNone(...) | Snd | main.rs:1141:5:1142:14 | S3 | +| main.rs:1201:18:1201:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1201:18:1201:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1201:18:1201:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1201:18:1201:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1201:26:1201:27 | p3 | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1201:26:1201:27 | p3 | Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1201:26:1201:27 | p3 | Snd | main.rs:1141:5:1142:14 | S3 | +| main.rs:1203:11:1203:54 | ...::PairSnd(...) | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1203:11:1203:54 | ...::PairSnd(...) | Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1203:11:1203:54 | ...::PairSnd(...) | Snd | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1203:11:1203:54 | ...::PairSnd(...) | Snd.Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1203:11:1203:54 | ...::PairSnd(...) | Snd.Snd | main.rs:1141:5:1142:14 | S3 | +| main.rs:1203:31:1203:53 | ...::PairSnd(...) | | main.rs:1116:5:1122:5 | PairOption | +| main.rs:1203:31:1203:53 | ...::PairSnd(...) | Fst | main.rs:1138:5:1139:14 | S2 | +| main.rs:1203:31:1203:53 | ...::PairSnd(...) | Snd | main.rs:1141:5:1142:14 | S3 | +| main.rs:1203:51:1203:52 | S3 | | main.rs:1141:5:1142:14 | S3 | +| main.rs:1205:13:1205:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1205:13:1205:13 | x | E | main.rs:1135:5:1136:14 | S1 | +| main.rs:1205:13:1205:13 | x | T | main.rs:1161:5:1161:34 | S4 | +| main.rs:1205:13:1205:13 | x | T.T41 | main.rs:1138:5:1139:14 | S2 | +| main.rs:1205:13:1205:13 | x | T.T42 | main.rs:1163:5:1163:22 | S5 | +| main.rs:1205:13:1205:13 | x | T.T42.T5 | main.rs:1138:5:1139:14 | S2 | +| main.rs:1207:13:1207:13 | y | | {EXTERNAL LOCATION} | Result | +| main.rs:1207:13:1207:13 | y | E | {EXTERNAL LOCATION} | bool | +| main.rs:1207:13:1207:13 | y | T | {EXTERNAL LOCATION} | bool | +| main.rs:1207:17:1207:26 | GenS(...) | | main.rs:1169:5:1169:28 | GenS | +| main.rs:1207:17:1207:26 | GenS(...) | GenT | {EXTERNAL LOCATION} | bool | +| main.rs:1207:17:1207:38 | ... .get_input() | | {EXTERNAL LOCATION} | Result | +| main.rs:1207:17:1207:38 | ... .get_input() | E | {EXTERNAL LOCATION} | bool | +| main.rs:1207:17:1207:38 | ... .get_input() | T | {EXTERNAL LOCATION} | bool | +| main.rs:1207:22:1207:25 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1220:16:1220:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1220:16:1220:24 | SelfParam | &T | main.rs:1218:5:1225:5 | Self [trait MyTrait] | +| main.rs:1220:27:1220:31 | value | | main.rs:1218:19:1218:19 | S | +| main.rs:1222:21:1222:29 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1222:21:1222:29 | SelfParam | &T | main.rs:1218:5:1225:5 | Self [trait MyTrait] | +| main.rs:1222:32:1222:36 | value | | main.rs:1218:19:1218:19 | S | +| main.rs:1223:13:1223:16 | self | | file://:0:0:0:0 | & | +| main.rs:1223:13:1223:16 | self | &T | main.rs:1218:5:1225:5 | Self [trait MyTrait] | +| main.rs:1223:22:1223:26 | value | | main.rs:1218:19:1218:19 | S | +| main.rs:1229:16:1229:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1229:16:1229:24 | SelfParam | &T | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1229:16:1229:24 | SelfParam | &T.T | main.rs:1227:10:1227:10 | T | +| main.rs:1229:27:1229:31 | value | | main.rs:1227:10:1227:10 | T | +| main.rs:1233:26:1235:9 | { ... } | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1233:26:1235:9 | { ... } | T | main.rs:1232:10:1232:10 | T | +| main.rs:1234:13:1234:30 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1234:13:1234:30 | ...::MyNone(...) | T | main.rs:1232:10:1232:10 | T | +| main.rs:1239:20:1239:23 | SelfParam | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1239:20:1239:23 | SelfParam | T | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1239:20:1239:23 | SelfParam | T.T | main.rs:1238:10:1238:10 | T | +| main.rs:1239:41:1244:9 | { ... } | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1239:41:1244:9 | { ... } | T | main.rs:1238:10:1238:10 | T | +| main.rs:1240:13:1243:13 | match self { ... } | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1240:13:1243:13 | match self { ... } | T | main.rs:1238:10:1238:10 | T | +| main.rs:1240:19:1240:22 | self | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1240:19:1240:22 | self | T | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1240:19:1240:22 | self | T.T | main.rs:1238:10:1238:10 | T | +| main.rs:1241:17:1241:34 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1241:17:1241:34 | ...::MyNone(...) | T | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1241:17:1241:34 | ...::MyNone(...) | T.T | main.rs:1238:10:1238:10 | T | +| main.rs:1241:39:1241:56 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1241:39:1241:56 | ...::MyNone(...) | T | main.rs:1238:10:1238:10 | T | +| main.rs:1242:17:1242:35 | ...::MySome(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1242:17:1242:35 | ...::MySome(...) | T | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1242:17:1242:35 | ...::MySome(...) | T.T | main.rs:1238:10:1238:10 | T | +| main.rs:1242:34:1242:34 | x | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1242:34:1242:34 | x | T | main.rs:1238:10:1238:10 | T | +| main.rs:1242:40:1242:40 | x | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1242:40:1242:40 | x | T | main.rs:1238:10:1238:10 | T | +| main.rs:1251:13:1251:14 | x1 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1251:13:1251:14 | x1 | T | main.rs:1247:5:1248:13 | S | +| main.rs:1251:18:1251:37 | ...::new(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1251:18:1251:37 | ...::new(...) | T | main.rs:1247:5:1248:13 | S | +| main.rs:1252:18:1252:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1252:18:1252:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1252:18:1252:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1252:18:1252:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1252:26:1252:27 | x1 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1252:26:1252:27 | x1 | T | main.rs:1247:5:1248:13 | S | +| main.rs:1254:17:1254:18 | x2 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1254:17:1254:18 | x2 | T | main.rs:1247:5:1248:13 | S | +| main.rs:1254:22:1254:36 | ...::new(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1254:22:1254:36 | ...::new(...) | T | main.rs:1247:5:1248:13 | S | +| main.rs:1255:9:1255:10 | x2 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1255:9:1255:10 | x2 | T | main.rs:1247:5:1248:13 | S | +| main.rs:1255:16:1255:16 | S | | main.rs:1247:5:1248:13 | S | +| main.rs:1256:18:1256:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1256:18:1256:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1256:18:1256:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1256:18:1256:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1256:26:1256:27 | x2 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1256:26:1256:27 | x2 | T | main.rs:1247:5:1248:13 | S | +| main.rs:1259:17:1259:18 | x3 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1259:22:1259:36 | ...::new(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1260:9:1260:10 | x3 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1260:21:1260:21 | S | | main.rs:1247:5:1248:13 | S | +| main.rs:1261:18:1261:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1261:18:1261:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1261:18:1261:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1261:18:1261:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1261:26:1261:27 | x3 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1263:17:1263:18 | x4 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1263:17:1263:18 | x4 | T | main.rs:1247:5:1248:13 | S | +| main.rs:1263:22:1263:36 | ...::new(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1263:22:1263:36 | ...::new(...) | T | main.rs:1247:5:1248:13 | S | +| main.rs:1264:23:1264:29 | &mut x4 | | file://:0:0:0:0 | & | +| main.rs:1264:23:1264:29 | &mut x4 | &T | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1264:23:1264:29 | &mut x4 | &T.T | main.rs:1247:5:1248:13 | S | +| main.rs:1264:28:1264:29 | x4 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1264:28:1264:29 | x4 | T | main.rs:1247:5:1248:13 | S | +| main.rs:1264:32:1264:32 | S | | main.rs:1247:5:1248:13 | S | +| main.rs:1265:18:1265:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1265:18:1265:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1265:18:1265:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1265:18:1265:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1265:26:1265:27 | x4 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1265:26:1265:27 | x4 | T | main.rs:1247:5:1248:13 | S | +| main.rs:1267:13:1267:14 | x5 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1267:13:1267:14 | x5 | T | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1267:13:1267:14 | x5 | T.T | main.rs:1247:5:1248:13 | S | +| main.rs:1267:18:1267:58 | ...::MySome(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1267:18:1267:58 | ...::MySome(...) | T | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1267:18:1267:58 | ...::MySome(...) | T.T | main.rs:1247:5:1248:13 | S | +| main.rs:1267:35:1267:57 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1267:35:1267:57 | ...::MyNone(...) | T | main.rs:1247:5:1248:13 | S | +| main.rs:1268:18:1268:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1268:18:1268:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1268:18:1268:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1268:18:1268:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1268:26:1268:27 | x5 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1268:26:1268:27 | x5 | T | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1268:26:1268:27 | x5 | T.T | main.rs:1247:5:1248:13 | S | +| main.rs:1268:26:1268:37 | x5.flatten() | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1268:26:1268:37 | x5.flatten() | T | main.rs:1247:5:1248:13 | S | +| main.rs:1270:13:1270:14 | x6 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1270:13:1270:14 | x6 | T | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1270:13:1270:14 | x6 | T.T | main.rs:1247:5:1248:13 | S | +| main.rs:1270:18:1270:58 | ...::MySome(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1270:18:1270:58 | ...::MySome(...) | T | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1270:18:1270:58 | ...::MySome(...) | T.T | main.rs:1247:5:1248:13 | S | +| main.rs:1270:35:1270:57 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1270:35:1270:57 | ...::MyNone(...) | T | main.rs:1247:5:1248:13 | S | +| main.rs:1271:18:1271:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1271:18:1271:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1271:18:1271:61 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1271:18:1271:61 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1271:26:1271:61 | ...::flatten(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1271:26:1271:61 | ...::flatten(...) | T | main.rs:1247:5:1248:13 | S | +| main.rs:1271:59:1271:60 | x6 | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1271:59:1271:60 | x6 | T | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1271:59:1271:60 | x6 | T.T | main.rs:1247:5:1248:13 | S | +| main.rs:1274:13:1274:19 | from_if | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1274:13:1274:19 | from_if | T | main.rs:1247:5:1248:13 | S | +| main.rs:1274:23:1278:9 | if ... {...} else {...} | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1274:23:1278:9 | if ... {...} else {...} | T | main.rs:1247:5:1248:13 | S | +| main.rs:1274:26:1274:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1274:26:1274:30 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1274:30:1274:30 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1274:32:1276:9 | { ... } | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1274:32:1276:9 | { ... } | T | main.rs:1247:5:1248:13 | S | +| main.rs:1275:13:1275:30 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1275:13:1275:30 | ...::MyNone(...) | T | main.rs:1247:5:1248:13 | S | +| main.rs:1276:16:1278:9 | { ... } | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1276:16:1278:9 | { ... } | T | main.rs:1247:5:1248:13 | S | +| main.rs:1277:13:1277:31 | ...::MySome(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1277:13:1277:31 | ...::MySome(...) | T | main.rs:1247:5:1248:13 | S | +| main.rs:1277:30:1277:30 | S | | main.rs:1247:5:1248:13 | S | +| main.rs:1279:18:1279:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1279:18:1279:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1279:18:1279:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1279:18:1279:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1279:26:1279:32 | from_if | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1279:26:1279:32 | from_if | T | main.rs:1247:5:1248:13 | S | +| main.rs:1282:13:1282:22 | from_match | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1282:13:1282:22 | from_match | T | main.rs:1247:5:1248:13 | S | +| main.rs:1282:26:1285:9 | match ... { ... } | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1282:26:1285:9 | match ... { ... } | T | main.rs:1247:5:1248:13 | S | +| main.rs:1282:32:1282:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1282:32:1282:36 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1282:36:1282:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1283:13:1283:16 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1283:21:1283:38 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1283:21:1283:38 | ...::MyNone(...) | T | main.rs:1247:5:1248:13 | S | +| main.rs:1284:13:1284:17 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1284:22:1284:40 | ...::MySome(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1284:22:1284:40 | ...::MySome(...) | T | main.rs:1247:5:1248:13 | S | +| main.rs:1284:39:1284:39 | S | | main.rs:1247:5:1248:13 | S | +| main.rs:1286:18:1286:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1286:18:1286:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1286:18:1286:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1286:18:1286:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1286:26:1286:35 | from_match | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1286:26:1286:35 | from_match | T | main.rs:1247:5:1248:13 | S | +| main.rs:1289:13:1289:21 | from_loop | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1289:13:1289:21 | from_loop | T | main.rs:1247:5:1248:13 | S | +| main.rs:1289:25:1294:9 | loop { ... } | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1289:25:1294:9 | loop { ... } | T | main.rs:1247:5:1248:13 | S | +| main.rs:1290:16:1290:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1290:16:1290:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1290:20:1290:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1291:23:1291:40 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1291:23:1291:40 | ...::MyNone(...) | T | main.rs:1247:5:1248:13 | S | +| main.rs:1293:19:1293:37 | ...::MySome(...) | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1293:19:1293:37 | ...::MySome(...) | T | main.rs:1247:5:1248:13 | S | +| main.rs:1293:36:1293:36 | S | | main.rs:1247:5:1248:13 | S | +| main.rs:1295:18:1295:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1295:18:1295:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1295:18:1295:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1295:18:1295:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1295:26:1295:34 | from_loop | | main.rs:1212:5:1216:5 | MyOption | +| main.rs:1295:26:1295:34 | from_loop | T | main.rs:1247:5:1248:13 | S | +| main.rs:1313:15:1313:18 | SelfParam | | main.rs:1301:5:1302:19 | S | +| main.rs:1313:15:1313:18 | SelfParam | T | main.rs:1312:10:1312:10 | T | +| main.rs:1313:26:1315:9 | { ... } | | main.rs:1312:10:1312:10 | T | +| main.rs:1314:13:1314:16 | self | | main.rs:1301:5:1302:19 | S | +| main.rs:1314:13:1314:16 | self | T | main.rs:1312:10:1312:10 | T | +| main.rs:1314:13:1314:18 | self.0 | | main.rs:1312:10:1312:10 | T | +| main.rs:1317:15:1317:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1317:15:1317:19 | SelfParam | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1317:15:1317:19 | SelfParam | &T.T | main.rs:1312:10:1312:10 | T | +| main.rs:1317:28:1319:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1317:28:1319:9 | { ... } | &T | main.rs:1312:10:1312:10 | T | +| main.rs:1318:13:1318:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1318:13:1318:19 | &... | &T | main.rs:1312:10:1312:10 | T | +| main.rs:1318:14:1318:17 | self | | file://:0:0:0:0 | & | +| main.rs:1318:14:1318:17 | self | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1318:14:1318:17 | self | &T.T | main.rs:1312:10:1312:10 | T | +| main.rs:1318:14:1318:19 | self.0 | | main.rs:1312:10:1312:10 | T | +| main.rs:1321:15:1321:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1321:15:1321:25 | SelfParam | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1321:15:1321:25 | SelfParam | &T.T | main.rs:1312:10:1312:10 | T | +| main.rs:1321:34:1323:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1321:34:1323:9 | { ... } | &T | main.rs:1312:10:1312:10 | T | +| main.rs:1322:13:1322:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1322:13:1322:19 | &... | &T | main.rs:1312:10:1312:10 | T | +| main.rs:1322:14:1322:17 | self | | file://:0:0:0:0 | & | +| main.rs:1322:14:1322:17 | self | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1322:14:1322:17 | self | &T.T | main.rs:1312:10:1312:10 | T | +| main.rs:1322:14:1322:19 | self.0 | | main.rs:1312:10:1312:10 | T | +| main.rs:1327:29:1327:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1327:29:1327:33 | SelfParam | &T | main.rs:1326:5:1329:5 | Self [trait ATrait] | +| main.rs:1328:33:1328:36 | SelfParam | | main.rs:1326:5:1329:5 | Self [trait ATrait] | +| main.rs:1334:29:1334:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1334:29:1334:33 | SelfParam | &T | file://:0:0:0:0 | & | +| main.rs:1334:29:1334:33 | SelfParam | &T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1334:29:1334:33 | SelfParam | &T.&T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1334:43:1336:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1335:13:1335:22 | (...) | | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1335:13:1335:24 | ... .a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1335:14:1335:21 | * ... | | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1335:15:1335:21 | (...) | | file://:0:0:0:0 | & | +| main.rs:1335:15:1335:21 | (...) | | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1335:15:1335:21 | (...) | &T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1335:16:1335:20 | * ... | | file://:0:0:0:0 | & | +| main.rs:1335:16:1335:20 | * ... | | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1335:16:1335:20 | * ... | &T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1335:17:1335:20 | self | | file://:0:0:0:0 | & | +| main.rs:1335:17:1335:20 | self | &T | file://:0:0:0:0 | & | +| main.rs:1335:17:1335:20 | self | &T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1335:17:1335:20 | self | &T.&T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1339:33:1339:36 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1339:33:1339:36 | SelfParam | &T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1339:46:1341:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1340:13:1340:19 | (...) | | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1340:13:1340:21 | ... .a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1340:14:1340:18 | * ... | | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1340:15:1340:18 | self | | file://:0:0:0:0 | & | +| main.rs:1340:15:1340:18 | self | &T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1345:13:1345:14 | x1 | | main.rs:1301:5:1302:19 | S | +| main.rs:1345:13:1345:14 | x1 | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1345:18:1345:22 | S(...) | | main.rs:1301:5:1302:19 | S | +| main.rs:1345:18:1345:22 | S(...) | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1345:20:1345:21 | S2 | | main.rs:1304:5:1305:14 | S2 | +| main.rs:1346:18:1346:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1346:18:1346:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1346:18:1346:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1346:18:1346:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1346:26:1346:27 | x1 | | main.rs:1301:5:1302:19 | S | +| main.rs:1346:26:1346:27 | x1 | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1346:26:1346:32 | x1.m1() | | main.rs:1304:5:1305:14 | S2 | +| main.rs:1348:13:1348:14 | x2 | | main.rs:1301:5:1302:19 | S | +| main.rs:1348:13:1348:14 | x2 | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1348:18:1348:22 | S(...) | | main.rs:1301:5:1302:19 | S | +| main.rs:1348:18:1348:22 | S(...) | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1348:20:1348:21 | S2 | | main.rs:1304:5:1305:14 | S2 | +| main.rs:1350:18:1350:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1350:18:1350:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1350:18:1350:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1350:18:1350:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1350:26:1350:27 | x2 | | main.rs:1301:5:1302:19 | S | +| main.rs:1350:26:1350:27 | x2 | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1350:26:1350:32 | x2.m2() | | file://:0:0:0:0 | & | +| main.rs:1350:26:1350:32 | x2.m2() | &T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1351:18:1351:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1351:18:1351:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1351:18:1351:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1351:18:1351:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1351:26:1351:27 | x2 | | main.rs:1301:5:1302:19 | S | +| main.rs:1351:26:1351:27 | x2 | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1351:26:1351:32 | x2.m3() | | file://:0:0:0:0 | & | +| main.rs:1351:26:1351:32 | x2.m3() | &T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1353:13:1353:14 | x3 | | main.rs:1301:5:1302:19 | S | +| main.rs:1353:13:1353:14 | x3 | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1353:18:1353:22 | S(...) | | main.rs:1301:5:1302:19 | S | +| main.rs:1353:18:1353:22 | S(...) | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1353:20:1353:21 | S2 | | main.rs:1304:5:1305:14 | S2 | +| main.rs:1355:18:1355:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1355:18:1355:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1355:18:1355:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1355:18:1355:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1355:26:1355:41 | ...::m2(...) | | file://:0:0:0:0 | & | +| main.rs:1355:26:1355:41 | ...::m2(...) | &T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1355:38:1355:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1355:38:1355:40 | &x3 | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1355:38:1355:40 | &x3 | &T.T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1355:39:1355:40 | x3 | | main.rs:1301:5:1302:19 | S | +| main.rs:1355:39:1355:40 | x3 | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1356:18:1356:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1356:18:1356:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1356:18:1356:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1356:18:1356:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1356:26:1356:41 | ...::m3(...) | | file://:0:0:0:0 | & | +| main.rs:1356:26:1356:41 | ...::m3(...) | &T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1356:38:1356:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1356:38:1356:40 | &x3 | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1356:38:1356:40 | &x3 | &T.T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1356:39:1356:40 | x3 | | main.rs:1301:5:1302:19 | S | +| main.rs:1356:39:1356:40 | x3 | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1358:13:1358:14 | x4 | | file://:0:0:0:0 | & | +| main.rs:1358:13:1358:14 | x4 | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1358:13:1358:14 | x4 | &T.T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1358:18:1358:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1358:18:1358:23 | &... | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1358:18:1358:23 | &... | &T.T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1358:19:1358:23 | S(...) | | main.rs:1301:5:1302:19 | S | +| main.rs:1358:19:1358:23 | S(...) | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1358:21:1358:22 | S2 | | main.rs:1304:5:1305:14 | S2 | +| main.rs:1360:18:1360:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1360:18:1360:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1360:18:1360:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1360:18:1360:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1360:26:1360:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1360:26:1360:27 | x4 | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1360:26:1360:27 | x4 | &T.T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1360:26:1360:32 | x4.m2() | | file://:0:0:0:0 | & | +| main.rs:1360:26:1360:32 | x4.m2() | &T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1361:18:1361:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1361:18:1361:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1361:18:1361:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1361:18:1361:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1361:26:1361:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1361:26:1361:27 | x4 | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1361:26:1361:27 | x4 | &T.T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1361:26:1361:32 | x4.m3() | | file://:0:0:0:0 | & | +| main.rs:1361:26:1361:32 | x4.m3() | &T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1363:13:1363:14 | x5 | | file://:0:0:0:0 | & | +| main.rs:1363:13:1363:14 | x5 | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1363:13:1363:14 | x5 | &T.T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1363:18:1363:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1363:18:1363:23 | &... | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1363:18:1363:23 | &... | &T.T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1363:19:1363:23 | S(...) | | main.rs:1301:5:1302:19 | S | +| main.rs:1363:19:1363:23 | S(...) | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1363:21:1363:22 | S2 | | main.rs:1304:5:1305:14 | S2 | +| main.rs:1365:18:1365:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1365:18:1365:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1365:18:1365:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1365:18:1365:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1365:26:1365:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1365:26:1365:27 | x5 | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1365:26:1365:27 | x5 | &T.T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1365:26:1365:32 | x5.m1() | | main.rs:1304:5:1305:14 | S2 | +| main.rs:1366:18:1366:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1366:18:1366:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1366:18:1366:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1366:18:1366:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1366:26:1366:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1366:26:1366:27 | x5 | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1366:26:1366:27 | x5 | &T.T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1366:26:1366:29 | x5.0 | | main.rs:1304:5:1305:14 | S2 | +| main.rs:1368:13:1368:14 | x6 | | file://:0:0:0:0 | & | +| main.rs:1368:13:1368:14 | x6 | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1368:13:1368:14 | x6 | &T.T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1368:18:1368:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1368:18:1368:23 | &... | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1368:18:1368:23 | &... | &T.T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1368:19:1368:23 | S(...) | | main.rs:1301:5:1302:19 | S | +| main.rs:1368:19:1368:23 | S(...) | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1368:21:1368:22 | S2 | | main.rs:1304:5:1305:14 | S2 | +| main.rs:1371:18:1371:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1371:18:1371:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1371:18:1371:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1371:18:1371:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1371:26:1371:30 | (...) | | main.rs:1301:5:1302:19 | S | +| main.rs:1371:26:1371:30 | (...) | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1371:26:1371:35 | ... .m1() | | main.rs:1304:5:1305:14 | S2 | +| main.rs:1371:27:1371:29 | * ... | | main.rs:1301:5:1302:19 | S | +| main.rs:1371:27:1371:29 | * ... | T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1371:28:1371:29 | x6 | | file://:0:0:0:0 | & | +| main.rs:1371:28:1371:29 | x6 | &T | main.rs:1301:5:1302:19 | S | +| main.rs:1371:28:1371:29 | x6 | &T.T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1373:13:1373:14 | x7 | | main.rs:1301:5:1302:19 | S | +| main.rs:1373:13:1373:14 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1373:13:1373:14 | x7 | T.&T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1373:18:1373:23 | S(...) | | main.rs:1301:5:1302:19 | S | +| main.rs:1373:18:1373:23 | S(...) | T | file://:0:0:0:0 | & | +| main.rs:1373:18:1373:23 | S(...) | T.&T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1373:20:1373:22 | &S2 | | file://:0:0:0:0 | & | +| main.rs:1373:20:1373:22 | &S2 | &T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1373:21:1373:22 | S2 | | main.rs:1304:5:1305:14 | S2 | +| main.rs:1376:13:1376:13 | t | | file://:0:0:0:0 | & | +| main.rs:1376:13:1376:13 | t | &T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1376:17:1376:18 | x7 | | main.rs:1301:5:1302:19 | S | +| main.rs:1376:17:1376:18 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1376:17:1376:18 | x7 | T.&T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1376:17:1376:23 | x7.m1() | | file://:0:0:0:0 | & | +| main.rs:1376:17:1376:23 | x7.m1() | &T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1377:18:1377:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1377:18:1377:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1377:18:1377:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1377:18:1377:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1377:26:1377:27 | x7 | | main.rs:1301:5:1302:19 | S | +| main.rs:1377:26:1377:27 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1377:26:1377:27 | x7 | T.&T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1379:13:1379:14 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1379:26:1379:32 | "Hello" | | file://:0:0:0:0 | & | +| main.rs:1379:26:1379:32 | "Hello" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1379:26:1379:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | +| main.rs:1383:13:1383:13 | u | | {EXTERNAL LOCATION} | Result | +| main.rs:1383:13:1383:13 | u | T | {EXTERNAL LOCATION} | u32 | +| main.rs:1383:17:1383:18 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1383:17:1383:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | +| main.rs:1383:17:1383:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | +| main.rs:1385:13:1385:20 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1385:13:1385:20 | my_thing | &T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1385:24:1385:39 | &... | | file://:0:0:0:0 | & | +| main.rs:1385:24:1385:39 | &... | &T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1385:25:1385:39 | MyInt {...} | | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1385:36:1385:37 | 37 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1385:36:1385:37 | 37 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1387:17:1387:24 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1387:17:1387:24 | my_thing | &T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1388:18:1388:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1388:18:1388:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1388:18:1388:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1388:18:1388:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1391:13:1391:20 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1391:13:1391:20 | my_thing | &T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1391:24:1391:39 | &... | | file://:0:0:0:0 | & | +| main.rs:1391:24:1391:39 | &... | &T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1391:25:1391:39 | MyInt {...} | | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1391:36:1391:37 | 38 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1391:36:1391:37 | 38 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1392:17:1392:24 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1392:17:1392:24 | my_thing | &T | main.rs:1307:5:1310:5 | MyInt | +| main.rs:1393:18:1393:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1393:18:1393:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1393:18:1393:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1393:18:1393:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1400:16:1400:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1400:16:1400:20 | SelfParam | &T | main.rs:1398:5:1406:5 | Self [trait MyTrait] | +| main.rs:1403:16:1403:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1403:16:1403:20 | SelfParam | &T | main.rs:1398:5:1406:5 | Self [trait MyTrait] | +| main.rs:1403:32:1405:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1403:32:1405:9 | { ... } | &T | main.rs:1398:5:1406:5 | Self [trait MyTrait] | +| main.rs:1404:13:1404:16 | self | | file://:0:0:0:0 | & | +| main.rs:1404:13:1404:16 | self | &T | main.rs:1398:5:1406:5 | Self [trait MyTrait] | +| main.rs:1404:13:1404:22 | self.foo() | | file://:0:0:0:0 | & | +| main.rs:1404:13:1404:22 | self.foo() | &T | main.rs:1398:5:1406:5 | Self [trait MyTrait] | +| main.rs:1412:16:1412:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1412:16:1412:20 | SelfParam | &T | main.rs:1408:5:1408:20 | MyStruct | +| main.rs:1412:36:1414:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1412:36:1414:9 | { ... } | &T | main.rs:1408:5:1408:20 | MyStruct | +| main.rs:1413:13:1413:16 | self | | file://:0:0:0:0 | & | +| main.rs:1413:13:1413:16 | self | &T | main.rs:1408:5:1408:20 | MyStruct | +| main.rs:1418:13:1418:13 | x | | main.rs:1408:5:1408:20 | MyStruct | +| main.rs:1418:17:1418:24 | MyStruct | | main.rs:1408:5:1408:20 | MyStruct | +| main.rs:1419:9:1419:9 | x | | main.rs:1408:5:1408:20 | MyStruct | +| main.rs:1419:9:1419:15 | x.bar() | | file://:0:0:0:0 | & | +| main.rs:1419:9:1419:15 | x.bar() | &T | main.rs:1408:5:1408:20 | MyStruct | +| main.rs:1429:16:1429:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1429:16:1429:20 | SelfParam | &T | main.rs:1426:5:1426:26 | MyStruct | +| main.rs:1429:16:1429:20 | SelfParam | &T.T | main.rs:1428:10:1428:10 | T | +| main.rs:1429:32:1431:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1429:32:1431:9 | { ... } | &T | main.rs:1426:5:1426:26 | MyStruct | +| main.rs:1429:32:1431:9 | { ... } | &T.T | main.rs:1428:10:1428:10 | T | +| main.rs:1430:13:1430:16 | self | | file://:0:0:0:0 | & | +| main.rs:1430:13:1430:16 | self | &T | main.rs:1426:5:1426:26 | MyStruct | +| main.rs:1430:13:1430:16 | self | &T.T | main.rs:1428:10:1428:10 | T | +| main.rs:1435:13:1435:13 | x | | main.rs:1426:5:1426:26 | MyStruct | +| main.rs:1435:13:1435:13 | x | T | main.rs:1424:5:1424:13 | S | +| main.rs:1435:17:1435:27 | MyStruct(...) | | main.rs:1426:5:1426:26 | MyStruct | +| main.rs:1435:17:1435:27 | MyStruct(...) | T | main.rs:1424:5:1424:13 | S | +| main.rs:1435:26:1435:26 | S | | main.rs:1424:5:1424:13 | S | +| main.rs:1436:9:1436:9 | x | | main.rs:1426:5:1426:26 | MyStruct | +| main.rs:1436:9:1436:9 | x | T | main.rs:1424:5:1424:13 | S | +| main.rs:1436:9:1436:15 | x.foo() | | file://:0:0:0:0 | & | +| main.rs:1436:9:1436:15 | x.foo() | &T | main.rs:1426:5:1426:26 | MyStruct | +| main.rs:1436:9:1436:15 | x.foo() | &T.T | main.rs:1424:5:1424:13 | S | +| main.rs:1447:17:1447:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1447:17:1447:25 | SelfParam | &T | main.rs:1441:5:1444:5 | MyFlag | +| main.rs:1448:13:1448:16 | self | | file://:0:0:0:0 | & | +| main.rs:1448:13:1448:16 | self | &T | main.rs:1441:5:1444:5 | MyFlag | +| main.rs:1448:13:1448:21 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1448:13:1448:34 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1448:25:1448:34 | ! ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1448:26:1448:29 | self | | file://:0:0:0:0 | & | +| main.rs:1448:26:1448:29 | self | &T | main.rs:1441:5:1444:5 | MyFlag | +| main.rs:1448:26:1448:34 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1455:15:1455:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1455:15:1455:19 | SelfParam | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1455:31:1457:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1455:31:1457:9 | { ... } | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1456:13:1456:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1456:13:1456:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1456:13:1456:19 | &... | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1456:13:1456:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1456:13:1456:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1456:13:1456:19 | &... | &T.&T.&T.&T | main.rs:1452:5:1452:13 | S | +| main.rs:1456:14:1456:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1456:14:1456:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1456:14:1456:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1456:14:1456:19 | &... | &T.&T.&T | main.rs:1452:5:1452:13 | S | +| main.rs:1456:15:1456:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1456:15:1456:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1456:15:1456:19 | &self | &T.&T | main.rs:1452:5:1452:13 | S | +| main.rs:1456:16:1456:19 | self | | file://:0:0:0:0 | & | +| main.rs:1456:16:1456:19 | self | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1459:15:1459:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1459:15:1459:25 | SelfParam | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1459:37:1461:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1459:37:1461:9 | { ... } | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1460:13:1460:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1460:13:1460:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1460:13:1460:19 | &... | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1460:13:1460:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1460:13:1460:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1460:13:1460:19 | &... | &T.&T.&T.&T | main.rs:1452:5:1452:13 | S | +| main.rs:1460:14:1460:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1460:14:1460:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1460:14:1460:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1460:14:1460:19 | &... | &T.&T.&T | main.rs:1452:5:1452:13 | S | +| main.rs:1460:15:1460:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1460:15:1460:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1460:15:1460:19 | &self | &T.&T | main.rs:1452:5:1452:13 | S | +| main.rs:1460:16:1460:19 | self | | file://:0:0:0:0 | & | +| main.rs:1460:16:1460:19 | self | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1463:15:1463:15 | x | | file://:0:0:0:0 | & | +| main.rs:1463:15:1463:15 | x | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1463:34:1465:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1463:34:1465:9 | { ... } | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1464:13:1464:13 | x | | file://:0:0:0:0 | & | +| main.rs:1464:13:1464:13 | x | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1467:15:1467:15 | x | | file://:0:0:0:0 | & | +| main.rs:1467:15:1467:15 | x | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1467:34:1469:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1467:34:1469:9 | { ... } | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1468:13:1468:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1468:13:1468:16 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1468:13:1468:16 | &... | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1468:13:1468:16 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1468:13:1468:16 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1468:13:1468:16 | &... | &T.&T.&T.&T | main.rs:1452:5:1452:13 | S | +| main.rs:1468:14:1468:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1468:14:1468:16 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1468:14:1468:16 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1468:14:1468:16 | &... | &T.&T.&T | main.rs:1452:5:1452:13 | S | +| main.rs:1468:15:1468:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1468:15:1468:16 | &x | &T | file://:0:0:0:0 | & | +| main.rs:1468:15:1468:16 | &x | &T.&T | main.rs:1452:5:1452:13 | S | +| main.rs:1468:16:1468:16 | x | | file://:0:0:0:0 | & | +| main.rs:1468:16:1468:16 | x | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1473:13:1473:13 | x | | main.rs:1452:5:1452:13 | S | +| main.rs:1473:17:1473:20 | S {...} | | main.rs:1452:5:1452:13 | S | +| main.rs:1474:9:1474:9 | x | | main.rs:1452:5:1452:13 | S | +| main.rs:1474:9:1474:14 | x.f1() | | file://:0:0:0:0 | & | +| main.rs:1474:9:1474:14 | x.f1() | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1475:9:1475:9 | x | | main.rs:1452:5:1452:13 | S | +| main.rs:1475:9:1475:14 | x.f2() | | file://:0:0:0:0 | & | +| main.rs:1475:9:1475:14 | x.f2() | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1476:9:1476:17 | ...::f3(...) | | file://:0:0:0:0 | & | +| main.rs:1476:9:1476:17 | ...::f3(...) | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1476:15:1476:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1476:15:1476:16 | &x | &T | main.rs:1452:5:1452:13 | S | +| main.rs:1476:16:1476:16 | x | | main.rs:1452:5:1452:13 | S | +| main.rs:1478:13:1478:13 | n | | {EXTERNAL LOCATION} | bool | +| main.rs:1478:17:1478:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1478:18:1478:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1478:18:1478:24 | * ... | | file://:0:0:0:0 | & | +| main.rs:1478:18:1478:24 | * ... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1478:19:1478:24 | &... | | file://:0:0:0:0 | & | +| main.rs:1478:19:1478:24 | &... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1478:19:1478:24 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1478:19:1478:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | +| main.rs:1478:20:1478:24 | &true | | file://:0:0:0:0 | & | +| main.rs:1478:20:1478:24 | &true | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1478:21:1478:24 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1482:17:1482:20 | flag | | main.rs:1441:5:1444:5 | MyFlag | +| main.rs:1482:24:1482:41 | ...::default(...) | | main.rs:1441:5:1444:5 | MyFlag | +| main.rs:1483:22:1483:30 | &mut flag | | file://:0:0:0:0 | & | +| main.rs:1483:22:1483:30 | &mut flag | &T | main.rs:1441:5:1444:5 | MyFlag | +| main.rs:1483:27:1483:30 | flag | | main.rs:1441:5:1444:5 | MyFlag | +| main.rs:1484:18:1484:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1484:18:1484:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1484:18:1484:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1484:18:1484:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1484:26:1484:29 | flag | | main.rs:1441:5:1444:5 | MyFlag | +| main.rs:1499:43:1502:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1499:43:1502:5 | { ... } | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1499:43:1502:5 | { ... } | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1500:13:1500:13 | x | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1500:17:1500:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1500:17:1500:30 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1500:17:1500:31 | TryExpr | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1500:28:1500:29 | S1 | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1501:9:1501:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1501:9:1501:22 | ...::Ok(...) | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1501:9:1501:22 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1501:20:1501:21 | S1 | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1506:46:1510:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1506:46:1510:5 | { ... } | E | main.rs:1494:5:1495:14 | S2 | +| main.rs:1506:46:1510:5 | { ... } | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1507:13:1507:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1507:13:1507:13 | x | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1507:17:1507:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1507:17:1507:30 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1507:28:1507:29 | S1 | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1508:13:1508:13 | y | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1508:17:1508:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1508:17:1508:17 | x | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1508:17:1508:18 | TryExpr | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1509:9:1509:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1509:9:1509:22 | ...::Ok(...) | E | main.rs:1494:5:1495:14 | S2 | +| main.rs:1509:9:1509:22 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1509:20:1509:21 | S1 | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1514:40:1519:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1514:40:1519:5 | { ... } | E | main.rs:1494:5:1495:14 | S2 | +| main.rs:1514:40:1519:5 | { ... } | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1515:13:1515:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1515:13:1515:13 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1515:13:1515:13 | x | T.T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1515:17:1515:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1515:17:1515:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | +| main.rs:1515:17:1515:42 | ...::Ok(...) | T.T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1515:28:1515:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1515:28:1515:41 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1515:39:1515:40 | S1 | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1517:17:1517:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1517:17:1517:17 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1517:17:1517:17 | x | T.T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1517:17:1517:18 | TryExpr | | {EXTERNAL LOCATION} | Result | +| main.rs:1517:17:1517:18 | TryExpr | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1517:17:1517:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1517:24:1517:28 | \|...\| s | | {EXTERNAL LOCATION} | dyn FnOnce | +| main.rs:1517:24:1517:28 | \|...\| s | dyn(Args) | file://:0:0:0:0 | (T_1) | +| main.rs:1518:9:1518:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1518:9:1518:22 | ...::Ok(...) | E | main.rs:1494:5:1495:14 | S2 | +| main.rs:1518:9:1518:22 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1518:20:1518:21 | S1 | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1523:30:1523:34 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1523:30:1523:34 | input | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1523:30:1523:34 | input | T | main.rs:1523:20:1523:27 | T | +| main.rs:1523:69:1530:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1523:69:1530:5 | { ... } | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1523:69:1530:5 | { ... } | T | main.rs:1523:20:1523:27 | T | +| main.rs:1524:13:1524:17 | value | | main.rs:1523:20:1523:27 | T | +| main.rs:1524:21:1524:25 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1524:21:1524:25 | input | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1524:21:1524:25 | input | T | main.rs:1523:20:1523:27 | T | +| main.rs:1524:21:1524:26 | TryExpr | | main.rs:1523:20:1523:27 | T | +| main.rs:1525:22:1525:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1525:22:1525:38 | ...::Ok(...) | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1525:22:1525:38 | ...::Ok(...) | T | main.rs:1523:20:1523:27 | T | +| main.rs:1525:22:1528:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1525:22:1528:10 | ... .and_then(...) | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1525:33:1525:37 | value | | main.rs:1523:20:1523:27 | T | +| main.rs:1525:49:1528:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | +| main.rs:1525:49:1528:9 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | +| main.rs:1525:49:1528:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | Result | +| main.rs:1525:49:1528:9 | \|...\| ... | dyn(Output).E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1525:53:1528:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1525:53:1528:9 | { ... } | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1526:22:1526:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1526:22:1526:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1526:22:1526:30 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1526:22:1526:30 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1527:13:1527:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1527:13:1527:34 | ...::Ok::<...>(...) | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1529:9:1529:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1529:9:1529:23 | ...::Err(...) | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1529:9:1529:23 | ...::Err(...) | T | main.rs:1523:20:1523:27 | T | +| main.rs:1529:21:1529:22 | S1 | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1534:16:1534:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1534:16:1534:33 | ...::Ok(...) | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1534:16:1534:33 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1534:27:1534:32 | result | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1534:37:1534:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1534:37:1534:52 | try_same_error(...) | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1534:37:1534:52 | try_same_error(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1535:22:1535:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1535:22:1535:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1535:22:1535:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1535:22:1535:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1535:30:1535:35 | result | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1538:16:1538:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1538:16:1538:33 | ...::Ok(...) | E | main.rs:1494:5:1495:14 | S2 | +| main.rs:1538:16:1538:33 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1538:27:1538:32 | result | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1538:37:1538:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1538:37:1538:55 | try_convert_error(...) | E | main.rs:1494:5:1495:14 | S2 | +| main.rs:1538:37:1538:55 | try_convert_error(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1539:22:1539:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1539:22:1539:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1539:22:1539:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1539:22:1539:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1539:30:1539:35 | result | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1542:16:1542:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1542:16:1542:33 | ...::Ok(...) | E | main.rs:1494:5:1495:14 | S2 | +| main.rs:1542:16:1542:33 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1542:27:1542:32 | result | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1542:37:1542:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1542:37:1542:49 | try_chained(...) | E | main.rs:1494:5:1495:14 | S2 | +| main.rs:1542:37:1542:49 | try_chained(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1543:22:1543:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1543:22:1543:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1543:22:1543:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1543:22:1543:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1543:30:1543:35 | result | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1546:16:1546:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1546:16:1546:33 | ...::Ok(...) | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1546:16:1546:33 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1546:27:1546:32 | result | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1546:37:1546:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1546:37:1546:63 | try_complex(...) | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1546:37:1546:63 | try_complex(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1546:49:1546:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1546:49:1546:62 | ...::Ok(...) | E | main.rs:1491:5:1492:14 | S1 | +| main.rs:1546:49:1546:62 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | +| main.rs:1546:60:1546:61 | S1 | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1547:22:1547:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1547:22:1547:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1547:22:1547:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1547:22:1547:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1547:30:1547:35 | result | | main.rs:1491:5:1492:14 | S1 | +| main.rs:1554:13:1554:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1554:22:1554:22 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1555:13:1555:13 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1555:17:1555:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1556:13:1556:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1556:17:1556:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1556:17:1556:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | +| main.rs:1556:21:1556:21 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1557:13:1557:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1557:17:1557:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1557:17:1557:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | +| main.rs:1558:13:1558:13 | c | | {EXTERNAL LOCATION} | char | +| main.rs:1558:17:1558:19 | 'c' | | {EXTERNAL LOCATION} | char | +| main.rs:1559:13:1559:17 | hello | | file://:0:0:0:0 | & | +| main.rs:1559:13:1559:17 | hello | &T | {EXTERNAL LOCATION} | str | +| main.rs:1559:21:1559:27 | "Hello" | | file://:0:0:0:0 | & | +| main.rs:1559:21:1559:27 | "Hello" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1560:13:1560:13 | f | | {EXTERNAL LOCATION} | f64 | +| main.rs:1560:17:1560:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | +| main.rs:1561:13:1561:13 | t | | {EXTERNAL LOCATION} | bool | +| main.rs:1561:17:1561:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1562:13:1562:13 | f | | {EXTERNAL LOCATION} | bool | +| main.rs:1562:17:1562:21 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1569:13:1569:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:1569:17:1569:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1569:17:1569:29 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1569:25:1569:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1570:13:1570:13 | y | | {EXTERNAL LOCATION} | bool | +| main.rs:1570:17:1570:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1570:17:1570:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1570:25:1570:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1572:17:1572:17 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1573:13:1573:16 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1573:20:1573:21 | 34 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1573:20:1573:27 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1573:26:1573:27 | 33 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1574:12:1574:15 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1575:17:1575:17 | z | | file://:0:0:0:0 | () | +| main.rs:1575:21:1575:27 | (...) | | file://:0:0:0:0 | () | +| main.rs:1575:22:1575:22 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1575:22:1575:26 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1575:26:1575:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1577:13:1577:13 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1577:13:1577:17 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1577:17:1577:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1579:9:1579:9 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1593:30:1595:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1594:13:1594:31 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1594:23:1594:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1594:23:1594:23 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1594:29:1594:29 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1594:29:1594:29 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1601:16:1601:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1601:22:1601:24 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1601:41:1606:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1602:13:1605:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1603:20:1603:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1603:20:1603:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1603:20:1603:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1603:29:1603:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1603:29:1603:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1604:20:1604:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1604:20:1604:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1604:20:1604:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1604:29:1604:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1604:29:1604:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1611:23:1611:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1611:23:1611:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1611:34:1611:36 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1612:13:1612:16 | self | | file://:0:0:0:0 | & | +| main.rs:1612:13:1612:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1612:13:1612:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1612:13:1612:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1612:23:1612:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1612:23:1612:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1613:13:1613:16 | self | | file://:0:0:0:0 | & | +| main.rs:1613:13:1613:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1613:13:1613:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1613:13:1613:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1613:23:1613:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1613:23:1613:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1619:16:1619:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1619:22:1619:24 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1619:41:1624:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1620:13:1623:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1621:20:1621:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1621:20:1621:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1621:20:1621:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1621:29:1621:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1621:29:1621:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1622:20:1622:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1622:20:1622:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1622:20:1622:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1622:29:1622:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1622:29:1622:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1629:23:1629:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1629:23:1629:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1629:34:1629:36 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1630:13:1630:16 | self | | file://:0:0:0:0 | & | +| main.rs:1630:13:1630:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1630:13:1630:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1630:13:1630:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1630:23:1630:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1630:23:1630:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1631:13:1631:16 | self | | file://:0:0:0:0 | & | +| main.rs:1631:13:1631:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1631:13:1631:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1631:13:1631:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1631:23:1631:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1631:23:1631:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1637:16:1637:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1637:22:1637:24 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1637:41:1642:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1638:13:1641:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1639:20:1639:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1639:20:1639:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1639:20:1639:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1639:29:1639:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1639:29:1639:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1640:20:1640:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1640:20:1640:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1640:20:1640:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1640:29:1640:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1640:29:1640:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1646:23:1646:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1646:23:1646:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1646:34:1646:36 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1647:13:1647:16 | self | | file://:0:0:0:0 | & | +| main.rs:1647:13:1647:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1647:13:1647:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1647:13:1647:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1647:23:1647:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1647:23:1647:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1648:13:1648:16 | self | | file://:0:0:0:0 | & | +| main.rs:1648:13:1648:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1648:13:1648:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1648:13:1648:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1648:23:1648:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1648:23:1648:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1654:16:1654:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1654:22:1654:24 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1654:41:1659:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1655:13:1658:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1656:20:1656:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1656:20:1656:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1656:20:1656:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1656:29:1656:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1656:29:1656:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1657:20:1657:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1657:20:1657:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1657:20:1657:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1657:29:1657:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1657:29:1657:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1663:23:1663:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1663:23:1663:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1663:34:1663:36 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1664:13:1664:16 | self | | file://:0:0:0:0 | & | +| main.rs:1664:13:1664:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1664:13:1664:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1664:13:1664:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1664:23:1664:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1664:23:1664:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1665:13:1665:16 | self | | file://:0:0:0:0 | & | +| main.rs:1665:13:1665:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1665:13:1665:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1665:13:1665:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1665:23:1665:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1665:23:1665:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1671:16:1671:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1671:22:1671:24 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1671:41:1676:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1672:13:1675:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1673:20:1673:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1673:20:1673:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1673:20:1673:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1673:29:1673:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1673:29:1673:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1674:20:1674:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1674:20:1674:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1674:20:1674:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1674:29:1674:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1674:29:1674:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1680:23:1680:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1680:23:1680:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1680:34:1680:36 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1681:13:1681:16 | self | | file://:0:0:0:0 | & | +| main.rs:1681:13:1681:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1681:13:1681:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1681:13:1681:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1681:23:1681:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1681:23:1681:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1682:13:1682:16 | self | | file://:0:0:0:0 | & | +| main.rs:1682:13:1682:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1682:13:1682:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1682:13:1682:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1682:23:1682:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1682:23:1682:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1688:19:1688:22 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1688:25:1688:27 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1688:44:1693:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1689:13:1692:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1690:20:1690:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1690:20:1690:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1690:20:1690:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1690:29:1690:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1690:29:1690:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1691:20:1691:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1691:20:1691:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1691:20:1691:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1691:29:1691:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1691:29:1691:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1697:26:1697:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1697:26:1697:34 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1697:37:1697:39 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1698:13:1698:16 | self | | file://:0:0:0:0 | & | +| main.rs:1698:13:1698:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1698:13:1698:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1698:13:1698:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1698:23:1698:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1698:23:1698:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1699:13:1699:16 | self | | file://:0:0:0:0 | & | +| main.rs:1699:13:1699:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1699:13:1699:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1699:13:1699:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1699:23:1699:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1699:23:1699:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1705:18:1705:21 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1705:24:1705:26 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1705:43:1710:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1706:13:1709:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1707:20:1707:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1707:20:1707:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1707:20:1707:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1707:29:1707:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1707:29:1707:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1708:20:1708:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1708:20:1708:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1708:20:1708:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1708:29:1708:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1708:29:1708:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1714:25:1714:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1714:25:1714:33 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1714:36:1714:38 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1715:13:1715:16 | self | | file://:0:0:0:0 | & | +| main.rs:1715:13:1715:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1715:13:1715:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1715:13:1715:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1715:23:1715:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1715:23:1715:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1716:13:1716:16 | self | | file://:0:0:0:0 | & | +| main.rs:1716:13:1716:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1716:13:1716:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1716:13:1716:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1716:23:1716:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1716:23:1716:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1722:19:1722:22 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1722:25:1722:27 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1722:44:1727:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1723:13:1726:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1724:20:1724:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1724:20:1724:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1724:20:1724:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1724:29:1724:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1724:29:1724:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1725:20:1725:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1725:20:1725:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1725:20:1725:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1725:29:1725:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1725:29:1725:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1731:26:1731:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1731:26:1731:34 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1731:37:1731:39 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1732:13:1732:16 | self | | file://:0:0:0:0 | & | +| main.rs:1732:13:1732:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1732:13:1732:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1732:13:1732:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1732:23:1732:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1732:23:1732:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1733:13:1733:16 | self | | file://:0:0:0:0 | & | +| main.rs:1733:13:1733:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1733:13:1733:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1733:13:1733:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1733:23:1733:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1733:23:1733:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1739:16:1739:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1739:22:1739:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1739:40:1744:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1740:13:1743:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1741:20:1741:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1741:20:1741:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1741:20:1741:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1741:30:1741:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1742:20:1742:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1742:20:1742:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1742:20:1742:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1742:30:1742:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1748:23:1748:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1748:23:1748:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1748:34:1748:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1749:13:1749:16 | self | | file://:0:0:0:0 | & | +| main.rs:1749:13:1749:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1749:13:1749:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1749:13:1749:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1749:24:1749:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1750:13:1750:16 | self | | file://:0:0:0:0 | & | +| main.rs:1750:13:1750:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1750:13:1750:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1750:13:1750:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1750:24:1750:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1756:16:1756:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1756:22:1756:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1756:40:1761:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1757:13:1760:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1758:20:1758:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1758:20:1758:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1758:20:1758:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1758:30:1758:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1759:20:1759:23 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1759:20:1759:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1759:20:1759:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1759:30:1759:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1765:23:1765:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1765:23:1765:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1765:34:1765:36 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1766:13:1766:16 | self | | file://:0:0:0:0 | & | -| main.rs:1766:13:1766:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1766:13:1766:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | | main.rs:1766:13:1766:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1766:13:1766:28 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1766:13:1766:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1766:22:1766:26 | other | | file://:0:0:0:0 | & | -| main.rs:1766:22:1766:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1766:22:1766:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1766:33:1766:36 | self | | file://:0:0:0:0 | & | -| main.rs:1766:33:1766:36 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1766:33:1766:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1766:33:1766:48 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1766:42:1766:46 | other | | file://:0:0:0:0 | & | -| main.rs:1766:42:1766:46 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1766:42:1766:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1769:15:1769:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1769:15:1769:19 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1769:22:1769:26 | other | | file://:0:0:0:0 | & | -| main.rs:1769:22:1769:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1769:44:1771:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1770:13:1770:16 | self | | file://:0:0:0:0 | & | -| main.rs:1770:13:1770:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1770:13:1770:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1770:13:1770:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1770:13:1770:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1770:23:1770:27 | other | | file://:0:0:0:0 | & | -| main.rs:1770:23:1770:27 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1770:23:1770:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1770:34:1770:37 | self | | file://:0:0:0:0 | & | -| main.rs:1770:34:1770:37 | self | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1770:34:1770:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1770:34:1770:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1770:44:1770:48 | other | | file://:0:0:0:0 | & | -| main.rs:1770:44:1770:48 | other | &T | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1770:44:1770:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1777:13:1777:18 | i64_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:1777:22:1777:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1777:23:1777:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1777:23:1777:34 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1777:31:1777:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1778:13:1778:18 | i64_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:1778:22:1778:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1778:23:1778:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1778:23:1778:34 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1778:31:1778:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1779:13:1779:18 | i64_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:1779:22:1779:34 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1779:23:1779:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1779:23:1779:33 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1779:30:1779:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1780:13:1780:18 | i64_le | | {EXTERNAL LOCATION} | bool | -| main.rs:1780:22:1780:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1780:23:1780:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1780:23:1780:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1780:31:1780:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1781:13:1781:18 | i64_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:1781:22:1781:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1781:23:1781:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1781:23:1781:34 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1781:30:1781:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1782:13:1782:18 | i64_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:1782:22:1782:37 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1782:23:1782:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1782:23:1782:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1782:32:1782:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1785:13:1785:19 | i64_add | | {EXTERNAL LOCATION} | i64 | -| main.rs:1785:23:1785:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1785:23:1785:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1785:31:1785:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1786:13:1786:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | -| main.rs:1786:23:1786:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1786:23:1786:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1786:31:1786:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1787:13:1787:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | -| main.rs:1787:23:1787:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1787:23:1787:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1787:31:1787:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1788:13:1788:19 | i64_div | | {EXTERNAL LOCATION} | i64 | -| main.rs:1788:23:1788:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1788:23:1788:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1788:31:1788:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1789:13:1789:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | -| main.rs:1789:23:1789:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1789:23:1789:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1789:31:1789:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1792:17:1792:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1792:34:1792:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1793:9:1793:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1793:9:1793:31 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1793:27:1793:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1795:17:1795:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1795:34:1795:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1796:9:1796:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1796:9:1796:31 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1796:27:1796:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1798:17:1798:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1798:34:1798:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1799:9:1799:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1799:9:1799:31 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1799:27:1799:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1801:17:1801:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1801:34:1801:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1802:9:1802:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1802:9:1802:31 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1802:27:1802:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1804:17:1804:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1804:34:1804:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1805:9:1805:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1805:9:1805:31 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1805:27:1805:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1808:13:1808:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | -| main.rs:1808:26:1808:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1808:26:1808:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1808:34:1808:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1809:13:1809:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | -| main.rs:1809:25:1809:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1809:25:1809:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1809:33:1809:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1810:13:1810:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | -| main.rs:1810:26:1810:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1810:26:1810:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1810:34:1810:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1811:13:1811:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | -| main.rs:1811:23:1811:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1811:23:1811:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1811:32:1811:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1812:13:1812:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | -| main.rs:1812:23:1812:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1812:23:1812:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1812:32:1812:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1815:17:1815:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1815:37:1815:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1816:9:1816:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1816:9:1816:34 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1816:30:1816:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1818:17:1818:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1818:36:1818:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1819:9:1819:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1819:9:1819:33 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1819:29:1819:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1821:17:1821:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1821:37:1821:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1822:9:1822:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1822:9:1822:34 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1822:30:1822:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1824:17:1824:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1824:34:1824:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1825:9:1825:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1825:9:1825:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1825:28:1825:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1827:17:1827:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1827:34:1827:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1828:9:1828:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1828:9:1828:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1828:28:1828:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1830:13:1830:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | -| main.rs:1830:23:1830:28 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1830:24:1830:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1831:13:1831:19 | i64_not | | {EXTERNAL LOCATION} | i64 | -| main.rs:1831:23:1831:28 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1831:24:1831:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1834:13:1834:14 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1834:18:1834:36 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1834:28:1834:28 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1834:28:1834:28 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1834:34:1834:34 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1834:34:1834:34 | 2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1835:13:1835:14 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1835:18:1835:36 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1835:28:1835:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1835:28:1835:28 | 3 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1835:34:1835:34 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1835:34:1835:34 | 4 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1838:13:1838:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:1838:23:1838:24 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1838:23:1838:30 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1838:29:1838:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1839:13:1839:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:1839:23:1839:24 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1839:23:1839:30 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1839:29:1839:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1840:13:1840:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:1840:23:1840:24 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1840:23:1840:29 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1840:28:1840:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1841:13:1841:19 | vec2_le | | {EXTERNAL LOCATION} | bool | -| main.rs:1841:23:1841:24 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1841:23:1841:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1841:29:1841:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1842:13:1842:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:1842:23:1842:24 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1842:23:1842:29 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1842:28:1842:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1843:13:1843:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:1843:23:1843:24 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1843:23:1843:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1843:29:1843:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1846:13:1846:20 | vec2_add | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1846:24:1846:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1846:24:1846:30 | ... + ... | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1846:29:1846:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1847:13:1847:20 | vec2_sub | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1847:24:1847:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1847:24:1847:30 | ... - ... | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1847:29:1847:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1848:13:1848:20 | vec2_mul | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1848:24:1848:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1848:24:1848:30 | ... * ... | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1848:29:1848:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1849:13:1849:20 | vec2_div | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1849:24:1849:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1849:24:1849:30 | ... / ... | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1849:29:1849:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1850:13:1850:20 | vec2_rem | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1850:24:1850:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1850:24:1850:30 | ... % ... | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1850:29:1850:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1853:17:1853:31 | vec2_add_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1853:35:1853:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1854:9:1854:23 | vec2_add_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1854:9:1854:29 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1854:28:1854:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1856:17:1856:31 | vec2_sub_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1856:35:1856:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1857:9:1857:23 | vec2_sub_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1857:9:1857:29 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1857:28:1857:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1859:17:1859:31 | vec2_mul_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1859:35:1859:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1860:9:1860:23 | vec2_mul_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1860:9:1860:29 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1860:28:1860:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1862:17:1862:31 | vec2_div_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1862:35:1862:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1863:9:1863:23 | vec2_div_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1863:9:1863:29 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1863:28:1863:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1865:17:1865:31 | vec2_rem_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1865:35:1865:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1866:9:1866:23 | vec2_rem_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1866:9:1866:29 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1866:28:1866:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1869:13:1869:23 | vec2_bitand | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1869:27:1869:28 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1869:27:1869:33 | ... & ... | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1869:32:1869:33 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1870:13:1870:22 | vec2_bitor | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1870:26:1870:27 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1870:26:1870:32 | ... \| ... | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1870:31:1870:32 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1871:13:1871:23 | vec2_bitxor | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1871:27:1871:28 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1871:27:1871:33 | ... ^ ... | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1871:32:1871:33 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1872:13:1872:20 | vec2_shl | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1872:24:1872:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1872:24:1872:33 | ... << ... | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1872:30:1872:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1873:13:1873:20 | vec2_shr | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1873:24:1873:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1873:24:1873:33 | ... >> ... | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1873:30:1873:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1876:17:1876:34 | vec2_bitand_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1876:38:1876:39 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1877:9:1877:26 | vec2_bitand_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1877:9:1877:32 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1877:31:1877:32 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1879:17:1879:33 | vec2_bitor_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1879:37:1879:38 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1880:9:1880:25 | vec2_bitor_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1880:9:1880:31 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1880:30:1880:31 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1882:17:1882:34 | vec2_bitxor_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1882:38:1882:39 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1883:9:1883:26 | vec2_bitxor_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1883:9:1883:32 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1883:31:1883:32 | v2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1885:17:1885:31 | vec2_shl_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1885:35:1885:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1886:9:1886:23 | vec2_shl_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1886:9:1886:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1886:29:1886:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1888:17:1888:31 | vec2_shr_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1888:35:1888:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1889:9:1889:23 | vec2_shr_assign | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1889:9:1889:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1889:29:1889:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1892:13:1892:20 | vec2_neg | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1892:24:1892:26 | - ... | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1892:25:1892:26 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1893:13:1893:20 | vec2_not | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1893:24:1893:26 | ! ... | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1893:25:1893:26 | v1 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1896:13:1896:24 | default_vec2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1896:28:1896:45 | ...::default(...) | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1897:13:1897:26 | vec2_zero_plus | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1897:30:1897:48 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1897:30:1897:63 | ... + ... | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1897:40:1897:40 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1897:40:1897:40 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1897:46:1897:46 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1897:46:1897:46 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1897:52:1897:63 | default_vec2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1901:13:1901:24 | default_vec2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1901:28:1901:45 | ...::default(...) | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1902:13:1902:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | -| main.rs:1902:30:1902:48 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1902:30:1902:64 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1902:40:1902:40 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1902:40:1902:40 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1902:46:1902:46 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1902:46:1902:46 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1902:53:1902:64 | default_vec2 | | main.rs:1537:5:1542:5 | Vec2 | -| main.rs:1912:18:1912:21 | SelfParam | | main.rs:1909:5:1909:14 | S1 | -| main.rs:1915:25:1917:5 | { ... } | | main.rs:1909:5:1909:14 | S1 | -| main.rs:1916:9:1916:10 | S1 | | main.rs:1909:5:1909:14 | S1 | -| main.rs:1919:41:1921:5 | { ... } | | main.rs:1919:16:1919:39 | ImplTraitTypeRepr | -| main.rs:1920:9:1920:20 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1920:9:1920:20 | { ... } | Output | main.rs:1909:5:1909:14 | S1 | -| main.rs:1920:17:1920:18 | S1 | | main.rs:1909:5:1909:14 | S1 | -| main.rs:1929:13:1929:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | -| main.rs:1929:13:1929:42 | SelfParam | Ptr | file://:0:0:0:0 | & | -| main.rs:1929:13:1929:42 | SelfParam | Ptr.&T | main.rs:1923:5:1923:14 | S2 | -| main.rs:1930:13:1930:15 | _cx | | file://:0:0:0:0 | & | -| main.rs:1930:13:1930:15 | _cx | &T | {EXTERNAL LOCATION} | Context | -| main.rs:1931:44:1933:9 | { ... } | | {EXTERNAL LOCATION} | Poll | -| main.rs:1931:44:1933:9 | { ... } | T | main.rs:1909:5:1909:14 | S1 | -| main.rs:1932:13:1932:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | -| main.rs:1932:13:1932:38 | ...::Ready(...) | T | main.rs:1909:5:1909:14 | S1 | -| main.rs:1932:36:1932:37 | S1 | | main.rs:1909:5:1909:14 | S1 | -| main.rs:1936:41:1938:5 | { ... } | | main.rs:1936:16:1936:39 | ImplTraitTypeRepr | -| main.rs:1937:9:1937:10 | S2 | | main.rs:1923:5:1923:14 | S2 | -| main.rs:1937:9:1937:10 | S2 | | main.rs:1936:16:1936:39 | ImplTraitTypeRepr | -| main.rs:1941:9:1941:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1941:9:1941:12 | f1(...) | Output | main.rs:1909:5:1909:14 | S1 | -| main.rs:1941:9:1941:18 | await ... | | main.rs:1909:5:1909:14 | S1 | -| main.rs:1942:9:1942:12 | f2(...) | | main.rs:1919:16:1919:39 | ImplTraitTypeRepr | -| main.rs:1942:9:1942:18 | await ... | | main.rs:1909:5:1909:14 | S1 | -| main.rs:1943:9:1943:12 | f3(...) | | main.rs:1936:16:1936:39 | ImplTraitTypeRepr | -| main.rs:1943:9:1943:18 | await ... | | main.rs:1909:5:1909:14 | S1 | -| main.rs:1944:9:1944:10 | S2 | | main.rs:1923:5:1923:14 | S2 | -| main.rs:1944:9:1944:16 | await S2 | | main.rs:1909:5:1909:14 | S1 | -| main.rs:1945:13:1945:13 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1945:13:1945:13 | b | Output | main.rs:1909:5:1909:14 | S1 | -| main.rs:1945:17:1945:28 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1945:17:1945:28 | { ... } | Output | main.rs:1909:5:1909:14 | S1 | -| main.rs:1945:25:1945:26 | S1 | | main.rs:1909:5:1909:14 | S1 | -| main.rs:1946:9:1946:9 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1946:9:1946:9 | b | Output | main.rs:1909:5:1909:14 | S1 | -| main.rs:1946:9:1946:15 | await b | | main.rs:1909:5:1909:14 | S1 | -| main.rs:1957:15:1957:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1957:15:1957:19 | SelfParam | &T | main.rs:1956:5:1958:5 | Self [trait Trait1] | -| main.rs:1961:15:1961:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1961:15:1961:19 | SelfParam | &T | main.rs:1960:5:1962:5 | Self [trait Trait2] | -| main.rs:1965:15:1965:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1965:15:1965:19 | SelfParam | &T | main.rs:1951:5:1952:14 | S1 | -| main.rs:1969:15:1969:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1969:15:1969:19 | SelfParam | &T | main.rs:1951:5:1952:14 | S1 | -| main.rs:1972:37:1974:5 | { ... } | | main.rs:1972:16:1972:35 | ImplTraitTypeRepr | -| main.rs:1973:9:1973:10 | S1 | | main.rs:1951:5:1952:14 | S1 | -| main.rs:1973:9:1973:10 | S1 | | main.rs:1972:16:1972:35 | ImplTraitTypeRepr | -| main.rs:1977:18:1977:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1977:18:1977:22 | SelfParam | &T | main.rs:1976:5:1978:5 | Self [trait MyTrait] | -| main.rs:1981:18:1981:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1981:18:1981:22 | SelfParam | &T | main.rs:1951:5:1952:14 | S1 | -| main.rs:1981:31:1983:9 | { ... } | | main.rs:1953:5:1953:14 | S2 | -| main.rs:1982:13:1982:14 | S2 | | main.rs:1953:5:1953:14 | S2 | -| main.rs:1987:18:1987:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1987:18:1987:22 | SelfParam | | main.rs:1954:5:1954:22 | S3 | -| main.rs:1987:18:1987:22 | SelfParam | &T | main.rs:1954:5:1954:22 | S3 | -| main.rs:1987:18:1987:22 | SelfParam | &T.T3 | main.rs:1986:10:1986:17 | T | -| main.rs:1987:30:1990:9 | { ... } | | main.rs:1986:10:1986:17 | T | -| main.rs:1988:17:1988:21 | S3(...) | | file://:0:0:0:0 | & | -| main.rs:1988:17:1988:21 | S3(...) | | main.rs:1954:5:1954:22 | S3 | -| main.rs:1988:17:1988:21 | S3(...) | &T | main.rs:1954:5:1954:22 | S3 | -| main.rs:1988:17:1988:21 | S3(...) | &T.T3 | main.rs:1986:10:1986:17 | T | -| main.rs:1988:25:1988:28 | self | | file://:0:0:0:0 | & | -| main.rs:1988:25:1988:28 | self | | main.rs:1954:5:1954:22 | S3 | -| main.rs:1988:25:1988:28 | self | &T | main.rs:1954:5:1954:22 | S3 | -| main.rs:1988:25:1988:28 | self | &T.T3 | main.rs:1986:10:1986:17 | T | -| main.rs:1989:13:1989:21 | t.clone() | | main.rs:1986:10:1986:17 | T | -| main.rs:1993:45:1995:5 | { ... } | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | -| main.rs:1994:9:1994:10 | S1 | | main.rs:1951:5:1952:14 | S1 | -| main.rs:1994:9:1994:10 | S1 | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | -| main.rs:1997:41:1997:41 | t | | main.rs:1997:26:1997:38 | B | -| main.rs:1997:52:1999:5 | { ... } | | main.rs:1997:23:1997:23 | A | -| main.rs:1998:9:1998:9 | t | | main.rs:1997:26:1997:38 | B | -| main.rs:1998:9:1998:17 | t.get_a() | | main.rs:1997:23:1997:23 | A | -| main.rs:2001:34:2001:34 | x | | main.rs:2001:24:2001:31 | T | -| main.rs:2001:59:2003:5 | { ... } | | main.rs:2001:43:2001:57 | ImplTraitTypeRepr | -| main.rs:2001:59:2003:5 | { ... } | impl(T) | main.rs:2001:24:2001:31 | T | -| main.rs:2002:9:2002:13 | S3(...) | | main.rs:1954:5:1954:22 | S3 | -| main.rs:2002:9:2002:13 | S3(...) | | main.rs:2001:43:2001:57 | ImplTraitTypeRepr | -| main.rs:2002:9:2002:13 | S3(...) | T3 | main.rs:2001:24:2001:31 | T | -| main.rs:2002:9:2002:13 | S3(...) | impl(T) | main.rs:2001:24:2001:31 | T | -| main.rs:2002:12:2002:12 | x | | main.rs:2001:24:2001:31 | T | -| main.rs:2005:34:2005:34 | x | | main.rs:2005:24:2005:31 | T | -| main.rs:2005:67:2007:5 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2005:67:2007:5 | { ... } | T | main.rs:2005:50:2005:64 | ImplTraitTypeRepr | -| main.rs:2005:67:2007:5 | { ... } | T.impl(T) | main.rs:2005:24:2005:31 | T | -| main.rs:2006:9:2006:19 | Some(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2006:9:2006:19 | Some(...) | T | main.rs:1954:5:1954:22 | S3 | -| main.rs:2006:9:2006:19 | Some(...) | T | main.rs:2005:50:2005:64 | ImplTraitTypeRepr | -| main.rs:2006:9:2006:19 | Some(...) | T.T3 | main.rs:2005:24:2005:31 | T | -| main.rs:2006:9:2006:19 | Some(...) | T.impl(T) | main.rs:2005:24:2005:31 | T | -| main.rs:2006:14:2006:18 | S3(...) | | main.rs:1954:5:1954:22 | S3 | -| main.rs:2006:14:2006:18 | S3(...) | | main.rs:2005:50:2005:64 | ImplTraitTypeRepr | -| main.rs:2006:14:2006:18 | S3(...) | T3 | main.rs:2005:24:2005:31 | T | -| main.rs:2006:14:2006:18 | S3(...) | impl(T) | main.rs:2005:24:2005:31 | T | -| main.rs:2006:17:2006:17 | x | | main.rs:2005:24:2005:31 | T | -| main.rs:2009:34:2009:34 | x | | main.rs:2009:24:2009:31 | T | -| main.rs:2009:78:2011:5 | { ... } | | file://:0:0:0:0 | (T_2) | -| main.rs:2009:78:2011:5 | { ... } | 0(2) | main.rs:2009:44:2009:58 | ImplTraitTypeRepr | -| main.rs:2009:78:2011:5 | { ... } | 0(2).impl(T) | main.rs:2009:24:2009:31 | T | -| main.rs:2009:78:2011:5 | { ... } | 1(2) | main.rs:2009:61:2009:75 | ImplTraitTypeRepr | -| main.rs:2009:78:2011:5 | { ... } | 1(2).impl(T) | main.rs:2009:24:2009:31 | T | -| main.rs:2010:9:2010:30 | TupleExpr | | file://:0:0:0:0 | (T_2) | -| main.rs:2010:9:2010:30 | TupleExpr | 0(2) | main.rs:1954:5:1954:22 | S3 | -| main.rs:2010:9:2010:30 | TupleExpr | 0(2) | main.rs:2009:44:2009:58 | ImplTraitTypeRepr | -| main.rs:2010:9:2010:30 | TupleExpr | 0(2).T3 | main.rs:2009:24:2009:31 | T | -| main.rs:2010:9:2010:30 | TupleExpr | 0(2).impl(T) | main.rs:2009:24:2009:31 | T | -| main.rs:2010:9:2010:30 | TupleExpr | 1(2) | main.rs:1954:5:1954:22 | S3 | -| main.rs:2010:9:2010:30 | TupleExpr | 1(2) | main.rs:2009:61:2009:75 | ImplTraitTypeRepr | -| main.rs:2010:9:2010:30 | TupleExpr | 1(2).T3 | main.rs:2009:24:2009:31 | T | -| main.rs:2010:9:2010:30 | TupleExpr | 1(2).impl(T) | main.rs:2009:24:2009:31 | T | -| main.rs:2010:10:2010:22 | S3(...) | | main.rs:1954:5:1954:22 | S3 | -| main.rs:2010:10:2010:22 | S3(...) | | main.rs:2009:44:2009:58 | ImplTraitTypeRepr | -| main.rs:2010:10:2010:22 | S3(...) | T3 | main.rs:2009:24:2009:31 | T | -| main.rs:2010:10:2010:22 | S3(...) | impl(T) | main.rs:2009:24:2009:31 | T | -| main.rs:2010:13:2010:13 | x | | main.rs:2009:24:2009:31 | T | -| main.rs:2010:13:2010:21 | x.clone() | | main.rs:2009:24:2009:31 | T | -| main.rs:2010:25:2010:29 | S3(...) | | main.rs:1954:5:1954:22 | S3 | -| main.rs:2010:25:2010:29 | S3(...) | | main.rs:2009:61:2009:75 | ImplTraitTypeRepr | -| main.rs:2010:25:2010:29 | S3(...) | T3 | main.rs:2009:24:2009:31 | T | -| main.rs:2010:25:2010:29 | S3(...) | impl(T) | main.rs:2009:24:2009:31 | T | -| main.rs:2010:28:2010:28 | x | | main.rs:2009:24:2009:31 | T | -| main.rs:2013:26:2013:26 | t | | main.rs:2013:29:2013:43 | ImplTraitTypeRepr | -| main.rs:2013:51:2015:5 | { ... } | | main.rs:2013:23:2013:23 | A | -| main.rs:2014:9:2014:9 | t | | main.rs:2013:29:2013:43 | ImplTraitTypeRepr | -| main.rs:2014:9:2014:17 | t.get_a() | | main.rs:2013:23:2013:23 | A | -| main.rs:2018:13:2018:13 | x | | main.rs:1972:16:1972:35 | ImplTraitTypeRepr | -| main.rs:2018:17:2018:20 | f1(...) | | main.rs:1972:16:1972:35 | ImplTraitTypeRepr | -| main.rs:2019:9:2019:9 | x | | main.rs:1972:16:1972:35 | ImplTraitTypeRepr | -| main.rs:2020:9:2020:9 | x | | main.rs:1972:16:1972:35 | ImplTraitTypeRepr | -| main.rs:2021:13:2021:13 | a | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | -| main.rs:2021:17:2021:32 | get_a_my_trait(...) | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | -| main.rs:2022:13:2022:13 | b | | main.rs:1953:5:1953:14 | S2 | -| main.rs:2022:17:2022:33 | uses_my_trait1(...) | | main.rs:1953:5:1953:14 | S2 | -| main.rs:2022:32:2022:32 | a | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | -| main.rs:2023:13:2023:13 | a | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | -| main.rs:2023:17:2023:32 | get_a_my_trait(...) | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | -| main.rs:2024:13:2024:13 | c | | main.rs:1953:5:1953:14 | S2 | -| main.rs:2024:17:2024:33 | uses_my_trait2(...) | | main.rs:1953:5:1953:14 | S2 | -| main.rs:2024:32:2024:32 | a | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | -| main.rs:2025:13:2025:13 | d | | main.rs:1953:5:1953:14 | S2 | -| main.rs:2025:17:2025:34 | uses_my_trait2(...) | | main.rs:1953:5:1953:14 | S2 | -| main.rs:2025:32:2025:33 | S1 | | main.rs:1951:5:1952:14 | S1 | -| main.rs:2026:13:2026:13 | e | | main.rs:1951:5:1952:14 | S1 | -| main.rs:2026:17:2026:35 | get_a_my_trait2(...) | | main.rs:2001:43:2001:57 | ImplTraitTypeRepr | -| main.rs:2026:17:2026:35 | get_a_my_trait2(...) | impl(T) | main.rs:1951:5:1952:14 | S1 | -| main.rs:2026:17:2026:43 | ... .get_a() | | main.rs:1951:5:1952:14 | S1 | -| main.rs:2026:33:2026:34 | S1 | | main.rs:1951:5:1952:14 | S1 | -| main.rs:2029:13:2029:13 | f | | main.rs:1951:5:1952:14 | S1 | -| main.rs:2029:17:2029:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2029:17:2029:35 | get_a_my_trait3(...) | T | main.rs:2005:50:2005:64 | ImplTraitTypeRepr | -| main.rs:2029:17:2029:35 | get_a_my_trait3(...) | T.impl(T) | main.rs:1951:5:1952:14 | S1 | -| main.rs:2029:17:2029:44 | ... .unwrap() | | main.rs:2005:50:2005:64 | ImplTraitTypeRepr | -| main.rs:2029:17:2029:44 | ... .unwrap() | impl(T) | main.rs:1951:5:1952:14 | S1 | -| main.rs:2029:17:2029:52 | ... .get_a() | | main.rs:1951:5:1952:14 | S1 | -| main.rs:2029:33:2029:34 | S1 | | main.rs:1951:5:1952:14 | S1 | -| main.rs:2030:13:2030:13 | g | | main.rs:1951:5:1952:14 | S1 | -| main.rs:2030:17:2030:35 | get_a_my_trait4(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2030:17:2030:35 | get_a_my_trait4(...) | 0(2) | main.rs:2009:44:2009:58 | ImplTraitTypeRepr | -| main.rs:2030:17:2030:35 | get_a_my_trait4(...) | 0(2).impl(T) | main.rs:1951:5:1952:14 | S1 | -| main.rs:2030:17:2030:35 | get_a_my_trait4(...) | 1(2) | main.rs:2009:61:2009:75 | ImplTraitTypeRepr | -| main.rs:2030:17:2030:35 | get_a_my_trait4(...) | 1(2).impl(T) | main.rs:1951:5:1952:14 | S1 | -| main.rs:2030:17:2030:37 | ... .0 | | main.rs:2009:44:2009:58 | ImplTraitTypeRepr | -| main.rs:2030:17:2030:37 | ... .0 | impl(T) | main.rs:1951:5:1952:14 | S1 | -| main.rs:2030:17:2030:45 | ... .get_a() | | main.rs:1951:5:1952:14 | S1 | -| main.rs:2030:33:2030:34 | S1 | | main.rs:1951:5:1952:14 | S1 | -| main.rs:2041:16:2041:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2041:16:2041:20 | SelfParam | &T | main.rs:2037:5:2038:13 | S | -| main.rs:2041:31:2043:9 | { ... } | | main.rs:2037:5:2038:13 | S | -| main.rs:2042:13:2042:13 | S | | main.rs:2037:5:2038:13 | S | -| main.rs:2052:26:2054:9 | { ... } | | main.rs:2046:5:2049:5 | MyVec | -| main.rs:2052:26:2054:9 | { ... } | T | main.rs:2051:10:2051:10 | T | -| main.rs:2053:13:2053:38 | MyVec {...} | | main.rs:2046:5:2049:5 | MyVec | -| main.rs:2053:13:2053:38 | MyVec {...} | T | main.rs:2051:10:2051:10 | T | -| main.rs:2053:27:2053:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2053:27:2053:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2053:27:2053:36 | ...::new(...) | T | main.rs:2051:10:2051:10 | T | -| main.rs:2056:17:2056:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2056:17:2056:25 | SelfParam | &T | main.rs:2046:5:2049:5 | MyVec | -| main.rs:2056:17:2056:25 | SelfParam | &T.T | main.rs:2051:10:2051:10 | T | -| main.rs:2056:28:2056:32 | value | | main.rs:2051:10:2051:10 | T | -| main.rs:2057:13:2057:16 | self | | file://:0:0:0:0 | & | -| main.rs:2057:13:2057:16 | self | &T | main.rs:2046:5:2049:5 | MyVec | -| main.rs:2057:13:2057:16 | self | &T.T | main.rs:2051:10:2051:10 | T | -| main.rs:2057:13:2057:21 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:2057:13:2057:21 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:2057:13:2057:21 | self.data | T | main.rs:2051:10:2051:10 | T | -| main.rs:2057:28:2057:32 | value | | main.rs:2051:10:2051:10 | T | -| main.rs:2065:18:2065:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2065:18:2065:22 | SelfParam | &T | main.rs:2046:5:2049:5 | MyVec | -| main.rs:2065:18:2065:22 | SelfParam | &T.T | main.rs:2061:10:2061:10 | T | -| main.rs:2065:25:2065:29 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2065:56:2067:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:2065:56:2067:9 | { ... } | &T | main.rs:2061:10:2061:10 | T | -| main.rs:2066:13:2066:29 | &... | | file://:0:0:0:0 | & | -| main.rs:2066:13:2066:29 | &... | &T | main.rs:2061:10:2061:10 | T | -| main.rs:2066:14:2066:17 | self | | file://:0:0:0:0 | & | -| main.rs:2066:14:2066:17 | self | &T | main.rs:2046:5:2049:5 | MyVec | -| main.rs:2066:14:2066:17 | self | &T.T | main.rs:2061:10:2061:10 | T | -| main.rs:2066:14:2066:22 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:2066:14:2066:22 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:2066:14:2066:22 | self.data | T | main.rs:2061:10:2061:10 | T | -| main.rs:2066:14:2066:29 | ...[index] | | main.rs:2061:10:2061:10 | T | -| main.rs:2066:24:2066:28 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2070:22:2070:26 | slice | | file://:0:0:0:0 | & | -| main.rs:2070:22:2070:26 | slice | &T | file://:0:0:0:0 | [] | -| main.rs:2070:22:2070:26 | slice | &T.[T] | main.rs:2037:5:2038:13 | S | -| main.rs:2071:13:2071:13 | x | | main.rs:2037:5:2038:13 | S | -| main.rs:2071:17:2071:21 | slice | | file://:0:0:0:0 | & | -| main.rs:2071:17:2071:21 | slice | &T | file://:0:0:0:0 | [] | -| main.rs:2071:17:2071:21 | slice | &T.[T] | main.rs:2037:5:2038:13 | S | -| main.rs:2071:17:2071:24 | slice[0] | | main.rs:2037:5:2038:13 | S | -| main.rs:2071:17:2071:30 | ... .foo() | | main.rs:2037:5:2038:13 | S | -| main.rs:2071:23:2071:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2075:17:2075:19 | vec | | main.rs:2046:5:2049:5 | MyVec | -| main.rs:2075:17:2075:19 | vec | T | main.rs:2037:5:2038:13 | S | -| main.rs:2075:23:2075:34 | ...::new(...) | | main.rs:2046:5:2049:5 | MyVec | -| main.rs:2075:23:2075:34 | ...::new(...) | T | main.rs:2037:5:2038:13 | S | -| main.rs:2076:9:2076:11 | vec | | main.rs:2046:5:2049:5 | MyVec | -| main.rs:2076:9:2076:11 | vec | T | main.rs:2037:5:2038:13 | S | -| main.rs:2076:18:2076:18 | S | | main.rs:2037:5:2038:13 | S | -| main.rs:2077:9:2077:11 | vec | | main.rs:2046:5:2049:5 | MyVec | -| main.rs:2077:9:2077:11 | vec | T | main.rs:2037:5:2038:13 | S | -| main.rs:2077:9:2077:14 | vec[0] | | main.rs:2037:5:2038:13 | S | -| main.rs:2077:9:2077:20 | ... .foo() | | main.rs:2037:5:2038:13 | S | -| main.rs:2077:13:2077:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2077:13:2077:13 | 0 | | {EXTERNAL LOCATION} | usize | -| main.rs:2079:13:2079:14 | xs | | file://:0:0:0:0 | [] | -| main.rs:2079:13:2079:14 | xs | [T;...] | main.rs:2037:5:2038:13 | S | -| main.rs:2079:21:2079:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2079:26:2079:28 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2079:26:2079:28 | [...] | [T;...] | main.rs:2037:5:2038:13 | S | -| main.rs:2079:27:2079:27 | S | | main.rs:2037:5:2038:13 | S | -| main.rs:2080:13:2080:13 | x | | main.rs:2037:5:2038:13 | S | -| main.rs:2080:17:2080:18 | xs | | file://:0:0:0:0 | [] | -| main.rs:2080:17:2080:18 | xs | [T;...] | main.rs:2037:5:2038:13 | S | -| main.rs:2080:17:2080:21 | xs[0] | | main.rs:2037:5:2038:13 | S | -| main.rs:2080:17:2080:27 | ... .foo() | | main.rs:2037:5:2038:13 | S | -| main.rs:2080:20:2080:20 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2082:23:2082:25 | &xs | | file://:0:0:0:0 | & | -| main.rs:2082:23:2082:25 | &xs | &T | file://:0:0:0:0 | [] | -| main.rs:2082:23:2082:25 | &xs | &T | file://:0:0:0:0 | [] | -| main.rs:2082:23:2082:25 | &xs | &T.[T;...] | main.rs:2037:5:2038:13 | S | -| main.rs:2082:23:2082:25 | &xs | &T.[T] | main.rs:2037:5:2038:13 | S | -| main.rs:2082:24:2082:25 | xs | | file://:0:0:0:0 | [] | -| main.rs:2082:24:2082:25 | xs | [T;...] | main.rs:2037:5:2038:13 | S | -| main.rs:2088:13:2088:13 | x | | {EXTERNAL LOCATION} | String | -| main.rs:2088:17:2088:46 | MacroExpr | | {EXTERNAL LOCATION} | String | -| main.rs:2088:25:2088:35 | "Hello, {}" | | file://:0:0:0:0 | & | -| main.rs:2088:25:2088:35 | "Hello, {}" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2088:25:2088:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2088:25:2088:45 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2088:25:2088:45 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2088:25:2088:45 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2088:25:2088:45 | { ... } | | {EXTERNAL LOCATION} | String | -| main.rs:2088:38:2088:45 | "World!" | | file://:0:0:0:0 | & | -| main.rs:2088:38:2088:45 | "World!" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2097:19:2097:22 | SelfParam | | main.rs:2093:5:2098:5 | Self [trait MyAdd] | -| main.rs:2097:25:2097:27 | rhs | | main.rs:2093:17:2093:26 | Rhs | -| main.rs:2104:19:2104:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2104:25:2104:29 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2104:45:2106:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2105:13:2105:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2113:19:2113:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2113:25:2113:29 | value | | file://:0:0:0:0 | & | -| main.rs:2113:25:2113:29 | value | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2113:46:2115:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2114:13:2114:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2114:14:2114:18 | value | | file://:0:0:0:0 | & | -| main.rs:2114:14:2114:18 | value | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2122:19:2122:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2122:25:2122:29 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2122:46:2128:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2123:13:2127:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2123:13:2127:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | -| main.rs:2123:16:2123:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2123:22:2125:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2123:22:2125:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2124:17:2124:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2124:17:2124:17 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2125:20:2127:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2125:20:2127:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2126:17:2126:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2126:17:2126:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2137:19:2137:22 | SelfParam | | main.rs:2131:5:2131:19 | S | -| main.rs:2137:19:2137:22 | SelfParam | T | main.rs:2133:10:2133:17 | T | -| main.rs:2137:25:2137:29 | other | | main.rs:2131:5:2131:19 | S | -| main.rs:2137:25:2137:29 | other | T | main.rs:2133:10:2133:17 | T | -| main.rs:2137:54:2139:9 | { ... } | | main.rs:2131:5:2131:19 | S | -| main.rs:2137:54:2139:9 | { ... } | T | main.rs:2094:9:2094:20 | Output | -| main.rs:2138:13:2138:39 | S(...) | | main.rs:2131:5:2131:19 | S | -| main.rs:2138:13:2138:39 | S(...) | T | main.rs:2094:9:2094:20 | Output | -| main.rs:2138:15:2138:22 | (...) | | main.rs:2133:10:2133:17 | T | -| main.rs:2138:15:2138:38 | ... .my_add(...) | | main.rs:2094:9:2094:20 | Output | -| main.rs:2138:16:2138:19 | self | | main.rs:2131:5:2131:19 | S | -| main.rs:2138:16:2138:19 | self | T | main.rs:2133:10:2133:17 | T | -| main.rs:2138:16:2138:21 | self.0 | | main.rs:2133:10:2133:17 | T | -| main.rs:2138:31:2138:35 | other | | main.rs:2131:5:2131:19 | S | -| main.rs:2138:31:2138:35 | other | T | main.rs:2133:10:2133:17 | T | -| main.rs:2138:31:2138:37 | other.0 | | main.rs:2093:5:2098:5 | Self [trait MyAdd] | -| main.rs:2138:31:2138:37 | other.0 | | main.rs:2133:10:2133:17 | T | -| main.rs:2146:19:2146:22 | SelfParam | | main.rs:2131:5:2131:19 | S | -| main.rs:2146:19:2146:22 | SelfParam | T | main.rs:2142:10:2142:17 | T | -| main.rs:2146:25:2146:29 | other | | main.rs:2142:10:2142:17 | T | -| main.rs:2146:51:2148:9 | { ... } | | main.rs:2131:5:2131:19 | S | -| main.rs:2146:51:2148:9 | { ... } | T | main.rs:2094:9:2094:20 | Output | -| main.rs:2147:13:2147:37 | S(...) | | main.rs:2131:5:2131:19 | S | -| main.rs:2147:13:2147:37 | S(...) | T | main.rs:2094:9:2094:20 | Output | -| main.rs:2147:15:2147:22 | (...) | | main.rs:2142:10:2142:17 | T | -| main.rs:2147:15:2147:36 | ... .my_add(...) | | main.rs:2094:9:2094:20 | Output | -| main.rs:2147:16:2147:19 | self | | main.rs:2131:5:2131:19 | S | -| main.rs:2147:16:2147:19 | self | T | main.rs:2142:10:2142:17 | T | -| main.rs:2147:16:2147:21 | self.0 | | main.rs:2142:10:2142:17 | T | -| main.rs:2147:31:2147:35 | other | | main.rs:2142:10:2142:17 | T | -| main.rs:2158:19:2158:22 | SelfParam | | main.rs:2131:5:2131:19 | S | -| main.rs:2158:19:2158:22 | SelfParam | T | main.rs:2151:14:2151:14 | T | -| main.rs:2158:25:2158:29 | other | | file://:0:0:0:0 | & | -| main.rs:2158:25:2158:29 | other | &T | main.rs:2151:14:2151:14 | T | -| main.rs:2158:55:2160:9 | { ... } | | main.rs:2131:5:2131:19 | S | -| main.rs:2159:13:2159:37 | S(...) | | main.rs:2131:5:2131:19 | S | -| main.rs:2159:15:2159:22 | (...) | | main.rs:2151:14:2151:14 | T | -| main.rs:2159:16:2159:19 | self | | main.rs:2131:5:2131:19 | S | -| main.rs:2159:16:2159:19 | self | T | main.rs:2151:14:2151:14 | T | -| main.rs:2159:16:2159:21 | self.0 | | main.rs:2151:14:2151:14 | T | -| main.rs:2159:31:2159:35 | other | | file://:0:0:0:0 | & | -| main.rs:2159:31:2159:35 | other | &T | main.rs:2151:14:2151:14 | T | -| main.rs:2165:20:2165:24 | value | | main.rs:2163:18:2163:18 | T | -| main.rs:2170:20:2170:24 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2170:40:2172:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2171:13:2171:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2177:20:2177:24 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2177:41:2183:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2178:13:2182:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2178:13:2182:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | -| main.rs:2178:16:2178:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2178:22:2180:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2178:22:2180:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2179:17:2179:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2179:17:2179:17 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2180:20:2182:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2180:20:2182:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2181:17:2181:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2181:17:2181:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2188:21:2188:25 | value | | main.rs:2186:19:2186:19 | T | -| main.rs:2188:31:2188:31 | x | | main.rs:2186:5:2189:5 | Self [trait MyFrom2] | -| main.rs:2193:21:2193:25 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2193:33:2193:33 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2193:48:2195:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2194:13:2194:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2200:21:2200:25 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2200:34:2200:34 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2200:49:2206:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2201:13:2205:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2201:16:2201:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2201:22:2203:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2202:17:2202:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2203:20:2205:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2204:17:2204:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2211:15:2211:15 | x | | main.rs:2209:5:2215:5 | Self [trait MySelfTrait] | -| main.rs:2214:15:2214:15 | x | | main.rs:2209:5:2215:5 | Self [trait MySelfTrait] | -| main.rs:2219:15:2219:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2219:31:2221:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2220:13:2220:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2220:13:2220:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2220:17:2220:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2224:15:2224:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2224:32:2226:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2225:13:2225:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2225:13:2225:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2225:17:2225:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2231:15:2231:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2231:31:2233:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2232:13:2232:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2232:13:2232:13 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2236:15:2236:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2236:32:2238:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2237:13:2237:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2242:13:2242:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2242:22:2242:23 | 73 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2242:22:2242:23 | 73 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2243:9:2243:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2243:9:2243:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2243:18:2243:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2244:9:2244:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2244:9:2244:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2244:18:2244:22 | &5i64 | | file://:0:0:0:0 | & | -| main.rs:2244:18:2244:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2244:19:2244:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2245:9:2245:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2245:9:2245:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2245:18:2245:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2247:9:2247:15 | S(...) | | main.rs:2131:5:2131:19 | S | -| main.rs:2247:9:2247:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2247:9:2247:31 | ... .my_add(...) | | main.rs:2131:5:2131:19 | S | -| main.rs:2247:11:2247:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2247:24:2247:30 | S(...) | | main.rs:2131:5:2131:19 | S | -| main.rs:2247:24:2247:30 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2247:26:2247:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2248:9:2248:15 | S(...) | | main.rs:2131:5:2131:19 | S | -| main.rs:2248:9:2248:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2248:11:2248:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2248:24:2248:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2249:9:2249:15 | S(...) | | main.rs:2131:5:2131:19 | S | -| main.rs:2249:9:2249:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2249:9:2249:29 | ... .my_add(...) | | main.rs:2131:5:2131:19 | S | -| main.rs:2249:11:2249:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2249:24:2249:28 | &3i64 | | file://:0:0:0:0 | & | -| main.rs:2249:24:2249:28 | &3i64 | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2249:25:2249:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2251:13:2251:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2251:17:2251:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2251:30:2251:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2252:13:2252:13 | y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2252:17:2252:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2252:30:2252:33 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2253:13:2253:13 | z | | {EXTERNAL LOCATION} | i64 | -| main.rs:2253:22:2253:43 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2253:38:2253:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2254:9:2254:34 | ...::my_from2(...) | | file://:0:0:0:0 | () | -| main.rs:2254:23:2254:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2254:30:2254:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2255:9:2255:33 | ...::my_from2(...) | | file://:0:0:0:0 | () | -| main.rs:2255:23:2255:26 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2255:29:2255:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2256:9:2256:38 | ...::my_from2(...) | | file://:0:0:0:0 | () | -| main.rs:2256:27:2256:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2256:34:2256:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2258:9:2258:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2258:17:2258:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2259:9:2259:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2259:17:2259:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2260:9:2260:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2260:18:2260:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2261:9:2261:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2261:18:2261:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2262:9:2262:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2262:25:2262:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2263:9:2263:30 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2263:25:2263:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2264:9:2264:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2264:25:2264:28 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2265:9:2265:29 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2265:25:2265:28 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2273:26:2275:9 | { ... } | | main.rs:2270:5:2270:24 | MyCallable | -| main.rs:2274:13:2274:25 | MyCallable {...} | | main.rs:2270:5:2270:24 | MyCallable | -| main.rs:2277:17:2277:21 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2277:17:2277:21 | SelfParam | &T | main.rs:2270:5:2270:24 | MyCallable | -| main.rs:2277:31:2279:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2278:13:2278:13 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2278:13:2278:13 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2285:13:2285:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2285:18:2285:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2285:18:2285:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2285:19:2285:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2285:22:2285:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2285:25:2285:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2286:18:2286:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2286:18:2286:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2286:18:2286:41 | ... .map(...) | | file://:0:0:0:0 | [] | -| main.rs:2286:19:2286:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2286:22:2286:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2286:25:2286:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2286:32:2286:40 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:2286:32:2286:40 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | -| main.rs:2286:40:2286:40 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2287:13:2287:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2287:13:2287:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2287:18:2287:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2287:18:2287:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2287:18:2287:38 | ... .into_iter() | | {EXTERNAL LOCATION} | IntoIter | -| main.rs:2287:18:2287:38 | ... .into_iter() | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2287:19:2287:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2287:22:2287:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2287:25:2287:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2289:13:2289:17 | vals1 | | file://:0:0:0:0 | [] | -| main.rs:2289:13:2289:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2289:13:2289:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2289:21:2289:31 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2289:21:2289:31 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2289:21:2289:31 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2289:22:2289:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2289:27:2289:27 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2289:27:2289:27 | 2 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2289:30:2289:30 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2289:30:2289:30 | 3 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2290:13:2290:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2290:13:2290:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2290:18:2290:22 | vals1 | | file://:0:0:0:0 | [] | -| main.rs:2290:18:2290:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2290:18:2290:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2292:13:2292:17 | vals2 | | file://:0:0:0:0 | [] | -| main.rs:2292:13:2292:17 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2292:21:2292:29 | [1u16; 3] | | file://:0:0:0:0 | [] | -| main.rs:2292:21:2292:29 | [1u16; 3] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2292:22:2292:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2292:28:2292:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2293:13:2293:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2293:18:2293:22 | vals2 | | file://:0:0:0:0 | [] | -| main.rs:2293:18:2293:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2295:13:2295:17 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2295:13:2295:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2295:26:2295:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2295:31:2295:39 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2295:31:2295:39 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2295:31:2295:39 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2295:32:2295:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2295:32:2295:32 | 1 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2295:35:2295:35 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2295:35:2295:35 | 2 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2295:38:2295:38 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2295:38:2295:38 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2296:13:2296:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2296:18:2296:22 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2296:18:2296:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2298:13:2298:17 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2298:13:2298:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2298:26:2298:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2298:31:2298:36 | [1; 3] | | file://:0:0:0:0 | [] | -| main.rs:2298:31:2298:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2298:31:2298:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2298:32:2298:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2298:32:2298:32 | 1 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2298:35:2298:35 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2299:13:2299:13 | u | | {EXTERNAL LOCATION} | u64 | -| main.rs:2299:18:2299:22 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2299:18:2299:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2301:17:2301:24 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2301:17:2301:24 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2301:17:2301:24 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2301:28:2301:48 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2301:28:2301:48 | [...] | [T;...] | file://:0:0:0:0 | & | -| main.rs:2301:28:2301:48 | [...] | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2301:29:2301:33 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2301:29:2301:33 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2301:36:2301:40 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2301:36:2301:40 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2301:43:2301:47 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2301:43:2301:47 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2302:13:2302:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2302:13:2302:13 | s | | file://:0:0:0:0 | & | -| main.rs:2302:13:2302:13 | s | &T | file://:0:0:0:0 | & | -| main.rs:2302:13:2302:13 | s | &T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2302:18:2302:26 | &strings1 | | file://:0:0:0:0 | & | -| main.rs:2302:18:2302:26 | &strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2302:18:2302:26 | &strings1 | &T.[T;...] | file://:0:0:0:0 | & | -| main.rs:2302:18:2302:26 | &strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2302:19:2302:26 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2302:19:2302:26 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2302:19:2302:26 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2303:13:2303:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2303:13:2303:13 | s | | file://:0:0:0:0 | & | -| main.rs:2303:13:2303:13 | s | &T | file://:0:0:0:0 | & | -| main.rs:2303:13:2303:13 | s | &T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2303:18:2303:30 | &mut strings1 | | file://:0:0:0:0 | & | -| main.rs:2303:18:2303:30 | &mut strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2303:18:2303:30 | &mut strings1 | &T.[T;...] | file://:0:0:0:0 | & | -| main.rs:2303:18:2303:30 | &mut strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2303:23:2303:30 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2303:23:2303:30 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2303:23:2303:30 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2304:13:2304:13 | s | | file://:0:0:0:0 | & | -| main.rs:2304:13:2304:13 | s | &T | {EXTERNAL LOCATION} | str | -| main.rs:2304:18:2304:25 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2304:18:2304:25 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2304:18:2304:25 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2306:13:2306:20 | strings2 | | file://:0:0:0:0 | [] | -| main.rs:2306:13:2306:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2307:9:2311:9 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2307:9:2311:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2308:13:2308:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2308:26:2308:30 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2308:26:2308:30 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2309:13:2309:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2309:26:2309:30 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2309:26:2309:30 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2310:13:2310:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2310:26:2310:30 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2310:26:2310:30 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2312:13:2312:13 | s | | {EXTERNAL LOCATION} | String | -| main.rs:2312:18:2312:25 | strings2 | | file://:0:0:0:0 | [] | -| main.rs:2312:18:2312:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2314:13:2314:20 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2314:13:2314:20 | strings3 | &T | file://:0:0:0:0 | [] | -| main.rs:2314:13:2314:20 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2315:9:2319:9 | &... | | file://:0:0:0:0 | & | -| main.rs:2315:9:2319:9 | &... | &T | file://:0:0:0:0 | [] | -| main.rs:2315:9:2319:9 | &... | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2315:10:2319:9 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2315:10:2319:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2316:13:2316:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2316:26:2316:30 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2316:26:2316:30 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2317:13:2317:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2317:26:2317:30 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2317:26:2317:30 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2318:13:2318:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2318:26:2318:30 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2318:26:2318:30 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2320:13:2320:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2320:13:2320:13 | s | | file://:0:0:0:0 | & | -| main.rs:2320:13:2320:13 | s | &T | {EXTERNAL LOCATION} | String | -| main.rs:2320:18:2320:25 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2320:18:2320:25 | strings3 | &T | file://:0:0:0:0 | [] | -| main.rs:2320:18:2320:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2322:13:2322:21 | callables | | file://:0:0:0:0 | [] | -| main.rs:2322:13:2322:21 | callables | [T;...] | main.rs:2270:5:2270:24 | MyCallable | -| main.rs:2322:25:2322:81 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2322:25:2322:81 | [...] | [T;...] | main.rs:2270:5:2270:24 | MyCallable | -| main.rs:2322:26:2322:42 | ...::new(...) | | main.rs:2270:5:2270:24 | MyCallable | -| main.rs:2322:45:2322:61 | ...::new(...) | | main.rs:2270:5:2270:24 | MyCallable | -| main.rs:2322:64:2322:80 | ...::new(...) | | main.rs:2270:5:2270:24 | MyCallable | -| main.rs:2323:13:2323:13 | c | | main.rs:2270:5:2270:24 | MyCallable | -| main.rs:2324:12:2324:20 | callables | | file://:0:0:0:0 | [] | -| main.rs:2324:12:2324:20 | callables | [T;...] | main.rs:2270:5:2270:24 | MyCallable | -| main.rs:2326:17:2326:22 | result | | {EXTERNAL LOCATION} | i64 | -| main.rs:2326:26:2326:26 | c | | main.rs:2270:5:2270:24 | MyCallable | -| main.rs:2326:26:2326:33 | c.call() | | {EXTERNAL LOCATION} | i64 | -| main.rs:2331:13:2331:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2331:13:2331:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2331:18:2331:18 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2331:18:2331:22 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2331:18:2331:22 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2331:21:2331:22 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2332:13:2332:13 | u | | {EXTERNAL LOCATION} | Range | -| main.rs:2332:13:2332:13 | u | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2332:13:2332:13 | u | Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2332:18:2332:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2332:18:2332:26 | [...] | [T;...] | {EXTERNAL LOCATION} | Range | -| main.rs:2332:18:2332:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2332:18:2332:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2332:19:2332:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2332:19:2332:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2332:19:2332:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2332:19:2332:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2332:24:2332:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2332:24:2332:25 | 10 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2333:13:2333:17 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2333:13:2333:17 | range | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2333:21:2333:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2333:21:2333:25 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2333:21:2333:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2333:24:2333:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2334:13:2334:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:1766:13:1766:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1766:24:1766:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1767:13:1767:16 | self | | file://:0:0:0:0 | & | +| main.rs:1767:13:1767:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1767:13:1767:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1767:13:1767:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1767:24:1767:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1773:16:1773:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1773:30:1778:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1774:13:1777:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1775:20:1775:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1775:21:1775:24 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1775:21:1775:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1776:20:1776:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1776:21:1776:24 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1776:21:1776:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1783:16:1783:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1783:30:1788:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1784:13:1787:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1785:20:1785:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1785:21:1785:24 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1785:21:1785:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1786:20:1786:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1786:21:1786:24 | self | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1786:21:1786:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1792:15:1792:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1792:15:1792:19 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1792:22:1792:26 | other | | file://:0:0:0:0 | & | +| main.rs:1792:22:1792:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1792:44:1794:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1793:13:1793:16 | self | | file://:0:0:0:0 | & | +| main.rs:1793:13:1793:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1793:13:1793:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1793:13:1793:29 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1793:13:1793:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1793:23:1793:27 | other | | file://:0:0:0:0 | & | +| main.rs:1793:23:1793:27 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1793:23:1793:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1793:34:1793:37 | self | | file://:0:0:0:0 | & | +| main.rs:1793:34:1793:37 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1793:34:1793:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1793:34:1793:50 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1793:44:1793:48 | other | | file://:0:0:0:0 | & | +| main.rs:1793:44:1793:48 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1793:44:1793:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1796:15:1796:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1796:15:1796:19 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1796:22:1796:26 | other | | file://:0:0:0:0 | & | +| main.rs:1796:22:1796:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1796:44:1798:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1797:13:1797:16 | self | | file://:0:0:0:0 | & | +| main.rs:1797:13:1797:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1797:13:1797:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1797:13:1797:29 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1797:13:1797:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1797:23:1797:27 | other | | file://:0:0:0:0 | & | +| main.rs:1797:23:1797:27 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1797:23:1797:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1797:34:1797:37 | self | | file://:0:0:0:0 | & | +| main.rs:1797:34:1797:37 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1797:34:1797:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1797:34:1797:50 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1797:44:1797:48 | other | | file://:0:0:0:0 | & | +| main.rs:1797:44:1797:48 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1797:44:1797:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1802:24:1802:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1802:24:1802:28 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1802:31:1802:35 | other | | file://:0:0:0:0 | & | +| main.rs:1802:31:1802:35 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1802:75:1804:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:1802:75:1804:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1803:13:1803:29 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1803:13:1803:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:1803:13:1803:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1803:14:1803:17 | self | | file://:0:0:0:0 | & | +| main.rs:1803:14:1803:17 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1803:14:1803:19 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1803:14:1803:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1803:23:1803:26 | self | | file://:0:0:0:0 | & | +| main.rs:1803:23:1803:26 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1803:23:1803:28 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1803:43:1803:62 | &... | | file://:0:0:0:0 | & | +| main.rs:1803:43:1803:62 | &... | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1803:44:1803:62 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1803:45:1803:49 | other | | file://:0:0:0:0 | & | +| main.rs:1803:45:1803:49 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1803:45:1803:51 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1803:45:1803:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1803:55:1803:59 | other | | file://:0:0:0:0 | & | +| main.rs:1803:55:1803:59 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1803:55:1803:61 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1806:15:1806:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1806:15:1806:19 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1806:22:1806:26 | other | | file://:0:0:0:0 | & | +| main.rs:1806:22:1806:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1806:44:1808:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1807:13:1807:16 | self | | file://:0:0:0:0 | & | +| main.rs:1807:13:1807:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1807:13:1807:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1807:13:1807:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1807:13:1807:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1807:22:1807:26 | other | | file://:0:0:0:0 | & | +| main.rs:1807:22:1807:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1807:22:1807:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1807:33:1807:36 | self | | file://:0:0:0:0 | & | +| main.rs:1807:33:1807:36 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1807:33:1807:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1807:33:1807:48 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1807:42:1807:46 | other | | file://:0:0:0:0 | & | +| main.rs:1807:42:1807:46 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1807:42:1807:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1810:15:1810:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1810:15:1810:19 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1810:22:1810:26 | other | | file://:0:0:0:0 | & | +| main.rs:1810:22:1810:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1810:44:1812:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1811:13:1811:16 | self | | file://:0:0:0:0 | & | +| main.rs:1811:13:1811:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1811:13:1811:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1811:13:1811:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1811:13:1811:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1811:23:1811:27 | other | | file://:0:0:0:0 | & | +| main.rs:1811:23:1811:27 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1811:23:1811:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1811:34:1811:37 | self | | file://:0:0:0:0 | & | +| main.rs:1811:34:1811:37 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1811:34:1811:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1811:34:1811:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1811:44:1811:48 | other | | file://:0:0:0:0 | & | +| main.rs:1811:44:1811:48 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1811:44:1811:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1814:15:1814:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1814:15:1814:19 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1814:22:1814:26 | other | | file://:0:0:0:0 | & | +| main.rs:1814:22:1814:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1814:44:1816:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1815:13:1815:16 | self | | file://:0:0:0:0 | & | +| main.rs:1815:13:1815:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1815:13:1815:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1815:13:1815:28 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1815:13:1815:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1815:22:1815:26 | other | | file://:0:0:0:0 | & | +| main.rs:1815:22:1815:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1815:22:1815:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1815:33:1815:36 | self | | file://:0:0:0:0 | & | +| main.rs:1815:33:1815:36 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1815:33:1815:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1815:33:1815:48 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1815:42:1815:46 | other | | file://:0:0:0:0 | & | +| main.rs:1815:42:1815:46 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1815:42:1815:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1818:15:1818:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1818:15:1818:19 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1818:22:1818:26 | other | | file://:0:0:0:0 | & | +| main.rs:1818:22:1818:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1818:44:1820:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1819:13:1819:16 | self | | file://:0:0:0:0 | & | +| main.rs:1819:13:1819:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1819:13:1819:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1819:13:1819:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1819:13:1819:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1819:23:1819:27 | other | | file://:0:0:0:0 | & | +| main.rs:1819:23:1819:27 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1819:23:1819:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1819:34:1819:37 | self | | file://:0:0:0:0 | & | +| main.rs:1819:34:1819:37 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1819:34:1819:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1819:34:1819:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1819:44:1819:48 | other | | file://:0:0:0:0 | & | +| main.rs:1819:44:1819:48 | other | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1819:44:1819:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1826:13:1826:18 | i64_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1826:22:1826:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1826:23:1826:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1826:23:1826:34 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1826:31:1826:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1827:13:1827:18 | i64_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1827:22:1827:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1827:23:1827:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1827:23:1827:34 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1827:31:1827:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1828:13:1828:18 | i64_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1828:22:1828:34 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1828:23:1828:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1828:23:1828:33 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1828:30:1828:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1829:13:1829:18 | i64_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1829:22:1829:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1829:23:1829:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1829:23:1829:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1829:31:1829:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1830:13:1830:18 | i64_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1830:22:1830:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1830:23:1830:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1830:23:1830:34 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1830:30:1830:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1831:13:1831:18 | i64_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1831:22:1831:37 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1831:23:1831:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1831:23:1831:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1831:32:1831:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1834:13:1834:19 | i64_add | | {EXTERNAL LOCATION} | i64 | +| main.rs:1834:23:1834:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1834:23:1834:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1834:31:1834:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1835:13:1835:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | +| main.rs:1835:23:1835:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1835:23:1835:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1835:31:1835:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1836:13:1836:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | +| main.rs:1836:23:1836:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1836:23:1836:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1836:31:1836:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1837:13:1837:19 | i64_div | | {EXTERNAL LOCATION} | i64 | +| main.rs:1837:23:1837:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1837:23:1837:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1837:31:1837:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1838:13:1838:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | +| main.rs:1838:23:1838:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1838:23:1838:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1838:31:1838:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1841:17:1841:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1841:34:1841:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1842:9:1842:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1842:9:1842:31 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1842:27:1842:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1844:17:1844:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1844:34:1844:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1845:9:1845:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1845:9:1845:31 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1845:27:1845:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1847:17:1847:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1847:34:1847:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1848:9:1848:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1848:9:1848:31 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1848:27:1848:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1850:17:1850:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1850:34:1850:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1851:9:1851:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1851:9:1851:31 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1851:27:1851:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1853:17:1853:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1853:34:1853:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1854:9:1854:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1854:9:1854:31 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1854:27:1854:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1857:13:1857:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | +| main.rs:1857:26:1857:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1857:26:1857:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1857:34:1857:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1858:13:1858:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1858:25:1858:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1858:25:1858:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1858:33:1858:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1859:13:1859:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1859:26:1859:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1859:26:1859:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1859:34:1859:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1860:13:1860:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | +| main.rs:1860:23:1860:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1860:23:1860:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1860:32:1860:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1861:13:1861:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | +| main.rs:1861:23:1861:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1861:23:1861:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1861:32:1861:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1864:17:1864:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1864:37:1864:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1865:9:1865:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1865:9:1865:34 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1865:30:1865:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1867:17:1867:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1867:36:1867:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1868:9:1868:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1868:9:1868:33 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1868:29:1868:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1870:17:1870:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1870:37:1870:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1871:9:1871:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1871:9:1871:34 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1871:30:1871:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1873:17:1873:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1873:34:1873:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1874:9:1874:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1874:9:1874:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1874:28:1874:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1876:17:1876:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1876:34:1876:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1877:9:1877:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1877:9:1877:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1877:28:1877:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1879:13:1879:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | +| main.rs:1879:23:1879:28 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1879:24:1879:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1880:13:1880:19 | i64_not | | {EXTERNAL LOCATION} | i64 | +| main.rs:1880:23:1880:28 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1880:24:1880:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1883:13:1883:14 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1883:18:1883:36 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1883:28:1883:28 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1883:28:1883:28 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1883:34:1883:34 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1883:34:1883:34 | 2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1884:13:1884:14 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1884:18:1884:36 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1884:28:1884:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1884:28:1884:28 | 3 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1884:34:1884:34 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1884:34:1884:34 | 4 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1887:13:1887:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1887:23:1887:24 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1887:23:1887:30 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1887:29:1887:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1888:13:1888:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1888:23:1888:24 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1888:23:1888:30 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1888:29:1888:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1889:13:1889:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1889:23:1889:24 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1889:23:1889:29 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1889:28:1889:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1890:13:1890:19 | vec2_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1890:23:1890:24 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1890:23:1890:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1890:29:1890:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1891:13:1891:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1891:23:1891:24 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1891:23:1891:29 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1891:28:1891:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1892:13:1892:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1892:23:1892:24 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1892:23:1892:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1892:29:1892:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1895:13:1895:20 | vec2_add | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1895:24:1895:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1895:24:1895:30 | ... + ... | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1895:29:1895:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1896:13:1896:20 | vec2_sub | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1896:24:1896:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1896:24:1896:30 | ... - ... | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1896:29:1896:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1897:13:1897:20 | vec2_mul | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1897:24:1897:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1897:24:1897:30 | ... * ... | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1897:29:1897:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1898:13:1898:20 | vec2_div | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1898:24:1898:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1898:24:1898:30 | ... / ... | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1898:29:1898:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1899:13:1899:20 | vec2_rem | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1899:24:1899:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1899:24:1899:30 | ... % ... | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1899:29:1899:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1902:17:1902:31 | vec2_add_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1902:35:1902:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1903:9:1903:23 | vec2_add_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1903:9:1903:29 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1903:28:1903:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1905:17:1905:31 | vec2_sub_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1905:35:1905:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1906:9:1906:23 | vec2_sub_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1906:9:1906:29 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1906:28:1906:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1908:17:1908:31 | vec2_mul_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1908:35:1908:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1909:9:1909:23 | vec2_mul_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1909:9:1909:29 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1909:28:1909:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1911:17:1911:31 | vec2_div_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1911:35:1911:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1912:9:1912:23 | vec2_div_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1912:9:1912:29 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1912:28:1912:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1914:17:1914:31 | vec2_rem_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1914:35:1914:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1915:9:1915:23 | vec2_rem_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1915:9:1915:29 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1915:28:1915:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1918:13:1918:23 | vec2_bitand | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1918:27:1918:28 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1918:27:1918:33 | ... & ... | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1918:32:1918:33 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1919:13:1919:22 | vec2_bitor | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1919:26:1919:27 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1919:26:1919:32 | ... \| ... | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1919:31:1919:32 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1920:13:1920:23 | vec2_bitxor | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1920:27:1920:28 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1920:27:1920:33 | ... ^ ... | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1920:32:1920:33 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1921:13:1921:20 | vec2_shl | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1921:24:1921:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1921:24:1921:33 | ... << ... | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1921:30:1921:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1922:13:1922:20 | vec2_shr | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1922:24:1922:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1922:24:1922:33 | ... >> ... | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1922:30:1922:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1925:17:1925:34 | vec2_bitand_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1925:38:1925:39 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1926:9:1926:26 | vec2_bitand_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1926:9:1926:32 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1926:31:1926:32 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1928:17:1928:33 | vec2_bitor_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1928:37:1928:38 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1929:9:1929:25 | vec2_bitor_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1929:9:1929:31 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1929:30:1929:31 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1931:17:1931:34 | vec2_bitxor_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1931:38:1931:39 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1932:9:1932:26 | vec2_bitxor_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1932:9:1932:32 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1932:31:1932:32 | v2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1934:17:1934:31 | vec2_shl_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1934:35:1934:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1935:9:1935:23 | vec2_shl_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1935:9:1935:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1935:29:1935:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1937:17:1937:31 | vec2_shr_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1937:35:1937:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1938:9:1938:23 | vec2_shr_assign | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1938:9:1938:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1938:29:1938:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1941:13:1941:20 | vec2_neg | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1941:24:1941:26 | - ... | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1941:25:1941:26 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1942:13:1942:20 | vec2_not | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1942:24:1942:26 | ! ... | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1942:25:1942:26 | v1 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1945:13:1945:24 | default_vec2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1945:28:1945:45 | ...::default(...) | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1946:13:1946:26 | vec2_zero_plus | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1946:30:1946:48 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1946:30:1946:63 | ... + ... | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1946:40:1946:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1946:40:1946:40 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1946:46:1946:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1946:46:1946:46 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1946:52:1946:63 | default_vec2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1950:13:1950:24 | default_vec2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1950:28:1950:45 | ...::default(...) | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1951:13:1951:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | +| main.rs:1951:30:1951:48 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1951:30:1951:64 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1951:40:1951:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1951:40:1951:40 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1951:46:1951:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1951:46:1951:46 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1951:53:1951:64 | default_vec2 | | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1961:18:1961:21 | SelfParam | | main.rs:1958:5:1958:14 | S1 | +| main.rs:1964:25:1966:5 | { ... } | | main.rs:1958:5:1958:14 | S1 | +| main.rs:1965:9:1965:10 | S1 | | main.rs:1958:5:1958:14 | S1 | +| main.rs:1968:41:1970:5 | { ... } | | main.rs:1968:16:1968:39 | ImplTraitTypeRepr | +| main.rs:1969:9:1969:20 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1969:9:1969:20 | { ... } | Output | main.rs:1958:5:1958:14 | S1 | +| main.rs:1969:17:1969:18 | S1 | | main.rs:1958:5:1958:14 | S1 | +| main.rs:1978:13:1978:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | +| main.rs:1978:13:1978:42 | SelfParam | Ptr | file://:0:0:0:0 | & | +| main.rs:1978:13:1978:42 | SelfParam | Ptr.&T | main.rs:1972:5:1972:14 | S2 | +| main.rs:1979:13:1979:15 | _cx | | file://:0:0:0:0 | & | +| main.rs:1979:13:1979:15 | _cx | &T | {EXTERNAL LOCATION} | Context | +| main.rs:1980:44:1982:9 | { ... } | | {EXTERNAL LOCATION} | Poll | +| main.rs:1980:44:1982:9 | { ... } | T | main.rs:1958:5:1958:14 | S1 | +| main.rs:1981:13:1981:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | +| main.rs:1981:13:1981:38 | ...::Ready(...) | T | main.rs:1958:5:1958:14 | S1 | +| main.rs:1981:36:1981:37 | S1 | | main.rs:1958:5:1958:14 | S1 | +| main.rs:1985:41:1987:5 | { ... } | | main.rs:1985:16:1985:39 | ImplTraitTypeRepr | +| main.rs:1986:9:1986:10 | S2 | | main.rs:1972:5:1972:14 | S2 | +| main.rs:1986:9:1986:10 | S2 | | main.rs:1985:16:1985:39 | ImplTraitTypeRepr | +| main.rs:1990:9:1990:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1990:9:1990:12 | f1(...) | Output | main.rs:1958:5:1958:14 | S1 | +| main.rs:1990:9:1990:18 | await ... | | main.rs:1958:5:1958:14 | S1 | +| main.rs:1991:9:1991:12 | f2(...) | | main.rs:1968:16:1968:39 | ImplTraitTypeRepr | +| main.rs:1991:9:1991:18 | await ... | | main.rs:1958:5:1958:14 | S1 | +| main.rs:1992:9:1992:12 | f3(...) | | main.rs:1985:16:1985:39 | ImplTraitTypeRepr | +| main.rs:1992:9:1992:18 | await ... | | main.rs:1958:5:1958:14 | S1 | +| main.rs:1993:9:1993:10 | S2 | | main.rs:1972:5:1972:14 | S2 | +| main.rs:1993:9:1993:16 | await S2 | | main.rs:1958:5:1958:14 | S1 | +| main.rs:1994:13:1994:13 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1994:13:1994:13 | b | Output | main.rs:1958:5:1958:14 | S1 | +| main.rs:1994:17:1994:28 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1994:17:1994:28 | { ... } | Output | main.rs:1958:5:1958:14 | S1 | +| main.rs:1994:25:1994:26 | S1 | | main.rs:1958:5:1958:14 | S1 | +| main.rs:1995:9:1995:9 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1995:9:1995:9 | b | Output | main.rs:1958:5:1958:14 | S1 | +| main.rs:1995:9:1995:15 | await b | | main.rs:1958:5:1958:14 | S1 | +| main.rs:2006:15:2006:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2006:15:2006:19 | SelfParam | &T | main.rs:2005:5:2007:5 | Self [trait Trait1] | +| main.rs:2010:15:2010:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2010:15:2010:19 | SelfParam | &T | main.rs:2009:5:2011:5 | Self [trait Trait2] | +| main.rs:2014:15:2014:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2014:15:2014:19 | SelfParam | &T | main.rs:2000:5:2001:14 | S1 | +| main.rs:2018:15:2018:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2018:15:2018:19 | SelfParam | &T | main.rs:2000:5:2001:14 | S1 | +| main.rs:2021:37:2023:5 | { ... } | | main.rs:2021:16:2021:35 | ImplTraitTypeRepr | +| main.rs:2022:9:2022:10 | S1 | | main.rs:2000:5:2001:14 | S1 | +| main.rs:2022:9:2022:10 | S1 | | main.rs:2021:16:2021:35 | ImplTraitTypeRepr | +| main.rs:2026:18:2026:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2026:18:2026:22 | SelfParam | &T | main.rs:2025:5:2027:5 | Self [trait MyTrait] | +| main.rs:2030:18:2030:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2030:18:2030:22 | SelfParam | &T | main.rs:2000:5:2001:14 | S1 | +| main.rs:2030:31:2032:9 | { ... } | | main.rs:2002:5:2002:14 | S2 | +| main.rs:2031:13:2031:14 | S2 | | main.rs:2002:5:2002:14 | S2 | +| main.rs:2036:18:2036:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2036:18:2036:22 | SelfParam | | main.rs:2003:5:2003:22 | S3 | +| main.rs:2036:18:2036:22 | SelfParam | &T | main.rs:2003:5:2003:22 | S3 | +| main.rs:2036:18:2036:22 | SelfParam | &T.T3 | main.rs:2035:10:2035:17 | T | +| main.rs:2036:30:2039:9 | { ... } | | main.rs:2035:10:2035:17 | T | +| main.rs:2037:17:2037:21 | S3(...) | | file://:0:0:0:0 | & | +| main.rs:2037:17:2037:21 | S3(...) | | main.rs:2003:5:2003:22 | S3 | +| main.rs:2037:17:2037:21 | S3(...) | &T | main.rs:2003:5:2003:22 | S3 | +| main.rs:2037:17:2037:21 | S3(...) | &T.T3 | main.rs:2035:10:2035:17 | T | +| main.rs:2037:25:2037:28 | self | | file://:0:0:0:0 | & | +| main.rs:2037:25:2037:28 | self | | main.rs:2003:5:2003:22 | S3 | +| main.rs:2037:25:2037:28 | self | &T | main.rs:2003:5:2003:22 | S3 | +| main.rs:2037:25:2037:28 | self | &T.T3 | main.rs:2035:10:2035:17 | T | +| main.rs:2038:13:2038:21 | t.clone() | | main.rs:2035:10:2035:17 | T | +| main.rs:2042:45:2044:5 | { ... } | | main.rs:2042:28:2042:43 | ImplTraitTypeRepr | +| main.rs:2043:9:2043:10 | S1 | | main.rs:2000:5:2001:14 | S1 | +| main.rs:2043:9:2043:10 | S1 | | main.rs:2042:28:2042:43 | ImplTraitTypeRepr | +| main.rs:2046:41:2046:41 | t | | main.rs:2046:26:2046:38 | B | +| main.rs:2046:52:2048:5 | { ... } | | main.rs:2046:23:2046:23 | A | +| main.rs:2047:9:2047:9 | t | | main.rs:2046:26:2046:38 | B | +| main.rs:2047:9:2047:17 | t.get_a() | | main.rs:2046:23:2046:23 | A | +| main.rs:2050:34:2050:34 | x | | main.rs:2050:24:2050:31 | T | +| main.rs:2050:59:2052:5 | { ... } | | main.rs:2050:43:2050:57 | ImplTraitTypeRepr | +| main.rs:2050:59:2052:5 | { ... } | impl(T) | main.rs:2050:24:2050:31 | T | +| main.rs:2051:9:2051:13 | S3(...) | | main.rs:2003:5:2003:22 | S3 | +| main.rs:2051:9:2051:13 | S3(...) | | main.rs:2050:43:2050:57 | ImplTraitTypeRepr | +| main.rs:2051:9:2051:13 | S3(...) | T3 | main.rs:2050:24:2050:31 | T | +| main.rs:2051:9:2051:13 | S3(...) | impl(T) | main.rs:2050:24:2050:31 | T | +| main.rs:2051:12:2051:12 | x | | main.rs:2050:24:2050:31 | T | +| main.rs:2054:34:2054:34 | x | | main.rs:2054:24:2054:31 | T | +| main.rs:2054:67:2056:5 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2054:67:2056:5 | { ... } | T | main.rs:2054:50:2054:64 | ImplTraitTypeRepr | +| main.rs:2054:67:2056:5 | { ... } | T.impl(T) | main.rs:2054:24:2054:31 | T | +| main.rs:2055:9:2055:19 | Some(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2055:9:2055:19 | Some(...) | T | main.rs:2003:5:2003:22 | S3 | +| main.rs:2055:9:2055:19 | Some(...) | T | main.rs:2054:50:2054:64 | ImplTraitTypeRepr | +| main.rs:2055:9:2055:19 | Some(...) | T.T3 | main.rs:2054:24:2054:31 | T | +| main.rs:2055:9:2055:19 | Some(...) | T.impl(T) | main.rs:2054:24:2054:31 | T | +| main.rs:2055:14:2055:18 | S3(...) | | main.rs:2003:5:2003:22 | S3 | +| main.rs:2055:14:2055:18 | S3(...) | | main.rs:2054:50:2054:64 | ImplTraitTypeRepr | +| main.rs:2055:14:2055:18 | S3(...) | T3 | main.rs:2054:24:2054:31 | T | +| main.rs:2055:14:2055:18 | S3(...) | impl(T) | main.rs:2054:24:2054:31 | T | +| main.rs:2055:17:2055:17 | x | | main.rs:2054:24:2054:31 | T | +| main.rs:2058:34:2058:34 | x | | main.rs:2058:24:2058:31 | T | +| main.rs:2058:78:2060:5 | { ... } | | file://:0:0:0:0 | (T_2) | +| main.rs:2058:78:2060:5 | { ... } | 0(2) | main.rs:2058:44:2058:58 | ImplTraitTypeRepr | +| main.rs:2058:78:2060:5 | { ... } | 0(2).impl(T) | main.rs:2058:24:2058:31 | T | +| main.rs:2058:78:2060:5 | { ... } | 1(2) | main.rs:2058:61:2058:75 | ImplTraitTypeRepr | +| main.rs:2058:78:2060:5 | { ... } | 1(2).impl(T) | main.rs:2058:24:2058:31 | T | +| main.rs:2059:9:2059:30 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2059:9:2059:30 | TupleExpr | 0(2) | main.rs:2003:5:2003:22 | S3 | +| main.rs:2059:9:2059:30 | TupleExpr | 0(2) | main.rs:2058:44:2058:58 | ImplTraitTypeRepr | +| main.rs:2059:9:2059:30 | TupleExpr | 0(2).T3 | main.rs:2058:24:2058:31 | T | +| main.rs:2059:9:2059:30 | TupleExpr | 0(2).impl(T) | main.rs:2058:24:2058:31 | T | +| main.rs:2059:9:2059:30 | TupleExpr | 1(2) | main.rs:2003:5:2003:22 | S3 | +| main.rs:2059:9:2059:30 | TupleExpr | 1(2) | main.rs:2058:61:2058:75 | ImplTraitTypeRepr | +| main.rs:2059:9:2059:30 | TupleExpr | 1(2).T3 | main.rs:2058:24:2058:31 | T | +| main.rs:2059:9:2059:30 | TupleExpr | 1(2).impl(T) | main.rs:2058:24:2058:31 | T | +| main.rs:2059:10:2059:22 | S3(...) | | main.rs:2003:5:2003:22 | S3 | +| main.rs:2059:10:2059:22 | S3(...) | | main.rs:2058:44:2058:58 | ImplTraitTypeRepr | +| main.rs:2059:10:2059:22 | S3(...) | T3 | main.rs:2058:24:2058:31 | T | +| main.rs:2059:10:2059:22 | S3(...) | impl(T) | main.rs:2058:24:2058:31 | T | +| main.rs:2059:13:2059:13 | x | | main.rs:2058:24:2058:31 | T | +| main.rs:2059:13:2059:21 | x.clone() | | main.rs:2058:24:2058:31 | T | +| main.rs:2059:25:2059:29 | S3(...) | | main.rs:2003:5:2003:22 | S3 | +| main.rs:2059:25:2059:29 | S3(...) | | main.rs:2058:61:2058:75 | ImplTraitTypeRepr | +| main.rs:2059:25:2059:29 | S3(...) | T3 | main.rs:2058:24:2058:31 | T | +| main.rs:2059:25:2059:29 | S3(...) | impl(T) | main.rs:2058:24:2058:31 | T | +| main.rs:2059:28:2059:28 | x | | main.rs:2058:24:2058:31 | T | +| main.rs:2062:26:2062:26 | t | | main.rs:2062:29:2062:43 | ImplTraitTypeRepr | +| main.rs:2062:51:2064:5 | { ... } | | main.rs:2062:23:2062:23 | A | +| main.rs:2063:9:2063:9 | t | | main.rs:2062:29:2062:43 | ImplTraitTypeRepr | +| main.rs:2063:9:2063:17 | t.get_a() | | main.rs:2062:23:2062:23 | A | +| main.rs:2067:13:2067:13 | x | | main.rs:2021:16:2021:35 | ImplTraitTypeRepr | +| main.rs:2067:17:2067:20 | f1(...) | | main.rs:2021:16:2021:35 | ImplTraitTypeRepr | +| main.rs:2068:9:2068:9 | x | | main.rs:2021:16:2021:35 | ImplTraitTypeRepr | +| main.rs:2069:9:2069:9 | x | | main.rs:2021:16:2021:35 | ImplTraitTypeRepr | +| main.rs:2070:13:2070:13 | a | | main.rs:2042:28:2042:43 | ImplTraitTypeRepr | +| main.rs:2070:17:2070:32 | get_a_my_trait(...) | | main.rs:2042:28:2042:43 | ImplTraitTypeRepr | +| main.rs:2071:13:2071:13 | b | | main.rs:2002:5:2002:14 | S2 | +| main.rs:2071:17:2071:33 | uses_my_trait1(...) | | main.rs:2002:5:2002:14 | S2 | +| main.rs:2071:32:2071:32 | a | | main.rs:2042:28:2042:43 | ImplTraitTypeRepr | +| main.rs:2072:13:2072:13 | a | | main.rs:2042:28:2042:43 | ImplTraitTypeRepr | +| main.rs:2072:17:2072:32 | get_a_my_trait(...) | | main.rs:2042:28:2042:43 | ImplTraitTypeRepr | +| main.rs:2073:13:2073:13 | c | | main.rs:2002:5:2002:14 | S2 | +| main.rs:2073:17:2073:33 | uses_my_trait2(...) | | main.rs:2002:5:2002:14 | S2 | +| main.rs:2073:32:2073:32 | a | | main.rs:2042:28:2042:43 | ImplTraitTypeRepr | +| main.rs:2074:13:2074:13 | d | | main.rs:2002:5:2002:14 | S2 | +| main.rs:2074:17:2074:34 | uses_my_trait2(...) | | main.rs:2002:5:2002:14 | S2 | +| main.rs:2074:32:2074:33 | S1 | | main.rs:2000:5:2001:14 | S1 | +| main.rs:2075:13:2075:13 | e | | main.rs:2000:5:2001:14 | S1 | +| main.rs:2075:17:2075:35 | get_a_my_trait2(...) | | main.rs:2050:43:2050:57 | ImplTraitTypeRepr | +| main.rs:2075:17:2075:35 | get_a_my_trait2(...) | impl(T) | main.rs:2000:5:2001:14 | S1 | +| main.rs:2075:17:2075:43 | ... .get_a() | | main.rs:2000:5:2001:14 | S1 | +| main.rs:2075:33:2075:34 | S1 | | main.rs:2000:5:2001:14 | S1 | +| main.rs:2078:13:2078:13 | f | | main.rs:2000:5:2001:14 | S1 | +| main.rs:2078:17:2078:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2078:17:2078:35 | get_a_my_trait3(...) | T | main.rs:2054:50:2054:64 | ImplTraitTypeRepr | +| main.rs:2078:17:2078:35 | get_a_my_trait3(...) | T.impl(T) | main.rs:2000:5:2001:14 | S1 | +| main.rs:2078:17:2078:44 | ... .unwrap() | | main.rs:2054:50:2054:64 | ImplTraitTypeRepr | +| main.rs:2078:17:2078:44 | ... .unwrap() | impl(T) | main.rs:2000:5:2001:14 | S1 | +| main.rs:2078:17:2078:52 | ... .get_a() | | main.rs:2000:5:2001:14 | S1 | +| main.rs:2078:33:2078:34 | S1 | | main.rs:2000:5:2001:14 | S1 | +| main.rs:2079:13:2079:13 | g | | main.rs:2000:5:2001:14 | S1 | +| main.rs:2079:17:2079:35 | get_a_my_trait4(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2079:17:2079:35 | get_a_my_trait4(...) | 0(2) | main.rs:2058:44:2058:58 | ImplTraitTypeRepr | +| main.rs:2079:17:2079:35 | get_a_my_trait4(...) | 0(2).impl(T) | main.rs:2000:5:2001:14 | S1 | +| main.rs:2079:17:2079:35 | get_a_my_trait4(...) | 1(2) | main.rs:2058:61:2058:75 | ImplTraitTypeRepr | +| main.rs:2079:17:2079:35 | get_a_my_trait4(...) | 1(2).impl(T) | main.rs:2000:5:2001:14 | S1 | +| main.rs:2079:17:2079:37 | ... .0 | | main.rs:2058:44:2058:58 | ImplTraitTypeRepr | +| main.rs:2079:17:2079:37 | ... .0 | impl(T) | main.rs:2000:5:2001:14 | S1 | +| main.rs:2079:17:2079:45 | ... .get_a() | | main.rs:2000:5:2001:14 | S1 | +| main.rs:2079:33:2079:34 | S1 | | main.rs:2000:5:2001:14 | S1 | +| main.rs:2090:16:2090:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2090:16:2090:20 | SelfParam | &T | main.rs:2086:5:2087:13 | S | +| main.rs:2090:31:2092:9 | { ... } | | main.rs:2086:5:2087:13 | S | +| main.rs:2091:13:2091:13 | S | | main.rs:2086:5:2087:13 | S | +| main.rs:2101:26:2103:9 | { ... } | | main.rs:2095:5:2098:5 | MyVec | +| main.rs:2101:26:2103:9 | { ... } | T | main.rs:2100:10:2100:10 | T | +| main.rs:2102:13:2102:38 | MyVec {...} | | main.rs:2095:5:2098:5 | MyVec | +| main.rs:2102:13:2102:38 | MyVec {...} | T | main.rs:2100:10:2100:10 | T | +| main.rs:2102:27:2102:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2102:27:2102:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2102:27:2102:36 | ...::new(...) | T | main.rs:2100:10:2100:10 | T | +| main.rs:2105:17:2105:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2105:17:2105:25 | SelfParam | &T | main.rs:2095:5:2098:5 | MyVec | +| main.rs:2105:17:2105:25 | SelfParam | &T.T | main.rs:2100:10:2100:10 | T | +| main.rs:2105:28:2105:32 | value | | main.rs:2100:10:2100:10 | T | +| main.rs:2106:13:2106:16 | self | | file://:0:0:0:0 | & | +| main.rs:2106:13:2106:16 | self | &T | main.rs:2095:5:2098:5 | MyVec | +| main.rs:2106:13:2106:16 | self | &T.T | main.rs:2100:10:2100:10 | T | +| main.rs:2106:13:2106:21 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:2106:13:2106:21 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:2106:13:2106:21 | self.data | T | main.rs:2100:10:2100:10 | T | +| main.rs:2106:28:2106:32 | value | | main.rs:2100:10:2100:10 | T | +| main.rs:2114:18:2114:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2114:18:2114:22 | SelfParam | &T | main.rs:2095:5:2098:5 | MyVec | +| main.rs:2114:18:2114:22 | SelfParam | &T.T | main.rs:2110:10:2110:10 | T | +| main.rs:2114:25:2114:29 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2114:56:2116:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:2114:56:2116:9 | { ... } | &T | main.rs:2110:10:2110:10 | T | +| main.rs:2115:13:2115:29 | &... | | file://:0:0:0:0 | & | +| main.rs:2115:13:2115:29 | &... | &T | main.rs:2110:10:2110:10 | T | +| main.rs:2115:14:2115:17 | self | | file://:0:0:0:0 | & | +| main.rs:2115:14:2115:17 | self | &T | main.rs:2095:5:2098:5 | MyVec | +| main.rs:2115:14:2115:17 | self | &T.T | main.rs:2110:10:2110:10 | T | +| main.rs:2115:14:2115:22 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:2115:14:2115:22 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:2115:14:2115:22 | self.data | T | main.rs:2110:10:2110:10 | T | +| main.rs:2115:14:2115:29 | ...[index] | | main.rs:2110:10:2110:10 | T | +| main.rs:2115:24:2115:28 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2119:22:2119:26 | slice | | file://:0:0:0:0 | & | +| main.rs:2119:22:2119:26 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:2119:22:2119:26 | slice | &T.[T] | main.rs:2086:5:2087:13 | S | +| main.rs:2120:13:2120:13 | x | | main.rs:2086:5:2087:13 | S | +| main.rs:2120:17:2120:21 | slice | | file://:0:0:0:0 | & | +| main.rs:2120:17:2120:21 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:2120:17:2120:21 | slice | &T.[T] | main.rs:2086:5:2087:13 | S | +| main.rs:2120:17:2120:24 | slice[0] | | main.rs:2086:5:2087:13 | S | +| main.rs:2120:17:2120:30 | ... .foo() | | main.rs:2086:5:2087:13 | S | +| main.rs:2120:23:2120:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2124:17:2124:19 | vec | | main.rs:2095:5:2098:5 | MyVec | +| main.rs:2124:17:2124:19 | vec | T | main.rs:2086:5:2087:13 | S | +| main.rs:2124:23:2124:34 | ...::new(...) | | main.rs:2095:5:2098:5 | MyVec | +| main.rs:2124:23:2124:34 | ...::new(...) | T | main.rs:2086:5:2087:13 | S | +| main.rs:2125:9:2125:11 | vec | | main.rs:2095:5:2098:5 | MyVec | +| main.rs:2125:9:2125:11 | vec | T | main.rs:2086:5:2087:13 | S | +| main.rs:2125:18:2125:18 | S | | main.rs:2086:5:2087:13 | S | +| main.rs:2126:9:2126:11 | vec | | main.rs:2095:5:2098:5 | MyVec | +| main.rs:2126:9:2126:11 | vec | T | main.rs:2086:5:2087:13 | S | +| main.rs:2126:9:2126:14 | vec[0] | | main.rs:2086:5:2087:13 | S | +| main.rs:2126:9:2126:20 | ... .foo() | | main.rs:2086:5:2087:13 | S | +| main.rs:2126:13:2126:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2126:13:2126:13 | 0 | | {EXTERNAL LOCATION} | usize | +| main.rs:2128:13:2128:14 | xs | | file://:0:0:0:0 | [] | +| main.rs:2128:13:2128:14 | xs | [T;...] | main.rs:2086:5:2087:13 | S | +| main.rs:2128:21:2128:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2128:26:2128:28 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2128:26:2128:28 | [...] | [T;...] | main.rs:2086:5:2087:13 | S | +| main.rs:2128:27:2128:27 | S | | main.rs:2086:5:2087:13 | S | +| main.rs:2129:13:2129:13 | x | | main.rs:2086:5:2087:13 | S | +| main.rs:2129:17:2129:18 | xs | | file://:0:0:0:0 | [] | +| main.rs:2129:17:2129:18 | xs | [T;...] | main.rs:2086:5:2087:13 | S | +| main.rs:2129:17:2129:21 | xs[0] | | main.rs:2086:5:2087:13 | S | +| main.rs:2129:17:2129:27 | ... .foo() | | main.rs:2086:5:2087:13 | S | +| main.rs:2129:20:2129:20 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2131:23:2131:25 | &xs | | file://:0:0:0:0 | & | +| main.rs:2131:23:2131:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:2131:23:2131:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:2131:23:2131:25 | &xs | &T.[T;...] | main.rs:2086:5:2087:13 | S | +| main.rs:2131:23:2131:25 | &xs | &T.[T] | main.rs:2086:5:2087:13 | S | +| main.rs:2131:24:2131:25 | xs | | file://:0:0:0:0 | [] | +| main.rs:2131:24:2131:25 | xs | [T;...] | main.rs:2086:5:2087:13 | S | +| main.rs:2137:13:2137:13 | x | | {EXTERNAL LOCATION} | String | +| main.rs:2137:17:2137:46 | MacroExpr | | {EXTERNAL LOCATION} | String | +| main.rs:2137:25:2137:35 | "Hello, {}" | | file://:0:0:0:0 | & | +| main.rs:2137:25:2137:35 | "Hello, {}" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2137:25:2137:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2137:25:2137:45 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2137:25:2137:45 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2137:25:2137:45 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2137:25:2137:45 | { ... } | | {EXTERNAL LOCATION} | String | +| main.rs:2137:38:2137:45 | "World!" | | file://:0:0:0:0 | & | +| main.rs:2137:38:2137:45 | "World!" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2146:19:2146:22 | SelfParam | | main.rs:2142:5:2147:5 | Self [trait MyAdd] | +| main.rs:2146:25:2146:27 | rhs | | main.rs:2142:17:2142:26 | Rhs | +| main.rs:2153:19:2153:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2153:25:2153:29 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2153:45:2155:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2154:13:2154:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2162:19:2162:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2162:25:2162:29 | value | | file://:0:0:0:0 | & | +| main.rs:2162:25:2162:29 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2162:46:2164:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2163:13:2163:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2163:14:2163:18 | value | | file://:0:0:0:0 | & | +| main.rs:2163:14:2163:18 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2171:19:2171:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2171:25:2171:29 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2171:46:2177:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2172:13:2176:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2172:13:2176:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| main.rs:2172:16:2172:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2172:22:2174:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2172:22:2174:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2173:17:2173:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2173:17:2173:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2174:20:2176:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2174:20:2176:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2175:17:2175:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2175:17:2175:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2186:19:2186:22 | SelfParam | | main.rs:2180:5:2180:19 | S | +| main.rs:2186:19:2186:22 | SelfParam | T | main.rs:2182:10:2182:17 | T | +| main.rs:2186:25:2186:29 | other | | main.rs:2180:5:2180:19 | S | +| main.rs:2186:25:2186:29 | other | T | main.rs:2182:10:2182:17 | T | +| main.rs:2186:54:2188:9 | { ... } | | main.rs:2180:5:2180:19 | S | +| main.rs:2186:54:2188:9 | { ... } | T | main.rs:2143:9:2143:20 | Output | +| main.rs:2187:13:2187:39 | S(...) | | main.rs:2180:5:2180:19 | S | +| main.rs:2187:13:2187:39 | S(...) | T | main.rs:2143:9:2143:20 | Output | +| main.rs:2187:15:2187:22 | (...) | | main.rs:2182:10:2182:17 | T | +| main.rs:2187:15:2187:38 | ... .my_add(...) | | main.rs:2143:9:2143:20 | Output | +| main.rs:2187:16:2187:19 | self | | main.rs:2180:5:2180:19 | S | +| main.rs:2187:16:2187:19 | self | T | main.rs:2182:10:2182:17 | T | +| main.rs:2187:16:2187:21 | self.0 | | main.rs:2182:10:2182:17 | T | +| main.rs:2187:31:2187:35 | other | | main.rs:2180:5:2180:19 | S | +| main.rs:2187:31:2187:35 | other | T | main.rs:2182:10:2182:17 | T | +| main.rs:2187:31:2187:37 | other.0 | | main.rs:2142:5:2147:5 | Self [trait MyAdd] | +| main.rs:2187:31:2187:37 | other.0 | | main.rs:2182:10:2182:17 | T | +| main.rs:2195:19:2195:22 | SelfParam | | main.rs:2180:5:2180:19 | S | +| main.rs:2195:19:2195:22 | SelfParam | T | main.rs:2191:10:2191:17 | T | +| main.rs:2195:25:2195:29 | other | | main.rs:2191:10:2191:17 | T | +| main.rs:2195:51:2197:9 | { ... } | | main.rs:2180:5:2180:19 | S | +| main.rs:2195:51:2197:9 | { ... } | T | main.rs:2143:9:2143:20 | Output | +| main.rs:2196:13:2196:37 | S(...) | | main.rs:2180:5:2180:19 | S | +| main.rs:2196:13:2196:37 | S(...) | T | main.rs:2143:9:2143:20 | Output | +| main.rs:2196:15:2196:22 | (...) | | main.rs:2191:10:2191:17 | T | +| main.rs:2196:15:2196:36 | ... .my_add(...) | | main.rs:2143:9:2143:20 | Output | +| main.rs:2196:16:2196:19 | self | | main.rs:2180:5:2180:19 | S | +| main.rs:2196:16:2196:19 | self | T | main.rs:2191:10:2191:17 | T | +| main.rs:2196:16:2196:21 | self.0 | | main.rs:2191:10:2191:17 | T | +| main.rs:2196:31:2196:35 | other | | main.rs:2191:10:2191:17 | T | +| main.rs:2207:19:2207:22 | SelfParam | | main.rs:2180:5:2180:19 | S | +| main.rs:2207:19:2207:22 | SelfParam | T | main.rs:2200:14:2200:14 | T | +| main.rs:2207:25:2207:29 | other | | file://:0:0:0:0 | & | +| main.rs:2207:25:2207:29 | other | &T | main.rs:2200:14:2200:14 | T | +| main.rs:2207:55:2209:9 | { ... } | | main.rs:2180:5:2180:19 | S | +| main.rs:2208:13:2208:37 | S(...) | | main.rs:2180:5:2180:19 | S | +| main.rs:2208:15:2208:22 | (...) | | main.rs:2200:14:2200:14 | T | +| main.rs:2208:16:2208:19 | self | | main.rs:2180:5:2180:19 | S | +| main.rs:2208:16:2208:19 | self | T | main.rs:2200:14:2200:14 | T | +| main.rs:2208:16:2208:21 | self.0 | | main.rs:2200:14:2200:14 | T | +| main.rs:2208:31:2208:35 | other | | file://:0:0:0:0 | & | +| main.rs:2208:31:2208:35 | other | &T | main.rs:2200:14:2200:14 | T | +| main.rs:2214:20:2214:24 | value | | main.rs:2212:18:2212:18 | T | +| main.rs:2219:20:2219:24 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2219:40:2221:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2220:13:2220:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2226:20:2226:24 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2226:41:2232:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2227:13:2231:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2227:13:2231:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| main.rs:2227:16:2227:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2227:22:2229:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2227:22:2229:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2228:17:2228:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2228:17:2228:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2229:20:2231:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2229:20:2231:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2230:17:2230:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2230:17:2230:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2237:21:2237:25 | value | | main.rs:2235:19:2235:19 | T | +| main.rs:2237:31:2237:31 | x | | main.rs:2235:5:2238:5 | Self [trait MyFrom2] | +| main.rs:2242:21:2242:25 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2242:33:2242:33 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2242:48:2244:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2243:13:2243:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2249:21:2249:25 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2249:34:2249:34 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2249:49:2255:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2250:13:2254:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2250:16:2250:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2250:22:2252:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2251:17:2251:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2252:20:2254:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2253:17:2253:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2260:15:2260:15 | x | | main.rs:2258:5:2264:5 | Self [trait MySelfTrait] | +| main.rs:2263:15:2263:15 | x | | main.rs:2258:5:2264:5 | Self [trait MySelfTrait] | +| main.rs:2268:15:2268:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2268:31:2270:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2269:13:2269:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2269:13:2269:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2269:17:2269:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2273:15:2273:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2273:32:2275:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2274:13:2274:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2274:13:2274:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2274:17:2274:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2280:15:2280:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2280:31:2282:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2281:13:2281:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2281:13:2281:13 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2285:15:2285:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2285:32:2287:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2286:13:2286:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2291:13:2291:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2291:22:2291:23 | 73 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2291:22:2291:23 | 73 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2292:9:2292:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2292:9:2292:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2292:18:2292:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2293:9:2293:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2293:9:2293:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2293:18:2293:22 | &5i64 | | file://:0:0:0:0 | & | +| main.rs:2293:18:2293:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2293:19:2293:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2294:9:2294:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2294:9:2294:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2294:18:2294:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2296:9:2296:15 | S(...) | | main.rs:2180:5:2180:19 | S | +| main.rs:2296:9:2296:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2296:9:2296:31 | ... .my_add(...) | | main.rs:2180:5:2180:19 | S | +| main.rs:2296:11:2296:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2296:24:2296:30 | S(...) | | main.rs:2180:5:2180:19 | S | +| main.rs:2296:24:2296:30 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2296:26:2296:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2297:9:2297:15 | S(...) | | main.rs:2180:5:2180:19 | S | +| main.rs:2297:9:2297:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2297:11:2297:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2297:24:2297:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2298:9:2298:15 | S(...) | | main.rs:2180:5:2180:19 | S | +| main.rs:2298:9:2298:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2298:9:2298:29 | ... .my_add(...) | | main.rs:2180:5:2180:19 | S | +| main.rs:2298:11:2298:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2298:24:2298:28 | &3i64 | | file://:0:0:0:0 | & | +| main.rs:2298:24:2298:28 | &3i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2298:25:2298:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2300:13:2300:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2300:17:2300:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2300:30:2300:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2301:13:2301:13 | y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2301:17:2301:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2301:30:2301:33 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2302:13:2302:13 | z | | {EXTERNAL LOCATION} | i64 | +| main.rs:2302:22:2302:43 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2302:38:2302:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2303:9:2303:34 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2303:23:2303:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2303:30:2303:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2304:9:2304:33 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2304:23:2304:26 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2304:29:2304:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2305:9:2305:38 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2305:27:2305:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2305:34:2305:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2307:9:2307:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2307:17:2307:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2308:9:2308:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2308:17:2308:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2309:9:2309:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2309:18:2309:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2310:9:2310:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2310:18:2310:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2311:9:2311:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2311:25:2311:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2312:9:2312:30 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2312:25:2312:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2313:9:2313:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2313:25:2313:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2314:9:2314:29 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2314:25:2314:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2322:26:2324:9 | { ... } | | main.rs:2319:5:2319:24 | MyCallable | +| main.rs:2323:13:2323:25 | MyCallable {...} | | main.rs:2319:5:2319:24 | MyCallable | +| main.rs:2326:17:2326:21 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2326:17:2326:21 | SelfParam | &T | main.rs:2319:5:2319:24 | MyCallable | +| main.rs:2326:31:2328:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2327:13:2327:13 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2327:13:2327:13 | 1 | | {EXTERNAL LOCATION} | i64 | | main.rs:2334:13:2334:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2334:18:2334:22 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2334:18:2334:22 | range | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2335:13:2335:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2335:26:2335:27 | .. | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2334:18:2334:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2334:18:2334:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2334:19:2334:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2334:22:2334:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2334:25:2334:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2335:18:2335:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2335:18:2335:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2335:18:2335:41 | ... .map(...) | | file://:0:0:0:0 | [] | +| main.rs:2335:19:2335:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2335:22:2335:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2335:25:2335:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2335:32:2335:40 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | +| main.rs:2335:32:2335:40 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | +| main.rs:2335:40:2335:40 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2336:13:2336:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2336:18:2336:48 | &... | | file://:0:0:0:0 | & | -| main.rs:2336:19:2336:36 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2336:19:2336:36 | [...] | [T;...] | {EXTERNAL LOCATION} | i64 | -| main.rs:2336:20:2336:23 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2336:26:2336:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2336:32:2336:35 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2336:38:2336:47 | range_full | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2338:13:2338:18 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2338:13:2338:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2339:9:2342:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | -| main.rs:2339:9:2342:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2340:20:2340:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2341:18:2341:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2343:13:2343:13 | u | | {EXTERNAL LOCATION} | Item | -| main.rs:2343:13:2343:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2343:18:2343:23 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2343:18:2343:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2347:26:2347:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2347:29:2347:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2347:32:2347:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2350:13:2350:18 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2350:13:2350:18 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2350:13:2350:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2350:32:2350:43 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2350:32:2350:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2350:32:2350:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2350:32:2350:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2350:32:2350:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2350:32:2350:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2350:33:2350:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2350:39:2350:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2350:39:2350:39 | 2 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2350:42:2350:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2350:42:2350:42 | 3 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2351:13:2351:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2351:13:2351:13 | u | | file://:0:0:0:0 | & | -| main.rs:2351:18:2351:23 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2351:18:2351:23 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2351:18:2351:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2353:22:2353:33 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2353:22:2353:33 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2353:22:2353:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2353:23:2353:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2353:29:2353:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2353:29:2353:29 | 2 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2353:32:2353:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2353:32:2353:32 | 3 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2356:13:2356:17 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2356:13:2356:17 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2356:13:2356:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2356:13:2356:17 | vals5 | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2356:21:2356:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2356:21:2356:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2356:21:2356:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2356:21:2356:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2356:31:2356:42 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2356:31:2356:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2356:31:2356:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2356:32:2356:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2356:38:2356:38 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2356:38:2356:38 | 2 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2356:41:2356:41 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2356:41:2356:41 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2357:13:2357:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2357:13:2357:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2357:13:2357:13 | u | | file://:0:0:0:0 | & | -| main.rs:2357:18:2357:22 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2357:18:2357:22 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2357:18:2357:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2357:18:2357:22 | vals5 | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2359:13:2359:17 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2359:13:2359:17 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2359:13:2359:17 | vals6 | T | file://:0:0:0:0 | & | -| main.rs:2359:13:2359:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2359:32:2359:43 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2359:32:2359:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2359:32:2359:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2359:32:2359:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2359:32:2359:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2359:32:2359:60 | ... .collect() | T | file://:0:0:0:0 | & | -| main.rs:2359:32:2359:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2359:33:2359:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2359:39:2359:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2359:39:2359:39 | 2 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2359:42:2359:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2359:42:2359:42 | 3 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2360:13:2360:13 | u | | file://:0:0:0:0 | & | -| main.rs:2360:13:2360:13 | u | &T | {EXTERNAL LOCATION} | u64 | -| main.rs:2360:18:2360:22 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2360:18:2360:22 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2360:18:2360:22 | vals6 | T | file://:0:0:0:0 | & | -| main.rs:2360:18:2360:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2362:17:2362:21 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2362:17:2362:21 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2362:17:2362:21 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2362:25:2362:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2362:25:2362:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2362:25:2362:34 | ...::new(...) | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2363:9:2363:13 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2363:9:2363:13 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2363:9:2363:13 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2363:20:2363:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2364:13:2364:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2364:13:2364:13 | u | | file://:0:0:0:0 | & | -| main.rs:2364:18:2364:22 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2364:18:2364:22 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2364:18:2364:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2366:33:2366:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2366:36:2366:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2366:45:2366:45 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2366:48:2366:48 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2373:17:2373:20 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2373:17:2373:20 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2373:17:2373:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2373:17:2373:20 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2373:17:2373:20 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2373:17:2373:20 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2373:17:2373:20 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2373:24:2373:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2373:24:2373:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2373:24:2373:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2373:24:2373:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | -| main.rs:2373:24:2373:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2373:24:2373:55 | ...::new(...) | V.T | file://:0:0:0:0 | & | -| main.rs:2373:24:2373:55 | ...::new(...) | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2374:9:2374:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2374:9:2374:12 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2374:9:2374:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2374:9:2374:12 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2374:9:2374:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2374:9:2374:12 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2374:9:2374:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2374:9:2374:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2374:9:2374:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2374:9:2374:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2374:9:2374:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | -| main.rs:2374:9:2374:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2374:21:2374:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2374:24:2374:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2374:24:2374:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2374:24:2374:38 | ...::new(...) | T | file://:0:0:0:0 | & | -| main.rs:2374:24:2374:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2374:33:2374:37 | "one" | | file://:0:0:0:0 | & | -| main.rs:2374:33:2374:37 | "one" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2375:9:2375:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2375:9:2375:12 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2375:9:2375:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2375:9:2375:12 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2375:9:2375:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2375:9:2375:12 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2375:9:2375:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2375:9:2375:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2375:9:2375:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2375:9:2375:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2375:9:2375:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | -| main.rs:2375:9:2375:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2375:21:2375:21 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2375:24:2375:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2375:24:2375:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2375:24:2375:38 | ...::new(...) | T | file://:0:0:0:0 | & | -| main.rs:2375:24:2375:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2375:33:2375:37 | "two" | | file://:0:0:0:0 | & | -| main.rs:2375:33:2375:37 | "two" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2376:13:2376:15 | key | | {EXTERNAL LOCATION} | Item | -| main.rs:2376:13:2376:15 | key | | file://:0:0:0:0 | & | -| main.rs:2376:13:2376:15 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2376:20:2376:23 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2376:20:2376:23 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2376:20:2376:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2376:20:2376:23 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2376:20:2376:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2376:20:2376:23 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2376:20:2376:23 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2376:20:2376:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | -| main.rs:2376:20:2376:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2376:20:2376:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2376:20:2376:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2376:20:2376:30 | map1.keys() | V.T | file://:0:0:0:0 | & | -| main.rs:2376:20:2376:30 | map1.keys() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2377:13:2377:17 | value | | {EXTERNAL LOCATION} | Item | -| main.rs:2377:13:2377:17 | value | | file://:0:0:0:0 | & | -| main.rs:2377:13:2377:17 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2377:13:2377:17 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2377:13:2377:17 | value | &T.T | file://:0:0:0:0 | & | -| main.rs:2377:13:2377:17 | value | &T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2377:22:2377:25 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2377:22:2377:25 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2377:22:2377:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2377:22:2377:25 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2377:22:2377:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2377:22:2377:25 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2377:22:2377:25 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2377:22:2377:34 | map1.values() | | {EXTERNAL LOCATION} | Values | -| main.rs:2377:22:2377:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2377:22:2377:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2377:22:2377:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2377:22:2377:34 | map1.values() | V.T | file://:0:0:0:0 | & | -| main.rs:2377:22:2377:34 | map1.values() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2378:13:2378:24 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2378:13:2378:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | -| main.rs:2378:13:2378:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | -| main.rs:2378:13:2378:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | -| main.rs:2378:13:2378:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | -| main.rs:2378:13:2378:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2378:13:2378:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | -| main.rs:2378:13:2378:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2378:14:2378:16 | key | | file://:0:0:0:0 | & | -| main.rs:2378:14:2378:16 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2378:19:2378:23 | value | | file://:0:0:0:0 | & | -| main.rs:2378:19:2378:23 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2378:19:2378:23 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2378:19:2378:23 | value | &T.T | file://:0:0:0:0 | & | -| main.rs:2378:19:2378:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2378:29:2378:32 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2378:29:2378:32 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2378:29:2378:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2378:29:2378:32 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2378:29:2378:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2378:29:2378:32 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2378:29:2378:32 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2378:29:2378:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | -| main.rs:2378:29:2378:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2378:29:2378:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2378:29:2378:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2378:29:2378:39 | map1.iter() | V.T | file://:0:0:0:0 | & | -| main.rs:2378:29:2378:39 | map1.iter() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2379:13:2379:24 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2379:13:2379:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | -| main.rs:2379:13:2379:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | -| main.rs:2379:13:2379:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | -| main.rs:2379:13:2379:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | -| main.rs:2379:13:2379:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2379:13:2379:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | -| main.rs:2379:13:2379:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2379:14:2379:16 | key | | file://:0:0:0:0 | & | -| main.rs:2379:14:2379:16 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2379:19:2379:23 | value | | file://:0:0:0:0 | & | -| main.rs:2379:19:2379:23 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2379:19:2379:23 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2379:19:2379:23 | value | &T.T | file://:0:0:0:0 | & | -| main.rs:2379:19:2379:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2379:29:2379:33 | &map1 | | file://:0:0:0:0 | & | -| main.rs:2379:29:2379:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | -| main.rs:2379:29:2379:33 | &map1 | &T.K | {EXTERNAL LOCATION} | i32 | -| main.rs:2379:29:2379:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2379:29:2379:33 | &map1 | &T.V | {EXTERNAL LOCATION} | Box | -| main.rs:2379:29:2379:33 | &map1 | &T.V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2379:29:2379:33 | &map1 | &T.V.T | file://:0:0:0:0 | & | -| main.rs:2379:29:2379:33 | &map1 | &T.V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2379:30:2379:33 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2379:30:2379:33 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2379:30:2379:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2379:30:2379:33 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2379:30:2379:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2379:30:2379:33 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2379:30:2379:33 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2383:17:2383:17 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2383:26:2383:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2383:26:2383:26 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2385:23:2385:23 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2385:23:2385:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2385:27:2385:28 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2385:27:2385:28 | 10 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2387:13:2387:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2387:13:2387:18 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:2387:18:2387:18 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2399:40:2401:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2399:40:2401:9 | { ... } | T | main.rs:2393:5:2393:20 | S1 | -| main.rs:2399:40:2401:9 | { ... } | T.T | main.rs:2398:10:2398:19 | T | -| main.rs:2400:13:2400:16 | None | | {EXTERNAL LOCATION} | Option | -| main.rs:2400:13:2400:16 | None | T | main.rs:2393:5:2393:20 | S1 | -| main.rs:2400:13:2400:16 | None | T.T | main.rs:2398:10:2398:19 | T | -| main.rs:2403:30:2405:9 | { ... } | | main.rs:2393:5:2393:20 | S1 | -| main.rs:2403:30:2405:9 | { ... } | T | main.rs:2398:10:2398:19 | T | -| main.rs:2404:13:2404:28 | S1(...) | | main.rs:2393:5:2393:20 | S1 | -| main.rs:2404:13:2404:28 | S1(...) | T | main.rs:2398:10:2398:19 | T | -| main.rs:2404:16:2404:27 | ...::default(...) | | main.rs:2398:10:2398:19 | T | -| main.rs:2407:19:2407:22 | SelfParam | | main.rs:2393:5:2393:20 | S1 | -| main.rs:2407:19:2407:22 | SelfParam | T | main.rs:2398:10:2398:19 | T | -| main.rs:2407:33:2409:9 | { ... } | | main.rs:2393:5:2393:20 | S1 | -| main.rs:2407:33:2409:9 | { ... } | T | main.rs:2398:10:2398:19 | T | -| main.rs:2408:13:2408:16 | self | | main.rs:2393:5:2393:20 | S1 | -| main.rs:2408:13:2408:16 | self | T | main.rs:2398:10:2398:19 | T | -| main.rs:2420:15:2420:15 | x | | main.rs:2420:12:2420:12 | T | -| main.rs:2420:26:2422:5 | { ... } | | main.rs:2420:12:2420:12 | T | -| main.rs:2421:9:2421:9 | x | | main.rs:2420:12:2420:12 | T | -| main.rs:2425:13:2425:14 | x1 | | {EXTERNAL LOCATION} | Option | -| main.rs:2425:13:2425:14 | x1 | T | main.rs:2393:5:2393:20 | S1 | -| main.rs:2425:13:2425:14 | x1 | T.T | main.rs:2395:5:2396:14 | S2 | -| main.rs:2425:34:2425:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2425:34:2425:48 | ...::assoc_fun(...) | T | main.rs:2393:5:2393:20 | S1 | -| main.rs:2425:34:2425:48 | ...::assoc_fun(...) | T.T | main.rs:2395:5:2396:14 | S2 | -| main.rs:2426:13:2426:14 | x2 | | {EXTERNAL LOCATION} | Option | -| main.rs:2426:13:2426:14 | x2 | T | main.rs:2393:5:2393:20 | S1 | -| main.rs:2426:13:2426:14 | x2 | T.T | main.rs:2395:5:2396:14 | S2 | -| main.rs:2426:18:2426:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2426:18:2426:38 | ...::assoc_fun(...) | T | main.rs:2393:5:2393:20 | S1 | -| main.rs:2426:18:2426:38 | ...::assoc_fun(...) | T.T | main.rs:2395:5:2396:14 | S2 | -| main.rs:2427:13:2427:14 | x3 | | {EXTERNAL LOCATION} | Option | -| main.rs:2427:13:2427:14 | x3 | T | main.rs:2393:5:2393:20 | S1 | -| main.rs:2427:13:2427:14 | x3 | T.T | main.rs:2395:5:2396:14 | S2 | -| main.rs:2427:18:2427:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2427:18:2427:32 | ...::assoc_fun(...) | T | main.rs:2393:5:2393:20 | S1 | -| main.rs:2427:18:2427:32 | ...::assoc_fun(...) | T.T | main.rs:2395:5:2396:14 | S2 | -| main.rs:2428:13:2428:14 | x4 | | main.rs:2393:5:2393:20 | S1 | -| main.rs:2428:13:2428:14 | x4 | T | main.rs:2395:5:2396:14 | S2 | -| main.rs:2428:18:2428:48 | ...::method(...) | | main.rs:2393:5:2393:20 | S1 | -| main.rs:2428:18:2428:48 | ...::method(...) | T | main.rs:2395:5:2396:14 | S2 | -| main.rs:2428:35:2428:47 | ...::default(...) | | main.rs:2393:5:2393:20 | S1 | -| main.rs:2428:35:2428:47 | ...::default(...) | T | main.rs:2395:5:2396:14 | S2 | -| main.rs:2429:13:2429:14 | x5 | | main.rs:2393:5:2393:20 | S1 | -| main.rs:2429:13:2429:14 | x5 | T | main.rs:2395:5:2396:14 | S2 | -| main.rs:2429:18:2429:42 | ...::method(...) | | main.rs:2393:5:2393:20 | S1 | -| main.rs:2429:18:2429:42 | ...::method(...) | T | main.rs:2395:5:2396:14 | S2 | -| main.rs:2429:29:2429:41 | ...::default(...) | | main.rs:2393:5:2393:20 | S1 | -| main.rs:2429:29:2429:41 | ...::default(...) | T | main.rs:2395:5:2396:14 | S2 | -| main.rs:2430:13:2430:14 | x6 | | main.rs:2414:5:2414:27 | S4 | -| main.rs:2430:13:2430:14 | x6 | T4 | main.rs:2395:5:2396:14 | S2 | -| main.rs:2430:18:2430:45 | S4::<...>(...) | | main.rs:2414:5:2414:27 | S4 | -| main.rs:2430:18:2430:45 | S4::<...>(...) | T4 | main.rs:2395:5:2396:14 | S2 | -| main.rs:2430:27:2430:44 | ...::default(...) | | main.rs:2395:5:2396:14 | S2 | -| main.rs:2431:13:2431:14 | x7 | | main.rs:2414:5:2414:27 | S4 | -| main.rs:2431:13:2431:14 | x7 | T4 | main.rs:2395:5:2396:14 | S2 | -| main.rs:2431:18:2431:23 | S4(...) | | main.rs:2414:5:2414:27 | S4 | -| main.rs:2431:18:2431:23 | S4(...) | T4 | main.rs:2395:5:2396:14 | S2 | -| main.rs:2431:21:2431:22 | S2 | | main.rs:2395:5:2396:14 | S2 | -| main.rs:2432:13:2432:14 | x8 | | main.rs:2414:5:2414:27 | S4 | -| main.rs:2432:13:2432:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 | -| main.rs:2432:18:2432:22 | S4(...) | | main.rs:2414:5:2414:27 | S4 | -| main.rs:2432:18:2432:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 | -| main.rs:2432:21:2432:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2433:13:2433:14 | x9 | | main.rs:2414:5:2414:27 | S4 | -| main.rs:2433:13:2433:14 | x9 | T4 | main.rs:2395:5:2396:14 | S2 | -| main.rs:2433:18:2433:34 | S4(...) | | main.rs:2414:5:2414:27 | S4 | -| main.rs:2433:18:2433:34 | S4(...) | T4 | main.rs:2395:5:2396:14 | S2 | -| main.rs:2433:21:2433:33 | ...::default(...) | | main.rs:2395:5:2396:14 | S2 | -| main.rs:2434:13:2434:15 | x10 | | main.rs:2416:5:2418:5 | S5 | -| main.rs:2434:13:2434:15 | x10 | T5 | main.rs:2395:5:2396:14 | S2 | -| main.rs:2434:19:2437:9 | S5::<...> {...} | | main.rs:2416:5:2418:5 | S5 | -| main.rs:2434:19:2437:9 | S5::<...> {...} | T5 | main.rs:2395:5:2396:14 | S2 | -| main.rs:2436:20:2436:37 | ...::default(...) | | main.rs:2395:5:2396:14 | S2 | -| main.rs:2438:13:2438:15 | x11 | | main.rs:2416:5:2418:5 | S5 | -| main.rs:2438:13:2438:15 | x11 | T5 | main.rs:2395:5:2396:14 | S2 | -| main.rs:2438:19:2438:34 | S5 {...} | | main.rs:2416:5:2418:5 | S5 | -| main.rs:2438:19:2438:34 | S5 {...} | T5 | main.rs:2395:5:2396:14 | S2 | -| main.rs:2438:31:2438:32 | S2 | | main.rs:2395:5:2396:14 | S2 | -| main.rs:2439:13:2439:15 | x12 | | main.rs:2416:5:2418:5 | S5 | -| main.rs:2439:13:2439:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:2439:19:2439:33 | S5 {...} | | main.rs:2416:5:2418:5 | S5 | -| main.rs:2439:19:2439:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:2439:31:2439:31 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2440:13:2440:15 | x13 | | main.rs:2416:5:2418:5 | S5 | -| main.rs:2440:13:2440:15 | x13 | T5 | main.rs:2395:5:2396:14 | S2 | -| main.rs:2440:19:2443:9 | S5 {...} | | main.rs:2416:5:2418:5 | S5 | -| main.rs:2440:19:2443:9 | S5 {...} | T5 | main.rs:2395:5:2396:14 | S2 | -| main.rs:2442:20:2442:32 | ...::default(...) | | main.rs:2395:5:2396:14 | S2 | -| main.rs:2444:13:2444:15 | x14 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2444:19:2444:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2444:30:2444:47 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2453:35:2455:9 | { ... } | | file://:0:0:0:0 | (T_2) | -| main.rs:2453:35:2455:9 | { ... } | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2453:35:2455:9 | { ... } | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2454:13:2454:26 | TupleExpr | | file://:0:0:0:0 | (T_2) | -| main.rs:2454:13:2454:26 | TupleExpr | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2454:13:2454:26 | TupleExpr | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2454:14:2454:18 | S1 {...} | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2454:21:2454:25 | S1 {...} | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2456:16:2456:19 | SelfParam | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2460:13:2460:13 | a | | file://:0:0:0:0 | (T_2) | -| main.rs:2460:13:2460:13 | a | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2460:13:2460:13 | a | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2460:17:2460:30 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2460:17:2460:30 | ...::get_pair(...) | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2460:17:2460:30 | ...::get_pair(...) | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2461:17:2461:17 | b | | file://:0:0:0:0 | (T_2) | -| main.rs:2461:17:2461:17 | b | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2461:17:2461:17 | b | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2461:21:2461:34 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2461:21:2461:34 | ...::get_pair(...) | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2461:21:2461:34 | ...::get_pair(...) | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2462:13:2462:18 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2462:13:2462:18 | TuplePat | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2462:13:2462:18 | TuplePat | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2462:14:2462:14 | c | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2462:17:2462:17 | d | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2462:22:2462:35 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2462:22:2462:35 | ...::get_pair(...) | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2462:22:2462:35 | ...::get_pair(...) | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2463:13:2463:22 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2463:13:2463:22 | TuplePat | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2463:13:2463:22 | TuplePat | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2463:18:2463:18 | e | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2463:21:2463:21 | f | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2463:26:2463:39 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2463:26:2463:39 | ...::get_pair(...) | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2463:26:2463:39 | ...::get_pair(...) | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2464:13:2464:26 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2464:13:2464:26 | TuplePat | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2464:13:2464:26 | TuplePat | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2464:18:2464:18 | g | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2464:25:2464:25 | h | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2464:30:2464:43 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2464:30:2464:43 | ...::get_pair(...) | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2464:30:2464:43 | ...::get_pair(...) | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2466:9:2466:9 | a | | file://:0:0:0:0 | (T_2) | -| main.rs:2466:9:2466:9 | a | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2466:9:2466:9 | a | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2466:9:2466:11 | a.0 | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2467:9:2467:9 | b | | file://:0:0:0:0 | (T_2) | -| main.rs:2467:9:2467:9 | b | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2467:9:2467:9 | b | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2467:9:2467:11 | b.1 | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2468:9:2468:9 | c | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2469:9:2469:9 | d | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2470:9:2470:9 | e | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2471:9:2471:9 | f | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2472:9:2472:9 | g | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2473:9:2473:9 | h | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2478:13:2478:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2478:17:2478:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2479:13:2479:13 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2479:17:2479:34 | ...::default(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2480:13:2480:16 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2480:13:2480:16 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2480:13:2480:16 | pair | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2480:20:2480:25 | TupleExpr | | file://:0:0:0:0 | (T_2) | -| main.rs:2480:20:2480:25 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2480:20:2480:25 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2480:21:2480:21 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2480:24:2480:24 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2481:13:2481:13 | i | | {EXTERNAL LOCATION} | i64 | -| main.rs:2481:22:2481:25 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2481:22:2481:25 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2481:22:2481:25 | pair | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2481:22:2481:27 | pair.0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2482:13:2482:13 | j | | {EXTERNAL LOCATION} | bool | -| main.rs:2482:23:2482:26 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2482:23:2482:26 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2482:23:2482:26 | pair | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2482:23:2482:28 | pair.1 | | {EXTERNAL LOCATION} | bool | -| main.rs:2484:13:2484:16 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2484:13:2484:16 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2484:13:2484:16 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2484:20:2484:25 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2484:20:2484:25 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2484:20:2484:32 | ... .into() | | file://:0:0:0:0 | (T_2) | -| main.rs:2484:20:2484:32 | ... .into() | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2484:20:2484:32 | ... .into() | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2484:21:2484:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2484:24:2484:24 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2485:15:2485:18 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2485:15:2485:18 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2485:15:2485:18 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2486:13:2486:18 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2486:13:2486:18 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2486:13:2486:18 | TuplePat | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2486:14:2486:14 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2486:17:2486:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2486:30:2486:41 | "unexpected" | | file://:0:0:0:0 | & | -| main.rs:2486:30:2486:41 | "unexpected" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2486:30:2486:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2486:30:2486:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2487:13:2487:13 | _ | | file://:0:0:0:0 | (T_2) | -| main.rs:2487:13:2487:13 | _ | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2487:13:2487:13 | _ | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2487:25:2487:34 | "expected" | | file://:0:0:0:0 | & | -| main.rs:2487:25:2487:34 | "expected" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2487:25:2487:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2487:25:2487:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2489:13:2489:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2489:17:2489:20 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2489:17:2489:20 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2489:17:2489:20 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2489:17:2489:22 | pair.0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2491:13:2491:13 | y | | file://:0:0:0:0 | & | -| main.rs:2491:13:2491:13 | y | &T | file://:0:0:0:0 | (T_2) | -| main.rs:2491:13:2491:13 | y | &T.0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2491:13:2491:13 | y | &T.1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2491:17:2491:31 | &... | | file://:0:0:0:0 | & | -| main.rs:2491:17:2491:31 | &... | &T | file://:0:0:0:0 | (T_2) | -| main.rs:2491:17:2491:31 | &... | &T.0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2491:17:2491:31 | &... | &T.1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2491:18:2491:31 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2491:18:2491:31 | ...::get_pair(...) | 0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2491:18:2491:31 | ...::get_pair(...) | 1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2492:9:2492:9 | y | | file://:0:0:0:0 | & | -| main.rs:2492:9:2492:9 | y | &T | file://:0:0:0:0 | (T_2) | -| main.rs:2492:9:2492:9 | y | &T.0(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2492:9:2492:9 | y | &T.1(2) | main.rs:2449:5:2450:16 | S1 | -| main.rs:2492:9:2492:11 | y.0 | | main.rs:2449:5:2450:16 | S1 | -| main.rs:2499:13:2499:23 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2499:13:2499:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | -| main.rs:2499:13:2499:23 | boxed_value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2499:27:2499:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2499:27:2499:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2499:27:2499:42 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2499:36:2499:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2502:15:2502:25 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2502:15:2502:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | -| main.rs:2502:15:2502:25 | boxed_value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2503:13:2503:19 | box 100 | | {EXTERNAL LOCATION} | Box | -| main.rs:2503:13:2503:19 | box 100 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2503:13:2503:19 | box 100 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2503:17:2503:19 | 100 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2504:26:2504:36 | "Boxed 100\\n" | | file://:0:0:0:0 | & | -| main.rs:2504:26:2504:36 | "Boxed 100\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2504:26:2504:36 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2504:26:2504:36 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2506:13:2506:17 | box ... | | {EXTERNAL LOCATION} | Box | -| main.rs:2506:13:2506:17 | box ... | A | {EXTERNAL LOCATION} | Global | -| main.rs:2506:13:2506:17 | box ... | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2508:26:2508:42 | "Boxed value: {}\\n" | | file://:0:0:0:0 | & | -| main.rs:2508:26:2508:42 | "Boxed value: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2508:26:2508:51 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2508:26:2508:51 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2513:13:2513:22 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2513:13:2513:22 | nested_box | A | {EXTERNAL LOCATION} | Global | -| main.rs:2513:13:2513:22 | nested_box | T | {EXTERNAL LOCATION} | Box | -| main.rs:2513:13:2513:22 | nested_box | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2513:13:2513:22 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2513:26:2513:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2513:26:2513:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2513:26:2513:50 | ...::new(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2513:26:2513:50 | ...::new(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2513:26:2513:50 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2513:35:2513:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2513:35:2513:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2513:35:2513:49 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2513:44:2513:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2514:15:2514:24 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2514:15:2514:24 | nested_box | A | {EXTERNAL LOCATION} | Global | -| main.rs:2514:15:2514:24 | nested_box | T | {EXTERNAL LOCATION} | Box | -| main.rs:2514:15:2514:24 | nested_box | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2514:15:2514:24 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2515:13:2515:21 | box ... | | {EXTERNAL LOCATION} | Box | -| main.rs:2515:13:2515:21 | box ... | A | {EXTERNAL LOCATION} | Global | -| main.rs:2515:13:2515:21 | box ... | T | {EXTERNAL LOCATION} | Box | -| main.rs:2515:13:2515:21 | box ... | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2515:13:2515:21 | box ... | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2517:26:2517:43 | "Nested boxed: {}\\n" | | file://:0:0:0:0 | & | -| main.rs:2517:26:2517:43 | "Nested boxed: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2517:26:2517:59 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2517:26:2517:59 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2529:21:2529:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2529:21:2529:25 | SelfParam | &T | main.rs:2528:5:2531:5 | Self [trait Executor] | -| main.rs:2530:24:2530:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2530:24:2530:28 | SelfParam | &T | main.rs:2528:5:2531:5 | Self [trait Executor] | -| main.rs:2530:31:2530:35 | query | | main.rs:2530:21:2530:21 | E | -| main.rs:2534:21:2534:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2534:21:2534:25 | SelfParam | &T | main.rs:2533:10:2533:22 | T | -| main.rs:2535:22:2535:41 | "Executor::execute1\\n" | | file://:0:0:0:0 | & | -| main.rs:2535:22:2535:41 | "Executor::execute1\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2535:22:2535:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2535:22:2535:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2538:24:2538:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2538:24:2538:28 | SelfParam | &T | main.rs:2533:10:2533:22 | T | -| main.rs:2538:31:2538:36 | _query | | main.rs:2538:21:2538:21 | E | -| main.rs:2539:22:2539:41 | "Executor::execute2\\n" | | file://:0:0:0:0 | & | -| main.rs:2539:22:2539:41 | "Executor::execute2\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2539:22:2539:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2539:22:2539:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2548:13:2548:13 | c | | main.rs:2543:5:2543:29 | MySqlConnection | -| main.rs:2548:17:2548:34 | MySqlConnection {...} | | main.rs:2543:5:2543:29 | MySqlConnection | -| main.rs:2550:9:2550:9 | c | | main.rs:2543:5:2543:29 | MySqlConnection | -| main.rs:2551:35:2551:36 | &c | | file://:0:0:0:0 | & | -| main.rs:2551:35:2551:36 | &c | &T | main.rs:2543:5:2543:29 | MySqlConnection | -| main.rs:2551:36:2551:36 | c | | main.rs:2543:5:2543:29 | MySqlConnection | -| main.rs:2553:9:2553:9 | c | | main.rs:2543:5:2543:29 | MySqlConnection | -| main.rs:2553:20:2553:40 | "SELECT * FROM users" | | file://:0:0:0:0 | & | -| main.rs:2553:20:2553:40 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2554:9:2554:9 | c | | main.rs:2543:5:2543:29 | MySqlConnection | -| main.rs:2554:28:2554:48 | "SELECT * FROM users" | | file://:0:0:0:0 | & | -| main.rs:2554:28:2554:48 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2555:35:2555:36 | &c | | file://:0:0:0:0 | & | -| main.rs:2555:35:2555:36 | &c | &T | main.rs:2543:5:2543:29 | MySqlConnection | -| main.rs:2555:36:2555:36 | c | | main.rs:2543:5:2543:29 | MySqlConnection | -| main.rs:2555:39:2555:59 | "SELECT * FROM users" | | file://:0:0:0:0 | & | -| main.rs:2555:39:2555:59 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2556:43:2556:44 | &c | | file://:0:0:0:0 | & | -| main.rs:2556:43:2556:44 | &c | &T | main.rs:2543:5:2543:29 | MySqlConnection | -| main.rs:2556:44:2556:44 | c | | main.rs:2543:5:2543:29 | MySqlConnection | -| main.rs:2556:47:2556:67 | "SELECT * FROM users" | | file://:0:0:0:0 | & | -| main.rs:2556:47:2556:67 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2566:36:2568:9 | { ... } | | main.rs:2563:5:2563:22 | Path | -| main.rs:2567:13:2567:19 | Path {...} | | main.rs:2563:5:2563:22 | Path | -| main.rs:2570:29:2570:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2570:29:2570:33 | SelfParam | &T | main.rs:2563:5:2563:22 | Path | -| main.rs:2570:59:2572:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:2570:59:2572:9 | { ... } | E | file://:0:0:0:0 | () | -| main.rs:2570:59:2572:9 | { ... } | T | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2571:13:2571:30 | Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2571:13:2571:30 | Ok(...) | E | file://:0:0:0:0 | () | -| main.rs:2571:13:2571:30 | Ok(...) | T | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2571:16:2571:29 | ...::new(...) | | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2578:39:2580:9 | { ... } | | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2579:13:2579:22 | PathBuf {...} | | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2588:18:2588:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2588:18:2588:22 | SelfParam | &T | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2588:34:2592:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:2588:34:2592:9 | { ... } | &T | main.rs:2563:5:2563:22 | Path | -| main.rs:2590:33:2590:43 | ...::new(...) | | main.rs:2563:5:2563:22 | Path | -| main.rs:2591:13:2591:17 | &path | | file://:0:0:0:0 | & | -| main.rs:2591:13:2591:17 | &path | &T | main.rs:2563:5:2563:22 | Path | -| main.rs:2591:14:2591:17 | path | | main.rs:2563:5:2563:22 | Path | -| main.rs:2596:13:2596:17 | path1 | | main.rs:2563:5:2563:22 | Path | -| main.rs:2596:21:2596:31 | ...::new(...) | | main.rs:2563:5:2563:22 | Path | -| main.rs:2597:13:2597:17 | path2 | | {EXTERNAL LOCATION} | Result | -| main.rs:2597:13:2597:17 | path2 | E | file://:0:0:0:0 | () | -| main.rs:2597:13:2597:17 | path2 | T | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2597:21:2597:25 | path1 | | main.rs:2563:5:2563:22 | Path | -| main.rs:2597:21:2597:40 | path1.canonicalize() | | {EXTERNAL LOCATION} | Result | -| main.rs:2597:21:2597:40 | path1.canonicalize() | E | file://:0:0:0:0 | () | -| main.rs:2597:21:2597:40 | path1.canonicalize() | T | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2598:13:2598:17 | path3 | | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2598:21:2598:25 | path2 | | {EXTERNAL LOCATION} | Result | -| main.rs:2598:21:2598:25 | path2 | E | file://:0:0:0:0 | () | -| main.rs:2598:21:2598:25 | path2 | T | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2598:21:2598:34 | path2.unwrap() | | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2600:13:2600:20 | pathbuf1 | | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2600:24:2600:37 | ...::new(...) | | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2601:24:2601:31 | pathbuf1 | | main.rs:2575:5:2575:25 | PathBuf | -| main.rs:2612:5:2612:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2613:5:2613:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2613:20:2613:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2613:41:2613:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2629:5:2629:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2336:13:2336:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2336:18:2336:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2336:18:2336:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2336:18:2336:38 | ... .into_iter() | | {EXTERNAL LOCATION} | IntoIter | +| main.rs:2336:18:2336:38 | ... .into_iter() | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2336:19:2336:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2336:22:2336:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2336:25:2336:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2338:13:2338:17 | vals1 | | file://:0:0:0:0 | [] | +| main.rs:2338:13:2338:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2338:13:2338:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2338:21:2338:31 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2338:21:2338:31 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2338:21:2338:31 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2338:22:2338:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2338:27:2338:27 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2338:27:2338:27 | 2 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2338:30:2338:30 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2338:30:2338:30 | 3 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2339:13:2339:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2339:13:2339:13 | u | | {EXTERNAL LOCATION} | u8 | +| main.rs:2339:18:2339:22 | vals1 | | file://:0:0:0:0 | [] | +| main.rs:2339:18:2339:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2339:18:2339:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2341:13:2341:17 | vals2 | | file://:0:0:0:0 | [] | +| main.rs:2341:13:2341:17 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2341:21:2341:29 | [1u16; 3] | | file://:0:0:0:0 | [] | +| main.rs:2341:21:2341:29 | [1u16; 3] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2341:22:2341:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2341:28:2341:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2342:13:2342:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2342:18:2342:22 | vals2 | | file://:0:0:0:0 | [] | +| main.rs:2342:18:2342:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2344:13:2344:17 | vals3 | | file://:0:0:0:0 | [] | +| main.rs:2344:13:2344:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2344:26:2344:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2344:31:2344:39 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2344:31:2344:39 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2344:31:2344:39 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2344:32:2344:32 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2344:32:2344:32 | 1 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2344:35:2344:35 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2344:35:2344:35 | 2 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2344:38:2344:38 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2344:38:2344:38 | 3 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2345:13:2345:13 | u | | {EXTERNAL LOCATION} | u32 | +| main.rs:2345:18:2345:22 | vals3 | | file://:0:0:0:0 | [] | +| main.rs:2345:18:2345:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2347:13:2347:17 | vals4 | | file://:0:0:0:0 | [] | +| main.rs:2347:13:2347:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2347:26:2347:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2347:31:2347:36 | [1; 3] | | file://:0:0:0:0 | [] | +| main.rs:2347:31:2347:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2347:31:2347:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2347:32:2347:32 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2347:32:2347:32 | 1 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2347:35:2347:35 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2348:13:2348:13 | u | | {EXTERNAL LOCATION} | u64 | +| main.rs:2348:18:2348:22 | vals4 | | file://:0:0:0:0 | [] | +| main.rs:2348:18:2348:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2350:17:2350:24 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2350:17:2350:24 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2350:17:2350:24 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2350:28:2350:48 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2350:28:2350:48 | [...] | [T;...] | file://:0:0:0:0 | & | +| main.rs:2350:28:2350:48 | [...] | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2350:29:2350:33 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2350:29:2350:33 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2350:36:2350:40 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2350:36:2350:40 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2350:43:2350:47 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2350:43:2350:47 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2351:13:2351:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2351:13:2351:13 | s | | file://:0:0:0:0 | & | +| main.rs:2351:13:2351:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2351:13:2351:13 | s | &T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2351:18:2351:26 | &strings1 | | file://:0:0:0:0 | & | +| main.rs:2351:18:2351:26 | &strings1 | &T | file://:0:0:0:0 | [] | +| main.rs:2351:18:2351:26 | &strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2351:18:2351:26 | &strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2351:19:2351:26 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2351:19:2351:26 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2351:19:2351:26 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2352:13:2352:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2352:13:2352:13 | s | | file://:0:0:0:0 | & | +| main.rs:2352:13:2352:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2352:13:2352:13 | s | &T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2352:18:2352:30 | &mut strings1 | | file://:0:0:0:0 | & | +| main.rs:2352:18:2352:30 | &mut strings1 | &T | file://:0:0:0:0 | [] | +| main.rs:2352:18:2352:30 | &mut strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2352:18:2352:30 | &mut strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2352:23:2352:30 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2352:23:2352:30 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2352:23:2352:30 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2353:13:2353:13 | s | | file://:0:0:0:0 | & | +| main.rs:2353:13:2353:13 | s | &T | {EXTERNAL LOCATION} | str | +| main.rs:2353:18:2353:25 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2353:18:2353:25 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2353:18:2353:25 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2355:13:2355:20 | strings2 | | file://:0:0:0:0 | [] | +| main.rs:2355:13:2355:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2356:9:2360:9 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2356:9:2360:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2357:13:2357:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2357:26:2357:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2357:26:2357:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2358:13:2358:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2358:26:2358:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2358:26:2358:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2359:13:2359:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2359:26:2359:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2359:26:2359:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2361:13:2361:13 | s | | {EXTERNAL LOCATION} | String | +| main.rs:2361:18:2361:25 | strings2 | | file://:0:0:0:0 | [] | +| main.rs:2361:18:2361:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2363:13:2363:20 | strings3 | | file://:0:0:0:0 | & | +| main.rs:2363:13:2363:20 | strings3 | &T | file://:0:0:0:0 | [] | +| main.rs:2363:13:2363:20 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2364:9:2368:9 | &... | | file://:0:0:0:0 | & | +| main.rs:2364:9:2368:9 | &... | &T | file://:0:0:0:0 | [] | +| main.rs:2364:9:2368:9 | &... | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2364:10:2368:9 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2364:10:2368:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2365:13:2365:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2365:26:2365:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2365:26:2365:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2366:13:2366:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2366:26:2366:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2366:26:2366:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2367:13:2367:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2367:26:2367:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2367:26:2367:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2369:13:2369:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2369:13:2369:13 | s | | file://:0:0:0:0 | & | +| main.rs:2369:13:2369:13 | s | &T | {EXTERNAL LOCATION} | String | +| main.rs:2369:18:2369:25 | strings3 | | file://:0:0:0:0 | & | +| main.rs:2369:18:2369:25 | strings3 | &T | file://:0:0:0:0 | [] | +| main.rs:2369:18:2369:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2371:13:2371:21 | callables | | file://:0:0:0:0 | [] | +| main.rs:2371:13:2371:21 | callables | [T;...] | main.rs:2319:5:2319:24 | MyCallable | +| main.rs:2371:25:2371:81 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2371:25:2371:81 | [...] | [T;...] | main.rs:2319:5:2319:24 | MyCallable | +| main.rs:2371:26:2371:42 | ...::new(...) | | main.rs:2319:5:2319:24 | MyCallable | +| main.rs:2371:45:2371:61 | ...::new(...) | | main.rs:2319:5:2319:24 | MyCallable | +| main.rs:2371:64:2371:80 | ...::new(...) | | main.rs:2319:5:2319:24 | MyCallable | +| main.rs:2372:13:2372:13 | c | | main.rs:2319:5:2319:24 | MyCallable | +| main.rs:2373:12:2373:20 | callables | | file://:0:0:0:0 | [] | +| main.rs:2373:12:2373:20 | callables | [T;...] | main.rs:2319:5:2319:24 | MyCallable | +| main.rs:2375:17:2375:22 | result | | {EXTERNAL LOCATION} | i64 | +| main.rs:2375:26:2375:26 | c | | main.rs:2319:5:2319:24 | MyCallable | +| main.rs:2375:26:2375:33 | c.call() | | {EXTERNAL LOCATION} | i64 | +| main.rs:2380:13:2380:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2380:13:2380:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2380:18:2380:18 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2380:18:2380:22 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2380:18:2380:22 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2380:21:2380:22 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2381:13:2381:13 | u | | {EXTERNAL LOCATION} | Range | +| main.rs:2381:13:2381:13 | u | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2381:13:2381:13 | u | Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2381:18:2381:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2381:18:2381:26 | [...] | [T;...] | {EXTERNAL LOCATION} | Range | +| main.rs:2381:18:2381:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2381:18:2381:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2381:19:2381:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2381:19:2381:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2381:19:2381:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2381:19:2381:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2381:24:2381:25 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2381:24:2381:25 | 10 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2382:13:2382:17 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2382:13:2382:17 | range | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2382:21:2382:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2382:21:2382:25 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2382:21:2382:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2382:24:2382:25 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2383:13:2383:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2383:13:2383:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2383:18:2383:22 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2383:18:2383:22 | range | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2384:13:2384:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2384:26:2384:27 | .. | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2385:13:2385:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2385:18:2385:48 | &... | | file://:0:0:0:0 | & | +| main.rs:2385:19:2385:36 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2385:19:2385:36 | [...] | [T;...] | {EXTERNAL LOCATION} | i64 | +| main.rs:2385:20:2385:23 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2385:26:2385:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2385:32:2385:35 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2385:38:2385:47 | range_full | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2387:13:2387:18 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2387:13:2387:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2388:9:2391:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | +| main.rs:2388:9:2391:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2389:20:2389:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2390:18:2390:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2392:13:2392:13 | u | | {EXTERNAL LOCATION} | Item | +| main.rs:2392:13:2392:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2392:18:2392:23 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2392:18:2392:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2396:26:2396:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2396:29:2396:29 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2396:32:2396:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2399:13:2399:18 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2399:13:2399:18 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2399:13:2399:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2399:32:2399:43 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2399:32:2399:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2399:32:2399:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2399:32:2399:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | +| main.rs:2399:32:2399:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | +| main.rs:2399:32:2399:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2399:33:2399:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2399:39:2399:39 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2399:39:2399:39 | 2 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2399:42:2399:42 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2399:42:2399:42 | 3 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2400:13:2400:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2400:13:2400:13 | u | | file://:0:0:0:0 | & | +| main.rs:2400:18:2400:23 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2400:18:2400:23 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2400:18:2400:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2402:22:2402:33 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2402:22:2402:33 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2402:22:2402:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2402:23:2402:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2402:29:2402:29 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2402:29:2402:29 | 2 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2402:32:2402:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2402:32:2402:32 | 3 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2405:13:2405:17 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2405:13:2405:17 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2405:13:2405:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2405:13:2405:17 | vals5 | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2405:21:2405:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2405:21:2405:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2405:21:2405:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2405:21:2405:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2405:31:2405:42 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2405:31:2405:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2405:31:2405:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2405:32:2405:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2405:38:2405:38 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2405:38:2405:38 | 2 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2405:41:2405:41 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2405:41:2405:41 | 3 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2406:13:2406:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2406:13:2406:13 | u | | {EXTERNAL LOCATION} | u32 | +| main.rs:2406:13:2406:13 | u | | file://:0:0:0:0 | & | +| main.rs:2406:18:2406:22 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2406:18:2406:22 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2406:18:2406:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2406:18:2406:22 | vals5 | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2408:13:2408:17 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2408:13:2408:17 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2408:13:2408:17 | vals6 | T | file://:0:0:0:0 | & | +| main.rs:2408:13:2408:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2408:32:2408:43 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2408:32:2408:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2408:32:2408:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2408:32:2408:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | +| main.rs:2408:32:2408:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | +| main.rs:2408:32:2408:60 | ... .collect() | T | file://:0:0:0:0 | & | +| main.rs:2408:32:2408:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2408:33:2408:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2408:39:2408:39 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2408:39:2408:39 | 2 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2408:42:2408:42 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2408:42:2408:42 | 3 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2409:13:2409:13 | u | | file://:0:0:0:0 | & | +| main.rs:2409:13:2409:13 | u | &T | {EXTERNAL LOCATION} | u64 | +| main.rs:2409:18:2409:22 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2409:18:2409:22 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2409:18:2409:22 | vals6 | T | file://:0:0:0:0 | & | +| main.rs:2409:18:2409:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2411:17:2411:21 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2411:17:2411:21 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2411:17:2411:21 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2411:25:2411:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2411:25:2411:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2411:25:2411:34 | ...::new(...) | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2412:9:2412:13 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2412:9:2412:13 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2412:9:2412:13 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2412:20:2412:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2413:13:2413:13 | u | | {EXTERNAL LOCATION} | u8 | +| main.rs:2413:13:2413:13 | u | | file://:0:0:0:0 | & | +| main.rs:2413:18:2413:22 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2413:18:2413:22 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2413:18:2413:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2415:33:2415:33 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2415:36:2415:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2415:45:2415:45 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2415:48:2415:48 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2422:17:2422:20 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2422:17:2422:20 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2422:17:2422:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2422:17:2422:20 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2422:17:2422:20 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2422:17:2422:20 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2422:17:2422:20 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2422:24:2422:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2422:24:2422:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2422:24:2422:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2422:24:2422:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | +| main.rs:2422:24:2422:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2422:24:2422:55 | ...::new(...) | V.T | file://:0:0:0:0 | & | +| main.rs:2422:24:2422:55 | ...::new(...) | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2423:9:2423:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2423:9:2423:12 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2423:9:2423:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2423:9:2423:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2423:9:2423:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2423:9:2423:12 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2423:9:2423:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2423:9:2423:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2423:9:2423:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2423:9:2423:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2423:9:2423:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | +| main.rs:2423:9:2423:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2423:21:2423:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2423:24:2423:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2423:24:2423:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2423:24:2423:38 | ...::new(...) | T | file://:0:0:0:0 | & | +| main.rs:2423:24:2423:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2423:33:2423:37 | "one" | | file://:0:0:0:0 | & | +| main.rs:2423:33:2423:37 | "one" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2424:9:2424:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2424:9:2424:12 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2424:9:2424:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2424:9:2424:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2424:9:2424:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2424:9:2424:12 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2424:9:2424:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2424:9:2424:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2424:9:2424:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2424:9:2424:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2424:9:2424:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | +| main.rs:2424:9:2424:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2424:21:2424:21 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2424:24:2424:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2424:24:2424:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2424:24:2424:38 | ...::new(...) | T | file://:0:0:0:0 | & | +| main.rs:2424:24:2424:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2424:33:2424:37 | "two" | | file://:0:0:0:0 | & | +| main.rs:2424:33:2424:37 | "two" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2425:13:2425:15 | key | | {EXTERNAL LOCATION} | Item | +| main.rs:2425:13:2425:15 | key | | file://:0:0:0:0 | & | +| main.rs:2425:13:2425:15 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2425:20:2425:23 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2425:20:2425:23 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2425:20:2425:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2425:20:2425:23 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2425:20:2425:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2425:20:2425:23 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2425:20:2425:23 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2425:20:2425:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | +| main.rs:2425:20:2425:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2425:20:2425:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2425:20:2425:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2425:20:2425:30 | map1.keys() | V.T | file://:0:0:0:0 | & | +| main.rs:2425:20:2425:30 | map1.keys() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2426:13:2426:17 | value | | {EXTERNAL LOCATION} | Item | +| main.rs:2426:13:2426:17 | value | | file://:0:0:0:0 | & | +| main.rs:2426:13:2426:17 | value | &T | {EXTERNAL LOCATION} | Box | +| main.rs:2426:13:2426:17 | value | &T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2426:13:2426:17 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2426:13:2426:17 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2426:22:2426:25 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2426:22:2426:25 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2426:22:2426:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2426:22:2426:25 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2426:22:2426:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2426:22:2426:25 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2426:22:2426:25 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2426:22:2426:34 | map1.values() | | {EXTERNAL LOCATION} | Values | +| main.rs:2426:22:2426:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2426:22:2426:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2426:22:2426:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2426:22:2426:34 | map1.values() | V.T | file://:0:0:0:0 | & | +| main.rs:2426:22:2426:34 | map1.values() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2427:13:2427:24 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2427:13:2427:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | +| main.rs:2427:13:2427:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | +| main.rs:2427:13:2427:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | +| main.rs:2427:13:2427:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | +| main.rs:2427:13:2427:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2427:13:2427:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | +| main.rs:2427:13:2427:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2427:14:2427:16 | key | | file://:0:0:0:0 | & | +| main.rs:2427:14:2427:16 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2427:19:2427:23 | value | | file://:0:0:0:0 | & | +| main.rs:2427:19:2427:23 | value | &T | {EXTERNAL LOCATION} | Box | +| main.rs:2427:19:2427:23 | value | &T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2427:19:2427:23 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2427:19:2427:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2427:29:2427:32 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2427:29:2427:32 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2427:29:2427:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2427:29:2427:32 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2427:29:2427:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2427:29:2427:32 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2427:29:2427:32 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2427:29:2427:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | +| main.rs:2427:29:2427:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2427:29:2427:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2427:29:2427:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2427:29:2427:39 | map1.iter() | V.T | file://:0:0:0:0 | & | +| main.rs:2427:29:2427:39 | map1.iter() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2428:13:2428:24 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2428:13:2428:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | +| main.rs:2428:13:2428:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | +| main.rs:2428:13:2428:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | +| main.rs:2428:13:2428:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | +| main.rs:2428:13:2428:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2428:13:2428:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | +| main.rs:2428:13:2428:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2428:14:2428:16 | key | | file://:0:0:0:0 | & | +| main.rs:2428:14:2428:16 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2428:19:2428:23 | value | | file://:0:0:0:0 | & | +| main.rs:2428:19:2428:23 | value | &T | {EXTERNAL LOCATION} | Box | +| main.rs:2428:19:2428:23 | value | &T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2428:19:2428:23 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2428:19:2428:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2428:29:2428:33 | &map1 | | file://:0:0:0:0 | & | +| main.rs:2428:29:2428:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | +| main.rs:2428:29:2428:33 | &map1 | &T.K | {EXTERNAL LOCATION} | i32 | +| main.rs:2428:29:2428:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2428:29:2428:33 | &map1 | &T.V | {EXTERNAL LOCATION} | Box | +| main.rs:2428:29:2428:33 | &map1 | &T.V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2428:29:2428:33 | &map1 | &T.V.T | file://:0:0:0:0 | & | +| main.rs:2428:29:2428:33 | &map1 | &T.V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2428:30:2428:33 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2428:30:2428:33 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2428:30:2428:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2428:30:2428:33 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2428:30:2428:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2428:30:2428:33 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2428:30:2428:33 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2432:17:2432:17 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2432:26:2432:26 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2432:26:2432:26 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2434:23:2434:23 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2434:23:2434:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2434:27:2434:28 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2434:27:2434:28 | 10 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2436:13:2436:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2436:13:2436:18 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:2436:18:2436:18 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2448:40:2450:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2448:40:2450:9 | { ... } | T | main.rs:2442:5:2442:20 | S1 | +| main.rs:2448:40:2450:9 | { ... } | T.T | main.rs:2447:10:2447:19 | T | +| main.rs:2449:13:2449:16 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2449:13:2449:16 | None | T | main.rs:2442:5:2442:20 | S1 | +| main.rs:2449:13:2449:16 | None | T.T | main.rs:2447:10:2447:19 | T | +| main.rs:2452:30:2454:9 | { ... } | | main.rs:2442:5:2442:20 | S1 | +| main.rs:2452:30:2454:9 | { ... } | T | main.rs:2447:10:2447:19 | T | +| main.rs:2453:13:2453:28 | S1(...) | | main.rs:2442:5:2442:20 | S1 | +| main.rs:2453:13:2453:28 | S1(...) | T | main.rs:2447:10:2447:19 | T | +| main.rs:2453:16:2453:27 | ...::default(...) | | main.rs:2447:10:2447:19 | T | +| main.rs:2456:19:2456:22 | SelfParam | | main.rs:2442:5:2442:20 | S1 | +| main.rs:2456:19:2456:22 | SelfParam | T | main.rs:2447:10:2447:19 | T | +| main.rs:2456:33:2458:9 | { ... } | | main.rs:2442:5:2442:20 | S1 | +| main.rs:2456:33:2458:9 | { ... } | T | main.rs:2447:10:2447:19 | T | +| main.rs:2457:13:2457:16 | self | | main.rs:2442:5:2442:20 | S1 | +| main.rs:2457:13:2457:16 | self | T | main.rs:2447:10:2447:19 | T | +| main.rs:2469:15:2469:15 | x | | main.rs:2469:12:2469:12 | T | +| main.rs:2469:26:2471:5 | { ... } | | main.rs:2469:12:2469:12 | T | +| main.rs:2470:9:2470:9 | x | | main.rs:2469:12:2469:12 | T | +| main.rs:2474:13:2474:14 | x1 | | {EXTERNAL LOCATION} | Option | +| main.rs:2474:13:2474:14 | x1 | T | main.rs:2442:5:2442:20 | S1 | +| main.rs:2474:13:2474:14 | x1 | T.T | main.rs:2444:5:2445:14 | S2 | +| main.rs:2474:34:2474:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2474:34:2474:48 | ...::assoc_fun(...) | T | main.rs:2442:5:2442:20 | S1 | +| main.rs:2474:34:2474:48 | ...::assoc_fun(...) | T.T | main.rs:2444:5:2445:14 | S2 | +| main.rs:2475:13:2475:14 | x2 | | {EXTERNAL LOCATION} | Option | +| main.rs:2475:13:2475:14 | x2 | T | main.rs:2442:5:2442:20 | S1 | +| main.rs:2475:13:2475:14 | x2 | T.T | main.rs:2444:5:2445:14 | S2 | +| main.rs:2475:18:2475:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2475:18:2475:38 | ...::assoc_fun(...) | T | main.rs:2442:5:2442:20 | S1 | +| main.rs:2475:18:2475:38 | ...::assoc_fun(...) | T.T | main.rs:2444:5:2445:14 | S2 | +| main.rs:2476:13:2476:14 | x3 | | {EXTERNAL LOCATION} | Option | +| main.rs:2476:13:2476:14 | x3 | T | main.rs:2442:5:2442:20 | S1 | +| main.rs:2476:13:2476:14 | x3 | T.T | main.rs:2444:5:2445:14 | S2 | +| main.rs:2476:18:2476:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2476:18:2476:32 | ...::assoc_fun(...) | T | main.rs:2442:5:2442:20 | S1 | +| main.rs:2476:18:2476:32 | ...::assoc_fun(...) | T.T | main.rs:2444:5:2445:14 | S2 | +| main.rs:2477:13:2477:14 | x4 | | main.rs:2442:5:2442:20 | S1 | +| main.rs:2477:13:2477:14 | x4 | T | main.rs:2444:5:2445:14 | S2 | +| main.rs:2477:18:2477:48 | ...::method(...) | | main.rs:2442:5:2442:20 | S1 | +| main.rs:2477:18:2477:48 | ...::method(...) | T | main.rs:2444:5:2445:14 | S2 | +| main.rs:2477:35:2477:47 | ...::default(...) | | main.rs:2442:5:2442:20 | S1 | +| main.rs:2477:35:2477:47 | ...::default(...) | T | main.rs:2444:5:2445:14 | S2 | +| main.rs:2478:13:2478:14 | x5 | | main.rs:2442:5:2442:20 | S1 | +| main.rs:2478:13:2478:14 | x5 | T | main.rs:2444:5:2445:14 | S2 | +| main.rs:2478:18:2478:42 | ...::method(...) | | main.rs:2442:5:2442:20 | S1 | +| main.rs:2478:18:2478:42 | ...::method(...) | T | main.rs:2444:5:2445:14 | S2 | +| main.rs:2478:29:2478:41 | ...::default(...) | | main.rs:2442:5:2442:20 | S1 | +| main.rs:2478:29:2478:41 | ...::default(...) | T | main.rs:2444:5:2445:14 | S2 | +| main.rs:2479:13:2479:14 | x6 | | main.rs:2463:5:2463:27 | S4 | +| main.rs:2479:13:2479:14 | x6 | T4 | main.rs:2444:5:2445:14 | S2 | +| main.rs:2479:18:2479:45 | S4::<...>(...) | | main.rs:2463:5:2463:27 | S4 | +| main.rs:2479:18:2479:45 | S4::<...>(...) | T4 | main.rs:2444:5:2445:14 | S2 | +| main.rs:2479:27:2479:44 | ...::default(...) | | main.rs:2444:5:2445:14 | S2 | +| main.rs:2480:13:2480:14 | x7 | | main.rs:2463:5:2463:27 | S4 | +| main.rs:2480:13:2480:14 | x7 | T4 | main.rs:2444:5:2445:14 | S2 | +| main.rs:2480:18:2480:23 | S4(...) | | main.rs:2463:5:2463:27 | S4 | +| main.rs:2480:18:2480:23 | S4(...) | T4 | main.rs:2444:5:2445:14 | S2 | +| main.rs:2480:21:2480:22 | S2 | | main.rs:2444:5:2445:14 | S2 | +| main.rs:2481:13:2481:14 | x8 | | main.rs:2463:5:2463:27 | S4 | +| main.rs:2481:13:2481:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 | +| main.rs:2481:18:2481:22 | S4(...) | | main.rs:2463:5:2463:27 | S4 | +| main.rs:2481:18:2481:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 | +| main.rs:2481:21:2481:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2482:13:2482:14 | x9 | | main.rs:2463:5:2463:27 | S4 | +| main.rs:2482:13:2482:14 | x9 | T4 | main.rs:2444:5:2445:14 | S2 | +| main.rs:2482:18:2482:34 | S4(...) | | main.rs:2463:5:2463:27 | S4 | +| main.rs:2482:18:2482:34 | S4(...) | T4 | main.rs:2444:5:2445:14 | S2 | +| main.rs:2482:21:2482:33 | ...::default(...) | | main.rs:2444:5:2445:14 | S2 | +| main.rs:2483:13:2483:15 | x10 | | main.rs:2465:5:2467:5 | S5 | +| main.rs:2483:13:2483:15 | x10 | T5 | main.rs:2444:5:2445:14 | S2 | +| main.rs:2483:19:2486:9 | S5::<...> {...} | | main.rs:2465:5:2467:5 | S5 | +| main.rs:2483:19:2486:9 | S5::<...> {...} | T5 | main.rs:2444:5:2445:14 | S2 | +| main.rs:2485:20:2485:37 | ...::default(...) | | main.rs:2444:5:2445:14 | S2 | +| main.rs:2487:13:2487:15 | x11 | | main.rs:2465:5:2467:5 | S5 | +| main.rs:2487:13:2487:15 | x11 | T5 | main.rs:2444:5:2445:14 | S2 | +| main.rs:2487:19:2487:34 | S5 {...} | | main.rs:2465:5:2467:5 | S5 | +| main.rs:2487:19:2487:34 | S5 {...} | T5 | main.rs:2444:5:2445:14 | S2 | +| main.rs:2487:31:2487:32 | S2 | | main.rs:2444:5:2445:14 | S2 | +| main.rs:2488:13:2488:15 | x12 | | main.rs:2465:5:2467:5 | S5 | +| main.rs:2488:13:2488:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:2488:19:2488:33 | S5 {...} | | main.rs:2465:5:2467:5 | S5 | +| main.rs:2488:19:2488:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:2488:31:2488:31 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2489:13:2489:15 | x13 | | main.rs:2465:5:2467:5 | S5 | +| main.rs:2489:13:2489:15 | x13 | T5 | main.rs:2444:5:2445:14 | S2 | +| main.rs:2489:19:2492:9 | S5 {...} | | main.rs:2465:5:2467:5 | S5 | +| main.rs:2489:19:2492:9 | S5 {...} | T5 | main.rs:2444:5:2445:14 | S2 | +| main.rs:2491:20:2491:32 | ...::default(...) | | main.rs:2444:5:2445:14 | S2 | +| main.rs:2493:13:2493:15 | x14 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2493:19:2493:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2493:30:2493:47 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2502:35:2504:9 | { ... } | | file://:0:0:0:0 | (T_2) | +| main.rs:2502:35:2504:9 | { ... } | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2502:35:2504:9 | { ... } | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2503:13:2503:26 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2503:13:2503:26 | TupleExpr | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2503:13:2503:26 | TupleExpr | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2503:14:2503:18 | S1 {...} | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2503:21:2503:25 | S1 {...} | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2505:16:2505:19 | SelfParam | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2509:13:2509:13 | a | | file://:0:0:0:0 | (T_2) | +| main.rs:2509:13:2509:13 | a | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2509:13:2509:13 | a | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2509:17:2509:30 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2509:17:2509:30 | ...::get_pair(...) | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2509:17:2509:30 | ...::get_pair(...) | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2510:17:2510:17 | b | | file://:0:0:0:0 | (T_2) | +| main.rs:2510:17:2510:17 | b | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2510:17:2510:17 | b | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2510:21:2510:34 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2510:21:2510:34 | ...::get_pair(...) | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2510:21:2510:34 | ...::get_pair(...) | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2511:13:2511:18 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2511:13:2511:18 | TuplePat | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2511:13:2511:18 | TuplePat | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2511:14:2511:14 | c | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2511:17:2511:17 | d | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2511:22:2511:35 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2511:22:2511:35 | ...::get_pair(...) | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2511:22:2511:35 | ...::get_pair(...) | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2512:13:2512:22 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2512:13:2512:22 | TuplePat | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2512:13:2512:22 | TuplePat | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2512:18:2512:18 | e | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2512:21:2512:21 | f | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2512:26:2512:39 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2512:26:2512:39 | ...::get_pair(...) | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2512:26:2512:39 | ...::get_pair(...) | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2513:13:2513:26 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2513:13:2513:26 | TuplePat | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2513:13:2513:26 | TuplePat | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2513:18:2513:18 | g | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2513:25:2513:25 | h | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2513:30:2513:43 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2513:30:2513:43 | ...::get_pair(...) | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2513:30:2513:43 | ...::get_pair(...) | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2515:9:2515:9 | a | | file://:0:0:0:0 | (T_2) | +| main.rs:2515:9:2515:9 | a | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2515:9:2515:9 | a | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2515:9:2515:11 | a.0 | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2516:9:2516:9 | b | | file://:0:0:0:0 | (T_2) | +| main.rs:2516:9:2516:9 | b | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2516:9:2516:9 | b | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2516:9:2516:11 | b.1 | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2517:9:2517:9 | c | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2518:9:2518:9 | d | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2519:9:2519:9 | e | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2520:9:2520:9 | f | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2521:9:2521:9 | g | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2522:9:2522:9 | h | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2527:13:2527:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2527:17:2527:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2528:13:2528:13 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2528:17:2528:34 | ...::default(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2529:13:2529:16 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2529:13:2529:16 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2529:13:2529:16 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2529:20:2529:25 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2529:20:2529:25 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2529:20:2529:25 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2529:21:2529:21 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2529:24:2529:24 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2530:13:2530:13 | i | | {EXTERNAL LOCATION} | i64 | +| main.rs:2530:22:2530:25 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2530:22:2530:25 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2530:22:2530:25 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2530:22:2530:27 | pair.0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2531:13:2531:13 | j | | {EXTERNAL LOCATION} | bool | +| main.rs:2531:23:2531:26 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2531:23:2531:26 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2531:23:2531:26 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2531:23:2531:28 | pair.1 | | {EXTERNAL LOCATION} | bool | +| main.rs:2533:13:2533:16 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2533:13:2533:16 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2533:13:2533:16 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2533:20:2533:25 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2533:20:2533:25 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2533:20:2533:32 | ... .into() | | file://:0:0:0:0 | (T_2) | +| main.rs:2533:20:2533:32 | ... .into() | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2533:20:2533:32 | ... .into() | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2533:21:2533:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2533:24:2533:24 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2534:15:2534:18 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2534:15:2534:18 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2534:15:2534:18 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2535:13:2535:18 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2535:13:2535:18 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2535:13:2535:18 | TuplePat | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2535:14:2535:14 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2535:17:2535:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2535:30:2535:41 | "unexpected" | | file://:0:0:0:0 | & | +| main.rs:2535:30:2535:41 | "unexpected" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2535:30:2535:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2535:30:2535:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2536:13:2536:13 | _ | | file://:0:0:0:0 | (T_2) | +| main.rs:2536:13:2536:13 | _ | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2536:13:2536:13 | _ | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2536:25:2536:34 | "expected" | | file://:0:0:0:0 | & | +| main.rs:2536:25:2536:34 | "expected" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2536:25:2536:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2536:25:2536:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2538:13:2538:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2538:17:2538:20 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2538:17:2538:20 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2538:17:2538:20 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2538:17:2538:22 | pair.0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2540:13:2540:13 | y | | file://:0:0:0:0 | & | +| main.rs:2540:13:2540:13 | y | &T | file://:0:0:0:0 | (T_2) | +| main.rs:2540:13:2540:13 | y | &T.0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2540:13:2540:13 | y | &T.1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2540:17:2540:31 | &... | | file://:0:0:0:0 | & | +| main.rs:2540:17:2540:31 | &... | &T | file://:0:0:0:0 | (T_2) | +| main.rs:2540:17:2540:31 | &... | &T.0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2540:17:2540:31 | &... | &T.1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2540:18:2540:31 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2540:18:2540:31 | ...::get_pair(...) | 0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2540:18:2540:31 | ...::get_pair(...) | 1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2541:9:2541:9 | y | | file://:0:0:0:0 | & | +| main.rs:2541:9:2541:9 | y | &T | file://:0:0:0:0 | (T_2) | +| main.rs:2541:9:2541:9 | y | &T.0(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2541:9:2541:9 | y | &T.1(2) | main.rs:2498:5:2499:16 | S1 | +| main.rs:2541:9:2541:11 | y.0 | | main.rs:2498:5:2499:16 | S1 | +| main.rs:2548:13:2548:23 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2548:13:2548:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2548:13:2548:23 | boxed_value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2548:27:2548:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2548:27:2548:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2548:27:2548:42 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2548:36:2548:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2551:15:2551:25 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2551:15:2551:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2551:15:2551:25 | boxed_value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2552:13:2552:19 | box 100 | | {EXTERNAL LOCATION} | Box | +| main.rs:2552:13:2552:19 | box 100 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2552:13:2552:19 | box 100 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2552:17:2552:19 | 100 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2553:26:2553:36 | "Boxed 100\\n" | | file://:0:0:0:0 | & | +| main.rs:2553:26:2553:36 | "Boxed 100\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2553:26:2553:36 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2553:26:2553:36 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2555:13:2555:17 | box ... | | {EXTERNAL LOCATION} | Box | +| main.rs:2555:13:2555:17 | box ... | A | {EXTERNAL LOCATION} | Global | +| main.rs:2555:13:2555:17 | box ... | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2557:26:2557:42 | "Boxed value: {}\\n" | | file://:0:0:0:0 | & | +| main.rs:2557:26:2557:42 | "Boxed value: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2557:26:2557:51 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2557:26:2557:51 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2562:13:2562:22 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2562:13:2562:22 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2562:13:2562:22 | nested_box | T | {EXTERNAL LOCATION} | Box | +| main.rs:2562:13:2562:22 | nested_box | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2562:13:2562:22 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2562:26:2562:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2562:26:2562:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2562:26:2562:50 | ...::new(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2562:26:2562:50 | ...::new(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2562:26:2562:50 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2562:35:2562:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2562:35:2562:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2562:35:2562:49 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2562:44:2562:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2563:15:2563:24 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2563:15:2563:24 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2563:15:2563:24 | nested_box | T | {EXTERNAL LOCATION} | Box | +| main.rs:2563:15:2563:24 | nested_box | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2563:15:2563:24 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2564:13:2564:21 | box ... | | {EXTERNAL LOCATION} | Box | +| main.rs:2564:13:2564:21 | box ... | A | {EXTERNAL LOCATION} | Global | +| main.rs:2564:13:2564:21 | box ... | T | {EXTERNAL LOCATION} | Box | +| main.rs:2564:13:2564:21 | box ... | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2564:13:2564:21 | box ... | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2566:26:2566:43 | "Nested boxed: {}\\n" | | file://:0:0:0:0 | & | +| main.rs:2566:26:2566:43 | "Nested boxed: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2566:26:2566:59 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2566:26:2566:59 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2578:21:2578:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2578:21:2578:25 | SelfParam | &T | main.rs:2577:5:2580:5 | Self [trait Executor] | +| main.rs:2579:24:2579:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2579:24:2579:28 | SelfParam | &T | main.rs:2577:5:2580:5 | Self [trait Executor] | +| main.rs:2579:31:2579:35 | query | | main.rs:2579:21:2579:21 | E | +| main.rs:2583:21:2583:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2583:21:2583:25 | SelfParam | &T | main.rs:2582:10:2582:22 | T | +| main.rs:2584:22:2584:41 | "Executor::execute1\\n" | | file://:0:0:0:0 | & | +| main.rs:2584:22:2584:41 | "Executor::execute1\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2584:22:2584:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2584:22:2584:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2587:24:2587:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2587:24:2587:28 | SelfParam | &T | main.rs:2582:10:2582:22 | T | +| main.rs:2587:31:2587:36 | _query | | main.rs:2587:21:2587:21 | E | +| main.rs:2588:22:2588:41 | "Executor::execute2\\n" | | file://:0:0:0:0 | & | +| main.rs:2588:22:2588:41 | "Executor::execute2\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2588:22:2588:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2588:22:2588:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2597:13:2597:13 | c | | main.rs:2592:5:2592:29 | MySqlConnection | +| main.rs:2597:17:2597:34 | MySqlConnection {...} | | main.rs:2592:5:2592:29 | MySqlConnection | +| main.rs:2599:9:2599:9 | c | | main.rs:2592:5:2592:29 | MySqlConnection | +| main.rs:2600:35:2600:36 | &c | | file://:0:0:0:0 | & | +| main.rs:2600:35:2600:36 | &c | &T | main.rs:2592:5:2592:29 | MySqlConnection | +| main.rs:2600:36:2600:36 | c | | main.rs:2592:5:2592:29 | MySqlConnection | +| main.rs:2602:9:2602:9 | c | | main.rs:2592:5:2592:29 | MySqlConnection | +| main.rs:2602:20:2602:40 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| main.rs:2602:20:2602:40 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2603:9:2603:9 | c | | main.rs:2592:5:2592:29 | MySqlConnection | +| main.rs:2603:28:2603:48 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| main.rs:2603:28:2603:48 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2604:35:2604:36 | &c | | file://:0:0:0:0 | & | +| main.rs:2604:35:2604:36 | &c | &T | main.rs:2592:5:2592:29 | MySqlConnection | +| main.rs:2604:36:2604:36 | c | | main.rs:2592:5:2592:29 | MySqlConnection | +| main.rs:2604:39:2604:59 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| main.rs:2604:39:2604:59 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2605:43:2605:44 | &c | | file://:0:0:0:0 | & | +| main.rs:2605:43:2605:44 | &c | &T | main.rs:2592:5:2592:29 | MySqlConnection | +| main.rs:2605:44:2605:44 | c | | main.rs:2592:5:2592:29 | MySqlConnection | +| main.rs:2605:47:2605:67 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| main.rs:2605:47:2605:67 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2615:36:2617:9 | { ... } | | main.rs:2612:5:2612:22 | Path | +| main.rs:2616:13:2616:19 | Path {...} | | main.rs:2612:5:2612:22 | Path | +| main.rs:2619:29:2619:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2619:29:2619:33 | SelfParam | &T | main.rs:2612:5:2612:22 | Path | +| main.rs:2619:59:2621:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:2619:59:2621:9 | { ... } | E | file://:0:0:0:0 | () | +| main.rs:2619:59:2621:9 | { ... } | T | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2620:13:2620:30 | Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2620:13:2620:30 | Ok(...) | E | file://:0:0:0:0 | () | +| main.rs:2620:13:2620:30 | Ok(...) | T | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2620:16:2620:29 | ...::new(...) | | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2627:39:2629:9 | { ... } | | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2628:13:2628:22 | PathBuf {...} | | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2637:18:2637:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2637:18:2637:22 | SelfParam | &T | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2637:34:2641:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:2637:34:2641:9 | { ... } | &T | main.rs:2612:5:2612:22 | Path | +| main.rs:2639:33:2639:43 | ...::new(...) | | main.rs:2612:5:2612:22 | Path | +| main.rs:2640:13:2640:17 | &path | | file://:0:0:0:0 | & | +| main.rs:2640:13:2640:17 | &path | &T | main.rs:2612:5:2612:22 | Path | +| main.rs:2640:14:2640:17 | path | | main.rs:2612:5:2612:22 | Path | +| main.rs:2645:13:2645:17 | path1 | | main.rs:2612:5:2612:22 | Path | +| main.rs:2645:21:2645:31 | ...::new(...) | | main.rs:2612:5:2612:22 | Path | +| main.rs:2646:13:2646:17 | path2 | | {EXTERNAL LOCATION} | Result | +| main.rs:2646:13:2646:17 | path2 | E | file://:0:0:0:0 | () | +| main.rs:2646:13:2646:17 | path2 | T | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2646:21:2646:25 | path1 | | main.rs:2612:5:2612:22 | Path | +| main.rs:2646:21:2646:40 | path1.canonicalize() | | {EXTERNAL LOCATION} | Result | +| main.rs:2646:21:2646:40 | path1.canonicalize() | E | file://:0:0:0:0 | () | +| main.rs:2646:21:2646:40 | path1.canonicalize() | T | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2647:13:2647:17 | path3 | | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2647:21:2647:25 | path2 | | {EXTERNAL LOCATION} | Result | +| main.rs:2647:21:2647:25 | path2 | E | file://:0:0:0:0 | () | +| main.rs:2647:21:2647:25 | path2 | T | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2647:21:2647:34 | path2.unwrap() | | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2649:13:2649:20 | pathbuf1 | | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2649:24:2649:37 | ...::new(...) | | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2650:24:2650:31 | pathbuf1 | | main.rs:2624:5:2624:25 | PathBuf | +| main.rs:2661:5:2661:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2662:5:2662:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2662:20:2662:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2662:41:2662:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2678:5:2678:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | | pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:13:26:133:1 | { ... } | T | file://:0:0:0:0 | () | | pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option | diff --git a/rust/ql/test/library-tests/type-inference/type-inference.ql b/rust/ql/test/library-tests/type-inference/type-inference.ql index 2122c7898a7..059cc7848a0 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.ql +++ b/rust/ql/test/library-tests/type-inference/type-inference.ql @@ -48,24 +48,27 @@ module ResolveTest implements TestSig { } module TypeTest implements TestSig { - string getARelevantTag() { result = "type" } + string getARelevantTag() { result = ["type", "certainType"] } predicate tagIsOptional(string expectedTag) { expectedTag = "type" } predicate hasActualResult(Location location, string element, string tag, string value) { none() } predicate hasOptionalResult(Location location, string element, string tag, string value) { - tag = "type" and exists(AstNode n, TypePath path, Type t | t = TypeInference::inferType(n, path) and + ( + if t = TypeInference::CertainTypeInference::inferCertainType(n, path) + then tag = "certainType" + else tag = "type" + ) and location = n.getLocation() and - if path.isEmpty() - then value = element + ":" + t - else value = element + ":" + path.toString() + "." + t.toString() - | - element = n.toString() - or - element = n.(IdentPat).getName().getText() + ( + if path.isEmpty() + then value = element + ":" + t + else value = element + ":" + path.toString() + "." + t.toString() + ) and + element = [n.toString(), n.(IdentPat).getName().getText()] ) } } diff --git a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected index 79a98e594e3..25f92e390de 100644 --- a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected +++ b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected @@ -45,12 +45,18 @@ edges | src/main.rs:98:21:98:53 | ... .unwrap() | src/main.rs:98:9:98:17 | file_path | provenance | | | src/main.rs:99:24:99:32 | file_path | src/main.rs:99:5:99:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:103:9:103:13 | path1 | src/main.rs:104:33:104:37 | path1 | provenance | | +| src/main.rs:103:9:103:13 | path1 | src/main.rs:104:33:104:45 | path1.clone() | provenance | MaD:8 | | src/main.rs:103:9:103:13 | path1 | src/main.rs:106:39:106:43 | path1 | provenance | | +| src/main.rs:103:9:103:13 | path1 | src/main.rs:106:39:106:51 | path1.clone() | provenance | MaD:8 | | src/main.rs:103:9:103:13 | path1 | src/main.rs:109:41:109:45 | path1 | provenance | | +| src/main.rs:103:9:103:13 | path1 | src/main.rs:109:41:109:53 | path1.clone() | provenance | MaD:8 | | src/main.rs:103:9:103:13 | path1 | src/main.rs:112:45:112:49 | path1 | provenance | | +| src/main.rs:103:9:103:13 | path1 | src/main.rs:112:45:112:57 | path1.clone() | provenance | MaD:8 | | src/main.rs:103:9:103:13 | path1 | src/main.rs:115:39:115:43 | path1 | provenance | | | src/main.rs:103:9:103:13 | path1 | src/main.rs:122:27:122:31 | path1 | provenance | | +| src/main.rs:103:9:103:13 | path1 | src/main.rs:122:27:122:39 | path1.clone() | provenance | MaD:8 | | src/main.rs:103:9:103:13 | path1 | src/main.rs:123:37:123:41 | path1 | provenance | | +| src/main.rs:103:9:103:13 | path1 | src/main.rs:123:37:123:49 | path1.clone() | provenance | MaD:8 | | src/main.rs:103:17:103:30 | ...::args | src/main.rs:103:17:103:32 | ...::args(...) [element] | provenance | Src:MaD:7 | | src/main.rs:103:17:103:32 | ...::args(...) [element] | src/main.rs:103:17:103:39 | ... .nth(...) [Some] | provenance | MaD:9 | | src/main.rs:103:17:103:39 | ... .nth(...) [Some] | src/main.rs:103:17:103:48 | ... .unwrap() | provenance | MaD:10 | diff --git a/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected index 4fafcd017b2..c25043e0ef6 100644 --- a/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,2 @@ multipleCallTargets | main.rs:9:43:9:63 | ...::from(...) | -| main.rs:44:19:44:32 | username.len() | 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 ca7923f5c2f..ac6f2b2d997 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 @@ -72,7 +72,6 @@ multipleCallTargets | test_logging.rs:195:15:195:38 | ...::_eprint(...) | | test_logging.rs:229:30:229:71 | ... .as_str() | | test_logging.rs:242:16:242:61 | ... .as_bytes() | -| test_logging.rs:243:5:245:66 | ... .write_all(...) | | test_logging.rs:245:20:245:65 | ... .as_bytes() | | test_logging.rs:248:15:248:60 | ... .as_bytes() | | test_logging.rs:251:15:251:60 | ... .as_bytes() | diff --git a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 6c3b9efca14..00000000000 --- a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -multipleCallTargets -| main.rs:229:13:229:40 | ...::with_capacity(...) | -| main.rs:233:18:233:47 | ...::with_capacity(...) | diff --git a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected b/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected index 25f8643f073..0010127c5bb 100644 --- a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected +++ b/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected @@ -22,6 +22,7 @@ | 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 | +| main.rs:64:23:64:24 | p2 | main.rs:44:26:44:28 | &b2 | main.rs:64:23:64:24 | p2 | Access of a pointer to $@ after its lifetime has ended. | main.rs:43:13:43:14 | b2 | b2 | 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 | | @@ -163,7 +164,7 @@ edges | 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:443:42:443:43 | r1 | lifetime.rs:443:23:443:44 | ...::from_ref(...) | provenance | MaD:3 | | 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 | | @@ -212,8 +213,21 @@ edges | 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 | | +| main.rs:18:9:18:10 | p1 [&ref] | main.rs:21:19:21:20 | p1 | provenance | | +| main.rs:18:9:18:10 | p1 [&ref] | main.rs:29:19:29:20 | p1 | provenance | | +| main.rs:18:14:18:29 | ...::as_ptr(...) [&ref] | main.rs:18:9:18:10 | p1 [&ref] | provenance | | +| main.rs:18:26:18:28 | &b1 | main.rs:18:14:18:29 | ...::as_ptr(...) [&ref] | provenance | MaD:2 | +| main.rs:44:9:44:10 | p2 [&ref] | main.rs:51:23:51:24 | p2 | provenance | | +| main.rs:44:9:44:10 | p2 [&ref] | main.rs:64:23:64:24 | p2 | provenance | | +| main.rs:44:14:44:29 | ...::as_ptr(...) [&ref] | main.rs:44:9:44:10 | p2 [&ref] | provenance | | +| main.rs:44:26:44:28 | &b2 | main.rs:44:14:44:29 | ...::as_ptr(...) [&ref] | provenance | MaD:2 | +| main.rs:47:9:47:10 | p3 [&ref] | main.rs:52:23:52:24 | p3 | provenance | | +| main.rs:47:14:47:37 | ...::as_mut_ptr(...) [&ref] | main.rs:47:9:47:10 | p3 [&ref] | provenance | | +| main.rs:47:30:47:36 | &mut b3 | main.rs:47:14:47:37 | ...::as_mut_ptr(...) [&ref] | provenance | MaD:1 | models -| 1 | Summary: core::ptr::from_ref; Argument[0]; ReturnValue; value | +| 1 | Summary: ::as_mut_ptr; Argument[0].Reference.Reference; ReturnValue.Reference; value | +| 2 | Summary: ::as_ptr; Argument[0].Reference.Reference; ReturnValue.Reference; value | +| 3 | 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 | @@ -440,4 +454,18 @@ nodes | 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 | +| main.rs:18:9:18:10 | p1 [&ref] | semmle.label | p1 [&ref] | +| main.rs:18:14:18:29 | ...::as_ptr(...) [&ref] | semmle.label | ...::as_ptr(...) [&ref] | +| main.rs:18:26:18:28 | &b1 | semmle.label | &b1 | +| main.rs:21:19:21:20 | p1 | semmle.label | p1 | +| main.rs:29:19:29:20 | p1 | semmle.label | p1 | +| main.rs:44:9:44:10 | p2 [&ref] | semmle.label | p2 [&ref] | +| main.rs:44:14:44:29 | ...::as_ptr(...) [&ref] | semmle.label | ...::as_ptr(...) [&ref] | +| main.rs:44:26:44:28 | &b2 | semmle.label | &b2 | +| main.rs:47:9:47:10 | p3 [&ref] | semmle.label | p3 [&ref] | +| main.rs:47:14:47:37 | ...::as_mut_ptr(...) [&ref] | semmle.label | ...::as_mut_ptr(...) [&ref] | +| main.rs:47:30:47:36 | &mut b3 | semmle.label | &mut b3 | +| main.rs:51:23:51:24 | p2 | semmle.label | p2 | +| main.rs:52:23:52:24 | p3 | semmle.label | p3 | +| main.rs:64:23:64:24 | p2 | semmle.label | p2 | subpaths 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 5f66313ae85..8d1f2a42146 100644 --- a/rust/ql/test/query-tests/security/CWE-825/main.rs +++ b/rust/ql/test/query-tests/security/CWE-825/main.rs @@ -7,197 +7,201 @@ mod lifetime; use lifetime::*; fn use_the_heap() { - let _a = Box::new(0x7FFFFFFF); - let _b = Box::new(0x7FFFFFFF); + let _a = Box::new(0x7FFFFFFF); + let _b = Box::new(0x7FFFFFFF); } // --- boxes --- pub fn test_boxes_into() { - let b1: Box = Box::new(7); // b1 owns the memory for '50' - let p1 = Box::as_ptr(&b1); // b1 still owns the memory + let b1: Box = Box::new(7); // b1 owns the memory for '50' + let p1 = Box::as_ptr(&b1); // b1 still owns the memory - unsafe { - let v1 = *p1; // GOOD - println!(" v1 = {v1}"); - } + unsafe { + let v1 = *p1; // GOOD + println!(" v1 = {v1}"); + } - let v2 = Box::into_inner(b1); // b1 is explicitly freed here, thus p1 is dangling - println!(" v2 = {v2}"); + let v2 = Box::into_inner(b1); // b1 is explicitly freed here, thus p1 is dangling + println!(" v2 = {v2}"); - unsafe { - let v3 = *p1; // $ MISSING: Alert - println!(" v3 = {v3} (!)"); // corrupt in practice - } + unsafe { + let v3 = *p1; // $ MISSING: Alert + println!(" v3 = {v3} (!)"); // corrupt in practice + } } pub fn test_boxes_1(mode: i32) { - let p1: *const i64; - let p2: *const i64; - let p3: *mut i64; + let p1: *const i64; + let p2: *const i64; + let p3: *mut i64; - { - let b1: Box = Box::new(1); - p1 = Box::into_raw(b1); // now owned by p1 + { + let b1: Box = Box::new(1); + p1 = Box::into_raw(b1); // now owned by p1 - let b2: Box = Box::new(2); - p2 = Box::as_ptr(&b2); // still owned by b2 + let b2: Box = Box::new(2); + p2 = Box::as_ptr(&b2); // $ Source[rust/access-after-lifetime-ended]=b2 -- still owned by b2 - let mut b3: Box = Box::new(3); - p3 = Box::as_mut_ptr(&mut b3); // still owned by b3 + let mut b3: Box = Box::new(3); + p3 = Box::as_mut_ptr(&mut b3); // still owned by b3 - unsafe { - let v1 = *p1; // GOOD - let v2 = *p2; // GOOD - let v3 = *p3; // GOOD - println!(" v1 = {v1}"); - println!(" v2 = {v2}"); - println!(" v3 = {v3}"); - *p3 = 4; - } - } // (b2, b3 go out of scope, thus p2, p3 are dangling) + unsafe { + let v1 = *p1; // GOOD + let v2 = *p2; // GOOD + let v3 = *p3; // GOOD + println!(" v1 = {v1}"); + println!(" v2 = {v2}"); + println!(" v3 = {v3}"); + *p3 = 4; + } + } // (b2, b3 go out of scope, thus p2, p3 are dangling) - unsafe { - if mode == 0 { - // reads - let v4 = *p1; // GOOD - let v5 = *p2; // $ MISSING: Alert - let v6 = *p3; // $ MISSING: Alert - println!(" v4 = {v4}"); - println!(" v5 = {v5} (!)"); // corrupt in practice - println!(" v6 = {v6} (!)"); // corrupt in practice - } - if mode == 10 { - // write - *p3 = 5; // $ MISSING: Alert - use_the_heap(); // "malloc: Heap corruption detected" - } - } + unsafe { + if mode == 0 { + // reads + let v4 = *p1; // GOOD + let v5 = *p2; // $ Alert[rust/access-after-lifetime-ended]=b2 + let v6 = *p3; // $ MISSING: Alert + println!(" v4 = {v4}"); + println!(" v5 = {v5} (!)"); // corrupt in practice + println!(" v6 = {v6} (!)"); // corrupt in practice + } + if mode == 10 { + // write + *p3 = 5; // $ MISSING: Alert + use_the_heap(); // "malloc: Heap corruption detected" + } + } } pub fn test_boxes_2() { - let b1: Box = Box::new(6); // b1 owns the memory - let p1 = Box::into_raw(b1); // now p1 owns the memory + let b1: Box = Box::new(6); // b1 owns the memory + let p1 = Box::into_raw(b1); // now p1 owns the memory - unsafe { - let _b2 = Box::from_raw(p1); // now _b2 owns the memory + unsafe { + let _b2 = Box::from_raw(p1); // now _b2 owns the memory - let v1 = *p1; // GOOD - println!(" v1 = {v1}"); - } // (_b2 goes out of scope, thus the memory is freed and p1 is dangling) + let v1 = *p1; // GOOD + println!(" v1 = {v1}"); + } // (_b2 goes out of scope, thus the memory is freed and p1 is dangling) - unsafe { - let v2 = *p1; // $ MISSING: Alert - println!(" v2 = {v2} (!)"); // corrupt in practice - } + unsafe { + let v2 = *p1; // $ MISSING: Alert + println!(" v2 = {v2} (!)"); // corrupt in practice + } } // --- main --- fn main() { - let mode = std::env::args().nth(1).unwrap_or("0".to_string()).parse::().unwrap_or(0); - // mode = which test cases to explore (0 should be safe; some will crash / segfault). - println!("mode = {mode}"); + let mode = std::env::args() + .nth(1) + .unwrap_or("0".to_string()) + .parse::() + .unwrap_or(0); + // mode = which test cases to explore (0 should be safe; some will crash / segfault). + println!("mode = {mode}"); - println!("test_boxes_into:"); - test_boxes_into(); + println!("test_boxes_into:"); + test_boxes_into(); - println!("test_boxes_1:"); - test_boxes_1(mode); + println!("test_boxes_1:"); + test_boxes_1(mode); - println!("test_boxes_2:"); - test_boxes_2(); + println!("test_boxes_2:"); + test_boxes_2(); - // --- + // --- - println!("test_alloc:"); - test_alloc(mode); + println!("test_alloc:"); + test_alloc(mode); - println!("test_alloc_array:"); - test_alloc_array(mode); + println!("test_alloc_array:"); + test_alloc_array(mode); - println!("test_libc:"); - test_libc(); + println!("test_libc:"); + test_libc(); - println!("test_ptr_invalid:"); - test_ptr_invalid(mode); + println!("test_ptr_invalid:"); + test_ptr_invalid(mode); - println!("test_drop:"); - test_drop(); + println!("test_drop:"); + test_drop(); - println!("test_ptr_drop:"); - test_ptr_drop(mode); + println!("test_ptr_drop:"); + test_ptr_drop(mode); - println!("test_qhelp_tests:"); - test_qhelp_examples(); + println!("test_qhelp_tests:"); + test_qhelp_examples(); - println!("test_vec_reserve:"); - test_vec_reserve(); + println!("test_vec_reserve:"); + test_vec_reserve(); - // --- + // --- - println!("test_local_dangling:"); - test_local_dangling(); + println!("test_local_dangling:"); + test_local_dangling(); - println!("test_local_in_scope:"); - test_local_in_scope(mode); + println!("test_local_in_scope:"); + test_local_in_scope(mode); - println!("test_static:"); - test_static(mode); + println!("test_static:"); + test_static(mode); - println!("test_call_contexts:"); - test_call_contexts(); + println!("test_call_contexts:"); + test_call_contexts(); - println!("test_call_contexts_rec:"); - test_call_contexts_rec(); + println!("test_call_contexts_rec:"); + test_call_contexts_rec(); - println!("test_loop:"); - test_loop(); + println!("test_loop:"); + test_loop(); - println!("test_enums:"); - test_enums(); + println!("test_enums:"); + test_enums(); - println!("test_recursive_enums:"); - test_recursive_enums(); + println!("test_recursive_enums:"); + test_recursive_enums(); - println!("test_ptr_to_struct:"); - test_ptr_to_struct(mode); + println!("test_ptr_to_struct:"); + test_ptr_to_struct(mode); - println!("test_ptr_from_ref:"); - test_ptr_from_ref(); + println!("test_ptr_from_ref:"); + test_ptr_from_ref(); - println!("test_rc:"); - test_rc(); + println!("test_rc:"); + test_rc(); - println!("test_closures:"); - test_closures(); + println!("test_closures:"); + test_closures(); - println!("test_async:"); - test_async(); + println!("test_async:"); + test_async(); - println!("test_lifetime_annotations:"); - test_lifetime_annotations(); + println!("test_lifetime_annotations:"); + test_lifetime_annotations(); - println!("test_implicit_derefs:"); - test_implicit_derefs(); + println!("test_implicit_derefs:"); + test_implicit_derefs(); - println!("test_members:"); - test_members(); + println!("test_members:"); + test_members(); - println!("test_enum_members:"); - test_enum_members(); + println!("test_enum_members:"); + test_enum_members(); - println!("test_macros:"); - test_macros(); + println!("test_macros:"); + test_macros(); - println!("test_unsafe_function:"); - unsafe { - test_unsafe_function(); - } + println!("test_unsafe_function:"); + unsafe { + test_unsafe_function(); + } - println!("test_lifetimes_example_bad:"); - test_lifetimes_example_bad(); + println!("test_lifetimes_example_bad:"); + test_lifetimes_example_bad(); - println!("test_lifetimes_example_good:"); - test_lifetimes_example_good(); + println!("test_lifetimes_example_good:"); + test_lifetimes_example_good(); } diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index eb2eb8af743..37149392675 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -252,7 +252,7 @@ class _: attrs: drop -@annotate(MethodCallExpr, replace_bases={Expr: CallExprBase}, add_bases=(Resolvable,), cfg=True) +@annotate(MethodCallExpr, replace_bases={Expr: CallExprBase}, cfg=True) class _: """ A method call expression. For example: diff --git a/rust/schema/prelude.py b/rust/schema/prelude.py index 62334b2d864..0b1b57ea089 100644 --- a/rust/schema/prelude.py +++ b/rust/schema/prelude.py @@ -82,24 +82,9 @@ class Addressable(AstNode): TODO: This does not yet include all possible cases. """ - extended_canonical_path: optional[string] | desc(""" - Either a canonical path (see https://doc.rust-lang.org/reference/paths.html#canonical-paths), - or `{}::name` for addressable items defined in an anonymous block (and only - addressable there-in). - """) | rust.detach | ql.internal - crate_origin: optional[string] | desc( - "One of `rustc:`, `repo::` or `lang:`.") | rust.detach | ql.internal -class Resolvable(AstNode): - """ - One of `PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat` or `MethodCallExpr`. - """ - resolved_path: optional[string] | rust.detach | ql.internal - resolved_crate_origin: optional[string] | rust.detach | ql.internal - - -class PathAstNode(Resolvable): +class PathAstNode(AstNode): """ An AST element wrapping a path (`PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat`). """ diff --git a/shared/concepts/CHANGELOG.md b/shared/concepts/CHANGELOG.md index 6e48d91ef56..88abeb21fd8 100644 --- a/shared/concepts/CHANGELOG.md +++ b/shared/concepts/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.4 + +No user-facing changes. + ## 0.0.3 No user-facing changes. diff --git a/shared/concepts/change-notes/released/0.0.4.md b/shared/concepts/change-notes/released/0.0.4.md new file mode 100644 index 00000000000..eefe286a4d8 --- /dev/null +++ b/shared/concepts/change-notes/released/0.0.4.md @@ -0,0 +1,3 @@ +## 0.0.4 + +No user-facing changes. diff --git a/shared/concepts/codeql-pack.release.yml b/shared/concepts/codeql-pack.release.yml index a24b693d1e7..ec411a674bc 100644 --- a/shared/concepts/codeql-pack.release.yml +++ b/shared/concepts/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.3 +lastReleaseVersion: 0.0.4 diff --git a/shared/concepts/qlpack.yml b/shared/concepts/qlpack.yml index 849cda97bf0..151939d739a 100644 --- a/shared/concepts/qlpack.yml +++ b/shared/concepts/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/concepts -version: 0.0.4-dev +version: 0.0.5-dev groups: shared library: true dependencies: diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index ecf7d7005e9..7e3580fae37 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.14 + +No user-facing changes. + ## 2.0.13 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/2.0.14.md b/shared/controlflow/change-notes/released/2.0.14.md new file mode 100644 index 00000000000..13190ad53e3 --- /dev/null +++ b/shared/controlflow/change-notes/released/2.0.14.md @@ -0,0 +1,3 @@ +## 2.0.14 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 30d169d6eb8..23aa0864b29 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.13 +lastReleaseVersion: 2.0.14 diff --git a/shared/controlflow/codeql/controlflow/BasicBlock.qll b/shared/controlflow/codeql/controlflow/BasicBlock.qll index 132920e329f..ed86ae5aa8b 100644 --- a/shared/controlflow/codeql/controlflow/BasicBlock.qll +++ b/shared/controlflow/codeql/controlflow/BasicBlock.qll @@ -9,13 +9,12 @@ overlay[local?] module; private import codeql.util.Location +private import SuccessorType /** Provides the language-specific input specification. */ signature module InputSig { - class SuccessorType; - /** Hold if `t` represents a conditional successor type. */ - predicate successorTypeIsCondition(SuccessorType t); + default predicate successorTypeIsCondition(SuccessorType t) { t instanceof ConditionalSuccessor } /** A delineated part of the AST with its own CFG. */ class CfgScope; @@ -47,12 +46,129 @@ signature module InputSig { predicate nodeIsPostDominanceExit(Node node); } +signature module CfgSig { + /** 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 location of this basic block. */ + Location getLocation(); + + /** Gets the control flow node at a specific (zero-indexed) position in this basic block. */ + ControlFlowNode getNode(int pos); + + /** Gets the last control flow node in this basic block. */ + ControlFlowNode getLastNode(); + + /** Gets the length of this basic block. */ + int length(); + + /** Gets an immediate successor of this basic block, if any. */ + BasicBlock getASuccessor(); + + /** Gets an immediate successor of this basic block of a given type, if any. */ + BasicBlock getASuccessor(SuccessorType t); + + /** + * 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); + + /** + * Holds if this basic block dominates basic block `bb`. + * + * That is, all paths reaching `bb` from the entry point basic block must + * go through this basic block. + */ + predicate dominates(BasicBlock bb); + + /** + * Holds if `df` is in the dominance frontier of this basic block. That is, + * this basic block dominates a predecessor of `df`, but does not dominate + * `df` itself. I.e., it is equivaluent to: + * ``` + * this.dominates(df.getAPredecessor()) and not this.strictlyDominates(df) + * ``` + */ + predicate inDominanceFrontier(BasicBlock df); + + /** + * Gets the basic block that immediately dominates this basic block, if any. + * + * That is, the result is the unique basic block satisfying: + * 1. The result strictly dominates this basic block. + * 2. There exists no other basic block that is strictly dominated by the + * result and which strictly dominates this basic block. + * + * All basic blocks, except entry basic blocks, have a unique immediate + * dominator. + */ + BasicBlock getImmediateDominator(); + + /** + * Holds if this basic block strictly post-dominates basic block `bb`. + * + * That is, all paths reaching a normal exit point basic block from basic + * block `bb` must go through this basic block and this basic block is + * different from `bb`. + */ + predicate strictlyPostDominates(BasicBlock bb); + + /** + * Holds if this basic block post-dominates basic block `bb`. + * + * That is, all paths reaching a normal exit point basic block from basic + * block `bb` must go through this basic block. + */ + predicate postDominates(BasicBlock bb); + } + + /** + * An entry basic block, that is, a basic block whose first node is + * an entry node. + */ + class EntryBasicBlock extends BasicBlock; + + /** + * 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); +} + /** * Provides a basic block construction on top of a control flow graph. */ -module Make Input> { +module Make Input> implements CfgSig { private import Input + class ControlFlowNode = Input::Node; + /** * A basic block, that is, a maximal straight-line sequence of control flow nodes * without branches or joins. @@ -239,6 +355,10 @@ module Make Input> { string toString() { result = this.getFirstNode().toString() } } + class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { nodeIsDominanceEntry(this.getFirstNode()) } + } + /** * Holds if `bb1` has `bb2` as a direct successor and the edge between `bb1` * and `bb2` is a dominating edge. @@ -343,14 +463,14 @@ module Make Input> { cached Node getNode(BasicBlock bb, int pos) { bbIndex(bb.getFirstNode(), result, pos) } - /** Holds if `bb` is an entry basic block. */ - private predicate entryBB(BasicBlock bb) { nodeIsDominanceEntry(bb.getFirstNode()) } - cached predicate bbSuccessor(BasicBlock bb1, BasicBlock bb2, SuccessorType t) { bb2.getFirstNode() = nodeGetASuccessor(bb1.getLastNode(), t) } + /** Holds if `bb` is an entry basic block. */ + private predicate entryBlock(EntryBasicBlock bb) { any() } + /** * Holds if the first node of basic block `succ` is a control flow * successor of the last node of basic block `pred`. @@ -360,7 +480,7 @@ module Make Input> { /** Holds if `dom` is an immediate dominator of `bb`. */ cached predicate bbIDominates(BasicBlock dom, BasicBlock bb) = - idominance(entryBB/1, succBB/2)(_, dom, bb) + idominance(entryBlock/1, succBB/2)(_, dom, bb) /** Holds if `pred` is a basic block predecessor of `succ`. */ private predicate predBB(BasicBlock succ, BasicBlock pred) { succBB(pred, succ) } diff --git a/shared/controlflow/codeql/controlflow/Cfg.qll b/shared/controlflow/codeql/controlflow/Cfg.qll index 25796089ab5..4945c8da9cf 100644 --- a/shared/controlflow/codeql/controlflow/Cfg.qll +++ b/shared/controlflow/codeql/controlflow/Cfg.qll @@ -8,6 +8,7 @@ module; private import codeql.util.Location private import codeql.util.FileSystem private import codeql.util.Void +private import SuccessorType /** Provides the language-specific input specification. */ signature module InputSig { @@ -59,26 +60,11 @@ signature module InputSig { /** Holds if `scope` is exited when `last` finishes with completion `c`. */ predicate scopeLast(CfgScope scope, AstNode last, Completion c); - /** A type of a control flow successor. */ - class SuccessorType { - /** Gets a textual representation of this successor type. */ - string toString(); - } - /** Gets a successor type that matches completion `c`. */ SuccessorType getAMatchingSuccessorType(Completion c); - /** - * Hold if `t` represents simple (normal) evaluation of a statement or an - * expression. - */ - predicate successorTypeIsSimple(SuccessorType t); - /** Hold if `t` represents a conditional successor type. */ - predicate successorTypeIsCondition(SuccessorType t); - - /** Holds if `t` is an abnormal exit type out of a CFG scope. */ - predicate isAbnormalExitType(SuccessorType t); + default predicate successorTypeIsCondition(SuccessorType t) { t instanceof ConditionalSuccessor } /** * Gets an `id` of `node`. This is used to order the predecessors of a join @@ -522,7 +508,7 @@ module MakeWithSplitting< private predicate succEntrySplits(CfgScope pred, AstNode succ, Splits succSplits, SuccessorType t) { exists(int rnk | scopeFirst(pred, succ) and - successorTypeIsSimple(t) and + t instanceof DirectSuccessor and succEntrySplitsFromRank(pred, succ, succSplits, rnk) | rnk = 0 and @@ -959,6 +945,12 @@ module MakeWithSplitting< ) } + /** Holds if `t` is an abnormal exit type out of a CFG scope. */ + private predicate isAbnormalExitType(SuccessorType t) { + t instanceof ExceptionSuccessor or + t instanceof ExitSuccessor + } + /** * Internal representation of control flow nodes in the control flow graph. * The control flow graph is pruned for unreachable nodes. @@ -1016,7 +1008,7 @@ module MakeWithSplitting< exists(CfgScope scope | pred = TAnnotatedExitNode(scope, _) and result = TExitNode(scope) and - successorTypeIsSimple(t) + t instanceof DirectSuccessor ) } @@ -1320,7 +1312,7 @@ module MakeWithSplitting< label = strictconcat(SuccessorType t, string s | succ = getASuccessor(pred, t) and - if successorTypeIsSimple(t) then s = "" else s = t.toString() + if t instanceof DirectSuccessor then s = "" else s = t.toString() | s, ", " order by s ) @@ -1535,6 +1527,8 @@ module MakeWithSplitting< query predicate multipleSuccessors(Node node, SuccessorType t, Node successor) { strictcount(getASuccessor(node, t)) > 1 and successor = getASuccessor(node, t) and + // allow for multiple exception successors + not t instanceof ExceptionSuccessor and // allow for functions with multiple bodies not (t instanceof SimpleSuccessorType and node instanceof EntryNode) } @@ -1590,8 +1584,6 @@ module MakeWithSplitting< private class NodeAlias = Node; private module BasicBlockInputSig implements BB::InputSig { - class SuccessorType = Input::SuccessorType; - predicate successorTypeIsCondition = Input::successorTypeIsCondition/1; class CfgScope = CfgScopeAlias; @@ -1609,7 +1601,7 @@ module MakeWithSplitting< private module BasicBlockImpl = BB::Make; - final class BasicBlock = BasicBlockImpl::BasicBlock; + class BasicBlock = BasicBlockImpl::BasicBlock; predicate dominatingEdge = BasicBlockImpl::dominatingEdge/2; diff --git a/shared/controlflow/codeql/controlflow/Guards.qll b/shared/controlflow/codeql/controlflow/Guards.qll index 917f95569ed..3fe63a7118c 100644 --- a/shared/controlflow/codeql/controlflow/Guards.qll +++ b/shared/controlflow/codeql/controlflow/Guards.qll @@ -50,81 +50,18 @@ overlay[local?] module; +private import codeql.controlflow.BasicBlock as BB +private import codeql.controlflow.SuccessorType private import codeql.util.Boolean private import codeql.util.Location private import codeql.util.Unit -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(); - } +signature class TypSig; +signature module InputSig { /** A control flow node indicating normal termination of a callable. */ class NormalExitNode extends ControlFlowNode; - /** - * 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(); @@ -254,7 +191,13 @@ signature module InputSig { } /** Provides guards-related predicates and classes. */ -module Make Input> { +module Make< + LocationSig Location, BB::CfgSig Cfg, + InputSig Input> +{ + private module Cfg_ = Cfg; + + private import Cfg_ private import Input private newtype TAbstractSingleValue = diff --git a/shared/controlflow/codeql/controlflow/SuccessorType.qll b/shared/controlflow/codeql/controlflow/SuccessorType.qll new file mode 100644 index 00000000000..cc673c9e5ca --- /dev/null +++ b/shared/controlflow/codeql/controlflow/SuccessorType.qll @@ -0,0 +1,343 @@ +/** + * Provides different types of control flow successor types. These are used as + * edge labels in the control flow graph. + * + * ```text + * SuccessorType + * |- NormalSuccessor + * | |- DirectSuccessor + * | \- ConditionalSuccessor + * | |- BooleanSuccessor + * | |- NullnessSuccessor + * | |- MatchingSuccessor + * | \- EmptinessSuccessor + * \- AbruptSuccessor + * |- ExceptionSuccessor + * |- ReturnSuccessor + * |- ExitSuccessor (program termination) + * \- JumpSuccessor + * |- BreakSuccessor + * |- ContinueSuccessor + * |- GotoSuccessor + * |- RedoSuccessor // rare, used in Ruby + * \- RetrySuccessor // rare, used in Ruby + * ``` + */ +overlay[local] +module; + +private import codeql.util.Boolean + +private newtype TSuccessorType = + TDirectSuccessor() or + TBooleanSuccessor(Boolean branch) or + TNullnessSuccessor(Boolean isNull) or + TMatchingSuccessor(Boolean isMatch) or + TEmptinessSuccessor(Boolean isEmpty) or + TExceptionSuccessor() or + TReturnSuccessor() or + TExitSuccessor() or + TBreakSuccessor() or + TContinueSuccessor() or + TGotoSuccessor() or + TRedoSuccessor() or + TRetrySuccessor() + +/** + * The type of a control flow successor. + * + * A successor is either normal, which covers direct and conditional + * successors, or abrupt, which covers all other types of successors including + * for example exceptions, returns, and other jumps. + */ +private class SuccessorTypeImpl extends TSuccessorType { + /** Gets a textual representation of this successor type. */ + abstract string toString(); +} + +final class SuccessorType = SuccessorTypeImpl; + +private class TNormalSuccessor = TDirectSuccessor or TConditionalSuccessor; + +/** + * A normal control flow successor. This is either a direct or a conditional + * successor. + */ +abstract private class NormalSuccessorImpl extends SuccessorTypeImpl, TNormalSuccessor { } + +final class NormalSuccessor = NormalSuccessorImpl; + +/** A direct control flow successor. */ +class DirectSuccessor extends NormalSuccessorImpl, TDirectSuccessor { + override string toString() { result = "successor" } +} + +private class TConditionalSuccessor = + TBooleanSuccessor or TMatchingSuccessor or TNullnessSuccessor or TEmptinessSuccessor; + +/** + * A conditional control flow successor. Either a Boolean successor (`BooleanSuccessor`), + * a nullness successor (`NullnessSuccessor`), a matching successor (`MatchingSuccessor`), + * or an emptiness successor (`EmptinessSuccessor`). + */ +abstract private class ConditionalSuccessorImpl extends NormalSuccessorImpl, TConditionalSuccessor { + /** Gets the Boolean value of this successor. */ + abstract boolean getValue(); +} + +final class ConditionalSuccessor = ConditionalSuccessorImpl; + +/** + * A Boolean control flow successor. + * + * For example, this program fragment: + * + * ```csharp + * if (x < 0) + * return 0; + * else + * return 1; + * ``` + * + * has a control flow graph containing Boolean successors: + * + * ```text + * if + * | + * x < 0 + * / \ + * / \ + * / \ + * true false + * | \ + * return 0 return 1 + * ``` + */ +class BooleanSuccessor extends ConditionalSuccessorImpl, TBooleanSuccessor { + override boolean getValue() { this = TBooleanSuccessor(result) } + + override string toString() { result = this.getValue().toString() } +} + +/** + * A nullness control flow successor. + * + * For example, this program fragment: + * + * ```csharp + * int? M(string s) => s?.Length; + * ``` + * + * has a control flow graph containing nullness successors: + * + * ```text + * enter M + * | + * s + * / \ + * / \ + * / \ + * null non-null + * \ | + * \ Length + * \ / + * \ / + * exit M + * ``` + */ +class NullnessSuccessor extends ConditionalSuccessorImpl, TNullnessSuccessor { + /** Holds if this is a `null` successor. */ + predicate isNull() { this = TNullnessSuccessor(true) } + + override boolean getValue() { this = TNullnessSuccessor(result) } + + override string toString() { if this.isNull() then result = "null" else result = "non-null" } +} + +/** + * A matching control flow successor. + * + * For example, this program fragment: + * + * ```csharp + * switch (x) { + * case 0 : + * return 0; + * default : + * return 1; + * } + * ``` + * + * has a control flow graph containing matching successors: + * + * ```text + * switch + * | + * x + * | + * case 0 + * / \ + * / \ + * / \ + * match no-match + * | \ + * return 0 default + * | + * return 1 + * ``` + */ +class MatchingSuccessor extends ConditionalSuccessorImpl, TMatchingSuccessor { + /** Holds if this is a match successor. */ + predicate isMatch() { this = TMatchingSuccessor(true) } + + override boolean getValue() { this = TMatchingSuccessor(result) } + + override string toString() { if this.isMatch() then result = "match" else result = "no-match" } +} + +/** + * An emptiness control flow successor. + * + * For example, this program fragment: + * + * ```csharp + * foreach (var arg in args) + * { + * yield return arg; + * } + * yield return ""; + * ``` + * + * has a control flow graph containing emptiness successors: + * + * ```text + * args + * | + * loop-header------<----- + * / \ \ + * / \ | + * / \ | + * / \ | + * empty non-empty | + * | \ | + * yield return "" \ | + * var arg | + * | | + * yield return arg | + * \_________/ + * ``` + */ +class EmptinessSuccessor extends ConditionalSuccessorImpl, TEmptinessSuccessor { + /** Holds if this is an empty successor. */ + predicate isEmpty() { this = TEmptinessSuccessor(true) } + + override boolean getValue() { this = TEmptinessSuccessor(result) } + + override string toString() { if this.isEmpty() then result = "empty" else result = "non-empty" } +} + +private class TAbruptSuccessor = + TExceptionSuccessor or TReturnSuccessor or TExitSuccessor or TJumpSuccessor; + +/** An abrupt control flow successor. */ +abstract private class AbruptSuccessorImpl extends SuccessorTypeImpl, TAbruptSuccessor { } + +final class AbruptSuccessor = AbruptSuccessorImpl; + +/** + * An exceptional control flow successor. + * + * Example: + * + * ```csharp + * int M(string s) + * { + * if (s == null) + * throw new ArgumentNullException(nameof(s)); + * return s.Length; + * } + * ``` + * + * The callable exit node of `M` is an exceptional successor of the node + * `throw new ArgumentNullException(nameof(s));`. + */ +class ExceptionSuccessor extends AbruptSuccessorImpl, TExceptionSuccessor { + override string toString() { result = "exception" } +} + +/** + * A `return` control flow successor. + * + * Example: + * + * ```csharp + * void M() + * { + * return; + * } + * ``` + * + * The callable exit node of `M` is a `return` successor of the `return;` + * statement. + */ +class ReturnSuccessor extends AbruptSuccessorImpl, TReturnSuccessor { + override string toString() { result = "return" } +} + +/** + * An exit control flow successor. + * + * Example: + * + * ```csharp + * int M(string s) + * { + * if (s == null) + * System.Environment.Exit(0); + * return s.Length; + * } + * ``` + * + * The callable exit node of `M` is an exit successor of the node on line 4. + */ +class ExitSuccessor extends AbruptSuccessorImpl, TExitSuccessor { + override string toString() { result = "exit" } +} + +private class TJumpSuccessor = + TBreakSuccessor or TContinueSuccessor or TGotoSuccessor or TRedoSuccessor or TRetrySuccessor; + +/** + * A jump control flow successor. + * + * This covers non-exceptional, non-local control flow, such as `break`, + * `continue`, and `goto`. + */ +abstract private class JumpSuccessorImpl extends AbruptSuccessorImpl, TJumpSuccessor { } + +final class JumpSuccessor = JumpSuccessorImpl; + +/** A `break` control flow successor. */ +class BreakSuccessor extends JumpSuccessorImpl, TBreakSuccessor { + override string toString() { result = "break" } +} + +/** A `continue` control flow successor. */ +class ContinueSuccessor extends JumpSuccessorImpl, TContinueSuccessor { + override string toString() { result = "continue" } +} + +/** A `goto` control flow successor. */ +class GotoSuccessor extends JumpSuccessorImpl, TGotoSuccessor { + override string toString() { result = "goto" } +} + +/** A `redo` control flow successor (rare, used in Ruby). */ +class RedoSuccessor extends JumpSuccessorImpl, TRedoSuccessor { + override string toString() { result = "redo" } +} + +/** A `retry` control flow successor (rare, used in Ruby). */ +class RetrySuccessor extends JumpSuccessorImpl, TRetrySuccessor { + override string toString() { result = "retry" } +} diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 2dbb7951de1..e1647c3a2f4 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.14-dev +version: 2.0.15-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index db415d30d47..b5b86ffbccb 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.14 + +No user-facing changes. + ## 2.0.13 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/2.0.14.md b/shared/dataflow/change-notes/released/2.0.14.md new file mode 100644 index 00000000000..13190ad53e3 --- /dev/null +++ b/shared/dataflow/change-notes/released/2.0.14.md @@ -0,0 +1,3 @@ +## 2.0.14 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 30d169d6eb8..23aa0864b29 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.13 +lastReleaseVersion: 2.0.14 diff --git a/shared/dataflow/codeql/dataflow/VariableCapture.qll b/shared/dataflow/codeql/dataflow/VariableCapture.qll index 922391221a4..0ba44be5ea1 100644 --- a/shared/dataflow/codeql/dataflow/VariableCapture.qll +++ b/shared/dataflow/codeql/dataflow/VariableCapture.qll @@ -8,66 +8,14 @@ module; private import codeql.util.Boolean private import codeql.util.Unit private import codeql.util.Location +private import codeql.controlflow.BasicBlock as BB private import codeql.ssa.Ssa as Ssa -signature module InputSig { - /** - * 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(); +signature class BasicBlockSig; - /** Gets the `i`th node in this basic block. */ - ControlFlowNode getNode(int i); - - /** Gets the length of this basic block. */ - int length(); - - /** Gets the enclosing callable. */ - Callable getEnclosingCallable(); - - /** Gets the location of this basic block. */ - Location getLocation(); - } - - /** 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(); - } - - /** - * Gets the basic block that immediately dominates basic block `bb`, if any. - * - * That is, all paths reaching `bb` from some entry point basic block must go - * through the result. - * - * Example: - * - * ```csharp - * int M(string s) { - * if (s == null) - * throw new ArgumentNullException(nameof(s)); - * return s.Length; - * } - * ``` - * - * The basic block starting on line 2 is an immediate dominator of - * the basic block on line 4 (all paths from the entry point of `M` - * to `return s.Length;` must go through the null check. - */ - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb); - - /** Gets an immediate successor of basic block `bb`, if any. */ - BasicBlock getABasicBlockSuccessor(BasicBlock bb); - - /** Holds if `bb` is a control-flow entry point. */ - default predicate entryBlock(BasicBlock bb) { not exists(getImmediateBasicBlockDominator(bb)) } +signature module InputSig { + /** Gets the enclosing callable of the basic block. */ + Callable basicBlockGetEnclosingCallable(BasicBlock bb); /** A variable that is captured in a closure. */ class CapturedVariable { @@ -153,7 +101,9 @@ signature module InputSig { } } -signature module OutputSig I> { +signature module OutputSig< + LocationSig Location, BasicBlockSig BasicBlock, InputSig I> +{ /** * A data flow node that we need to reference in the step relations for * captured variables. @@ -255,9 +205,18 @@ signature module OutputSig I> { * Constructs the type `ClosureNode` and associated step relations, which are * intended to be included in the data-flow node and step relations. */ -module Flow Input> implements OutputSig { +module Flow< + LocationSig Location, BB::CfgSig Cfg, InputSig Input> + implements OutputSig +{ private import Input + final private class CfgBb = Cfg::BasicBlock; + + private class BasicBlock extends CfgBb { + Callable getEnclosingCallable() { result = basicBlockGetEnclosingCallable(this) } + } + additional module ConsistencyChecks { final private class FinalExpr = Expr; @@ -332,17 +291,17 @@ module Flow Input> implements OutputSig query predicate uniqueDominator(RelevantBasicBlock bb, string msg) { msg = "BasicBlock has multiple immediate dominators" and - 2 <= strictcount(getImmediateBasicBlockDominator(bb)) + 2 <= strictcount(bb.getImmediateDominator()) } query predicate localDominator(RelevantBasicBlock bb, string msg) { msg = "BasicBlock has non-local dominator" and - bb.getEnclosingCallable() != getImmediateBasicBlockDominator(bb).getEnclosingCallable() + bb.getEnclosingCallable() != bb.getImmediateDominator().(BasicBlock).getEnclosingCallable() } query predicate localSuccessor(RelevantBasicBlock bb, string msg) { msg = "BasicBlock has non-local successor" and - bb.getEnclosingCallable() != getABasicBlockSuccessor(bb).getEnclosingCallable() + bb.getEnclosingCallable() != bb.getASuccessor().(BasicBlock).getEnclosingCallable() } query predicate uniqueDefiningScope(CapturedVariable v, string msg) { @@ -669,7 +628,7 @@ module Flow Input> implements OutputSig /** Holds if `cc` needs a definition at the entry of its callable scope. */ private predicate entryDef(CaptureContainer cc, BasicBlock bb, int i) { exists(Callable c | - entryBlock(bb) and + bb instanceof Cfg::EntryBasicBlock and pragma[only_bind_out](bb.getEnclosingCallable()) = c and i = min(int j | @@ -685,22 +644,10 @@ module Flow Input> implements OutputSig ) } - private module CaptureSsaInput implements Ssa::InputSig { - final class BasicBlock = Input::BasicBlock; - - final class ControlFlowNode = Input::ControlFlowNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { - result = Input::getImmediateBasicBlockDominator(bb) - } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { - result = Input::getABasicBlockSuccessor(bb) - } - + private module CaptureSsaInput implements Ssa::InputSig { class SourceVariable = CaptureContainer; - predicate variableWrite(BasicBlock bb, int i, SourceVariable cc, boolean certain) { + predicate variableWrite(Cfg::BasicBlock bb, int i, SourceVariable cc, boolean certain) { Cached::ref() and ( exists(CapturedVariable v | cc = TVariable(v) and captureWrite(v, bb, i, true, _)) @@ -710,9 +657,9 @@ module Flow Input> implements OutputSig certain = true } - predicate variableRead(BasicBlock bb, int i, SourceVariable cc, boolean certain) { + predicate variableRead(Cfg::BasicBlock bb, int i, SourceVariable cc, boolean certain) { ( - synthThisQualifier(bb, i) and cc = TThis(bb.getEnclosingCallable()) + synthThisQualifier(bb, i) and cc = TThis(bb.(BasicBlock).getEnclosingCallable()) or exists(CapturedVariable v | cc = TVariable(v) | captureRead(v, bb, i, true, _) or synthRead(v, bb, i, true, _) @@ -722,26 +669,30 @@ module Flow Input> implements OutputSig } } - private module CaptureSsa = Ssa::Make; + private module CaptureSsa = Ssa::Make; private module DataFlowIntegrationInput implements CaptureSsa::DataFlowIntegrationInputSig { private import codeql.util.Void - class Expr instanceof Input::ControlFlowNode { + class Expr instanceof Cfg::ControlFlowNode { string toString() { result = super.toString() } - predicate hasCfgNode(BasicBlock bb, int i) { bb.getNode(i) = this } + predicate hasCfgNode(Cfg::BasicBlock bb, int i) { bb.getNode(i) = this } } class GuardValue = Void; class Guard extends Void { - predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue val) { none() } + predicate hasValueBranchEdge(Cfg::BasicBlock bb1, Cfg::BasicBlock bb2, GuardValue val) { + none() + } - predicate valueControlsBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue val) { none() } + predicate valueControlsBranchEdge(Cfg::BasicBlock bb1, Cfg::BasicBlock bb2, GuardValue val) { + none() + } } - predicate guardDirectlyControlsBlock(Guard guard, BasicBlock bb, GuardValue val) { none() } + predicate guardDirectlyControlsBlock(Guard guard, Cfg::BasicBlock bb, GuardValue val) { none() } predicate includeWriteDefsInFlowStep() { none() } diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 20069450f22..62a66a7e228 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,8 +1,9 @@ name: codeql/dataflow -version: 2.0.14-dev +version: 2.0.15-dev groups: shared library: true dependencies: + codeql/controlflow: ${workspace} codeql/ssa: ${workspace} codeql/typetracking: ${workspace} codeql/util: ${workspace} diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 6bd67795a3a..bd3e670038c 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.30 + +No user-facing changes. + ## 1.0.29 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.30.md b/shared/mad/change-notes/released/1.0.30.md new file mode 100644 index 00000000000..cb2cf6d0a27 --- /dev/null +++ b/shared/mad/change-notes/released/1.0.30.md @@ -0,0 +1,3 @@ +## 1.0.30 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 8751a216238..f04640951de 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.29 +lastReleaseVersion: 1.0.30 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 0b47255d1a6..33968071a42 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.30-dev +version: 1.0.31-dev groups: shared library: true dependencies: diff --git a/shared/quantum/CHANGELOG.md b/shared/quantum/CHANGELOG.md index 8f58f5145db..fba2a870356 100644 --- a/shared/quantum/CHANGELOG.md +++ b/shared/quantum/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.8 + +No user-facing changes. + ## 0.0.7 No user-facing changes. diff --git a/shared/quantum/change-notes/released/0.0.8.md b/shared/quantum/change-notes/released/0.0.8.md new file mode 100644 index 00000000000..6af2d954c09 --- /dev/null +++ b/shared/quantum/change-notes/released/0.0.8.md @@ -0,0 +1,3 @@ +## 0.0.8 + +No user-facing changes. diff --git a/shared/quantum/codeql-pack.release.yml b/shared/quantum/codeql-pack.release.yml index a2a5484910b..58fdc6b45de 100644 --- a/shared/quantum/codeql-pack.release.yml +++ b/shared/quantum/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.7 +lastReleaseVersion: 0.0.8 diff --git a/shared/quantum/codeql/quantum/experimental/Model.qll b/shared/quantum/codeql/quantum/experimental/Model.qll index d8b1402b5e8..d97b6af2b99 100644 --- a/shared/quantum/codeql/quantum/experimental/Model.qll +++ b/shared/quantum/codeql/quantum/experimental/Model.qll @@ -365,7 +365,7 @@ module CryptographyBase Input> { */ abstract class ArtifactConsumer extends ConsumerElement { /** - * Use `getAKnownArtifactSource() instead. The behaviour of these two predicates is equivalent. + * Use `getAKnownArtifactSource() instead. The behavior of these two predicates is equivalent. */ final override KnownElement getAKnownSource() { result = this.getAKnownArtifactSource() } @@ -1841,9 +1841,7 @@ module CryptographyBase Input> { * An SCRYPT key derivation algorithm node. */ class ScryptAlgorithmNode extends KeyDerivationAlgorithmNode { - ScryptAlgorithmInstance scryptInstance; - - ScryptAlgorithmNode() { scryptInstance = instance.asAlg() } + ScryptAlgorithmNode() { instance.asAlg() instanceof ScryptAlgorithmInstance } /** * Gets the iteration count (`N`) argument diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index 36d76723360..023d04f544d 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.8-dev +version: 0.0.9-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index c6dd1d9b79d..e64dff3b1e6 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.30 + +No user-facing changes. + ## 1.0.29 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.30.md b/shared/rangeanalysis/change-notes/released/1.0.30.md new file mode 100644 index 00000000000..cb2cf6d0a27 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.30.md @@ -0,0 +1,3 @@ +## 1.0.30 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 8751a216238..f04640951de 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.29 +lastReleaseVersion: 1.0.30 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index a8b86549ce9..5ee5c466a3d 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.30-dev +version: 1.0.31-dev groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index ccbf4d95cf6..11353af62b1 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.30 + +No user-facing changes. + ## 1.0.29 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.30.md b/shared/regex/change-notes/released/1.0.30.md new file mode 100644 index 00000000000..cb2cf6d0a27 --- /dev/null +++ b/shared/regex/change-notes/released/1.0.30.md @@ -0,0 +1,3 @@ +## 1.0.30 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 8751a216238..f04640951de 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.29 +lastReleaseVersion: 1.0.30 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 496ef35adc1..30748219abb 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.30-dev +version: 1.0.31-dev groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 9c9caa32918..5a9cf1a7175 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.6 + +No user-facing changes. + ## 2.0.5 No user-facing changes. diff --git a/shared/ssa/change-notes/released/2.0.6.md b/shared/ssa/change-notes/released/2.0.6.md new file mode 100644 index 00000000000..d8ae25aacd0 --- /dev/null +++ b/shared/ssa/change-notes/released/2.0.6.md @@ -0,0 +1,3 @@ +## 2.0.6 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 6c269316f27..fbbc03c7642 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.5 +lastReleaseVersion: 2.0.6 diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index 2aa136ff719..20a447f91a9 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -5,63 +5,14 @@ overlay[local?] module; +private import codeql.controlflow.BasicBlock as BB private import codeql.util.Location private import codeql.util.Unit +signature class BasicBlockSig; + /** Provides the input specification of the SSA implementation. */ -signature module InputSig { - /** - * 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 length of this basic block. */ - int length(); - - /** Gets the location of this basic block. */ - Location getLocation(); - } - - /** 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(); - } - - /** - * Gets the basic block that immediately dominates basic block `bb`, if any. - * - * That is, all paths reaching `bb` from some entry point basic block must go - * through the result. - * - * Example: - * - * ```csharp - * int M(string s) { - * if (s == null) - * throw new ArgumentNullException(nameof(s)); - * return s.Length; - * } - * ``` - * - * The basic block starting on line 2 is an immediate dominator of - * the basic block on line 4 (all paths from the entry point of `M` - * to `return s.Length;` must go through the null check. - */ - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb); - - /** Gets an immediate successor of basic block `bb`, if any. */ - BasicBlock getABasicBlockSuccessor(BasicBlock bb); - +signature module InputSig { /** A variable that can be SSA converted. */ class SourceVariable { /** Gets a textual representation of this variable. */ @@ -108,12 +59,13 @@ signature module InputSig { * NB: If this predicate is exposed, it should be cached. * ``` */ -module Make Input> { +module Make< + LocationSig Location, BB::CfgSig Cfg, InputSig Input> +{ + private import Cfg private import Input - private BasicBlock getABasicBlockPredecessor(BasicBlock bb) { - getABasicBlockSuccessor(result) = bb - } + private BasicBlock getABasicBlockPredecessor(BasicBlock bb) { result.getASuccessor() = bb } /** * A classification of variable references into reads and @@ -237,9 +189,7 @@ module Make Input> { /** * Holds if source variable `v` is live at the end of basic block `bb`. */ - predicate liveAtExit(BasicBlock bb, SourceVariable v) { - liveAtEntry(getABasicBlockSuccessor(bb), v) - } + predicate liveAtExit(BasicBlock bb, SourceVariable v) { liveAtEntry(bb.getASuccessor(), v) } /** * Holds if variable `v` is live in basic block `bb` at rank `rnk`. @@ -270,25 +220,6 @@ module Make Input> { private import Liveness - /** - * Holds if `df` is in the dominance frontier of `bb`. - * - * This is equivalent to: - * - * ```ql - * bb = getImmediateBasicBlockDominator*(getABasicBlockPredecessor(df)) and - * not bb = getImmediateBasicBlockDominator+(df) - * ``` - */ - private predicate inDominanceFrontier(BasicBlock bb, BasicBlock df) { - bb = getABasicBlockPredecessor(df) and not bb = getImmediateBasicBlockDominator(df) - or - exists(BasicBlock prev | inDominanceFrontier(prev, df) | - bb = getImmediateBasicBlockDominator(prev) and - not bb = getImmediateBasicBlockDominator(df) - ) - } - /** * Holds if `bb` is in the dominance frontier of a block containing a * definition of `v`. @@ -297,7 +228,7 @@ module Make Input> { private predicate inDefDominanceFrontier(BasicBlock bb, SourceVariable v) { exists(BasicBlock defbb, Definition def | def.definesAt(v, defbb, _) and - inDominanceFrontier(defbb, bb) + defbb.inDominanceFrontier(bb) ) } @@ -307,7 +238,7 @@ module Make Input> { */ pragma[nomagic] private predicate inReadDominanceFrontier(BasicBlock bb, SourceVariable v) { - exists(BasicBlock readbb | inDominanceFrontier(readbb, bb) | + exists(BasicBlock readbb | readbb.inDominanceFrontier(bb) | ssaDefReachesRead(v, _, readbb, _) and variableRead(readbb, _, v, true) and not variableWrite(readbb, _, v, _) @@ -389,7 +320,7 @@ module Make Input> { */ pragma[nomagic] private predicate liveThrough(BasicBlock idom, BasicBlock bb, SourceVariable v) { - idom = getImmediateBasicBlockDominator(bb) and + idom = bb.getImmediateDominator() and liveAtExit(bb, v) and not any(Definition def).definesAt(v, bb, _) } @@ -439,7 +370,7 @@ module Make Input> { ssaDefReachesReadWithinBlock(v, def, bb, i) or ssaRef(bb, i, v, Read()) and - ssaDefReachesEndOfBlock(getImmediateBasicBlockDominator(bb), def, v) and + ssaDefReachesEndOfBlock(bb.getImmediateDominator(), def, v) and not ssaDefReachesReadWithinBlock(v, _, bb, i) } @@ -483,7 +414,7 @@ module Make Input> { */ pragma[nomagic] private predicate liveThrough(BasicBlock idom, BasicBlock bb, SourceVariable v) { - idom = getImmediateBasicBlockDominator(bb) and + idom = bb.getImmediateDominator() and liveAtExit(bb, v) and not ssaRef(bb, _, v, _) } @@ -517,7 +448,7 @@ module Make Input> { bb1 = bb2 and refRank(bb1, i1, v, _) + 1 = refRank(bb2, i2, v, Read()) or - refReachesEndOfBlock(bb1, i1, getImmediateBasicBlockDominator(bb2), v) and + refReachesEndOfBlock(bb1, i1, bb2.getImmediateDominator(), v) and 1 = refRank(bb2, i2, v, Read()) } @@ -808,12 +739,12 @@ module Make Input> { DefinitionExt def, SourceVariable v, BasicBlock bb1, BasicBlock bb2 ) { defOccursInBlock(def, bb1, v, _) and - bb2 = getABasicBlockSuccessor(bb1) + bb2 = bb1.getASuccessor() or exists(BasicBlock mid | varBlockReachesExt(def, v, bb1, mid) and ssaDefReachesThroughBlock(def, mid) and - bb2 = getABasicBlockSuccessor(mid) + bb2 = mid.getASuccessor() ) } @@ -943,7 +874,7 @@ module Make Input> { // the node. If two definitions dominate a node then one must dominate the // other, so therefore the definition of _closest_ is given by the dominator // tree. Thus, reaching definitions can be calculated in terms of dominance. - ssaDefReachesEndOfBlockExt0(getImmediateBasicBlockDominator(bb), def, pragma[only_bind_into](v)) and + ssaDefReachesEndOfBlockExt0(bb.getImmediateDominator(), def, pragma[only_bind_into](v)) and liveThroughExt(bb, pragma[only_bind_into](v)) } @@ -1150,7 +1081,7 @@ module Make Input> { predicate uncertainWriteDefinitionInput = SsaDefReachesNew::uncertainWriteDefinitionInput/2; /** Holds if `bb` is a control-flow exit point. */ - private predicate exitBlock(BasicBlock bb) { not exists(getABasicBlockSuccessor(bb)) } + private predicate exitBlock(BasicBlock bb) { not exists(bb.getASuccessor()) } /** * NB: If this predicate is exposed, it should be cached. @@ -1418,7 +1349,7 @@ module Make Input> { or ssaDefReachesRead(v, def, bb, i) and not SsaDefReachesNew::ssaDefReachesReadWithinBlock(v, def, bb, i) and - not def.definesAt(v, getImmediateBasicBlockDominator*(bb), _) + not def.definesAt(v, bb.getImmediateDominator*(), _) ) } @@ -1667,7 +1598,7 @@ module Make Input> { DfInput::keepAllPhiInputBackEdges() and exists(getAPhiInputDef(phi, input)) and phi.getBasicBlock() = bbPhi and - getImmediateBasicBlockDominator+(input) = bbPhi + input.getImmediateDominator+() = bbPhi ) } diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 30858c2f029..1bb80db8eb8 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,7 +1,8 @@ name: codeql/ssa -version: 2.0.6-dev +version: 2.0.7-dev groups: shared library: true dependencies: + codeql/controlflow: ${workspace} codeql/util: ${workspace} warnOnImplicitThis: true diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index 596a873b2c5..c30f8de8bc9 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.30 + +No user-facing changes. + ## 1.0.29 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.30.md b/shared/threat-models/change-notes/released/1.0.30.md new file mode 100644 index 00000000000..cb2cf6d0a27 --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.30.md @@ -0,0 +1,3 @@ +## 1.0.30 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 8751a216238..f04640951de 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.29 +lastReleaseVersion: 1.0.30 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 76cca7a3d08..4295c7e7024 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.30-dev +version: 1.0.31-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 73e10501041..61441b61061 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.30 + +No user-facing changes. + ## 1.0.29 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.30.md b/shared/tutorial/change-notes/released/1.0.30.md new file mode 100644 index 00000000000..cb2cf6d0a27 --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.30.md @@ -0,0 +1,3 @@ +## 1.0.30 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 8751a216238..f04640951de 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.29 +lastReleaseVersion: 1.0.30 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 5427f065760..f640ccc3116 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.30-dev +version: 1.0.31-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index 5b8d81ca4b3..94df766d756 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.30 + +No user-facing changes. + ## 1.0.29 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.30.md b/shared/typeflow/change-notes/released/1.0.30.md new file mode 100644 index 00000000000..cb2cf6d0a27 --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.30.md @@ -0,0 +1,3 @@ +## 1.0.30 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index 8751a216238..f04640951de 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.29 +lastReleaseVersion: 1.0.30 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 90dd04cd114..f98b15e1540 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.30-dev +version: 1.0.31-dev groups: shared library: true dependencies: diff --git a/shared/typeinference/CHANGELOG.md b/shared/typeinference/CHANGELOG.md index 1857b399fe8..d9dd6b6f2e2 100644 --- a/shared/typeinference/CHANGELOG.md +++ b/shared/typeinference/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.11 + +No user-facing changes. + ## 0.0.10 No user-facing changes. diff --git a/shared/typeinference/change-notes/released/0.0.11.md b/shared/typeinference/change-notes/released/0.0.11.md new file mode 100644 index 00000000000..19a2a55bd68 --- /dev/null +++ b/shared/typeinference/change-notes/released/0.0.11.md @@ -0,0 +1,3 @@ +## 0.0.11 + +No user-facing changes. diff --git a/shared/typeinference/codeql-pack.release.yml b/shared/typeinference/codeql-pack.release.yml index b740014e5ae..e679dc42092 100644 --- a/shared/typeinference/codeql-pack.release.yml +++ b/shared/typeinference/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.10 +lastReleaseVersion: 0.0.11 diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index 509cb216f7a..ca81b09ba49 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.11-dev +version: 0.0.12-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 7e63a18be0b..4e7d55fc700 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.14 + +No user-facing changes. + ## 2.0.13 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/2.0.14.md b/shared/typetracking/change-notes/released/2.0.14.md new file mode 100644 index 00000000000..13190ad53e3 --- /dev/null +++ b/shared/typetracking/change-notes/released/2.0.14.md @@ -0,0 +1,3 @@ +## 2.0.14 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 30d169d6eb8..23aa0864b29 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.13 +lastReleaseVersion: 2.0.14 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 746a61e679f..95228f4b0d7 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.14-dev +version: 2.0.15-dev groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 4c15b434d52..37548ac47d5 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.30 + +No user-facing changes. + ## 1.0.29 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.30.md b/shared/typos/change-notes/released/1.0.30.md new file mode 100644 index 00000000000..cb2cf6d0a27 --- /dev/null +++ b/shared/typos/change-notes/released/1.0.30.md @@ -0,0 +1,3 @@ +## 1.0.30 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 8751a216238..f04640951de 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.29 +lastReleaseVersion: 1.0.30 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 036b545df82..42c6e4df22e 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.30-dev +version: 1.0.31-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index f7354c0cfbe..193ce4e9521 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.0.17 + +### Minor Analysis Improvements + +* Added `LocatableOption` and `OptionWithLocationInfo` as modules providing option types with location information. + ## 2.0.16 No user-facing changes. diff --git a/shared/util/change-notes/released/2.0.17.md b/shared/util/change-notes/released/2.0.17.md new file mode 100644 index 00000000000..e7a8146ddd0 --- /dev/null +++ b/shared/util/change-notes/released/2.0.17.md @@ -0,0 +1,5 @@ +## 2.0.17 + +### Minor Analysis Improvements + +* Added `LocatableOption` and `OptionWithLocationInfo` as modules providing option types with location information. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index c10461a785c..a5f7c15c020 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.16 +lastReleaseVersion: 2.0.17 diff --git a/shared/util/codeql/util/Option.qll b/shared/util/codeql/util/Option.qll index 65a5e872452..77cc89504f5 100644 --- a/shared/util/codeql/util/Option.qll +++ b/shared/util/codeql/util/Option.qll @@ -2,12 +2,24 @@ overlay[local?] module; +private import Location + /** A type with `toString`. */ private signature class TypeWithToString { bindingset[this] string toString(); } +/** A type with `toString` and `hasLocationInfo` */ +private signature class TypeWithLocationInfo { + bindingset[this] + string toString(); + + predicate hasLocationInfo( + string filePath, int startLine, int startColumn, int endLine, int endColumn + ); +} + /** * Constructs an `Option` type that is a disjoint union of the given type and an * additional singleton element. @@ -45,3 +57,91 @@ module Option { /** Gets the given element wrapped as an `Option`. */ Some some(T c) { result = TSome(c) } } + +/** + * Constructs an `Option` type that is a disjoint union of the given type and an + * additional singleton element, and has a `hasLocationInfo` predicate. + * `T` must have a `hasLocationInfo` predicate. + */ +module OptionWithLocationInfo { + private module O = Option; + + final private class BaseOption = O::Option; + + /** + * An option type. This is either a singleton `None` or a `Some` wrapping the + * given type. + */ + class Option extends BaseOption { + /** + * Holds if this element is at the specified location. + * The location spans column `startColumn` of line `startLine` to + * column `endColumn` of line `endLine` in file `filepath`. + * For more information, see + * [Providing locations in CodeQL queries](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ + predicate hasLocationInfo( + string filePath, int startLine, int startColumn, int endLine, int endColumn + ) { + this.isNone() and + filePath = "" and + startLine = 0 and + startColumn = 0 and + endLine = 0 and + endColumn = 0 + or + this.asSome().hasLocationInfo(filePath, startLine, startColumn, endLine, endColumn) + } + } + + /** The singleton `None` element. */ + class None extends Option instanceof O::None { } + + /** A wrapper for the given type. */ + class Some extends Option instanceof O::Some { } + + /** Gets the given element wrapped as an `Option`. */ + Some some(T c) { result.asSome() = c } +} + +private module WithLocation { + signature class LocatableType { + bindingset[this] + string toString(); + + Location getLocation(); + } +} + +/** + * Constructs an `Option` type that is a disjoint union of the given type and an + * additional singleton element, and has a `getLocation` predicate. + * `T` must have a `getLocation` predicate with a result type of `Location`. + */ +module LocatableOption::LocatableType T> { + private module O = Option; + + final private class BaseOption = O::Option; + + /** + * An option type. This is either a singleton `None` or a `Some` wrapping the + * given type. + */ + class Option extends BaseOption { + Location getLocation() { + result = this.asSome().getLocation() + or + this.isNone() and + result.hasLocationInfo("", 0, 0, 0, 0) + } + } + + /** The singleton `None` element. */ + class None extends Option instanceof O::None { } + + /** A wrapper for the given type. */ + class Some extends Option instanceof O::Some { } + + /** Gets the given element wrapped as an `Option`. */ + Some some(T c) { result.asSome() = c } +} diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index f3c51c17a49..2587ddb147a 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.17-dev +version: 2.0.18-dev groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index 70c94326970..96204491536 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.30 + +No user-facing changes. + ## 1.0.29 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.30.md b/shared/xml/change-notes/released/1.0.30.md new file mode 100644 index 00000000000..cb2cf6d0a27 --- /dev/null +++ b/shared/xml/change-notes/released/1.0.30.md @@ -0,0 +1,3 @@ +## 1.0.30 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index 8751a216238..f04640951de 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.29 +lastReleaseVersion: 1.0.30 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index c0c541fa282..4e9a5bf0a63 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.30-dev +version: 1.0.31-dev groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index e0f14b7a34c..67e07b08467 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.30 + +No user-facing changes. + ## 1.0.29 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.30.md b/shared/yaml/change-notes/released/1.0.30.md new file mode 100644 index 00000000000..cb2cf6d0a27 --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.30.md @@ -0,0 +1,3 @@ +## 1.0.30 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 8751a216238..f04640951de 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.29 +lastReleaseVersion: 1.0.30 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 3b757e1f062..56aa47072f0 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.30-dev +version: 1.0.31-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/codeql-extractor.yml b/swift/codeql-extractor.yml index c7c0bdca75a..589679cdb0e 100644 --- a/swift/codeql-extractor.yml +++ b/swift/codeql-extractor.yml @@ -6,6 +6,8 @@ legacy_qltest_extraction: true build_modes: - autobuild - manual +default_queries: + - codeql/swift-queries github_api_languages: - Swift scc_languages: diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 13c6f27bffb..cef716a2578 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.0.6 + +No user-facing changes. + ## 5.0.5 No user-facing changes. diff --git a/swift/ql/lib/change-notes/released/5.0.6.md b/swift/ql/lib/change-notes/released/5.0.6.md new file mode 100644 index 00000000000..3281a876281 --- /dev/null +++ b/swift/ql/lib/change-notes/released/5.0.6.md @@ -0,0 +1,3 @@ +## 5.0.6 + +No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 02e5f00fa9e..cc6fded2554 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.0.5 +lastReleaseVersion: 5.0.6 diff --git a/swift/ql/lib/codeql/swift/controlflow/BasicBlocks.qll b/swift/ql/lib/codeql/swift/controlflow/BasicBlocks.qll index 160903fd895..e5acea49fda 100644 --- a/swift/ql/lib/codeql/swift/controlflow/BasicBlocks.qll +++ b/swift/ql/lib/codeql/swift/controlflow/BasicBlocks.qll @@ -1,9 +1,10 @@ /** Provides classes representing basic blocks. */ +private import swift private import ControlFlowGraph private import internal.ControlFlowGraphImpl as CfgImpl -private import SuccessorTypes private import CfgImpl::BasicBlocks as BasicBlocksImpl +private import codeql.controlflow.BasicBlock as BB /** * A basic block, that is, a maximal straight-line sequence of control flow nodes @@ -111,3 +112,21 @@ final class ConditionBlock extends BasicBlock, BasicBlocksImpl::ConditionBasicBl super.edgeDominates(controlled, s) } } + +private class BasicBlockAlias = BasicBlock; + +private class EntryBasicBlockAlias = EntryBasicBlock; + +private class ControlFlowNodeAlias = ControlFlowNode; + +module Cfg implements BB::CfgSig { + class ControlFlowNode = ControlFlowNodeAlias; + + class BasicBlock = BasicBlockAlias; + + class EntryBasicBlock = EntryBasicBlockAlias; + + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + BasicBlocksImpl::dominatingEdge(bb1, bb2) + } +} diff --git a/swift/ql/lib/codeql/swift/controlflow/ControlFlowGraph.qll b/swift/ql/lib/codeql/swift/controlflow/ControlFlowGraph.qll index 4d1be28b001..ef443f30184 100644 --- a/swift/ql/lib/codeql/swift/controlflow/ControlFlowGraph.qll +++ b/swift/ql/lib/codeql/swift/controlflow/ControlFlowGraph.qll @@ -2,11 +2,11 @@ private import swift private import BasicBlocks -private import SuccessorTypes private import internal.ControlFlowGraphImpl as CfgImpl private import internal.Completion private import internal.Scope private import internal.ControlFlowElements +import codeql.controlflow.SuccessorType /** An AST node with an associated control-flow graph. */ class CfgScope extends Scope instanceof CfgImpl::CfgScope::Range_ { @@ -61,72 +61,3 @@ class ControlFlowNode extends CfgImpl::Node { /** Holds if this node has more than one successor. */ final predicate isBranch() { strictcount(this.getASuccessor()) > 1 } } - -/** The type of a control flow successor. */ -class SuccessorType extends CfgImpl::TSuccessorType { - /** Gets a textual representation of successor type. */ - string toString() { none() } -} - -/** Provides different types of control flow successor types. */ -module SuccessorTypes { - /** A normal control flow successor. */ - class NormalSuccessor extends SuccessorType, CfgImpl::TSuccessorSuccessor { - final override string toString() { result = "successor" } - } - - /** A conditional control flow successor. */ - abstract class ConditionalSuccessor extends SuccessorType { - boolean value; - - bindingset[value] - ConditionalSuccessor() { any() } - - /** Gets the Boolean value of this successor. */ - final boolean getValue() { result = value } - - override string toString() { result = this.getValue().toString() } - } - - /** A Boolean control flow successor. */ - class BooleanSuccessor extends ConditionalSuccessor, CfgImpl::TBooleanSuccessor { - BooleanSuccessor() { this = CfgImpl::TBooleanSuccessor(value) } - } - - class BreakSuccessor extends SuccessorType, CfgImpl::TBreakSuccessor { - final override string toString() { result = "break" } - } - - class ContinueSuccessor extends SuccessorType, CfgImpl::TContinueSuccessor { - final override string toString() { result = "continue" } - } - - class ReturnSuccessor extends SuccessorType, CfgImpl::TReturnSuccessor { - final override string toString() { result = "return" } - } - - class MatchingSuccessor extends ConditionalSuccessor, CfgImpl::TMatchingSuccessor { - MatchingSuccessor() { this = CfgImpl::TMatchingSuccessor(value) } - - /** Holds if this is a match successor. */ - predicate isMatch() { value = true } - - override string toString() { if this.isMatch() then result = "match" else result = "no-match" } - } - - class FallthroughSuccessor extends SuccessorType, CfgImpl::TFallthroughSuccessor { - final override string toString() { result = "fallthrough" } - } - - class EmptinessSuccessor extends ConditionalSuccessor, CfgImpl::TEmptinessSuccessor { - EmptinessSuccessor() { this = CfgImpl::TEmptinessSuccessor(value) } - - predicate isEmpty() { value = true } - - override string toString() { if this.isEmpty() then result = "empty" else result = "non-empty" } - } - - class ExceptionSuccessor extends SuccessorType, CfgImpl::TExceptionSuccessor { - override string toString() { result = "exception" } - } -} diff --git a/swift/ql/lib/codeql/swift/controlflow/internal/Completion.qll b/swift/ql/lib/codeql/swift/controlflow/internal/Completion.qll index 9e7975890e6..4a2acdf9e20 100644 --- a/swift/ql/lib/codeql/swift/controlflow/internal/Completion.qll +++ b/swift/ql/lib/codeql/swift/controlflow/internal/Completion.qll @@ -8,7 +8,6 @@ private import swift private import codeql.swift.controlflow.ControlFlowGraph private import ControlFlowElements private import ControlFlowGraphImpl -private import SuccessorTypes private newtype TCompletion = TSimpleCompletion() or @@ -324,7 +323,7 @@ abstract class NormalCompletion extends Completion { /** A simple (normal) completion. */ class SimpleCompletion extends NormalCompletion, TSimpleCompletion { - override NormalSuccessor getAMatchingSuccessorType() { any() } + override DirectSuccessor getAMatchingSuccessorType() { any() } override string toString() { result = "simple" } } @@ -468,7 +467,7 @@ class FallthroughCompletion extends Completion, TFallthroughCompletion { FallthroughCompletion() { this = TFallthroughCompletion(dest) } - override FallthroughSuccessor getAMatchingSuccessorType() { any() } + override DirectSuccessor getAMatchingSuccessorType() { any() } CaseStmt getDestination() { result = dest } diff --git a/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImpl.qll b/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImpl.qll index b610ff0b0f3..59d2acb5857 100644 --- a/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImpl.qll +++ b/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImpl.qll @@ -1976,18 +1976,6 @@ private module Cached { result = n.(FuncDeclElement).getAst() or result = n.(KeyPathElement).getAst() } - - cached - newtype TSuccessorType = - TSuccessorSuccessor() or - TBooleanSuccessor(boolean b) { b in [false, true] } or - TBreakSuccessor() or - TContinueSuccessor() or - TReturnSuccessor() or - TMatchingSuccessor(boolean match) { match in [false, true] } or - TFallthroughSuccessor() or - TEmptinessSuccessor(boolean isEmpty) { isEmpty in [false, true] } or - TExceptionSuccessor() } import Cached diff --git a/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImplSpecific.qll b/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImplSpecific.qll index 24548290ea0..37625e0be10 100644 --- a/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImplSpecific.qll +++ b/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImplSpecific.qll @@ -48,33 +48,11 @@ module CfgInput implements InputSig { CfgScope getCfgScope(AstNode n) { result = scopeOfAst(n.asAstNode()) } - class SuccessorType = Cfg::SuccessorType; + private class SuccessorType = Cfg::SuccessorType; /** Gets a successor type that matches completion `c`. */ SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } - /** - * Hold if `c` represents simple (normal) evaluation of a statement or an - * expression. - */ - predicate successorTypeIsSimple(SuccessorType t) { - t instanceof Cfg::SuccessorTypes::NormalSuccessor - } - - /** Holds if `t` is an abnormal exit type out of a CFG scope. */ - predicate isAbnormalExitType(SuccessorType t) { - t instanceof Cfg::SuccessorTypes::ExceptionSuccessor - } - - /** Hold if `t` represents a conditional successor type. */ - predicate successorTypeIsCondition(SuccessorType t) { - t instanceof Cfg::SuccessorTypes::BooleanSuccessor or - t instanceof Cfg::SuccessorTypes::BreakSuccessor or - t instanceof Cfg::SuccessorTypes::ContinueSuccessor or - t instanceof Cfg::SuccessorTypes::MatchingSuccessor or - t instanceof Cfg::SuccessorTypes::EmptinessSuccessor - } - /** Holds if `first` is first executed when entering `scope`. */ predicate scopeFirst(CfgScope scope, AstNode first) { scope.(Impl::CfgScope::Range_).entry(first) diff --git a/swift/ql/lib/codeql/swift/dataflow/Ssa.qll b/swift/ql/lib/codeql/swift/dataflow/Ssa.qll index ed75a06e534..4f0754ff590 100644 --- a/swift/ql/lib/codeql/swift/dataflow/Ssa.qll +++ b/swift/ql/lib/codeql/swift/dataflow/Ssa.qll @@ -6,21 +6,10 @@ module Ssa { private import codeql.swift.controlflow.ControlFlowGraph private import codeql.swift.controlflow.BasicBlocks as BasicBlocks - private module SsaInput implements SsaImplCommon::InputSig { + private module SsaInput implements SsaImplCommon::InputSig { private import internal.DataFlowPrivate - private import codeql.swift.controlflow.ControlFlowGraph as Cfg private import codeql.swift.controlflow.CfgNodes - class BasicBlock = BasicBlocks::BasicBlock; - - class ControlFlowNode = Cfg::ControlFlowNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { - result = bb.getImmediateDominator() - } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - private newtype TSourceVariable = TNormalSourceVariable(VarDecl v) or TKeyPathSourceVariable(EntryNode entry) { entry.getScope() instanceof KeyPathExpr } @@ -61,7 +50,7 @@ module Ssa { override EntryNode asKeyPath() { result = enter } } - predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableWrite(BasicBlocks::BasicBlock bb, int i, SourceVariable v, boolean certain) { exists(AssignExpr assign | bb.getNode(i).getNode().asAstNode() = assign and assign.getDest() = v.getAnAccess() and @@ -99,7 +88,7 @@ module Ssa { ) } - predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableRead(BasicBlocks::BasicBlock bb, int i, SourceVariable v, boolean certain) { exists(DeclRefExpr ref | not isLValue(ref) and bb.getNode(i).getNode().asAstNode() = ref and @@ -133,7 +122,7 @@ module Ssa { /** * INTERNAL: Do not use. */ - module SsaImpl = SsaImplCommon::Make; + module SsaImpl = SsaImplCommon::Make; cached class Definition extends SsaImpl::Definition { @@ -142,7 +131,7 @@ module Ssa { cached ControlFlowNode getARead() { - exists(SsaInput::SourceVariable v, SsaInput::BasicBlock bb, int i | + exists(SsaInput::SourceVariable v, BasicBlocks::BasicBlock bb, int i | SsaImpl::ssaDefReachesRead(v, this, bb, i) and SsaInput::variableRead(bb, i, v, true) and result = bb.getNode(i) @@ -151,7 +140,7 @@ module Ssa { cached ControlFlowNode getAFirstRead() { - exists(SsaInput::BasicBlock bb, int i | + exists(BasicBlocks::BasicBlock bb, int i | SsaImpl::firstUse(this, bb, i, true) and result = bb.getNode(i) ) @@ -160,7 +149,7 @@ module Ssa { cached predicate adjacentReadPair(ControlFlowNode read1, ControlFlowNode read2) { read1 = this.getARead() and - exists(SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2 | + exists(BasicBlocks::BasicBlock bb1, int i1, BasicBlocks::BasicBlock bb2, int i2 | read1 = bb1.getNode(i1) and SsaImpl::adjacentUseUse(bb1, i1, bb2, i2, _, true) and read2 = bb2.getNode(i2) @@ -168,7 +157,7 @@ module Ssa { } cached - deprecated predicate lastRefRedef(SsaInput::BasicBlock bb, int i, Definition next) { + deprecated predicate lastRefRedef(BasicBlocks::BasicBlock bb, int i, Definition next) { SsaImpl::lastRefRedef(this, bb, i, next) } } @@ -177,7 +166,7 @@ module Ssa { class WriteDefinition extends Definition, SsaImpl::WriteDefinition { cached override Location getLocation() { - exists(SsaInput::BasicBlock bb, int i | + exists(BasicBlocks::BasicBlock bb, int i | this.definesAt(_, bb, i) and result = bb.getNode(i).getLocation() ) @@ -189,19 +178,19 @@ module Ssa { */ cached predicate assigns(CfgNode value) { - exists(AssignExpr a, SsaInput::BasicBlock bb, int i | + exists(AssignExpr a, BasicBlocks::BasicBlock bb, int i | this.definesAt(_, bb, i) and a = bb.getNode(i).getNode().asAstNode() and value.getNode().asAstNode() = a.getSource() ) or - exists(SsaInput::BasicBlock bb, int blockIndex, NamedPattern np | + exists(BasicBlocks::BasicBlock bb, int blockIndex, NamedPattern np | this.definesAt(_, bb, blockIndex) and np = bb.getNode(blockIndex).getNode().asAstNode() and value.getNode().asAstNode() = np ) or - exists(SsaInput::BasicBlock bb, int blockIndex, ConditionElement ce, Expr init | + exists(BasicBlocks::BasicBlock bb, int blockIndex, ConditionElement ce, Expr init | this.definesAt(_, bb, blockIndex) and ce.getPattern() = bb.getNode(blockIndex).getNode().asAstNode() and init = ce.getInitializer() and @@ -216,14 +205,14 @@ module Ssa { class PhiDefinition extends Definition, SsaImpl::PhiNode { cached override Location getLocation() { - exists(SsaInput::BasicBlock bb | + exists(BasicBlocks::BasicBlock bb | this.definesAt(_, bb, _) and result = bb.getLocation() ) } cached - Definition getPhiInput(SsaInput::BasicBlock bb) { + Definition getPhiInput(BasicBlocks::BasicBlock bb) { SsaImpl::phiHasInputFromBlock(this, result, bb) } diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll index 4849c5ac235..9ea57c1ff06 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll @@ -882,30 +882,11 @@ private predicate closureFlowStep(CaptureInput::Expr e1, CaptureInput::Expr e2) e2.(Pattern).getImmediateMatchingExpr() = e1 } -private module CaptureInput implements VariableCapture::InputSig { +private module CaptureInput implements VariableCapture::InputSig { private import swift as S private import codeql.swift.controlflow.ControlFlowGraph as Cfg - private import codeql.swift.controlflow.BasicBlocks as B - class BasicBlock instanceof B::BasicBlock { - string toString() { result = super.toString() } - - ControlFlowNode getNode(int i) { result = super.getNode(i) } - - int length() { result = super.length() } - - Callable getEnclosingCallable() { result = super.getScope() } - - Location getLocation() { result = super.getLocation() } - } - - class ControlFlowNode = Cfg::ControlFlowNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { - result.(B::BasicBlock).immediatelyDominates(bb) - } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.(B::BasicBlock).getASuccessor() } + Callable basicBlockGetEnclosingCallable(BasicBlock bb) { result = bb.getScope() } class CapturedVariable instanceof S::VarDecl { CapturedVariable() { @@ -927,9 +908,7 @@ private module CaptureInput implements VariableCapture::InputSig { Location getLocation() { result = super.getLocation() } - predicate hasCfgNode(BasicBlock bb, int i) { - this = bb.(B::BasicBlock).getNode(i).getNode().asAstNode() - } + predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i).getNode().asAstNode() } } class VariableWrite extends Expr { @@ -1001,7 +980,7 @@ class CapturedVariable = CaptureInput::CapturedVariable; class CapturedParameter = CaptureInput::CapturedParameter; -module CaptureFlow = VariableCapture::Flow; +module CaptureFlow = VariableCapture::Flow; private CaptureFlow::ClosureNode asClosureNode(Node n) { result = n.(CaptureNode).getSynthesizedCaptureNode() diff --git a/swift/ql/lib/codeql/swift/elements/decl/internal/EnumDeclImpl.qll b/swift/ql/lib/codeql/swift/elements/decl/internal/EnumDeclImpl.qll index 9eff4077f93..3410ae30519 100644 --- a/swift/ql/lib/codeql/swift/elements/decl/internal/EnumDeclImpl.qll +++ b/swift/ql/lib/codeql/swift/elements/decl/internal/EnumDeclImpl.qll @@ -7,7 +7,7 @@ module Impl { /** * An enumeration declaration, for example: * ``` - * enum MyColours { + * enum MyColors { * case red * case green * case blue diff --git a/swift/ql/lib/codeql/swift/security/PathInjectionExtensions.qll b/swift/ql/lib/codeql/swift/security/PathInjectionExtensions.qll index 72608f50fe6..1ad4e773456 100644 --- a/swift/ql/lib/codeql/swift/security/PathInjectionExtensions.qll +++ b/swift/ql/lib/codeql/swift/security/PathInjectionExtensions.qll @@ -108,7 +108,7 @@ private class DefaultPathInjectionBarrier extends PathInjectionBarrier { TaintTracking::localTaint(validated, DataFlow::exprNode(normalize.getQualifier())) and DataFlow::localExprFlow(normalize, starts.getQualifier()) and DataFlow::localFlow(validated, this) and - exists(ConditionBlock bb, SuccessorTypes::BooleanSuccessor b | + exists(ConditionBlock bb, BooleanSuccessor b | bb.getANode().getNode().asAstNode().(IfStmt).getACondition() = getImmediateParent*(starts) and b.getValue() = true | diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 74dffd61857..451e86b8b3d 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 5.0.6-dev +version: 5.0.7-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 8faa03573fc..58d42ca7813 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.2.4 + +### Bug Fixes + +* Fixed an inconsistency across languages where most have a `Customizations.qll` file for adding customizations, but not all did. + ## 1.2.3 No user-facing changes. diff --git a/rust/ql/src/change-notes/2025-08-20-add-customizations.md b/swift/ql/src/change-notes/released/1.2.4.md similarity index 82% rename from rust/ql/src/change-notes/2025-08-20-add-customizations.md rename to swift/ql/src/change-notes/released/1.2.4.md index 3a01298283c..cdd0409c4c3 100644 --- a/rust/ql/src/change-notes/2025-08-20-add-customizations.md +++ b/swift/ql/src/change-notes/released/1.2.4.md @@ -1,4 +1,5 @@ ---- -category: fix ---- -* Fixed an inconsistency across languages where most have a `Customizations.qll` file for adding customizations, but not all did. \ No newline at end of file +## 1.2.4 + +### Bug Fixes + +* Fixed an inconsistency across languages where most have a `Customizations.qll` file for adding customizations, but not all did. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 09a7400b594..172090f46b6 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.3 +lastReleaseVersion: 1.2.4 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 9ee2255a7d6..7d0821afdd7 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.2.4-dev +version: 1.2.5-dev groups: - swift - queries