diff --git a/.github/workflows/compile-queries.yml b/.github/workflows/compile-queries.yml index 36171543cac..c8f6301bb53 100644 --- a/.github/workflows/compile-queries.yml +++ b/.github/workflows/compile-queries.yml @@ -17,9 +17,41 @@ permissions: contents: read jobs: - compile-queries: + detect-changes: if: github.repository_owner == 'github' + runs-on: ubuntu-latest + outputs: + languages: ${{ steps.detect.outputs.languages }} + steps: + - uses: actions/checkout@v5 + - name: Detect changed languages + id: detect + run: | + if [[ "${{ github.event_name }}" == "pull_request" ]]; then + # For PRs, detect which languages have changes + changed_files=$(gh pr view ${{ github.event.pull_request.number }} --json files --jq '.files.[].path') + languages=() + for lang in actions cpp csharp go java javascript python ql ruby rust swift; do + if echo "$changed_files" | grep -qE "^($lang/|shared/)" ; then + languages+=("$lang") + fi + done + echo "languages=$(jq -c -n '$ARGS.positional' --args "${languages[@]}")" >> $GITHUB_OUTPUT + else + # For pushes to main/rc branches, run all languages + echo 'languages=["actions","cpp","csharp","go","java","javascript","python","ql","ruby","rust","swift"]' >> $GITHUB_OUTPUT + fi + env: + GH_TOKEN: ${{ github.token }} + + compile-queries: + needs: detect-changes + if: github.repository_owner == 'github' && needs.detect-changes.outputs.languages != '[]' runs-on: ubuntu-latest-xl + strategy: + fail-fast: false + matrix: + language: ${{ fromJson(needs.detect-changes.outputs.languages) }} steps: - uses: actions/checkout@v5 @@ -31,16 +63,16 @@ jobs: id: query-cache uses: ./.github/actions/cache-query-compilation with: - key: all-queries + key: ${{ matrix.language }}-queries - name: check formatting - run: find shared */ql -type f \( -name "*.qll" -o -name "*.ql" \) -print0 | xargs -0 -n 3000 -P 10 codeql query format -q --check-only + run: find shared ${{ matrix.language }}/ql -type f \( -name "*.qll" -o -name "*.ql" \) -print0 | xargs -0 -n 3000 -P 10 codeql query format -q --check-only - name: compile queries - check-only # run with --check-only if running in a PR (github.sha != main) if : ${{ github.event_name == 'pull_request' }} shell: bash - run: codeql query compile -q -j0 */ql/{src,examples} --keep-going --warnings=error --check-only --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500 --ram=56000 + run: codeql query compile -q -j0 ${{ matrix.language }}/ql/{src,examples} --keep-going --warnings=error --check-only --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500 --ram=56000 - name: compile queries - full # do full compile if running on main - this populates the cache if : ${{ github.event_name != 'pull_request' }} shell: bash - run: codeql query compile -q -j0 */ql/{src,examples} --keep-going --warnings=error --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500 --ram=56000 + run: codeql query compile -q -j0 ${{ matrix.language }}/ql/{src,examples} --keep-going --warnings=error --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500 --ram=56000 diff --git a/.github/workflows/ql-for-ql-build.yml b/.github/workflows/ql-for-ql-build.yml index 9c568a9b572..e05a7c39c4b 100644 --- a/.github/workflows/ql-for-ql-build.yml +++ b/.github/workflows/ql-for-ql-build.yml @@ -27,6 +27,7 @@ jobs: uses: github/codeql-action/init@main with: languages: javascript # does not matter + tools: nightly - uses: ./.github/actions/os-version id: os_version ### Build the extractor ### diff --git a/.github/workflows/ql-for-ql-tests.yml b/.github/workflows/ql-for-ql-tests.yml index fdb9da284ce..e2186051904 100644 --- a/.github/workflows/ql-for-ql-tests.yml +++ b/.github/workflows/ql-for-ql-tests.yml @@ -30,6 +30,7 @@ jobs: uses: github/codeql-action/init@main with: languages: javascript # does not matter + tools: nightly - uses: ./.github/actions/os-version id: os_version - uses: actions/cache@v3 @@ -75,6 +76,7 @@ jobs: uses: github/codeql-action/init@main with: languages: javascript # does not matter + tools: nightly - uses: ./.github/actions/os-version id: os_version - uses: actions/cache@v3 diff --git a/actions/ql/examples/codeql-pack.lock.yml b/actions/ql/examples/codeql-pack.lock.yml new file mode 100644 index 00000000000..53004274575 --- /dev/null +++ b/actions/ql/examples/codeql-pack.lock.yml @@ -0,0 +1,4 @@ +--- +lockVersion: 1.0.0 +dependencies: {} +compiled: false diff --git a/actions/ql/examples/qlpack.yml b/actions/ql/examples/qlpack.yml new file mode 100644 index 00000000000..45be7ae0135 --- /dev/null +++ b/actions/ql/examples/qlpack.yml @@ -0,0 +1,7 @@ +name: codeql/actions-examples +groups: + - actions + - examples +dependencies: + codeql/actions-all: ${workspace} +warnOnImplicitThis: true diff --git a/actions/ql/examples/snippets/uses_pinned_sha.ql b/actions/ql/examples/snippets/uses_pinned_sha.ql new file mode 100644 index 00000000000..84b2cdae0fd --- /dev/null +++ b/actions/ql/examples/snippets/uses_pinned_sha.ql @@ -0,0 +1,12 @@ +/** + * @name Uses step with pinned SHA + * @description Finds 'uses' steps where the version is a pinned SHA. + * @id actions/examples/uses-pinned-sha + * @tags example + */ + +import actions + +from UsesStep uses +where uses.getVersion().regexpMatch("^[A-Fa-f0-9]{40}$") +select uses, "This 'uses' step has a pinned SHA version." diff --git a/actions/ql/lib/CHANGELOG.md b/actions/ql/lib/CHANGELOG.md index 4dfbb8413e2..1759333d659 100644 --- a/actions/ql/lib/CHANGELOG.md +++ b/actions/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.4.26 + +### Major Analysis Improvements + +* The query `actions/code-injection/medium` has been updated to include results which were incorrectly excluded while filtering out results that are reported by `actions/code-injection/critical`. + ## 0.4.25 No user-facing changes. diff --git a/actions/ql/lib/change-notes/2025-11-28-fix-code-injection-alert-filtering.md b/actions/ql/lib/change-notes/released/0.4.26.md similarity index 81% rename from actions/ql/lib/change-notes/2025-11-28-fix-code-injection-alert-filtering.md rename to actions/ql/lib/change-notes/released/0.4.26.md index b80ef77c2bc..80962fa638e 100644 --- a/actions/ql/lib/change-notes/2025-11-28-fix-code-injection-alert-filtering.md +++ b/actions/ql/lib/change-notes/released/0.4.26.md @@ -1,4 +1,5 @@ ---- -category: majorAnalysis ---- +## 0.4.26 + +### Major Analysis Improvements + * The query `actions/code-injection/medium` has been updated to include results which were incorrectly excluded while filtering out results that are reported by `actions/code-injection/critical`. diff --git a/actions/ql/lib/codeql-pack.release.yml b/actions/ql/lib/codeql-pack.release.yml index 7b212c2605f..06a4605c767 100644 --- a/actions/ql/lib/codeql-pack.release.yml +++ b/actions/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.4.25 +lastReleaseVersion: 0.4.26 diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index f22b1a9a199..27d4fa665e9 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.26-dev +version: 0.4.27-dev library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/CHANGELOG.md b/actions/ql/src/CHANGELOG.md index 1e5d2cab0e7..f667d284185 100644 --- a/actions/ql/src/CHANGELOG.md +++ b/actions/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.18 + +No user-facing changes. + ## 0.6.17 No user-facing changes. diff --git a/actions/ql/src/change-notes/released/0.6.18.md b/actions/ql/src/change-notes/released/0.6.18.md new file mode 100644 index 00000000000..77cbff5698a --- /dev/null +++ b/actions/ql/src/change-notes/released/0.6.18.md @@ -0,0 +1,3 @@ +## 0.6.18 + +No user-facing changes. diff --git a/actions/ql/src/codeql-pack.release.yml b/actions/ql/src/codeql-pack.release.yml index e1ac143badf..b694a16787b 100644 --- a/actions/ql/src/codeql-pack.release.yml +++ b/actions/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.17 +lastReleaseVersion: 0.6.18 diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index 70e9a695116..e93b555f030 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.18-dev +version: 0.6.19-dev library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/downgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/old.dbscheme b/cpp/downgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/old.dbscheme new file mode 100644 index 00000000000..83100310bf7 --- /dev/null +++ b/cpp/downgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/old.dbscheme @@ -0,0 +1,2483 @@ + +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * 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 +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +// ... 40 _Decimal32 +// ... 41 _Decimal64 +// ... 42 _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +| 394 = @isinvocable +| 395 = @isnothrowinvocable +| 396 = @isbitwisecloneable +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + | @isinvocable + | @isnothrowinvocable + | @isbitwisecloneable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +param_ref_to_this( + int expr: @param_ref ref +) + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/downgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/semmlecode.dbscheme b/cpp/downgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/semmlecode.dbscheme new file mode 100644 index 00000000000..1402ab319d2 --- /dev/null +++ b/cpp/downgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/semmlecode.dbscheme @@ -0,0 +1,2479 @@ + +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * 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 +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +// ... 40 _Decimal32 +// ... 41 _Decimal64 +// ... 42 _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +| 394 = @isinvocable +| 395 = @isnothrowinvocable +| 396 = @isbitwisecloneable +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + | @isinvocable + | @isnothrowinvocable + | @isbitwisecloneable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +param_ref_to_this( + int expr: @param_ref ref +) + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/downgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/upgrade.properties b/cpp/downgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/upgrade.properties new file mode 100644 index 00000000000..00fae2d3bc6 --- /dev/null +++ b/cpp/downgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/upgrade.properties @@ -0,0 +1,2 @@ +description: Sections for databaseMetadata and overlayChangedFiles +compatibility: full diff --git a/cpp/downgrades/9439176c1d1312787926458dd54d65a849069118/old.dbscheme b/cpp/downgrades/9439176c1d1312787926458dd54d65a849069118/old.dbscheme new file mode 100644 index 00000000000..9439176c1d1 --- /dev/null +++ b/cpp/downgrades/9439176c1d1312787926458dd54d65a849069118/old.dbscheme @@ -0,0 +1,2489 @@ + +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * 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 +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +// ... 40 _Decimal32 +// ... 41 _Decimal64 +// ... 42 _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +| 394 = @isinvocable +| 395 = @isnothrowinvocable +| 396 = @isbitwisecloneable +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + | @isinvocable + | @isnothrowinvocable + | @isbitwisecloneable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +param_ref_to_this( + int expr: @param_ref ref +) + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 17 = @ppd_embed +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +embeds( + unique int id: @ppd_embed ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/downgrades/9439176c1d1312787926458dd54d65a849069118/preprocdirects.ql b/cpp/downgrades/9439176c1d1312787926458dd54d65a849069118/preprocdirects.ql new file mode 100644 index 00000000000..c8f927943bd --- /dev/null +++ b/cpp/downgrades/9439176c1d1312787926458dd54d65a849069118/preprocdirects.ql @@ -0,0 +1,13 @@ +class PreprocessorDirective extends @preprocdirect { + string toString() { none() } +} + +class Location extends @location_default { + string toString() { none() } +} + +from PreprocessorDirective ppd, int kind, int kind_new, Location l +where + preprocdirects(ppd, kind, l) and + if kind = 17 then kind_new = /* ppd_warning */ 18 else kind_new = kind +select ppd, kind_new, l diff --git a/cpp/downgrades/9439176c1d1312787926458dd54d65a849069118/semmlecode.cpp.dbscheme b/cpp/downgrades/9439176c1d1312787926458dd54d65a849069118/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..83100310bf7 --- /dev/null +++ b/cpp/downgrades/9439176c1d1312787926458dd54d65a849069118/semmlecode.cpp.dbscheme @@ -0,0 +1,2483 @@ + +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * 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 +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +// ... 40 _Decimal32 +// ... 41 _Decimal64 +// ... 42 _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +| 394 = @isinvocable +| 395 = @isnothrowinvocable +| 396 = @isbitwisecloneable +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + | @isinvocable + | @isnothrowinvocable + | @isbitwisecloneable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +param_ref_to_this( + int expr: @param_ref ref +) + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/downgrades/9439176c1d1312787926458dd54d65a849069118/upgrade.properties b/cpp/downgrades/9439176c1d1312787926458dd54d65a849069118/upgrade.properties new file mode 100644 index 00000000000..a1d5935c29b --- /dev/null +++ b/cpp/downgrades/9439176c1d1312787926458dd54d65a849069118/upgrade.properties @@ -0,0 +1,4 @@ +description: Support embed preprocessor directive +compatibility: partial +embeds.rel: delete +preprocdirects.rel: run preprocdirects.qlo diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 3a543c0da92..a626fec99ae 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,27 @@ +## 7.0.0 + +### Breaking Changes + +* The `_Decimal32`, `_Decimal64`, and `_Decimal128` types are no longer exposed as builtin types. Support for these gcc-specific types was incomplete, and are generally not used in C/C++ codebases. + +### Deprecated APIs + +* The `OverloadedArrayExpr::getArrayOffset/0` predicate has been deprecated. Use `OverloadedArrayExpr::getArrayOffset/1` and `OverloadedArrayExpr::getAnArrayOffset` instead. + +### New Features + +* Added subclasses of `BuiltInOperations` for the `__is_bitwise_cloneable`, `__is_invocable`, and `__is_nothrow_invocable` builtin operations. +* Added a `isThisAccess` predicate to `ParamAccessForType` that holds when the access is to the implicit object parameter. +* Predicates `getArrayOffset/1` and `getAnArrayOffset` have been added to the `OverloadedArrayExpr` class to support C++23 multidimensional subscript operators. + +### Minor Analysis Improvements + +* Some constants will now be represented by their unfolded expression trees. The `isConstant` predicate of `Expr` will no longer yield a result for those constants. + +### Bug Fixes + +* Fixed a bug in the `DataFlow::BarrierGuard<...>::getABarrierNode` predicate which caused the predicate to return `DataFlow::Node`s with incorrect indirections. If you use `getABarrierNode` to implement barriers in a dataflow/taint-tracking query it may result in more query results. You can use `DataFlow::BarrierGuard<...>::getAnIndirectBarrierNode` to remove those query results. + ## 6.1.4 No user-facing changes. diff --git a/cpp/ql/lib/change-notes/2026-01-02-constant-folding.md b/cpp/ql/lib/change-notes/2026-01-02-constant-folding.md deleted file mode 100644 index 8ac0f91b939..00000000000 --- a/cpp/ql/lib/change-notes/2026-01-02-constant-folding.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Some constants will now be represented by their unfolded expression trees. The `isConstant` predicate of `Expr` will no longer yield a result for those constants. diff --git a/cpp/ql/lib/change-notes/2026-01-02-decimal-removal.md b/cpp/ql/lib/change-notes/2026-01-02-decimal-removal.md deleted file mode 100644 index 19d0d545576..00000000000 --- a/cpp/ql/lib/change-notes/2026-01-02-decimal-removal.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -* The `_Decimal32`, `_Decimal64`, and `_Decimal128` types are no longer exposed as builtin types. Support for these gcc-specific types was incomplete, and are generally not used in C/C++ codebases. diff --git a/cpp/ql/lib/change-notes/2026-01-08-multidimensional-subscript-operator-1.md b/cpp/ql/lib/change-notes/2026-01-08-multidimensional-subscript-operator-1.md deleted file mode 100644 index c0ed98ac50b..00000000000 --- a/cpp/ql/lib/change-notes/2026-01-08-multidimensional-subscript-operator-1.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* Predicates `getArrayOffset/1` and `getAnArrayOffset` have been added to the `OverloadedArrayExpr` class to support C++23 multidimensional subscript operators. diff --git a/cpp/ql/lib/change-notes/2026-01-08-multidimensional-subscript-operator-2.md b/cpp/ql/lib/change-notes/2026-01-08-multidimensional-subscript-operator-2.md deleted file mode 100644 index 0ce3bf38535..00000000000 --- a/cpp/ql/lib/change-notes/2026-01-08-multidimensional-subscript-operator-2.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: deprecated ---- -* The `OverloadedArrayExpr::getArrayOffset/0` predicate has been deprecated. Use `OverloadedArrayExpr::getArrayOffset/1` and `OverloadedArrayExpr::getAnArrayOffset` instead. diff --git a/cpp/ql/lib/change-notes/2026-01-09-builtins.md b/cpp/ql/lib/change-notes/2026-01-09-builtins.md deleted file mode 100644 index ece5fba5de6..00000000000 --- a/cpp/ql/lib/change-notes/2026-01-09-builtins.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* Added subclasses of `BuiltInOperations` for the `__is_bitwise_cloneable`, `__is_invocable`, and `__is_nothrow_invocable` builtin operations. diff --git a/cpp/ql/lib/change-notes/2026-01-09-this-access.md b/cpp/ql/lib/change-notes/2026-01-09-this-access.md deleted file mode 100644 index e0934d8926b..00000000000 --- a/cpp/ql/lib/change-notes/2026-01-09-this-access.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* Added a `isThisAccess` predicate to `ParamAccessForType` that holds when the access is to the implicit object parameter. diff --git a/cpp/ql/lib/change-notes/2026-01-19-embed.md b/cpp/ql/lib/change-notes/2026-01-19-embed.md new file mode 100644 index 00000000000..26d495277b5 --- /dev/null +++ b/cpp/ql/lib/change-notes/2026-01-19-embed.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added a subclass `Embed` of `PreprocessorDirective` for C23 and C++26 `#embed` preprocessor directives. diff --git a/cpp/ql/lib/change-notes/2026-01-19-parameterized-barrier-guard.md b/cpp/ql/lib/change-notes/2026-01-19-parameterized-barrier-guard.md new file mode 100644 index 00000000000..4f2d754c0b8 --- /dev/null +++ b/cpp/ql/lib/change-notes/2026-01-19-parameterized-barrier-guard.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added modules `DataFlow::ParameterizedBarrierGuard` and `DataFlow::ParameterizedInstructionBarrierGuard`. These modules provide the same features as `DataFlow::BarrierGuard` and `DataFlow::InstructionBarrierGuard`, but allow for an additional parameter to support properly using them in dataflow configurations that uses flow states. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/released/7.0.0.md b/cpp/ql/lib/change-notes/released/7.0.0.md new file mode 100644 index 00000000000..737d9def38a --- /dev/null +++ b/cpp/ql/lib/change-notes/released/7.0.0.md @@ -0,0 +1,23 @@ +## 7.0.0 + +### Breaking Changes + +* The `_Decimal32`, `_Decimal64`, and `_Decimal128` types are no longer exposed as builtin types. Support for these gcc-specific types was incomplete, and are generally not used in C/C++ codebases. + +### Deprecated APIs + +* The `OverloadedArrayExpr::getArrayOffset/0` predicate has been deprecated. Use `OverloadedArrayExpr::getArrayOffset/1` and `OverloadedArrayExpr::getAnArrayOffset` instead. + +### New Features + +* Added subclasses of `BuiltInOperations` for the `__is_bitwise_cloneable`, `__is_invocable`, and `__is_nothrow_invocable` builtin operations. +* Added a `isThisAccess` predicate to `ParamAccessForType` that holds when the access is to the implicit object parameter. +* Predicates `getArrayOffset/1` and `getAnArrayOffset` have been added to the `OverloadedArrayExpr` class to support C++23 multidimensional subscript operators. + +### Minor Analysis Improvements + +* Some constants will now be represented by their unfolded expression trees. The `isConstant` predicate of `Expr` will no longer yield a result for those constants. + +### Bug Fixes + +* Fixed a bug in the `DataFlow::BarrierGuard<...>::getABarrierNode` predicate which caused the predicate to return `DataFlow::Node`s with incorrect indirections. If you use `getABarrierNode` to implement barriers in a dataflow/taint-tracking query it may result in more query results. You can use `DataFlow::BarrierGuard<...>::getAnIndirectBarrierNode` to remove those query results. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 7dbbf7fb553..e0db21c7869 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 6.1.4 +lastReleaseVersion: 7.0.0 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 02876035046..4ee4779041d 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 6.1.5-dev +version: 7.0.1-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/lib/semmle/code/cpp/Element.qll b/cpp/ql/lib/semmle/code/cpp/Element.qll index b30503d2c94..17af69eddac 100644 --- a/cpp/ql/lib/semmle/code/cpp/Element.qll +++ b/cpp/ql/lib/semmle/code/cpp/Element.qll @@ -192,6 +192,15 @@ class Element extends ElementBase { */ predicate isAffectedByMacro() { affectedByMacro(this) } + /** + * INTERNAL: Do not use. + * + * Holds if this element is affected by the expansion of `mi`. + */ + predicate isAffectedByMacro(MacroInvocation mi) { + affectedbymacroexpansion(underlyingElement(this), unresolveElement(mi)) + } + private Element getEnclosingElementPref() { enclosingfunction(underlyingElement(this), unresolveElement(result)) or result.(Function) = stmtEnclosingElement(this) or diff --git a/cpp/ql/lib/semmle/code/cpp/Macro.qll b/cpp/ql/lib/semmle/code/cpp/Macro.qll index cbffc90d17c..77139e025e9 100644 --- a/cpp/ql/lib/semmle/code/cpp/Macro.qll +++ b/cpp/ql/lib/semmle/code/cpp/Macro.qll @@ -239,6 +239,9 @@ class MacroInvocation extends MacroAccess { macro_argument_unexpanded(underlyingElement(this), i, result) } + /** Gets the number of arguments for this macro invocation. */ + int getNumberOfArguments() { result = count(int i | exists(this.getUnexpandedArgument(i)) | i) } + /** * Gets the `i`th _expanded_ argument of this macro invocation, where the * first argument has `i = 0`. The result has been expanded for macros _and_ diff --git a/cpp/ql/lib/semmle/code/cpp/Preprocessor.qll b/cpp/ql/lib/semmle/code/cpp/Preprocessor.qll index 6a57f0bcae7..a0dfdcb9382 100644 --- a/cpp/ql/lib/semmle/code/cpp/Preprocessor.qll +++ b/cpp/ql/lib/semmle/code/cpp/Preprocessor.qll @@ -328,3 +328,27 @@ class PreprocessorPragma extends PreprocessorDirective, @ppd_pragma { class PreprocessorLine extends PreprocessorDirective, @ppd_line { override string toString() { result = "#line " + this.getHead() } } + +/** + * A C23 or C++26 `#embed` preprocessor directive. For example, the following code + * contains one `Embed` directive: + * ```cpp + * char arr[] = { + * #embed "bin" + * }; + * ``` + */ +class Embed extends PreprocessorDirective, @ppd_embed { + override string toString() { result = "#embed " + this.getIncludeText() } + + /** + * Gets the token which occurs after `#embed`, for example `"filename"` + * or ``. + */ + string getIncludeText() { result = this.getHead() } + + /** + * Gets the file directly embedded by this `#embed`. + */ + File getEmbeddedFile() { embeds(underlyingElement(this), unresolveElement(result)) } +} diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll index 7232326f1b3..eecacb14834 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll @@ -95,6 +95,7 @@ import cpp private import new.DataFlow +private import semmle.code.cpp.controlflow.IRGuards private import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate as Private private import semmle.code.cpp.ir.dataflow.internal.DataFlowUtil private import internal.FlowSummaryImpl @@ -367,6 +368,8 @@ private predicate elementSpec( ) { sourceModel(namespace, type, subtypes, name, signature, ext, _, _, _, _) or sinkModel(namespace, type, subtypes, name, signature, ext, _, _, _, _) or + barrierModel(namespace, type, subtypes, name, signature, ext, _, _, _, _) or + barrierGuardModel(namespace, type, subtypes, name, signature, ext, _, _, _, _, _) or summaryModel(namespace, type, subtypes, name, signature, ext, _, _, _, _, _) } @@ -1028,6 +1031,84 @@ private module Cached { isSinkNode(n, kind, model) and n.asNode() = node ) } + + private newtype TKindModelPair = + TMkPair(string kind, string model) { isBarrierGuardNode(_, _, kind, model) } + + private GuardValue convertAcceptingValue(Public::AcceptingValue av) { + av.isTrue() and result.asBooleanValue() = true + or + av.isFalse() and result.asBooleanValue() = false + or + // NOTE: The below cases don't contribute anything currently since the + // callers immediately use `.asBooleanValue()` to convert the `GuardValue` + // to a boolean. Once we're willing to accept the breaking change of + // converting the barrier guard API to use `GuardValue`s instead `Boolean`s + // we can remove this restriction. + av.isNoException() and result.getDualValue().isThrowsException() + or + av.isZero() and result.asIntValue() = 0 + or + av.isNotZero() and result.getDualValue().asIntValue() = 0 + or + av.isNull() and result.isNullValue() + or + av.isNotNull() and result.isNonNullValue() + } + + private predicate barrierGuardChecks(IRGuardCondition g, Expr e, boolean gv, TKindModelPair kmp) { + exists( + SourceSinkInterpretationInput::InterpretNode n, Public::AcceptingValue acceptingvalue, + string kind, string model + | + isBarrierGuardNode(n, acceptingvalue, kind, model) and + n.asNode().asExpr() = e and + kmp = TMkPair(kind, model) and + gv = convertAcceptingValue(acceptingvalue).asBooleanValue() and + n.asNode().(Private::ArgumentNode).getCall().asCallInstruction() = g + ) + } + + private newtype TKindModelPairIntPair = + MkKindModelPairIntPair(TKindModelPair pair, int indirectionIndex) { + indirectionIndex > 0 and + Private::nodeHasInstruction(_, _, indirectionIndex) and + exists(pair) + } + + private predicate indirectBarrierGuardChecks( + IRGuardCondition g, Expr e, boolean gv, TKindModelPairIntPair kmp + ) { + exists( + SourceSinkInterpretationInput::InterpretNode interpretNode, + Public::AcceptingValue acceptingvalue, string kind, string model, int indirectionIndex, + Private::ArgumentNode arg + | + isBarrierGuardNode(interpretNode, acceptingvalue, kind, model) and + arg = interpretNode.asNode() and + arg.asIndirectExpr(indirectionIndex) = e and + kmp = MkKindModelPairIntPair(TMkPair(kind, model), indirectionIndex) and + gv = convertAcceptingValue(acceptingvalue).asBooleanValue() and + arg.getCall().asCallInstruction() = g + ) + } + + /** + * Holds if `node` is specified as a barrier with the given kind in a MaD flow + * model. + */ + cached + predicate barrierNode(DataFlow::Node node, string kind, string model) { + exists(SourceSinkInterpretationInput::InterpretNode n | + isBarrierNode(n, kind, model) and n.asNode() = node + ) + or + DataFlow::ParameterizedBarrierGuard::getABarrierNode(TMkPair(kind, + model)) = node + or + DataFlow::ParameterizedBarrierGuard::getAnIndirectBarrierNode(MkKindModelPairIntPair(TMkPair(kind, + model), _)) = node + } } import Cached @@ -1044,6 +1125,12 @@ predicate sourceNode(DataFlow::Node node, string kind) { sourceNode(node, kind, */ predicate sinkNode(DataFlow::Node node, string kind) { sinkNode(node, kind, _) } +/** + * Holds if `node` is specified as a barrier with the given kind in a MaD flow + * model. + */ +predicate barrierNode(DataFlow::Node node, string kind) { barrierNode(node, kind, _) } + private predicate interpretSummary( Function f, string input, string output, string kind, string provenance, string model ) { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll index a1d9dd86c40..3c4177dc856 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll @@ -149,16 +149,27 @@ module SourceSinkInterpretationInput implements } predicate barrierElement( - Element n, string output, string kind, Public::Provenance provenance, string model + Element e, string output, string kind, Public::Provenance provenance, string model ) { - none() + exists( + string namespace, string type, boolean subtypes, string name, string signature, string ext + | + barrierModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance, model) and + e = interpretElement(namespace, type, subtypes, name, signature, ext) + ) } predicate barrierGuardElement( - Element n, string input, Public::AcceptingValue acceptingvalue, string kind, + Element e, string input, Public::AcceptingValue acceptingvalue, string kind, Public::Provenance provenance, string model ) { - none() + exists( + string package, string type, boolean subtypes, string name, string signature, string ext + | + barrierGuardModel(package, type, subtypes, name, signature, ext, input, acceptingvalue, kind, + provenance, model) and + e = interpretElement(package, type, subtypes, name, signature, ext) + ) } private newtype TInterpretNode = diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index 60e2635f338..851d987b1fd 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -23,7 +23,7 @@ class Expr extends StmtParent, @expr { predicate hasChild(Expr e, int n) { e = this.getChild(n) } /** Gets the enclosing function of this expression, if any. */ - Function getEnclosingFunction() { result = exprEnclosingElement(this) } + override Function getEnclosingFunction() { result = exprEnclosingElement(this) } /** Gets the nearest enclosing set of curly braces around this expression in the source, if any. */ BlockStmt getEnclosingBlock() { result = this.getEnclosingStmt().getEnclosingBlock() } 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 1185b6a0c9c..1c338d5a52d 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 @@ -156,7 +156,7 @@ class Node extends TIRDataFlowNode { * If `isGLValue()` holds, then the type of this node * should be thought of as "pointer to `getType()`". */ - DataFlowType getType() { none() } // overridden in subclasses + Type getType() { none() } // overridden in subclasses /** Gets the instruction corresponding to this node, if any. */ Instruction asInstruction() { result = this.(InstructionNode).getInstruction() } @@ -541,7 +541,7 @@ class Node extends TIRDataFlowNode { /** * Gets an upper bound on the type of this node. */ - DataFlowType getTypeBound() { result = this.getType() } + Type getTypeBound() { result = this.getType() } /** Gets the location of this element. */ cached @@ -585,7 +585,7 @@ private class Node0 extends Node, TNode0 { override string toStringImpl() { result = node.toString() } - override DataFlowType getType() { result = node.getType() } + override Type getType() { result = node.getType() } override predicate isGLValue() { node.isGLValue() } } @@ -704,7 +704,7 @@ class SsaSynthNode extends Node, TSsaSynthNode { override Declaration getFunction() { result = node.getBasicBlock().getEnclosingFunction() } - override DataFlowType getType() { result = node.getSourceVariable().getType() } + override Type getType() { result = node.getSourceVariable().getType() } override predicate isGLValue() { node.getSourceVariable().isGLValue() } @@ -732,7 +732,7 @@ class SsaIteratorNode extends Node, TSsaIteratorNode { override Declaration getFunction() { result = node.getFunction() } - override DataFlowType getType() { result = node.getType() } + override Type getType() { result = node.getType() } final override Location getLocationImpl() { result = node.getLocation() } @@ -792,7 +792,7 @@ class FinalGlobalValue extends Node, TFinalGlobalValue { override Declaration getFunction() { result = globalUse.getIRFunction().getFunction() } - override DataFlowType getType() { + override Type getType() { exists(int indirectionIndex | indirectionIndex = globalUse.getIndirectionIndex() and result = getTypeImpl(globalUse.getUnderlyingType(), indirectionIndex) @@ -826,7 +826,7 @@ class InitialGlobalValue extends Node, TInitialGlobalValue { final override predicate isGLValue() { globalDef.getIndirectionIndex() = 0 } - override DataFlowType getType() { result = globalDef.getUnderlyingType() } + override Type getType() { result = globalDef.getUnderlyingType() } final override Location getLocationImpl() { result = globalDef.getLocation() } @@ -853,7 +853,7 @@ class BodyLessParameterNodeImpl extends Node, TBodyLessParameterNodeImpl { /** Gets the indirection index of this node. */ int getIndirectionIndex() { result = indirectionIndex } - override DataFlowType getType() { + override Type getType() { result = getTypeImpl(p.getUnderlyingType(), this.getIndirectionIndex()) } @@ -1117,8 +1117,8 @@ private module RawIndirectNodes { override predicate isGLValue() { this.getOperand().isGLValue() } - override DataFlowType getType() { - exists(int sub, DataFlowType type, boolean isGLValue | + override Type getType() { + exists(int sub, Type type, boolean isGLValue | type = getOperandType(this.getOperand(), isGLValue) and if isGLValue = true then sub = 1 else sub = 0 | @@ -1163,8 +1163,8 @@ private module RawIndirectNodes { override predicate isGLValue() { this.getInstruction().isGLValue() } - override DataFlowType getType() { - exists(int sub, DataFlowType type, boolean isGLValue | + override Type getType() { + exists(int sub, Type type, boolean isGLValue | type = getInstructionType(this.getInstruction(), isGLValue) and if isGLValue = true then sub = 1 else sub = 0 | @@ -1263,7 +1263,7 @@ class FinalParameterNode extends Node, TFinalParameterNode { result.asSourceCallable() = this.getFunction() } - override DataFlowType getType() { result = getTypeImpl(p.getUnderlyingType(), indirectionIndex) } + override Type getType() { result = getTypeImpl(p.getUnderlyingType(), indirectionIndex) } final override Location getLocationImpl() { // Parameters can have multiple locations. When there's a unique location we use @@ -1539,7 +1539,7 @@ abstract class PostUpdateNode extends Node { */ abstract Node getPreUpdateNode(); - final override DataFlowType getType() { result = this.getPreUpdateNode().getType() } + final override Type getType() { result = this.getPreUpdateNode().getType() } } /** @@ -1632,9 +1632,7 @@ class VariableNode extends Node, TGlobalLikeVariableNode { result.asSourceCallable() = v } - override DataFlowType getType() { - result = getTypeImpl(v.getUnderlyingType(), indirectionIndex - 1) - } + override Type getType() { result = getTypeImpl(v.getUnderlyingType(), indirectionIndex - 1) } final override Location getLocationImpl() { // Certain variables (such as parameters) can have multiple locations. @@ -2419,6 +2417,19 @@ class ContentSet instanceof Content { } } +private signature class ParamSig; + +private module WithParam { + /** + * Holds if the guard `g` validates the expression `e` upon evaluating to `branch`. + * + * The expression `e` is expected to be a syntactic part of the guard `g`. + * For example, the guard `g` might be a call `isSafe(x)` and the expression `e` + * the argument `x`. + */ + signature predicate guardChecksSig(IRGuardCondition g, Expr e, boolean branch, P param); +} + /** * Holds if the guard `g` validates the expression `e` upon evaluating to `branch`. * @@ -2440,7 +2451,7 @@ private predicate controls(IRGuardCondition g, Node n, boolean edge) { * This is expected to be used in `isBarrier`/`isSanitizer` definitions * in data flow and taint tracking. */ -module BarrierGuard { +module ParameterizedBarrierGuard::guardChecksSig/4 guardChecks> { bindingset[value, n] pragma[inline_late] private predicate convertedExprHasValueNumber(ValueNumber value, Node n) { @@ -2450,12 +2461,13 @@ module BarrierGuard { ) } - private predicate guardChecksNode(IRGuardCondition g, Node n, boolean branch) { - guardChecks(g, n.asOperand().getDef().getConvertedResultExpression(), branch) + private predicate guardChecksNode(IRGuardCondition g, Node n, boolean branch, P p) { + guardChecks(g, n.asOperand().getDef().getConvertedResultExpression(), branch, p) } /** - * Gets an expression node that is safely guarded by the given guard check. + * Gets an expression node that is safely guarded by the given guard check + * when the parameter is `p`. * * For example, given the following code: * ```cpp @@ -2486,19 +2498,27 @@ module BarrierGuard { * * NOTE: If an indirect expression is tracked, use `getAnIndirectBarrierNode` instead. */ - Node getABarrierNode() { + Node getABarrierNode(P p) { exists(IRGuardCondition g, ValueNumber value, boolean edge | convertedExprHasValueNumber(value, result) and guardChecks(g, - pragma[only_bind_into](value.getAnInstruction().getConvertedResultExpression()), edge) and + pragma[only_bind_into](value.getAnInstruction().getConvertedResultExpression()), edge, p) and controls(g, result, edge) ) or - result = SsaImpl::BarrierGuard::getABarrierNode() + result = SsaImpl::BarrierGuard::getABarrierNode(p) } /** - * Gets an indirect expression node that is safely guarded by the given guard check. + * Gets an expression node that is safely guarded by the given guard check. + * + * See `getABarrierNode/1` for examples. + */ + Node getABarrierNode() { result = getABarrierNode(_) } + + /** + * Gets an indirect expression node that is safely guarded by the given + * guard check with parameter `p`. * * For example, given the following code: * ```cpp @@ -2530,6 +2550,13 @@ module BarrierGuard { * * NOTE: If a non-indirect expression is tracked, use `getABarrierNode` instead. */ + Node getAnIndirectBarrierNode(P p) { result = getAnIndirectBarrierNode(_, p) } + + /** + * Gets an indirect expression node that is safely guarded by the given guard check. + * + * See `getAnIndirectBarrierNode/1` for examples. + */ Node getAnIndirectBarrierNode() { result = getAnIndirectBarrierNode(_) } bindingset[value, n] @@ -2544,10 +2571,10 @@ module BarrierGuard { } private predicate guardChecksIndirectNode( - IRGuardCondition g, Node n, boolean branch, int indirectionIndex + IRGuardCondition g, Node n, boolean branch, int indirectionIndex, P p ) { guardChecks(g, n.asIndirectOperand(indirectionIndex).getDef().getConvertedResultExpression(), - branch) + branch, p) } /** @@ -2584,19 +2611,44 @@ module BarrierGuard { * * NOTE: If a non-indirect expression is tracked, use `getABarrierNode` instead. */ - Node getAnIndirectBarrierNode(int indirectionIndex) { + Node getAnIndirectBarrierNode(int indirectionIndex, P p) { exists(IRGuardCondition g, ValueNumber value, boolean edge | indirectConvertedExprHasValueNumber(indirectionIndex, value, result) and guardChecks(g, - pragma[only_bind_into](value.getAnInstruction().getConvertedResultExpression()), edge) and + pragma[only_bind_into](value.getAnInstruction().getConvertedResultExpression()), edge, p) and controls(g, result, edge) ) or result = - SsaImpl::BarrierGuardWithIntParam::getABarrierNode(indirectionIndex) + SsaImpl::BarrierGuardWithIntParam::getABarrierNode(indirectionIndex, + p) } } +/** + * Provides a set of barrier nodes for a guard that validates an expression. + * + * This is expected to be used in `isBarrier`/`isSanitizer` definitions + * in data flow and taint tracking. + */ +module BarrierGuard { + private predicate guardChecks(IRGuardCondition g, Expr e, boolean branch, Unit unit) { + guardChecks(g, e, branch) and + exists(unit) + } + + import ParameterizedBarrierGuard +} + +private module InstrWithParam { + /** + * Holds if the guard `g` validates the instruction `instr` upon evaluating to `branch`. + */ + signature predicate instructionGuardChecksSig( + IRGuardCondition g, Instruction instr, boolean branch, P p + ); +} + /** * Holds if the guard `g` validates the instruction `instr` upon evaluating to `branch`. */ @@ -2608,7 +2660,9 @@ signature predicate instructionGuardChecksSig(IRGuardCondition g, Instruction in * This is expected to be used in `isBarrier`/`isSanitizer` definitions * in data flow and taint tracking. */ -module InstructionBarrierGuard { +module ParameterizedInstructionBarrierGuard< + ParamSig P, InstrWithParam

::instructionGuardChecksSig/4 instructionGuardChecks> +{ bindingset[value, n] pragma[inline_late] private predicate operandHasValueNumber(ValueNumber value, Node n) { @@ -2618,21 +2672,27 @@ module InstructionBarrierGuard::getABarrierNode() + result = SsaImpl::BarrierGuard::getABarrierNode(p) } + /** Gets a node that is safely guarded by the given guard check. */ + Node getABarrierNode() { result = getABarrierNode(_) } + bindingset[value, n] pragma[inline_late] private predicate indirectOperandHasValueNumber(ValueNumber value, int indirectionIndex, Node n) { @@ -2643,25 +2703,52 @@ module InstructionBarrierGuard::getABarrierNode(indirectionIndex) + SsaImpl::BarrierGuardWithIntParam::getABarrierNode(indirectionIndex, + p) } + + /** + * Gets an indirect node that is safely guarded by the given guard check + * with parameter `p`. + */ + Node getAnIndirectBarrierNode(P p) { result = getAnIndirectBarrierNode(_, p) } + + /** Gets an indirect node that is safely guarded by the given guard check. */ + Node getAnIndirectBarrierNode() { result = getAnIndirectBarrierNode(_) } +} + +/** + * Provides a set of barrier nodes for a guard that validates an instruction. + * + * This is expected to be used in `isBarrier`/`isSanitizer` definitions + * in data flow and taint tracking. + */ +module InstructionBarrierGuard { + private predicate instructionGuardChecks( + IRGuardCondition g, Instruction i, boolean branch, Unit unit + ) { + instructionGuardChecks(g, i, branch) and + exists(unit) + } + + import ParameterizedInstructionBarrierGuard } /** 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 8dc3513b444..fb24a1db69f 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 @@ -53,7 +53,7 @@ private module SourceVariables { * the type of this source variable should be thought of as "pointer * to `getType()`". */ - DataFlowType getType() { + Type getType() { if this.isGLValue() then result = base.getType() else result = getTypeImpl(base.getType(), ind - 1) @@ -940,6 +940,16 @@ module SsaCached { SsaImpl::phiHasInputFromBlock(phi, inp, bb) } + cached + predicate uncertainWriteDefinitionInput(Definition uncertain, Definition inp) { + SsaImpl::uncertainWriteDefinitionInput(uncertain, inp) + } + + cached + predicate ssaDefReachesEndOfBlock(IRBlock bb, Definition def) { + SsaImpl::ssaDefReachesEndOfBlock(bb, def, _) + } + predicate variableRead = SsaInput::variableRead/4; predicate variableWrite = SsaInput::variableWrite/4; @@ -1035,13 +1045,23 @@ class SynthNode extends DataFlowIntegrationImpl::SsaNode { SynthNode() { not this.asDefinition() instanceof SsaImpl::WriteDefinition } } -signature predicate guardChecksNodeSig(IRGuards::IRGuardCondition g, Node e, boolean branch); +private signature class ParamSig; -signature predicate guardChecksNodeSig( - IRGuards::IRGuardCondition g, Node e, boolean branch, int indirectionIndex -); +private module ParamIntPair { + newtype TPair = MkPair(P p, int indirectionIndex) { nodeHasInstruction(_, _, indirectionIndex) } +} -module BarrierGuardWithIntParam { +private module WithParam { + signature predicate guardChecksNodeSig(IRGuards::IRGuardCondition g, Node e, boolean gv, P param); +} + +private module IntWithParam { + signature predicate guardChecksNodeSig( + IRGuards::IRGuardCondition g, Node e, boolean gv, int indirectionIndex, P param + ); +} + +module BarrierGuardWithIntParam::guardChecksNodeSig/5 guardChecksNode> { private predicate ssaDefReachesCertainUse(Definition def, UseImpl use) { exists(SourceVariable v, IRBlock bb, int i | use.hasIndexInBlock(bb, i, v) and @@ -1052,34 +1072,44 @@ module BarrierGuardWithIntParam { private predicate guardChecksInstr( IRGuards::Guards_v1::Guard g, IRGuards::GuardsInput::Expr instr, IRGuards::GuardValue gv, - int indirectionIndex + ParamIntPair

::TPair pair ) { - exists(Node node | + exists(Node node, int indirectionIndex, P p | + pair = ParamIntPair

::MkPair(p, indirectionIndex) and nodeHasInstruction(node, instr, indirectionIndex) and - guardChecksNode(g, node, gv.asBooleanValue(), indirectionIndex) + guardChecksNode(g, node, gv.asBooleanValue(), indirectionIndex, p) ) } private predicate guardChecksWithWrappers( DataFlowIntegrationInput::Guard g, SsaImpl::Definition def, IRGuards::GuardValue val, - int indirectionIndex + ParamIntPair

::MkPair pair ) { - IRGuards::Guards_v1::ParameterizedValidationWrapper::guardChecksDef(g, - def, val, indirectionIndex) + exists(Instruction e, int indirectionIndex | + IRGuards::Guards_v1::ParameterizedValidationWrapper::TPair, guardChecksInstr/4>::guardChecks(g, + e, val, pair) and + pair = ParamIntPair

::MkPair(_, indirectionIndex) + | + indirectionIndex = 0 and + def.(Definition).getAUse().getDef() = e + or + def.(Definition).getAnIndirectUse(indirectionIndex).getDef() = e + ) } - Node getABarrierNode(int indirectionIndex) { + Node getABarrierNode(int indirectionIndex, P p) { // Only get the SynthNodes from the shared implementation, as the ExprNodes cannot // be matched on SourceVariable. result.(SsaSynthNode).getSynthNode() = - DataFlowIntegrationImpl::BarrierGuardDefWithState::getABarrierNode(indirectionIndex) + DataFlowIntegrationImpl::BarrierGuardDefWithState::MkPair, guardChecksWithWrappers/4>::getABarrierNode(ParamIntPair

::MkPair(p, + indirectionIndex)) or // Calculate the guarded UseImpls corresponding to ExprNodes directly. exists( DataFlowIntegrationInput::Guard g, IRGuards::GuardValue branch, Definition def, IRBlock bb | - guardChecksWithWrappers(g, def, branch, indirectionIndex) and exists(UseImpl use | + guardChecksWithWrappers(g, def, branch, ParamIntPair

::MkPair(p, indirectionIndex)) and ssaDefReachesCertainUse(def, use) and use.getBlock() = bb and DataFlowIntegrationInput::guardControlsBlock(g, bb, branch) and @@ -1089,15 +1119,16 @@ module BarrierGuardWithIntParam { } } -module BarrierGuard { +module BarrierGuard::guardChecksNodeSig/4 guardChecksNode> { private predicate guardChecksNode( - IRGuards::IRGuardCondition g, Node e, boolean branch, int indirectionIndex + IRGuards::IRGuardCondition g, Node e, boolean gv, int indirectionIndex, P p ) { - guardChecksNode(g, e, branch) and indirectionIndex = 0 + indirectionIndex = 0 and + guardChecksNode(g, e, gv, p) } - Node getABarrierNode() { - result = BarrierGuardWithIntParam::getABarrierNode(0) + Node getABarrierNode(P p) { + result = BarrierGuardWithIntParam::getABarrierNode(0, p) } } @@ -1152,9 +1183,17 @@ class Definition extends SsaImpl::Definition { private Definition getAPhiInputOrPriorDefinition() { result = this.(PhiNode).getAnInput() or - SsaImpl::uncertainWriteDefinitionInput(this, result) + uncertainWriteDefinitionInput(this, result) } + /** + * Holds if this SSA definition is live at the end of basic block `bb`. + * That is, this definition reaches the end of basic block `bb`, at which + * point it is still live, without crossing another SSA definition of the + * same source variable. + */ + predicate isLiveAtEndOfBlock(IRBlock bb) { ssaDefReachesEndOfBlock(bb, this) } + /** * Gets a definition that ultimately defines this SSA definition and is * not itself a phi node. 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 be3f680aa16..e97e903f002 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 @@ -104,7 +104,11 @@ newtype TInstructionTag = } or SizeofVlaDimensionTag(int index) { exists(VlaDeclStmt v | exists(v.getTransitiveVlaDimensionStmt(index))) - } + } or + AssertionVarAddressTag() or + AssertionVarLoadTag() or + AssertionOpTag() or + AssertionBranchTag() class InstructionTag extends TInstructionTag { final string toString() { result = getInstructionTagId(this) } @@ -296,4 +300,12 @@ string getInstructionTagId(TInstructionTag tag) { tag = CoAwaitBranchTag() and result = "CoAwaitBranch" or tag = BoolToIntConversionTag() and result = "BoolToIntConversion" + or + tag = AssertionVarAddressTag() and result = "AssertionVarAddress" + or + tag = AssertionVarLoadTag() and result = "AssertionVarLoad" + or + tag = AssertionOpTag() and result = "AssertionOp" + or + tag = AssertionBranchTag() and result = "AssertionBranch" } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedAssertion.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedAssertion.qll new file mode 100644 index 00000000000..55818b02858 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedAssertion.qll @@ -0,0 +1,387 @@ +private import cpp +private import semmle.code.cpp.ir.internal.IRUtilities +private import semmle.code.cpp.ir.implementation.internal.OperandTag +private import semmle.code.cpp.ir.internal.CppType +private import semmle.code.cpp.ir.internal.TempVariableTag +private import InstructionTag +private import TranslatedElement +private import TranslatedStmt +private import TranslatedFunction + +/** + * Holds if `s` is a statement that may be an expanded assertion in a + * release build. + */ +pragma[nomagic] +private predicate stmtCandidate(Stmt s) { + not s.isFromUninstantiatedTemplate(_) and + ( + // The expansion of `__analysis_assume(x != 0);` when `__analysis_assume` is + // empty is the empty statement. + s instanceof EmptyStmt + or + // The expansion of `assert(x != 0)` when `assert` is `((void)0)` is a zero literal + // with a void type. + exists(Expr e | + e = s.(ExprStmt).getExpr() and + e.getValue() = "0" and + e.getActualType() instanceof VoidType + ) + ) +} + +pragma[nomagic] +private predicate macroInvocationLocation(int startline, Function f, MacroInvocation mi) { + mi.getMacroName() = ["assert", "__analysis_assume"] and + mi.getNumberOfArguments() = 1 and + mi.getLocation().hasLocationInfo(_, startline, _, _, _) and + f.getEntryPoint().isAffectedByMacro(mi) +} + +pragma[nomagic] +private predicate stmtParentLocation(int startline, Function f, StmtParent p) { + p.getEnclosingFunction() = f and + p.getLocation().hasLocationInfo(_, startline, _, _, _) +} + +/** + * Holds if `mi` is a macro invocation with a name that is known + * to correspond to an assertion macro, and the macro invocation + * is the only thing on the line. + */ +pragma[nomagic] +private predicate assertion0(MacroInvocation mi, Stmt s, string arg) { + stmtCandidate(s) and + s = + unique(StmtParent p, int startline, Function f | + macroInvocationLocation(startline, f, mi) and + stmtParentLocation(startline, f, p) and + // Also do not count the elements from the expanded macro, i.e., when checking + // if `assert(x)` is the only thing on the line we do not count the + // generated `((void)0)` expression. + not p = mi.getAnExpandedElement() + | + p + ) and + arg = mi.getUnexpandedArgument(0) +} + +private Function getEnclosingFunctionForMacroInvocation(MacroInvocation mi) { + exists(Stmt s | + assertion0(mi, s, _) and + result = s.getEnclosingFunction() + ) +} + +/** + * Holds if `arg` has two components and the `i`'th component of the string + * `arg` is `s`, and the components are separated by an operation with + * opcode `opcode`. + */ +bindingset[arg] +pragma[inline_late] +private predicate parseArgument(string arg, string s, int i, Opcode opcode) { + s = + arg.regexpCapture("([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)\\s?<=\\s?([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)", + i + 1) and + opcode instanceof Opcode::CompareLE + or + s = + arg.regexpCapture("([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)\\s?>=\\s?([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)", + i + 1) and + opcode instanceof Opcode::CompareGE + or + s = + arg.regexpCapture("([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)\\s?<\\s?([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)", + i + 1) and + opcode instanceof Opcode::CompareLT + or + s = + arg.regexpCapture("([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)\\s?>\\s?([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)", + i + 1) and + opcode instanceof Opcode::CompareGT + or + s = + arg.regexpCapture("([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)\\s?!=\\s?([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)", + i + 1) and + opcode instanceof Opcode::CompareNE + or + s = + arg.regexpCapture("([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)\\s?==\\s?([a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)", + i + 1) and + opcode instanceof Opcode::CompareEQ +} + +private Element getAChildScope(Element scope) { result.getParentScope() = scope } + +private predicate hasAVariable(MacroInvocation mi, Stmt s, Element scope) { + assertion0(mi, s, _) and + s.getParent() = scope + or + hasAVariable(mi, s, getAChildScope(scope)) +} + +private LocalScopeVariable getVariable(MacroInvocation mi, int i) { + exists(string operand, string arg, Stmt s | + assertion0(mi, s, arg) and + parseArgument(arg, operand, i, _) and + result = + unique(Variable v | + v.getLocation().getStartLine() < s.getLocation().getStartLine() and + hasAVariable(mi, s, v.getParentScope()) and + v.hasName(operand) + | + v + ) + ) +} + +/** + * Holds if the `i`'th component of the macro invocation `mi` with opcode + * `opcode` is a reference to `var`. + */ +private predicate hasVarAccessMacroArgument(MacroInvocation mi, Variable var, int i, Opcode opcode) { + exists(string arg, string s, Function f | + arg = mi.getUnexpandedArgument(0) and + f = getEnclosingFunctionForMacroInvocation(mi) and + parseArgument(arg, s, i, opcode) and + var = getVariable(mi, i) + ) +} + +/** + * Holds if the `i`'th component of the macro invocation `mi` with opcode + * `opcode` is a constant with the value `k`. + */ +private predicate hasConstMacroArgument(MacroInvocation mi, int k, int i, Opcode opcode) { + exists(string arg, string s | + assertion0(mi, _, arg) and + s.toInt() = k and + parseArgument(arg, s, i, opcode) + ) +} + +predicate hasAssertionOperand(MacroInvocation mi, int i) { + hasVarAccessMacroArgument(mi, _, i, _) + or + hasConstMacroArgument(mi, _, i, _) +} + +private predicate hasAssertionOpcode(MacroInvocation mi, Opcode opcode) { + hasVarAccessMacroArgument(mi, _, _, opcode) + or + hasConstMacroArgument(mi, _, _, opcode) +} + +/** + * Holds if `mi` is a macro invocation that is an assertion that should be generated + * in the control-flow graph at `s`. + */ +predicate assertion(MacroInvocation mi, Stmt s) { + assertion0(mi, s, _) and + hasAssertionOperand(mi, 0) and + hasAssertionOperand(mi, 1) +} + +/** The translation of an operand of an assertion. */ +abstract private class TranslatedAssertionOperand extends TranslatedElement, + TTranslatedAssertionOperand +{ + MacroInvocation mi; + int index; + + TranslatedAssertionOperand() { this = TTranslatedAssertionOperand(mi, index) } + + MacroInvocation getMacroInvocation() { result = mi } + + /** + * Gets the statement that is being replaced by the assertion that uses this + * operand. + */ + Stmt getStmt() { assertion(mi, result) } + + final override Locatable getAst() { result = this.getStmt() } + + final override TranslatedElement getChild(int id) { none() } + + final override Declaration getFunction() { result = this.getStmt().getEnclosingFunction() } + + /** Gets the instruction which holds the result of this operand. */ + abstract Instruction getResult(); + + final override string toString() { result = "Operand of assertion: " + mi } + + /** Gets the index of this operand (i.e., `0` or `1`). */ + final int getIndex() { result = index } +} + +/** An operand of an assertion that is a variable access. */ +class TranslatedAssertionVarAccess extends TranslatedAssertionOperand { + TranslatedAssertionVarAccess() { hasVarAccessMacroArgument(mi, _, index, _) } + + Variable getVariable() { hasVarAccessMacroArgument(mi, result, index, _) } + + final override IRUserVariable getInstructionVariable(InstructionTag tag) { + tag = AssertionVarAddressTag() and + result.getVariable() = this.getVariable() + } + + final override Instruction getFirstInstruction(EdgeKind kind) { + result = this.getInstruction(AssertionVarAddressTag()) and kind instanceof GotoEdge + } + + final override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { + tag = AssertionVarAddressTag() and + kind instanceof GotoEdge and + result = this.getInstruction(AssertionVarLoadTag()) + or + tag = AssertionVarLoadTag() and + result = getTranslatedAssertionMacroInvocation(mi).getChildSuccessor(this, kind) + } + + final override Instruction getALastInstructionInternal() { + result = this.getInstruction(AssertionVarLoadTag()) + } + + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + exists(Variable v | v = this.getVariable() | + opcode instanceof Opcode::VariableAddress and + tag = AssertionVarAddressTag() and + resultType = getTypeForGLValue(v.getType()) + or + opcode instanceof Opcode::Load and + tag = AssertionVarLoadTag() and + resultType = getTypeForPRValue(v.getType()) + ) + } + + final override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { + tag = AssertionVarLoadTag() and + operandTag instanceof AddressOperandTag and + result = this.getInstruction(AssertionVarAddressTag()) + } + + final override Instruction getResult() { result = this.getInstruction(AssertionVarLoadTag()) } +} + +/** An operand of an assertion that is a constant access. */ +private class TranslatedAssertionConst extends TranslatedAssertionOperand { + TranslatedAssertionConst() { hasConstMacroArgument(mi, _, index, _) } + + int getConst() { hasConstMacroArgument(mi, result, index, _) } + + final override string getInstructionConstantValue(InstructionTag tag) { + tag = OnlyInstructionTag() and + result = this.getConst().toString() + } + + final override Instruction getFirstInstruction(EdgeKind kind) { + result = this.getInstruction(OnlyInstructionTag()) and + kind instanceof GotoEdge + } + + final override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { + tag = OnlyInstructionTag() and + result = getTranslatedAssertionMacroInvocation(mi).getChildSuccessor(this, kind) + } + + final override Instruction getALastInstructionInternal() { + result = this.getInstruction(OnlyInstructionTag()) + } + + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + opcode instanceof Opcode::Constant and + tag = OnlyInstructionTag() and + resultType = getIntType() + } + + final override Instruction getResult() { result = this.getInstruction(OnlyInstructionTag()) } +} + +/** + * Gets the `TranslatedAssertionMacroInvocation` corresponding to the macro + * invocation `mi`. + */ +TranslatedAssertionMacroInvocation getTranslatedAssertionMacroInvocation(MacroInvocation mi) { + result.getMacroInvocation() = mi +} + +/** + * A synthesized assertion which would have otherwise been invisible because the + * database represents a release build where assertions are disabled. + */ +private class TranslatedAssertionMacroInvocation extends TranslatedStmt { + MacroInvocation mi; + + TranslatedAssertionMacroInvocation() { assertion(mi, stmt) } + + final override Instruction getFirstInstruction(EdgeKind kind) { + result = this.getLeft().getFirstInstruction(kind) + } + + TranslatedAssertionOperand getLeft() { + result.getMacroInvocation() = mi and + result.getIndex() = 0 + } + + TranslatedAssertionOperand getRight() { + result.getMacroInvocation() = mi and + result.getIndex() = 1 + } + + final override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { + tag = AssertionOpTag() and + kind instanceof GotoEdge and + result = this.getInstruction(AssertionBranchTag()) + or + tag = AssertionBranchTag() and + kind instanceof TrueEdge and + result = this.getParent().getChildSuccessor(this, _) + } + + final override TranslatedElement getChildInternal(int id) { + id = 0 and result = this.getLeft() + or + id = 1 and result = this.getRight() + } + + final override Instruction getALastInstructionInternal() { + result = this.getInstruction(AssertionBranchTag()) + } + + final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + tag = AssertionOpTag() and + resultType = getBoolType() and + hasAssertionOpcode(mi, opcode) + or + tag = AssertionBranchTag() and + resultType = getVoidType() and + opcode instanceof Opcode::ConditionalBranch + } + + final override Instruction getChildSuccessorInternal(TranslatedElement child, EdgeKind kind) { + child = this.getLeft() and + result = this.getRight().getFirstInstruction(kind) + or + child = this.getRight() and + kind instanceof GotoEdge and + result = this.getInstruction(AssertionOpTag()) + } + + final override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { + tag = AssertionOpTag() and + ( + operandTag instanceof LeftOperandTag and + result = this.getLeft().getResult() + or + operandTag instanceof RightOperandTag and + result = this.getRight().getResult() + ) + or + tag = AssertionBranchTag() and + operandTag instanceof ConditionOperandTag and + result = this.getInstruction(AssertionOpTag()) + } + + MacroInvocation getMacroInvocation() { result = mi } +} 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 330362f5560..9829388ef17 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 @@ -12,6 +12,7 @@ private import TranslatedFunction private import TranslatedStmt private import TranslatedExpr private import IRConstruction +private import TranslatedAssertion private import semmle.code.cpp.models.interfaces.SideEffect private import SideEffects @@ -138,6 +139,14 @@ private predicate ignoreExprAndDescendants(Expr expr) { // conditionally constructed (until we have a mechanism for calling these only when the // temporary's constructor was run) isConditionalTemporaryDestructorCall(expr) + or + // An assertion in a release build is often defined as `#define assert(x) ((void)0)`. + // We generate a synthetic assertion in release builds, and when we do that the + // expression `((void)0)` should not be translated. + exists(MacroInvocation mi | + assertion(mi, _) and + expr = mi.getExpr().getFullyConverted() + ) } /** @@ -909,7 +918,8 @@ newtype TTranslatedElement = } or // The side effect that initializes newly-allocated memory. TTranslatedAllocationSideEffect(AllocationExpr expr) { not ignoreSideEffects(expr) } or - TTranslatedStaticStorageDurationVarInit(Variable var) { Raw::varHasIRFunc(var) } + TTranslatedStaticStorageDurationVarInit(Variable var) { Raw::varHasIRFunc(var) } or + TTranslatedAssertionOperand(MacroInvocation mi, int index) { hasAssertionOperand(mi, index) } /** * Gets the index of the first explicitly initialized element in `initList` 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 9dccf7752aa..83f19062b90 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 @@ -10,6 +10,7 @@ private import TranslatedElement private import TranslatedExpr private import TranslatedFunction private import TranslatedInitialization +private import TranslatedAssertion TranslatedStmt getTranslatedStmt(Stmt stmt) { result.getAst() = stmt } @@ -324,8 +325,16 @@ abstract class TranslatedStmt extends TranslatedElement, TTranslatedStmt { class TranslatedEmptyStmt extends TranslatedStmt { TranslatedEmptyStmt() { - stmt instanceof EmptyStmt or - stmt instanceof LabelStmt or + // An assertion macro invocation can expand to + // an empty statement in release builds. In that case + // we synthesize the check that would have occurred. + // This is handled by `TranslatedAssertion.qll` and so + // we exclude these statements here. + not assertion(_, stmt) and + stmt instanceof EmptyStmt + or + stmt instanceof LabelStmt + or stmt instanceof SwitchCase } @@ -420,6 +429,15 @@ class TranslatedDeclStmt extends TranslatedStmt { class TranslatedExprStmt extends TranslatedStmt { override ExprStmt stmt; + TranslatedExprStmt() { + // An assertion macro invocation typically expand to the + // expression `((void)0)` in release builds. In that case + // we synthesize the check that would have occurred. + // This is handled by `TranslatedAssertion.qll` and so + // we exclude these statements here. + not assertion(_, stmt) + } + TranslatedExpr getExpr() { result = getTranslatedExpr(stmt.getExpr().getFullyConverted()) } override TranslatedElement getChildInternal(int id) { id = 0 and result = this.getExpr() } diff --git a/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll b/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll index bd3a54c6159..cd750461244 100644 --- a/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll +++ b/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll @@ -20,7 +20,7 @@ class Stmt extends StmtParent, @stmt { predicate hasChild(Element e, int n) { this.getChild(n) = e } /** Gets the enclosing function of this statement, if any. */ - Function getEnclosingFunction() { result = stmtEnclosingElement(this) } + override Function getEnclosingFunction() { result = stmtEnclosingElement(this) } /** * Gets the nearest enclosing block of this statement in the source, if any. @@ -159,7 +159,10 @@ private class TStmtParent = @stmt or @expr; * * This is normally a statement, but may be a `StmtExpr`. */ -class StmtParent extends ControlFlowNode, TStmtParent { } +class StmtParent extends ControlFlowNode, TStmtParent { + /** Gets the enclosing function of this element, if any. */ + Function getEnclosingFunction() { none() } +} /** * A C/C++ 'expression' statement. diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 1402ab319d2..9439176c1d1 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -2353,6 +2353,7 @@ case @preprocdirect.kind of | 14 = @ppd_ms_import | 15 = @ppd_elifdef | 16 = @ppd_elifndef +| 17 = @ppd_embed | 18 = @ppd_warning ; @@ -2379,6 +2380,11 @@ includes( int included: @file ref ); +embeds( + unique int id: @ppd_embed ref, + int included: @file ref +); + link_targets( int id: @link_target, int binary: @file ref @@ -2389,6 +2395,8 @@ link_parent( int link_target : @link_target ref ); +/*- Database metadata -*/ + /** * The CLI will automatically emit applicable tuples for this table, * such as `databaseMetadata("isOverlay", "true")` when building an @@ -2399,6 +2407,8 @@ databaseMetadata( string value: string ref ); +/*- Overlay support -*/ + /** * The CLI will automatically emit tuples for each new/modified/deleted file * when building an overlay database. diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index eca8a306a7c..ee25206a25d 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 12592 + 12591 @externalDataElement @@ -10,7 +10,7 @@ @file - 64949 + 64946 @folder @@ -22,7 +22,7 @@ @location_default - 46837431 + 46837407 @pch @@ -30,7 +30,7 @@ @macro_expansion - 40306125 + 40306104 @other_macro_reference @@ -38,7 +38,7 @@ @normal_function - 2734631 + 2734629 @unknown_function @@ -46,7 +46,7 @@ @constructor - 694346 + 694334 @destructor @@ -70,15 +70,15 @@ @fun_decl - 4194038 + 4193289 @var_decl - 9368606 + 9367854 @type_decl - 1629528 + 1629527 @namespace_decl @@ -86,11 +86,11 @@ @using_declaration - 266867 + 266844 @using_directive - 6431 + 6430 @using_enum_declaration @@ -98,11 +98,11 @@ @static_assert - 172750 + 172749 @parameter - 7011800 + 7011797 @membervariable @@ -110,11 +110,11 @@ @globalvariable - 492567 + 492566 @localvariable - 724728 + 724695 @enumconstant @@ -354,11 +354,11 @@ @pointer - 451499 + 451498 @type_with_specifiers - 691560 + 691559 @array @@ -366,7 +366,7 @@ @routineptr - 679859 + 679848 @reference @@ -392,6 +392,10 @@ @scalable_vector 1 + + @decltype + 101757 + @typeof 811 @@ -472,13 +476,9 @@ @remove_reference 5706 - - @decltype - 101757 - @struct - 976642 + 976596 @union @@ -490,11 +490,11 @@ @template_parameter - 864458 + 864417 @alias - 1755826 + 1755743 @unknown_usertype @@ -510,7 +510,7 @@ @proxy_class - 48244 + 48241 @scoped_enum @@ -518,7 +518,7 @@ @template_struct - 211186 + 211176 @template_class @@ -530,11 +530,11 @@ @mangledname - 6349610 + 6349607 @type_mention - 5911109 + 5911106 @concept_template @@ -542,11 +542,11 @@ @routinetype - 600588 + 600578 @ptrtomember - 9678 + 9677 @specifier @@ -574,11 +574,11 @@ @attribute_arg_token - 16585 + 16584 @attribute_arg_constant_expr - 71640 + 71584 @attribute_arg_expr @@ -598,15 +598,15 @@ @derivation - 473796 + 473788 @frienddecl - 695869 + 767816 @comment - 11208577 + 11208571 @namespace @@ -618,15 +618,15 @@ @namequalifier - 3042587 + 3042586 @value - 13541403 + 13541557 @initialiser - 2244827 + 2244826 @address_of @@ -634,15 +634,15 @@ @indirect - 402174 + 402173 @array_to_pointer - 1953951 + 1953950 @parexpr - 4915712 + 4915709 @arithnegexpr @@ -650,11 +650,11 @@ @unaryplusexpr - 4061 + 4060 @complementexpr - 38188 + 38187 @notexpr @@ -662,7 +662,7 @@ @postincrexpr - 84579 + 84578 @postdecrexpr @@ -678,11 +678,11 @@ @conditionalexpr - 897972 + 897971 @addexpr - 580447 + 580446 @subexpr @@ -722,7 +722,7 @@ @andexpr - 483235 + 483234 @orexpr @@ -734,7 +734,7 @@ @eqexpr - 643440 + 643439 @neexpr @@ -758,7 +758,7 @@ @assignexpr - 1281280 + 1281279 @assignaddexpr @@ -814,11 +814,11 @@ @orlogicalexpr - 1103652 + 1103651 @commaexpr - 167881 + 167880 @subscriptexpr @@ -826,7 +826,7 @@ @callexpr - 238861 + 238857 @vastartexpr @@ -846,7 +846,7 @@ @varaccess - 8255502 + 8255498 @runtime_sizeof @@ -854,7 +854,7 @@ @runtime_alignof - 49552 + 49551 @expr_stmt @@ -862,7 +862,7 @@ @routineexpr - 5726207 + 5726204 @type_operand @@ -878,7 +878,7 @@ @literal - 7984746 + 7985020 @aggregateliteral @@ -890,19 +890,19 @@ @temp_init - 980663 + 980662 @errorexpr - 45186 + 45185 @reference_to - 1880187 + 1880186 @ref_indirect - 2094107 + 2094072 @vacuous_destructor_call @@ -962,11 +962,11 @@ @thisaccess - 1553673 + 1553672 @new_expr - 45897 + 45896 @delete_expr @@ -986,7 +986,7 @@ @type_id - 47589 + 47588 @sizeof_pack @@ -1094,7 +1094,7 @@ @ctordirectinit - 112102 + 112100 @ctorvirtualinit @@ -1110,7 +1110,7 @@ @dtordirectdestruct - 39195 + 39194 @dtorvirtualdestruct @@ -1418,7 +1418,7 @@ @reuseexpr - 844479 + 844478 @istriviallycopyassignable @@ -1550,11 +1550,11 @@ @stmt_expr - 2031828 + 2031827 @stmt_if - 990319 + 990318 @stmt_while @@ -1562,19 +1562,19 @@ @stmt_goto - 157271 + 157264 @stmt_label - 77731 + 77727 @stmt_return - 1238155 + 1238149 @stmt_block - 1724482 + 1724481 @stmt_end_test_while @@ -1598,11 +1598,11 @@ @stmt_decl - 770030 + 770029 @stmt_empty - 428128 + 428127 @stmt_continue @@ -1674,7 +1674,7 @@ @ppd_elif - 21828 + 21827 @ppd_else @@ -1686,15 +1686,15 @@ @ppd_plain_include - 317278 + 317263 @ppd_define - 2743342 + 2743340 @ppd_undef - 100181 + 100180 @ppd_pragma @@ -1706,7 +1706,7 @@ @ppd_line - 18771 + 18770 @ppd_error @@ -1728,6 +1728,10 @@ @ppd_elifndef 1 + + @ppd_embed + 1 + @ppd_warning 13 @@ -1764,11 +1768,11 @@ compilations - 12592 + 12591 id - 12592 + 12591 cwd @@ -1786,7 +1790,7 @@ 1 2 - 12592 + 12591 @@ -1812,11 +1816,11 @@ compilation_args - 1008128 + 1008080 id - 12592 + 12591 num @@ -1824,7 +1828,7 @@ arg - 29150 + 29149 @@ -1883,7 +1887,7 @@ 98 99 - 1336 + 1335 100 @@ -2157,7 +2161,7 @@ 2 3 - 12634 + 12633 3 @@ -2188,7 +2192,7 @@ 2 3 - 8689 + 8688 3 @@ -2203,11 +2207,11 @@ compilation_expanded_args - 1008128 + 1008080 id - 12592 + 12591 num @@ -2215,7 +2219,7 @@ arg - 29150 + 29149 @@ -2274,7 +2278,7 @@ 98 99 - 1336 + 1335 100 @@ -2548,7 +2552,7 @@ 2 3 - 12634 + 12633 3 @@ -2579,7 +2583,7 @@ 2 3 - 8689 + 8688 3 @@ -2904,7 +2908,7 @@ seconds - 19606 + 18516 @@ -2982,54 +2986,54 @@ 12 - - 2 - 3 - 54 - 3 4 - 816 + 980 4 5 - 490 + 381 - 6 - 9 - 217 + 5 + 7 + 163 - 9 + 8 10 217 10 - 12 + 11 + 163 + + + 11 + 15 217 - 12 + 16 + 18 + 108 + + + 18 19 217 - 19 - 21 + 20 + 54 217 - 21 - 52 - 217 - - - 125 - 126 + 133 + 134 54 @@ -3098,42 +3102,47 @@ 3 4 - 925 + 1797 4 5 - 1470 + 599 5 6 - 326 + 217 6 7 - 435 + 544 7 8 - 326 + 217 8 - 10 + 9 + 326 + + + 9 + 18 381 - 11 - 28 + 22 + 49 381 - 30 - 98 - 272 + 94 + 95 + 54 @@ -3178,24 +3187,24 @@ 12 + + 4 + 5 + 54 + 5 6 54 - 6 - 7 + 187 + 188 54 - 204 - 205 - 54 - - - 205 - 206 + 197 + 198 54 @@ -3212,22 +3221,22 @@ 1 2 - 13452 + 12362 2 3 - 4574 + 3757 3 - 16 - 1470 + 4 + 1688 - 33 - 38 - 108 + 4 + 39 + 708 @@ -3243,22 +3252,27 @@ 1 2 - 12852 + 11273 2 3 - 3975 + 4302 3 - 5 - 1797 + 4 + 1470 - 5 - 66 - 980 + 4 + 44 + 1416 + + + 63 + 64 + 54 @@ -3274,17 +3288,12 @@ 1 2 - 16392 + 15630 2 3 - 3158 - - - 3 - 4 - 54 + 2886 @@ -3560,19 +3569,19 @@ compilation_finished - 12592 + 12591 id - 12592 + 12591 cpu_seconds - 9373 + 9656 elapsed_seconds - 220 + 210 @@ -3586,7 +3595,7 @@ 1 2 - 12592 + 12591 @@ -3602,7 +3611,7 @@ 1 2 - 12592 + 12591 @@ -3618,17 +3627,17 @@ 1 2 - 7868 + 8394 2 3 - 1041 + 809 3 - 30 - 462 + 32 + 452 @@ -3644,12 +3653,12 @@ 1 2 - 8741 + 9046 2 3 - 631 + 610 @@ -3665,12 +3674,17 @@ 1 2 - 31 + 42 2 3 - 42 + 10 + + + 3 + 4 + 10 5 @@ -3683,53 +3697,53 @@ 21 - 8 - 9 + 10 + 11 10 - 9 - 10 - 10 - - - 14 - 15 - 10 - - - 19 - 20 + 11 + 12 21 - 28 - 29 + 15 + 16 10 - 76 - 77 + 20 + 21 10 - 180 - 181 + 31 + 32 10 - 215 - 216 + 61 + 62 10 - 299 - 300 + 172 + 173 10 - 300 - 301 + 231 + 232 + 10 + + + 286 + 287 + 10 + + + 321 + 322 10 @@ -3746,12 +3760,17 @@ 1 2 - 31 + 42 2 3 - 42 + 10 + + + 3 + 4 + 10 5 @@ -3764,48 +3783,48 @@ 21 - 8 - 9 + 10 + 11 10 - 9 - 10 - 10 - - - 14 - 15 - 10 - - - 19 - 20 + 11 + 12 21 - 28 - 29 + 15 + 16 10 - 72 - 73 + 20 + 21 10 - 148 - 149 + 31 + 32 10 - 169 - 170 + 61 + 62 10 - 195 - 196 + 165 + 166 + 10 + + + 168 + 169 + 10 + + + 216 + 217 10 @@ -4048,11 +4067,11 @@ locations_default - 46837431 + 46837407 id - 46837431 + 46837407 file @@ -4060,7 +4079,7 @@ beginLine - 7483211 + 7483207 beginColumn @@ -4068,7 +4087,7 @@ endLine - 7484207 + 7484203 endColumn @@ -4086,7 +4105,7 @@ 1 2 - 46837431 + 46837407 @@ -4102,7 +4121,7 @@ 1 2 - 46837431 + 46837407 @@ -4118,7 +4137,7 @@ 1 2 - 46837431 + 46837407 @@ -4134,7 +4153,7 @@ 1 2 - 46837431 + 46837407 @@ -4150,7 +4169,7 @@ 1 2 - 46837431 + 46837407 @@ -4551,12 +4570,12 @@ 1 2 - 4945831 + 4945829 2 3 - 778674 + 778673 3 @@ -4571,7 +4590,7 @@ 12 96 - 561387 + 561386 96 @@ -4592,12 +4611,12 @@ 1 2 - 5008055 + 5008053 2 3 - 1216857 + 1216856 3 @@ -4628,12 +4647,12 @@ 1 2 - 5629551 + 5629548 2 3 - 483109 + 483108 3 @@ -4643,7 +4662,7 @@ 7 25 - 564996 + 564995 25 @@ -4664,7 +4683,7 @@ 1 2 - 7018147 + 7018144 2 @@ -4685,7 +4704,7 @@ 1 2 - 5014278 + 5014275 2 @@ -5106,17 +5125,17 @@ 1 2 - 4943591 + 4943589 2 3 - 782034 + 782033 3 4 - 541973 + 541972 4 @@ -5147,17 +5166,17 @@ 1 2 - 5005069 + 5005066 2 3 - 1220466 + 1220465 3 6 - 631078 + 631077 6 @@ -5183,7 +5202,7 @@ 1 2 - 7035321 + 7035318 2 @@ -5204,7 +5223,7 @@ 1 2 - 5628182 + 5628179 2 @@ -5219,12 +5238,12 @@ 7 25 - 568356 + 568355 25 89 - 224505 + 224504 @@ -5240,7 +5259,7 @@ 1 2 - 5012784 + 5012782 2 @@ -5260,7 +5279,7 @@ 12 72 - 561636 + 561635 72 @@ -5580,15 +5599,15 @@ files - 64949 + 64946 id - 64949 + 64946 name - 64949 + 64946 @@ -5602,7 +5621,7 @@ 1 2 - 64949 + 64946 @@ -5618,7 +5637,7 @@ 1 2 - 64949 + 64946 @@ -5676,7 +5695,7 @@ containerparent - 77268 + 77264 parent @@ -5684,7 +5703,7 @@ child - 77268 + 77264 @@ -5749,7 +5768,7 @@ 1 2 - 77268 + 77264 @@ -5759,11 +5778,11 @@ numlines - 805928 + 805927 element_id - 804808 + 804807 num_lines @@ -5789,7 +5808,7 @@ 1 2 - 803688 + 803687 2 @@ -5810,7 +5829,7 @@ 1 2 - 803688 + 803687 2 @@ -7237,7 +7256,7 @@ fileannotations - 4183599 + 4183401 id @@ -7249,11 +7268,11 @@ name - 58479 + 58477 value - 39354 + 39352 @@ -7508,7 +7527,7 @@ 3 5 - 5039 + 5038 5 @@ -7518,12 +7537,12 @@ 7 9 - 4576 + 4575 9 16 - 4313 + 4312 16 @@ -7538,7 +7557,7 @@ 27 47 - 4818 + 4817 47 @@ -7569,7 +7588,7 @@ 1 2 - 58479 + 58477 @@ -7585,7 +7604,7 @@ 1 2 - 11540 + 11539 2 @@ -7600,7 +7619,7 @@ 4 6 - 4050 + 4049 6 @@ -7671,7 +7690,7 @@ 8 14 - 2956 + 2955 14 @@ -7686,7 +7705,7 @@ 24 51 - 3524 + 3523 51 @@ -7732,7 +7751,7 @@ 1 2 - 39344 + 39342 2 @@ -7798,7 +7817,7 @@ 41 66 - 2977 + 2976 66 @@ -7808,7 +7827,7 @@ 92 113 - 2977 + 2976 113 @@ -7828,15 +7847,15 @@ inmacroexpansion - 150011425 + 150011348 id - 24673501 + 24673488 inv - 3705721 + 3705719 @@ -7850,32 +7869,32 @@ 1 3 - 2209722 + 2209721 3 5 - 1475129 + 1475128 5 6 - 1620535 + 1620534 6 7 - 6583219 + 6583216 7 8 - 8719894 + 8719889 8 9 - 3557413 + 3557411 9 @@ -7901,7 +7920,7 @@ 2 3 - 743309 + 743308 3 @@ -7931,12 +7950,12 @@ 10 11 - 444696 + 444695 11 337 - 307830 + 307829 339 @@ -7956,15 +7975,15 @@ affectedbymacroexpansion - 48740834 + 48740809 id - 7045464 + 7045460 inv - 3803511 + 3803509 @@ -7978,7 +7997,7 @@ 1 2 - 3847105 + 3847103 2 @@ -7998,7 +8017,7 @@ 5 12 - 535215 + 535214 12 @@ -8029,7 +8048,7 @@ 4 7 - 316640 + 316639 7 @@ -8039,7 +8058,7 @@ 9 12 - 342974 + 342973 12 @@ -8094,11 +8113,11 @@ macroinvocations - 40387491 + 40387470 id - 40387491 + 40387470 macro_id @@ -8106,7 +8125,7 @@ location - 5925542 + 5925539 kind @@ -8124,7 +8143,7 @@ 1 2 - 40387491 + 40387470 @@ -8140,7 +8159,7 @@ 1 2 - 40387491 + 40387470 @@ -8156,7 +8175,7 @@ 1 2 - 40387491 + 40387470 @@ -8172,7 +8191,7 @@ 1 2 - 61106 + 61105 2 @@ -8300,7 +8319,7 @@ 1 2 - 5261599 + 5261596 2 @@ -8326,7 +8345,7 @@ 1 2 - 5903376 + 5903373 2 @@ -8347,7 +8366,7 @@ 1 2 - 5925542 + 5925539 @@ -8420,15 +8439,15 @@ macroparent - 33684454 + 33684436 id - 33684454 + 33684436 parent_id - 15941267 + 15941258 @@ -8442,7 +8461,7 @@ 1 2 - 33684454 + 33684436 @@ -8458,22 +8477,22 @@ 1 2 - 7815090 + 7815086 2 3 - 1595836 + 1595835 3 4 - 4707397 + 4707394 4 5 - 1296896 + 1296895 5 @@ -8488,15 +8507,15 @@ macrolocationbind - 6022280 + 6022277 id - 4208238 + 4208236 location - 2272395 + 2272393 @@ -8510,7 +8529,7 @@ 1 2 - 3284817 + 3284816 2 @@ -8525,7 +8544,7 @@ 4 5 - 412640 + 412639 5 @@ -8576,11 +8595,11 @@ macro_argument_unexpanded - 82172776 + 82169662 invocation - 26182583 + 26182114 argument_index @@ -8588,7 +8607,7 @@ text - 341884 + 341868 @@ -8602,22 +8621,22 @@ 1 2 - 9643267 + 9643579 2 3 - 9733979 + 9733520 3 4 - 4982750 + 4982515 4 67 - 1822585 + 1822499 @@ -8633,22 +8652,22 @@ 1 2 - 9825166 + 9825469 2 3 - 9751495 + 9751034 3 4 - 4826677 + 4826449 4 67 - 1779244 + 1779160 @@ -8673,7 +8692,7 @@ 646904 - 2488874 + 2488947 31 @@ -8716,52 +8735,52 @@ 1 2 - 39544 + 39542 2 3 - 62077 + 62074 3 4 - 20934 + 20933 4 5 - 34442 + 34440 5 6 - 39091 + 39089 6 9 - 30749 + 30748 9 15 - 28877 + 28875 15 26 - 25773 + 25772 26 57 - 27025 + 27024 57 517 - 25910 + 25909 518 @@ -8782,12 +8801,12 @@ 1 2 - 242198 + 242187 2 3 - 89513 + 89509 3 @@ -8802,11 +8821,11 @@ macro_argument_expanded - 82172776 + 82169662 invocation - 26182583 + 26182114 argument_index @@ -8814,7 +8833,7 @@ text - 207062 + 207052 @@ -8828,22 +8847,22 @@ 1 2 - 9643267 + 9643579 2 3 - 9733979 + 9733520 3 4 - 4982750 + 4982515 4 67 - 1822585 + 1822499 @@ -8859,22 +8878,22 @@ 1 2 - 12591172 + 12591345 2 3 - 8396548 + 8396151 3 4 - 4208468 + 4208269 4 9 - 986394 + 986347 @@ -8899,7 +8918,7 @@ 646904 - 2488874 + 2488947 31 @@ -8942,17 +8961,17 @@ 1 2 - 21744 + 21743 2 3 - 26751 + 26750 3 4 - 43299 + 43297 4 @@ -8967,12 +8986,12 @@ 6 7 - 18325 + 18324 7 10 - 18883 + 18882 10 @@ -8982,16 +9001,16 @@ 19 51 - 15695 + 15694 51 251 - 15548 + 15547 251 - 1169605 + 1169678 9467 @@ -9008,12 +9027,12 @@ 1 2 - 104630 + 104625 2 3 - 88556 + 88551 3 @@ -9028,15 +9047,15 @@ functions - 4043206 + 4043204 id - 4043206 + 4043204 name - 1689263 + 1689262 kind @@ -9054,7 +9073,7 @@ 1 2 - 4043206 + 4043204 @@ -9070,7 +9089,7 @@ 1 2 - 4043206 + 4043204 @@ -9086,7 +9105,7 @@ 1 2 - 1441362 + 1441361 2 @@ -9112,7 +9131,7 @@ 1 2 - 1686401 + 1686400 2 @@ -9219,26 +9238,26 @@ builtin_functions - 30802 + 30800 id - 30802 + 30800 function_entry_point - 1134667 + 1134648 id - 1130944 + 1130925 entry_point - 1134667 + 1134648 @@ -9252,7 +9271,7 @@ 1 2 - 1127762 + 1127744 2 @@ -9273,7 +9292,7 @@ 1 2 - 1134667 + 1134648 @@ -9283,15 +9302,15 @@ function_return_type - 4060505 + 4060503 id - 4043206 + 4043204 return_type - 617762 + 617761 @@ -9305,7 +9324,7 @@ 1 2 - 4025908 + 4025906 2 @@ -9659,11 +9678,11 @@ function_prototyped - 4041713 + 4041711 id - 4041713 + 4041711 @@ -9821,15 +9840,15 @@ fun_decls - 4200011 + 4199263 id - 4194038 + 4193289 function - 4018690 + 4018688 type_id @@ -9837,11 +9856,11 @@ name - 1687770 + 1687769 location - 2806437 + 2806436 @@ -9855,7 +9874,7 @@ 1 2 - 4194038 + 4193289 @@ -9871,7 +9890,7 @@ 1 2 - 4188064 + 4187316 2 @@ -9892,7 +9911,7 @@ 1 2 - 4194038 + 4193289 @@ -9908,7 +9927,7 @@ 1 2 - 4194038 + 4193289 @@ -9924,12 +9943,12 @@ 1 2 - 3857903 + 3858647 2 5 - 160787 + 160040 @@ -9945,7 +9964,7 @@ 1 2 - 4000396 + 4000394 2 @@ -9966,7 +9985,7 @@ 1 2 - 4018690 + 4018688 @@ -9982,12 +10001,12 @@ 1 2 - 3878312 + 3878435 2 4 - 140377 + 140253 @@ -10003,7 +10022,7 @@ 1 2 - 294445 + 294444 2 @@ -10013,7 +10032,7 @@ 3 5 - 48286 + 48285 5 @@ -10022,7 +10041,7 @@ 364 - 10299 + 10295 1244 @@ -10075,7 +10094,7 @@ 1 2 - 490327 + 490326 2 @@ -10137,22 +10156,22 @@ 1 2 - 1328114 + 1328362 2 3 - 193641 + 193392 3 11 - 129426 + 129550 11 - 3169 - 36587 + 3167 + 36463 @@ -10168,7 +10187,7 @@ 1 2 - 1440864 + 1440863 2 @@ -10194,7 +10213,7 @@ 1 2 - 1598167 + 1598166 2 @@ -10215,7 +10234,7 @@ 1 2 - 1363955 + 1363954 2 @@ -10241,12 +10260,12 @@ 1 2 - 2413180 + 2413303 2 3 - 252132 + 252008 3 @@ -10267,12 +10286,12 @@ 1 2 - 2431847 + 2431971 2 3 - 233963 + 233838 3 @@ -10293,7 +10312,7 @@ 1 2 - 2692318 + 2692317 2 @@ -10314,7 +10333,7 @@ 1 2 - 2767360 + 2767359 2 @@ -10329,11 +10348,11 @@ fun_def - 1418837 + 1418836 id - 1418837 + 1418836 @@ -10362,7 +10381,7 @@ fun_decl_specifiers - 4269578 + 4269576 id @@ -10394,7 +10413,7 @@ 3 4 - 1097511 + 1097510 4 @@ -10607,15 +10626,15 @@ fun_decl_noexcept - 140906 + 140904 fun_decl - 140906 + 140904 constant - 140466 + 140464 @@ -10629,7 +10648,7 @@ 1 2 - 140906 + 140904 @@ -10645,7 +10664,7 @@ 1 2 - 140026 + 140024 2 @@ -10660,11 +10679,11 @@ fun_decl_empty_noexcept - 1160979 + 1160854 fun_decl - 1160979 + 1160854 @@ -10930,11 +10949,11 @@ param_decl_bind - 7295294 + 7294544 id - 7295294 + 7294544 index @@ -10942,7 +10961,7 @@ fun_decl - 3524381 + 3523881 @@ -10956,7 +10975,7 @@ 1 2 - 7295294 + 7294544 @@ -10972,7 +10991,7 @@ 1 2 - 7295294 + 7294544 @@ -11007,12 +11026,12 @@ 343 - 16219 + 16218 622 - 28320 - 28321 + 28316 + 28317 124 @@ -11048,12 +11067,12 @@ 343 - 16219 + 16218 622 - 28320 - 28321 + 28316 + 28317 124 @@ -11070,7 +11089,7 @@ 1 2 - 1506075 + 1505701 2 @@ -11080,7 +11099,7 @@ 3 4 - 600837 + 600712 4 @@ -11106,7 +11125,7 @@ 1 2 - 1506075 + 1505701 2 @@ -11116,7 +11135,7 @@ 3 4 - 600837 + 600712 4 @@ -11136,19 +11155,19 @@ var_decls - 9375077 + 9374326 id - 9368606 + 9367854 variable - 9027368 + 9027363 type_id - 1452936 + 1452935 name @@ -11156,7 +11175,7 @@ location - 6259509 + 6259506 @@ -11170,7 +11189,7 @@ 1 2 - 9368606 + 9367854 @@ -11186,7 +11205,7 @@ 1 2 - 9362135 + 9361383 2 @@ -11207,7 +11226,7 @@ 1 2 - 9368606 + 9367854 @@ -11223,7 +11242,7 @@ 1 2 - 9368606 + 9367854 @@ -11239,12 +11258,12 @@ 1 2 - 8703553 + 8704295 2 5 - 323814 + 323068 @@ -11260,7 +11279,7 @@ 1 2 - 8974353 + 8974348 2 @@ -11281,7 +11300,7 @@ 1 2 - 8922209 + 8922205 2 @@ -11302,12 +11321,12 @@ 1 2 - 8782702 + 8783071 2 4 - 244665 + 244292 @@ -11486,7 +11505,7 @@ 25 - 27139 + 27136 31236 @@ -11611,16 +11630,16 @@ 1 2 - 5758231 + 5758601 2 20 - 471161 + 470788 20 - 2943 + 2940 30116 @@ -11637,12 +11656,12 @@ 1 2 - 5838874 + 5839244 2 2935 - 420635 + 420262 @@ -11658,7 +11677,7 @@ 1 2 - 5961704 + 5961701 2 @@ -11679,7 +11698,7 @@ 1 2 - 6247189 + 6247186 2 @@ -11694,11 +11713,11 @@ var_def - 3763197 + 3763195 id - 3763197 + 3763195 @@ -11716,11 +11735,11 @@ var_decl_specifiers - 488709 + 488708 id - 488709 + 488708 name @@ -11738,7 +11757,7 @@ 1 2 - 488709 + 488708 @@ -11848,19 +11867,19 @@ type_decls - 1629528 + 1629527 id - 1629528 + 1629527 type_id - 1610612 + 1610611 location - 1543659 + 1543658 @@ -11874,7 +11893,7 @@ 1 2 - 1629528 + 1629527 @@ -11890,7 +11909,7 @@ 1 2 - 1629528 + 1629527 @@ -11906,7 +11925,7 @@ 1 2 - 1594309 + 1594308 2 @@ -11948,7 +11967,7 @@ 1 2 - 1521631 + 1521630 2 @@ -11969,7 +11988,7 @@ 1 2 - 1521756 + 1521755 2 @@ -12445,19 +12464,19 @@ usings - 271001 + 270978 id - 271001 + 270978 element_id - 58827 + 58813 location - 26741 + 26740 kind @@ -12475,7 +12494,7 @@ 1 2 - 271001 + 270978 @@ -12491,7 +12510,7 @@ 1 2 - 271001 + 270978 @@ -12507,7 +12526,7 @@ 1 2 - 271001 + 270978 @@ -12523,12 +12542,12 @@ 1 2 - 51126 + 51113 2 5 - 5365 + 5364 5 @@ -12549,12 +12568,12 @@ 1 2 - 51126 + 51113 2 5 - 5365 + 5364 5 @@ -12575,7 +12594,7 @@ 1 2 - 58827 + 58813 @@ -12591,17 +12610,17 @@ 1 2 - 21092 + 21091 2 4 - 2282 + 2293 4 132 - 1946 + 1935 145 @@ -12622,17 +12641,17 @@ 1 2 - 21092 + 21091 2 4 - 2282 + 2293 4 132 - 1946 + 1935 145 @@ -12653,7 +12672,7 @@ 1 2 - 26741 + 26740 @@ -12672,8 +12691,8 @@ 10 - 25368 - 25369 + 25367 + 25368 10 @@ -12693,8 +12712,8 @@ 10 - 5378 - 5379 + 5377 + 5378 10 @@ -12726,15 +12745,15 @@ using_container - 577834 + 577796 parent - 21807 + 21806 child - 271001 + 270978 @@ -12799,22 +12818,22 @@ 1 2 - 96225 + 96210 2 3 - 119800 + 119794 3 4 - 20019 + 20018 4 5 - 26604 + 26603 5 @@ -12829,15 +12848,15 @@ static_asserts - 172750 + 172749 id - 172750 + 172749 condition - 172750 + 172749 message @@ -12863,7 +12882,7 @@ 1 2 - 172750 + 172749 @@ -12879,7 +12898,7 @@ 1 2 - 172750 + 172749 @@ -12895,7 +12914,7 @@ 1 2 - 172750 + 172749 @@ -12911,7 +12930,7 @@ 1 2 - 172750 + 172749 @@ -12927,7 +12946,7 @@ 1 2 - 172750 + 172749 @@ -12943,7 +12962,7 @@ 1 2 - 172750 + 172749 @@ -12959,7 +12978,7 @@ 1 2 - 172750 + 172749 @@ -12975,7 +12994,7 @@ 1 2 - 172750 + 172749 @@ -13437,15 +13456,15 @@ params - 7052246 + 7052243 id - 7011800 + 7011797 function - 3400305 + 3400304 index @@ -13453,7 +13472,7 @@ type_id - 1217355 + 1217354 @@ -13467,7 +13486,7 @@ 1 2 - 7011800 + 7011797 @@ -13483,7 +13502,7 @@ 1 2 - 7011800 + 7011797 @@ -13499,7 +13518,7 @@ 1 2 - 6971355 + 6971351 2 @@ -13520,7 +13539,7 @@ 1 2 - 1470856 + 1470855 2 @@ -13540,7 +13559,7 @@ 5 65 - 145978 + 145977 @@ -13556,7 +13575,7 @@ 1 2 - 1470856 + 1470855 2 @@ -13576,7 +13595,7 @@ 5 65 - 145978 + 145977 @@ -13592,12 +13611,12 @@ 1 2 - 1778617 + 1778616 2 3 - 1029313 + 1029312 3 @@ -13782,7 +13801,7 @@ 1 2 - 817502 + 817501 2 @@ -13916,7 +13935,7 @@ membervariables - 1502979 + 1502978 id @@ -13928,7 +13947,7 @@ name - 642757 + 642756 @@ -14092,11 +14111,11 @@ globalvariables - 492567 + 492566 id - 492567 + 492566 type_id @@ -14118,7 +14137,7 @@ 1 2 - 492567 + 492566 @@ -14134,7 +14153,7 @@ 1 2 - 492567 + 492566 @@ -14278,19 +14297,19 @@ localvariables - 724728 + 724695 id - 724728 + 724695 type_id - 53300 + 53298 name - 101414 + 101409 @@ -14304,7 +14323,7 @@ 1 2 - 724728 + 724695 @@ -14320,7 +14339,7 @@ 1 2 - 724728 + 724695 @@ -14336,7 +14355,7 @@ 1 2 - 28790 + 28789 2 @@ -14346,12 +14365,12 @@ 3 4 - 4021 + 4020 4 6 - 4061 + 4060 6 @@ -14361,7 +14380,7 @@ 12 162 - 4001 + 4000 162 @@ -14382,7 +14401,7 @@ 1 2 - 38250 + 38248 2 @@ -14413,12 +14432,12 @@ 1 2 - 62404 + 62402 2 3 - 16004 + 16003 3 @@ -14428,7 +14447,7 @@ 4 8 - 8130 + 8129 8 @@ -14454,7 +14473,7 @@ 1 2 - 84403 + 84399 2 @@ -14547,15 +14566,15 @@ orphaned_variables - 44035 + 44034 var - 44035 + 44034 function - 40786 + 40785 @@ -14569,7 +14588,7 @@ 1 2 - 44035 + 44034 @@ -16194,15 +16213,15 @@ derivedtypes - 3023724 + 3023723 id - 3023724 + 3023723 name - 1457167 + 1457166 kind @@ -16210,7 +16229,7 @@ type_id - 1942143 + 1942142 @@ -16224,7 +16243,7 @@ 1 2 - 3023724 + 3023723 @@ -16240,7 +16259,7 @@ 1 2 - 3023724 + 3023723 @@ -16256,7 +16275,7 @@ 1 2 - 3023724 + 3023723 @@ -16272,7 +16291,7 @@ 1 2 - 1340932 + 1340931 2 @@ -16298,7 +16317,7 @@ 1 2 - 1457167 + 1457166 @@ -16494,7 +16513,7 @@ 1 2 - 1315918 + 1315917 2 @@ -16525,7 +16544,7 @@ 1 2 - 1316291 + 1316290 2 @@ -16550,11 +16569,11 @@ pointerishsize - 2242063 + 2242062 id - 2242063 + 2242062 size @@ -16576,7 +16595,7 @@ 1 2 - 2242063 + 2242062 @@ -16592,7 +16611,7 @@ 1 2 - 2242063 + 2242062 @@ -17115,15 +17134,15 @@ typedefbase - 1755826 + 1755743 id - 1755826 + 1755743 type_id - 834256 + 834216 @@ -17137,7 +17156,7 @@ 1 2 - 1755826 + 1755743 @@ -17153,22 +17172,22 @@ 1 2 - 659363 + 659332 2 3 - 80760 + 80757 3 6 - 63918 + 63915 6 4525 - 30213 + 30211 @@ -17178,7 +17197,7 @@ decltypes - 814571 + 814570 id @@ -17186,7 +17205,7 @@ expr - 814571 + 814570 kind @@ -17316,7 +17335,7 @@ 1 2 - 814571 + 814570 @@ -17332,7 +17351,7 @@ 1 2 - 814571 + 814570 @@ -17348,7 +17367,7 @@ 1 2 - 814571 + 814570 @@ -17364,7 +17383,7 @@ 1 2 - 814571 + 814570 @@ -17942,15 +17961,15 @@ usertypes - 4137700 + 4137505 id - 4137700 + 4137505 name - 915395 + 915352 kind @@ -17968,7 +17987,7 @@ 1 2 - 4137700 + 4137505 @@ -17984,7 +18003,7 @@ 1 2 - 4137700 + 4137505 @@ -18000,22 +18019,22 @@ 1 2 - 652104 + 652073 2 3 - 158113 + 158105 3 8 - 70325 + 70321 8 32667 - 34852 + 34850 @@ -18031,12 +18050,12 @@ 1 2 - 863858 + 863818 2 10 - 51536 + 51534 @@ -18188,11 +18207,11 @@ usertypesize - 1359659 + 1359595 id - 1359659 + 1359595 size @@ -18214,7 +18233,7 @@ 1 2 - 1359659 + 1359595 @@ -18230,7 +18249,7 @@ 1 2 - 1359659 + 1359595 @@ -18488,11 +18507,11 @@ usertype_alias_kind - 1755826 + 1755743 id - 1755826 + 1755743 alias_kind @@ -18510,7 +18529,7 @@ 1 2 - 1755826 + 1755743 @@ -18541,11 +18560,11 @@ nontype_template_parameters - 761296 + 761283 id - 761296 + 761283 @@ -18625,15 +18644,15 @@ mangled_name - 7910443 + 7910439 id - 7910443 + 7910439 mangled_name - 6349610 + 6349607 is_complete @@ -18651,7 +18670,7 @@ 1 2 - 7910443 + 7910439 @@ -18667,7 +18686,7 @@ 1 2 - 7910443 + 7910439 @@ -18683,7 +18702,7 @@ 1 2 - 6016213 + 6016209 2 @@ -18704,7 +18723,7 @@ 1 2 - 6349610 + 6349607 @@ -18756,59 +18775,59 @@ is_pod_class - 590976 + 590966 id - 590976 + 590966 is_standard_layout_class - 1120585 + 1120532 id - 1120585 + 1120532 is_complete - 1341565 + 1341502 id - 1341565 + 1341502 is_class_template - 231194 + 231183 id - 231194 + 231183 class_instantiation - 1122247 + 1122152 to - 1119207 + 1119154 from - 71524 + 71521 @@ -18822,12 +18841,12 @@ 1 2 - 1117071 + 1117061 2 8 - 2135 + 2093 @@ -18843,12 +18862,12 @@ 1 2 - 20387 + 20386 2 3 - 12834 + 12833 3 @@ -18863,12 +18882,12 @@ 5 7 - 6048 + 6059 7 10 - 5691 + 5680 10 @@ -18893,11 +18912,11 @@ class_template_argument - 2887489 + 2887353 type_id - 1362258 + 1362193 index @@ -18905,7 +18924,7 @@ arg_type - 818791 + 818753 @@ -18919,27 +18938,27 @@ 1 2 - 577750 + 577723 2 3 - 408654 + 408634 3 4 - 249951 + 249939 4 7 - 102684 + 102679 7 113 - 23217 + 23216 @@ -18955,22 +18974,22 @@ 1 2 - 606185 + 606156 2 3 - 422593 + 422573 3 4 - 250782 + 250770 4 113 - 82696 + 82692 @@ -19078,22 +19097,22 @@ 1 2 - 511580 + 511556 2 3 - 166897 + 166889 3 5 - 74922 + 74918 5 46 - 61414 + 61412 46 @@ -19114,17 +19133,17 @@ 1 2 - 720904 + 720870 2 3 - 79593 + 79589 3 22 - 18294 + 18293 @@ -19134,11 +19153,11 @@ class_template_argument_value - 506797 + 506789 type_id - 204506 + 204502 index @@ -19146,7 +19165,7 @@ arg_value - 506662 + 506653 @@ -19160,7 +19179,7 @@ 1 2 - 154818 + 154815 2 @@ -19186,7 +19205,7 @@ 1 2 - 146999 + 146996 2 @@ -19329,7 +19348,7 @@ 1 2 - 506526 + 506518 2 @@ -19350,7 +19369,7 @@ 1 2 - 506662 + 506653 @@ -19360,15 +19379,15 @@ is_proxy_class_for - 48244 + 48241 id - 48244 + 48241 templ_param_id - 45582 + 45580 @@ -19382,7 +19401,7 @@ 1 2 - 48244 + 48241 @@ -19398,7 +19417,7 @@ 1 2 - 44867 + 44865 2 @@ -19413,11 +19432,11 @@ type_mentions - 5911109 + 5911106 id - 5911109 + 5911106 type_id @@ -19425,7 +19444,7 @@ location - 5854796 + 5854793 kind @@ -19443,7 +19462,7 @@ 1 2 - 5911109 + 5911106 @@ -19459,7 +19478,7 @@ 1 2 - 5911109 + 5911106 @@ -19475,7 +19494,7 @@ 1 2 - 5911109 + 5911106 @@ -19609,7 +19628,7 @@ 1 2 - 5809103 + 5809100 2 @@ -19630,7 +19649,7 @@ 1 2 - 5809103 + 5809100 2 @@ -19651,7 +19670,7 @@ 1 2 - 5854796 + 5854793 @@ -19709,26 +19728,26 @@ is_function_template - 1328114 + 1328113 id - 1328114 + 1328113 function_instantiation - 967596 + 967580 to - 967596 + 967580 from - 181523 + 181520 @@ -19742,7 +19761,7 @@ 1 2 - 967596 + 967580 @@ -19758,12 +19777,12 @@ 1 2 - 109834 + 109833 2 3 - 42546 + 42545 3 @@ -19788,11 +19807,11 @@ function_template_argument - 2468730 + 2468689 function_id - 1443897 + 1443873 index @@ -19800,7 +19819,7 @@ arg_type - 296063 + 296058 @@ -19814,22 +19833,22 @@ 1 2 - 777949 + 777936 2 3 - 410501 + 410494 3 4 - 170692 + 170689 4 15 - 84753 + 84752 @@ -19845,22 +19864,22 @@ 1 2 - 796971 + 796958 2 3 - 408606 + 408599 3 4 - 168526 + 168523 4 9 - 69793 + 69792 @@ -19998,12 +20017,12 @@ 1 2 - 173637 + 173634 2 3 - 26164 + 26163 3 @@ -20023,7 +20042,7 @@ 11 76 - 23219 + 23218 79 @@ -20044,12 +20063,12 @@ 1 2 - 255142 + 255137 2 3 - 31918 + 31917 3 @@ -20064,11 +20083,11 @@ function_template_argument_value - 449832 + 449825 function_id - 195502 + 195499 index @@ -20076,7 +20095,7 @@ arg_value - 447158 + 447151 @@ -20090,7 +20109,7 @@ 1 2 - 150418 + 150415 2 @@ -20116,7 +20135,7 @@ 1 2 - 143546 + 143544 2 @@ -20269,7 +20288,7 @@ 1 2 - 444484 + 444477 2 @@ -20290,7 +20309,7 @@ 1 2 - 447158 + 447151 @@ -20311,11 +20330,11 @@ variable_instantiation - 427356 + 427355 to - 427356 + 427355 from @@ -20333,7 +20352,7 @@ 1 2 - 427356 + 427355 @@ -20430,7 +20449,7 @@ 2 3 - 189535 + 189534 3 @@ -20461,7 +20480,7 @@ 2 3 - 179828 + 179827 3 @@ -20869,7 +20888,7 @@ template_template_argument - 9636 + 9635 type_id @@ -20881,7 +20900,7 @@ arg_type - 9047 + 9046 @@ -21100,7 +21119,7 @@ 1 2 - 9026 + 9025 2 @@ -21838,15 +21857,15 @@ routinetypes - 600588 + 600578 id - 600588 + 600578 return_type - 282016 + 282012 @@ -21860,7 +21879,7 @@ 1 2 - 600588 + 600578 @@ -21876,12 +21895,12 @@ 1 2 - 232565 + 232561 2 3 - 34998 + 34997 3 @@ -22262,11 +22281,11 @@ ptrtomembers - 9678 + 9677 id - 9678 + 9677 type_id @@ -22288,7 +22307,7 @@ 1 2 - 9678 + 9677 @@ -22304,7 +22323,7 @@ 1 2 - 9678 + 9677 @@ -22320,7 +22339,7 @@ 1 2 - 7732 + 7731 2 @@ -22341,7 +22360,7 @@ 1 2 - 7732 + 7731 2 @@ -22579,11 +22598,11 @@ funspecifiers - 9694661 + 9694656 func_id - 4002014 + 4002634 spec_id @@ -22601,17 +22620,17 @@ 1 2 - 1525489 + 1526110 2 3 - 505634 + 506256 3 4 - 1034540 + 1033917 4 @@ -22737,11 +22756,11 @@ varspecifiers - 3078855 + 3078853 var_id - 2314866 + 2314865 spec_id @@ -22759,7 +22778,7 @@ 1 2 - 1654293 + 1654292 2 @@ -23405,7 +23424,7 @@ 1 2 - 641034 + 641033 2 @@ -23979,11 +23998,11 @@ attribute_arg_value - 16585 + 16584 arg - 16585 + 16584 value @@ -24001,7 +24020,7 @@ 1 2 - 16585 + 16584 @@ -24135,15 +24154,15 @@ attribute_arg_constant - 71640 + 71584 arg - 71640 + 71584 constant - 71640 + 71584 @@ -24157,7 +24176,7 @@ 1 2 - 71640 + 71584 @@ -24173,7 +24192,7 @@ 1 2 - 71640 + 71584 @@ -24355,7 +24374,7 @@ spec_id - 615273 + 615272 @@ -24594,15 +24613,15 @@ unspecifiedtype - 7228465 + 7228462 type_id - 7228465 + 7228462 unspecified_type_id - 3955719 + 3955717 @@ -24616,7 +24635,7 @@ 1 2 - 7228465 + 7228462 @@ -24632,12 +24651,12 @@ 1 2 - 2475280 + 2475279 2 3 - 1114436 + 1114435 3 @@ -24657,11 +24676,11 @@ member - 4182340 + 4182338 parent - 541973 + 541972 index @@ -24669,7 +24688,7 @@ child - 4177735 + 4177733 @@ -24754,7 +24773,7 @@ 2 3 - 83256 + 83255 3 @@ -24947,7 +24966,7 @@ 1 2 - 4177735 + 4177733 @@ -24963,7 +24982,7 @@ 1 2 - 4173131 + 4173128 2 @@ -24978,15 +24997,15 @@ enclosingfunction - 114982 + 114976 child - 114982 + 114976 parent - 69094 + 69091 @@ -25000,7 +25019,7 @@ 1 2 - 114982 + 114976 @@ -25016,12 +25035,12 @@ 1 2 - 37471 + 37469 2 3 - 24479 + 24478 3 @@ -25041,15 +25060,15 @@ derivations - 473796 + 473788 derivation - 473796 + 473788 sub - 452201 + 452194 index @@ -25057,11 +25076,11 @@ super - 234021 + 234017 location - 35167 + 35166 @@ -25075,7 +25094,7 @@ 1 2 - 473796 + 473788 @@ -25091,7 +25110,7 @@ 1 2 - 473796 + 473788 @@ -25107,7 +25126,7 @@ 1 2 - 473796 + 473788 @@ -25123,7 +25142,7 @@ 1 2 - 473796 + 473788 @@ -25139,12 +25158,12 @@ 1 2 - 435785 + 435778 2 9 - 16416 + 16415 @@ -25160,12 +25179,12 @@ 1 2 - 435785 + 435778 2 8 - 16416 + 16415 @@ -25181,12 +25200,12 @@ 1 2 - 435785 + 435778 2 9 - 16416 + 16415 @@ -25202,12 +25221,12 @@ 1 2 - 435785 + 435778 2 8 - 16416 + 16415 @@ -25362,12 +25381,12 @@ 1 2 - 224273 + 224269 2 1655 - 9748 + 9747 @@ -25383,12 +25402,12 @@ 1 2 - 224273 + 224269 2 1655 - 9748 + 9747 @@ -25404,7 +25423,7 @@ 1 2 - 233581 + 233577 2 @@ -25425,12 +25444,12 @@ 1 2 - 228707 + 228703 2 81 - 5314 + 5313 @@ -25446,7 +25465,7 @@ 1 2 - 26333 + 26332 2 @@ -25482,7 +25501,7 @@ 1 2 - 26333 + 26332 2 @@ -25518,7 +25537,7 @@ 1 2 - 35167 + 35166 @@ -25534,7 +25553,7 @@ 1 2 - 28533 + 28532 2 @@ -25559,11 +25578,11 @@ derspecifiers - 475556 + 475548 der_id - 473356 + 473348 spec_id @@ -25581,7 +25600,7 @@ 1 2 - 471156 + 471148 2 @@ -25627,11 +25646,11 @@ direct_base_offsets - 447056 + 447049 der_id - 447056 + 447049 offset @@ -25649,7 +25668,7 @@ 1 2 - 447056 + 447049 @@ -25846,19 +25865,19 @@ frienddecls - 695869 + 767816 id - 695869 + 767816 type_id - 42140 + 54358 decl_id - 77341 + 100626 location @@ -25876,7 +25895,7 @@ 1 2 - 695869 + 767816 @@ -25892,7 +25911,7 @@ 1 2 - 695869 + 767816 @@ -25908,7 +25927,7 @@ 1 2 - 695869 + 767816 @@ -25924,46 +25943,41 @@ 1 2 - 6160 + 5584 2 3 - 13843 + 24978 3 - 7 - 3553 + 8 + 4806 - 7 - 12 - 3418 + 8 + 17 + 4738 - 12 - 20 - 3621 + 17 + 27 + 4467 - 20 - 32 - 3283 + 27 + 45 + 4298 - 33 - 50 - 3757 + 45 + 81 + 4738 - 50 - 80 - 3757 - - - 101 - 120 + 102 + 121 744 @@ -25980,46 +25994,41 @@ 1 2 - 6160 + 5584 2 3 - 13843 + 24978 3 - 7 - 3553 + 8 + 4806 - 7 - 12 - 3418 + 8 + 17 + 4738 - 12 - 20 - 3621 + 17 + 27 + 4467 - 20 - 32 - 3283 + 27 + 45 + 4298 - 33 - 50 - 3757 + 45 + 81 + 4738 - 50 - 80 - 3757 - - - 101 - 120 + 102 + 121 744 @@ -26036,7 +26045,7 @@ 1 2 - 40786 + 53004 2 @@ -26057,32 +26066,32 @@ 1 2 - 47792 + 67287 2 3 - 5889 + 8258 3 - 8 - 5957 + 9 + 9206 - 8 - 15 - 6024 + 9 + 24 + 7615 - 15 - 40 - 6024 + 24 + 127 + 7547 - 40 - 164 - 5652 + 135 + 191 + 710 @@ -26098,32 +26107,32 @@ 1 2 - 47792 + 67287 2 3 - 5889 + 8258 3 - 8 - 5957 + 9 + 9206 - 8 - 15 - 6024 + 9 + 24 + 7615 - 15 - 40 - 6024 + 24 + 127 + 7547 - 40 - 164 - 5652 + 135 + 191 + 710 @@ -26139,12 +26148,12 @@ 1 2 - 76664 + 99408 2 - 5 - 676 + 6 + 1218 @@ -26164,7 +26173,7 @@ 2 - 20370 + 22496 372 @@ -26185,7 +26194,7 @@ 2 - 1148 + 1509 135 @@ -26206,7 +26215,7 @@ 2 - 2132 + 2841 338 @@ -26217,19 +26226,19 @@ comments - 11208577 + 11208571 id - 11208577 + 11208571 contents - 4294966 + 4294963 location - 11208577 + 11208571 @@ -26243,7 +26252,7 @@ 1 2 - 11208577 + 11208571 @@ -26259,7 +26268,7 @@ 1 2 - 11208577 + 11208571 @@ -26275,7 +26284,7 @@ 1 2 - 3920500 + 3920498 2 @@ -26301,7 +26310,7 @@ 1 2 - 3920500 + 3920498 2 @@ -26327,7 +26336,7 @@ 1 2 - 11208577 + 11208571 @@ -26343,7 +26352,7 @@ 1 2 - 11208577 + 11208571 @@ -26353,15 +26362,15 @@ commentbinding - 3905317 + 3905315 id - 3342686 + 3342684 element - 3740174 + 3740172 @@ -26375,7 +26384,7 @@ 1 2 - 3281208 + 3281207 2 @@ -26396,7 +26405,7 @@ 1 2 - 3575031 + 3575029 2 @@ -26411,15 +26420,15 @@ exprconv - 9634075 + 9634070 converted - 9633969 + 9633964 conversion - 9634075 + 9634070 @@ -26433,7 +26442,7 @@ 1 2 - 9633864 + 9633859 2 @@ -26454,7 +26463,7 @@ 1 2 - 9634075 + 9634070 @@ -26464,22 +26473,22 @@ compgenerated - 9923438 + 9923433 id - 9923438 + 9923433 synthetic_destructor_call - 1666649 + 1666648 element - 1241202 + 1241201 i @@ -26487,7 +26496,7 @@ destructor_call - 1666649 + 1666648 @@ -26501,7 +26510,7 @@ 1 2 - 826181 + 826180 2 @@ -26527,7 +26536,7 @@ 1 2 - 826181 + 826180 2 @@ -26685,7 +26694,7 @@ 1 2 - 1666649 + 1666648 @@ -26701,7 +26710,7 @@ 1 2 - 1666649 + 1666648 @@ -26719,7 +26728,7 @@ name - 4555 + 4554 @@ -26749,7 +26758,7 @@ 1 2 - 3724 + 3723 2 @@ -26780,7 +26789,7 @@ namespacembrs - 2110397 + 2110396 parentid @@ -26788,7 +26797,7 @@ memberid - 2110397 + 2110396 @@ -26878,7 +26887,7 @@ 1 2 - 2110397 + 2110396 @@ -26888,11 +26897,11 @@ exprparents - 19456297 + 19456287 expr_id - 19456297 + 19456287 child_index @@ -26900,7 +26909,7 @@ parent_id - 12941381 + 12941374 @@ -26914,7 +26923,7 @@ 1 2 - 19456297 + 19456287 @@ -26930,7 +26939,7 @@ 1 2 - 19456297 + 19456287 @@ -27048,12 +27057,12 @@ 1 2 - 7395565 + 7395561 2 3 - 5083216 + 5083213 3 @@ -27074,12 +27083,12 @@ 1 2 - 7395565 + 7395561 2 3 - 5083216 + 5083213 3 @@ -27094,11 +27103,11 @@ expr_isload - 6898016 + 6898013 expr_id - 6898016 + 6898013 @@ -27183,11 +27192,11 @@ iscall - 5790819 + 5790816 caller - 5790819 + 5790816 kind @@ -27205,7 +27214,7 @@ 1 2 - 5790819 + 5790816 @@ -27367,15 +27376,15 @@ namequalifiers - 3042587 + 3042586 id - 3042587 + 3042586 qualifiableelement - 3042587 + 3042586 qualifyingelement @@ -27397,7 +27406,7 @@ 1 2 - 3042587 + 3042586 @@ -27413,7 +27422,7 @@ 1 2 - 3042587 + 3042586 @@ -27429,7 +27438,7 @@ 1 2 - 3042587 + 3042586 @@ -27445,7 +27454,7 @@ 1 2 - 3042587 + 3042586 @@ -27461,7 +27470,7 @@ 1 2 - 3042587 + 3042586 @@ -27477,7 +27486,7 @@ 1 2 - 3042587 + 3042586 @@ -27498,7 +27507,7 @@ 2 3 - 8173 + 8172 3 @@ -27534,7 +27543,7 @@ 2 3 - 8173 + 8172 3 @@ -27683,11 +27692,11 @@ varbind - 8255502 + 8255498 expr - 8255502 + 8255498 var @@ -27705,7 +27714,7 @@ 1 2 - 8255502 + 8255498 @@ -27721,7 +27730,7 @@ 1 2 - 171554 + 171553 2 @@ -27751,7 +27760,7 @@ 7 9 - 80824 + 80823 9 @@ -27776,11 +27785,11 @@ funbind - 5806092 + 5806089 expr - 5803625 + 5803622 fun @@ -27798,7 +27807,7 @@ 1 2 - 5801158 + 5801155 2 @@ -27849,11 +27858,11 @@ expr_allocator - 44949 + 44948 expr - 44949 + 44948 func @@ -27875,7 +27884,7 @@ 1 2 - 44949 + 44948 @@ -27891,7 +27900,7 @@ 1 2 - 44949 + 44948 @@ -28122,15 +28131,15 @@ expr_cond_guard - 897972 + 897971 cond - 897972 + 897971 guard - 897972 + 897971 @@ -28144,7 +28153,7 @@ 1 2 - 897972 + 897971 @@ -28160,7 +28169,7 @@ 1 2 - 897972 + 897971 @@ -28170,15 +28179,15 @@ expr_cond_true - 897968 + 897967 cond - 897968 + 897967 true - 897968 + 897967 @@ -28192,7 +28201,7 @@ 1 2 - 897968 + 897967 @@ -28208,7 +28217,7 @@ 1 2 - 897968 + 897967 @@ -28218,15 +28227,15 @@ expr_cond_false - 897972 + 897971 cond - 897972 + 897971 false - 897972 + 897971 @@ -28240,7 +28249,7 @@ 1 2 - 897972 + 897971 @@ -28256,7 +28265,7 @@ 1 2 - 897972 + 897971 @@ -28266,11 +28275,11 @@ values - 13541403 + 13541557 id - 13541403 + 13541557 str @@ -28288,7 +28297,7 @@ 1 2 - 13541403 + 13541557 @@ -28334,11 +28343,11 @@ valuetext - 6637663 + 6637698 id - 6637663 + 6637698 text @@ -28356,7 +28365,7 @@ 1 2 - 6637663 + 6637698 @@ -28386,7 +28395,7 @@ 7 - 593719 + 593717 27872 @@ -28397,15 +28406,15 @@ valuebind - 13649553 + 13649707 val - 13541403 + 13541557 expr - 13649553 + 13649707 @@ -28419,7 +28428,7 @@ 1 2 - 13451245 + 13451399 2 @@ -28440,7 +28449,7 @@ 1 2 - 13649553 + 13649707 @@ -28842,19 +28851,19 @@ initialisers - 2244827 + 2244826 init - 2244827 + 2244826 var - 978849 + 978848 expr - 2244827 + 2244826 location @@ -28872,7 +28881,7 @@ 1 2 - 2244827 + 2244826 @@ -28888,7 +28897,7 @@ 1 2 - 2244827 + 2244826 @@ -28904,7 +28913,7 @@ 1 2 - 2244827 + 2244826 @@ -28972,7 +28981,7 @@ 1 2 - 978841 + 978840 2 @@ -28993,7 +29002,7 @@ 1 2 - 2244827 + 2244826 @@ -29009,7 +29018,7 @@ 1 2 - 2244827 + 2244826 @@ -29025,7 +29034,7 @@ 1 2 - 2244827 + 2244826 @@ -29072,7 +29081,7 @@ 1 2 - 443423 + 443422 2 @@ -29134,15 +29143,15 @@ expr_ancestor - 1672612 + 1672611 exp - 1672612 + 1672611 ancestor - 837121 + 837120 @@ -29156,7 +29165,7 @@ 1 2 - 1672612 + 1672611 @@ -29192,11 +29201,11 @@ exprs - 25213263 + 25213250 id - 25213263 + 25213250 kind @@ -29204,7 +29213,7 @@ location - 10586811 + 10586806 @@ -29218,7 +29227,7 @@ 1 2 - 25213263 + 25213250 @@ -29234,7 +29243,7 @@ 1 2 - 25213263 + 25213250 @@ -29412,7 +29421,7 @@ 1 2 - 8904644 + 8904640 2 @@ -29443,7 +29452,7 @@ 1 2 - 9044063 + 9044058 2 @@ -29453,7 +29462,7 @@ 3 32 - 768384 + 768383 @@ -29463,15 +29472,15 @@ expr_reuse - 844479 + 844478 reuse - 844479 + 844478 original - 844479 + 844478 value_category @@ -29489,7 +29498,7 @@ 1 2 - 844479 + 844478 @@ -29505,7 +29514,7 @@ 1 2 - 844479 + 844478 @@ -29521,7 +29530,7 @@ 1 2 - 844479 + 844478 @@ -29537,7 +29546,7 @@ 1 2 - 844479 + 844478 @@ -29589,11 +29598,11 @@ expr_types - 25213263 + 25213250 id - 25213263 + 25213250 typeid @@ -29615,7 +29624,7 @@ 1 2 - 25213263 + 25213250 @@ -29631,7 +29640,7 @@ 1 2 - 25213263 + 25213250 @@ -29776,15 +29785,15 @@ new_allocated_type - 45897 + 45896 expr - 45897 + 45896 type_id - 27213 + 27212 @@ -29798,7 +29807,7 @@ 1 2 - 45897 + 45896 @@ -29819,7 +29828,7 @@ 2 3 - 14385 + 14384 3 @@ -29897,11 +29906,11 @@ param_ref_to_this - 24953 + 24952 expr - 24953 + 24952 @@ -31292,11 +31301,11 @@ typeid_bind - 47589 + 47588 expr - 47589 + 47588 type_id @@ -31314,7 +31323,7 @@ 1 2 - 47589 + 47588 @@ -33124,11 +33133,11 @@ stmts - 6349657 + 6349654 id - 6349657 + 6349654 kind @@ -33136,7 +33145,7 @@ location - 2676168 + 2676166 @@ -33150,7 +33159,7 @@ 1 2 - 6349657 + 6349654 @@ -33166,7 +33175,7 @@ 1 2 - 6349657 + 6349654 @@ -33404,7 +33413,7 @@ 1 2 - 2218095 + 2218094 2 @@ -33435,7 +33444,7 @@ 1 2 - 2593461 + 2593460 2 @@ -33605,15 +33614,15 @@ if_then - 990319 + 990318 if_stmt - 990319 + 990318 then_id - 990319 + 990318 @@ -33627,7 +33636,7 @@ 1 2 - 990319 + 990318 @@ -33643,7 +33652,7 @@ 1 2 - 990319 + 990318 @@ -33653,15 +33662,15 @@ if_else - 435786 + 435785 if_stmt - 435786 + 435785 else_id - 435786 + 435785 @@ -33675,7 +33684,7 @@ 1 2 - 435786 + 435785 @@ -33691,7 +33700,7 @@ 1 2 - 435786 + 435785 @@ -34116,7 +34125,7 @@ 2 3 - 407749 + 407748 3 @@ -34142,7 +34151,7 @@ 2 3 - 407749 + 407748 3 @@ -34571,11 +34580,11 @@ stmtparents - 5611096 + 5611093 id - 5611096 + 5611093 index @@ -34583,7 +34592,7 @@ parent - 2374341 + 2374340 @@ -34597,7 +34606,7 @@ 1 2 - 5611096 + 5611093 @@ -34613,7 +34622,7 @@ 1 2 - 5611096 + 5611093 @@ -34756,7 +34765,7 @@ 2 3 - 515764 + 515763 3 @@ -34797,7 +34806,7 @@ 2 3 - 515764 + 515763 3 @@ -35250,15 +35259,15 @@ blockscope - 1640355 + 1640354 block - 1640355 + 1640354 enclosing - 1423690 + 1423689 @@ -35272,7 +35281,7 @@ 1 2 - 1640355 + 1640354 @@ -35489,11 +35498,11 @@ preprocdirects - 5395215 + 5395212 id - 5395215 + 5395212 kind @@ -35501,7 +35510,7 @@ location - 5392103 + 5392101 @@ -35515,7 +35524,7 @@ 1 2 - 5395215 + 5395212 @@ -35531,7 +35540,7 @@ 1 2 - 5395215 + 5395212 @@ -35679,7 +35688,7 @@ 1 2 - 5391979 + 5391976 26 @@ -35700,7 +35709,7 @@ 1 2 - 5392103 + 5392101 @@ -35732,7 +35741,7 @@ 1 2 - 648003 + 648002 2 @@ -35768,11 +35777,11 @@ preproctrue - 438183 + 438182 branch - 438183 + 438182 @@ -35790,19 +35799,19 @@ preproctext - 4341758 + 4341756 id - 4341758 + 4341756 head - 2947935 + 2947934 body - 1679307 + 1679306 @@ -35816,7 +35825,7 @@ 1 2 - 4341758 + 4341756 @@ -35832,7 +35841,7 @@ 1 2 - 4341758 + 4341756 @@ -35848,7 +35857,7 @@ 1 2 - 2749813 + 2749812 2 @@ -35869,7 +35878,7 @@ 1 2 - 2866919 + 2866918 2 @@ -35890,7 +35899,7 @@ 1 2 - 1531463 + 1531462 2 @@ -35916,7 +35925,7 @@ 1 2 - 1535694 + 1535693 2 @@ -35936,15 +35945,15 @@ includes - 317352 + 317337 id - 317352 + 317337 included - 58458 + 58456 @@ -35958,7 +35967,7 @@ 1 2 - 317352 + 317337 @@ -35974,7 +35983,7 @@ 1 2 - 28929 + 28928 2 @@ -36012,6 +36021,54 @@ + + embeds + 1 + + + id + 1 + + + included + 1 + + + + + id + included + + + 12 + + + 1 + 2 + 1 + + + + + + + included + id + + + 12 + + + 1 + 2 + 1 + + + + + + + link_targets 816 @@ -36062,11 +36119,11 @@ link_parent - 30225290 + 30224787 element - 3843783 + 3843719 link_target @@ -36084,17 +36141,17 @@ 1 2 - 527072 + 527063 2 9 - 26773 + 26772 9 10 - 3289937 + 3289882 diff --git a/cpp/ql/lib/upgrades/1402ab319d20cdc9289deb7bfc1c70f36be44d44/old.dbscheme b/cpp/ql/lib/upgrades/1402ab319d20cdc9289deb7bfc1c70f36be44d44/old.dbscheme new file mode 100644 index 00000000000..1402ab319d2 --- /dev/null +++ b/cpp/ql/lib/upgrades/1402ab319d20cdc9289deb7bfc1c70f36be44d44/old.dbscheme @@ -0,0 +1,2479 @@ + +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * 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 +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +// ... 40 _Decimal32 +// ... 41 _Decimal64 +// ... 42 _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +| 394 = @isinvocable +| 395 = @isnothrowinvocable +| 396 = @isbitwisecloneable +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + | @isinvocable + | @isnothrowinvocable + | @isbitwisecloneable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +param_ref_to_this( + int expr: @param_ref ref +) + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/1402ab319d20cdc9289deb7bfc1c70f36be44d44/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/1402ab319d20cdc9289deb7bfc1c70f36be44d44/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..83100310bf7 --- /dev/null +++ b/cpp/ql/lib/upgrades/1402ab319d20cdc9289deb7bfc1c70f36be44d44/semmlecode.cpp.dbscheme @@ -0,0 +1,2483 @@ + +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * 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 +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +// ... 40 _Decimal32 +// ... 41 _Decimal64 +// ... 42 _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +| 394 = @isinvocable +| 395 = @isnothrowinvocable +| 396 = @isbitwisecloneable +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + | @isinvocable + | @isnothrowinvocable + | @isbitwisecloneable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +param_ref_to_this( + int expr: @param_ref ref +) + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/1402ab319d20cdc9289deb7bfc1c70f36be44d44/upgrade.properties b/cpp/ql/lib/upgrades/1402ab319d20cdc9289deb7bfc1c70f36be44d44/upgrade.properties new file mode 100644 index 00000000000..00fae2d3bc6 --- /dev/null +++ b/cpp/ql/lib/upgrades/1402ab319d20cdc9289deb7bfc1c70f36be44d44/upgrade.properties @@ -0,0 +1,2 @@ +description: Sections for databaseMetadata and overlayChangedFiles +compatibility: full diff --git a/cpp/ql/lib/upgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/old.dbscheme b/cpp/ql/lib/upgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/old.dbscheme new file mode 100644 index 00000000000..83100310bf7 --- /dev/null +++ b/cpp/ql/lib/upgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/old.dbscheme @@ -0,0 +1,2483 @@ + +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * 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 +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +// ... 40 _Decimal32 +// ... 41 _Decimal64 +// ... 42 _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +| 394 = @isinvocable +| 395 = @isnothrowinvocable +| 396 = @isbitwisecloneable +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + | @isinvocable + | @isnothrowinvocable + | @isbitwisecloneable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +param_ref_to_this( + int expr: @param_ref ref +) + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..9439176c1d1 --- /dev/null +++ b/cpp/ql/lib/upgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/semmlecode.cpp.dbscheme @@ -0,0 +1,2489 @@ + +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * 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 +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +// ... 40 _Decimal32 +// ... 41 _Decimal64 +// ... 42 _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +| 394 = @isinvocable +| 395 = @isnothrowinvocable +| 396 = @isbitwisecloneable +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + | @isinvocable + | @isnothrowinvocable + | @isbitwisecloneable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +param_ref_to_this( + int expr: @param_ref ref +) + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 17 = @ppd_embed +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +embeds( + unique int id: @ppd_embed ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/upgrade.properties b/cpp/ql/lib/upgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/upgrade.properties new file mode 100644 index 00000000000..2289f3b5a5f --- /dev/null +++ b/cpp/ql/lib/upgrades/83100310bf73eefc37c1d8d0ac98b2ca3019c7b6/upgrade.properties @@ -0,0 +1,2 @@ +description: Support embed preprocessor directive +compatibility: partial diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 6747d616b43..02a055ee266 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.5.9 + +### Minor Analysis Improvements + +* The `cpp/constant-comparison` query has been updated to not produce false positives for constants that are now represented by their unfolded expression trees. + ## 1.5.8 No user-facing changes. diff --git a/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql b/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql index 4d33ede9315..8cb0122b668 100644 --- a/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql +++ b/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql @@ -122,7 +122,8 @@ module Config implements DataFlow::ConfigSig { predicate isBarrier(DataFlow::Node node) { // Block flow if the node is guarded by any <, <= or = operations. - node = DataFlow::BarrierGuard::getABarrierNode() + node = DataFlow::BarrierGuard::getABarrierNode() or + node = DataFlow::BarrierGuard::getAnIndirectBarrierNode() } predicate observeDiffInformedIncrementalMode() { any() } diff --git a/cpp/ql/src/change-notes/2026-01-02-constant-comparison.md b/cpp/ql/src/change-notes/released/1.5.9.md similarity index 78% rename from cpp/ql/src/change-notes/2026-01-02-constant-comparison.md rename to cpp/ql/src/change-notes/released/1.5.9.md index 2b37f31268d..bc06ade90f7 100644 --- a/cpp/ql/src/change-notes/2026-01-02-constant-comparison.md +++ b/cpp/ql/src/change-notes/released/1.5.9.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.5.9 + +### Minor Analysis Improvements + * The `cpp/constant-comparison` query has been updated to not produce false positives for constants that are now represented by their unfolded expression trees. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index d26e0a52764..5ac7d08bfbf 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.8 +lastReleaseVersion: 1.5.9 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 188d20e50b2..30fd4696695 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.5.9-dev +version: 1.5.10-dev groups: - cpp - queries diff --git a/cpp/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/cpp/ql/src/utils/modelgenerator/internal/CaptureModels.qll index 28892c5b820..ba1221d112b 100644 --- a/cpp/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/cpp/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -78,7 +78,7 @@ module ModelGeneratorCommonInput implements ModelGeneratorCommonInputSig indirect_barrier=int + } +} + +int* get_clean_value(int* x) { return x; } +bool is_clean_value(int*); + +int* get_clean_pointer(int* x) { return x; } +bool is_clean_pointer(int*); + +void sink(int*); + +void test_mad(int x, int* p) { + { + if(is_clean_value(&x)) { + sink(x); // $ external=int + } + } + + { + if(is_clean_value(p)) { + sink(*p); // $ external=int + } + } + + { + if(is_clean_pointer(p)) { + sink(p); // $ external=int* + } + } + + { + if(is_clean_pointer(&x)) { + sink(x); // $ external=glval + } + } } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/ir-barrier-guards/test.ext.yml b/cpp/ql/test/library-tests/dataflow/ir-barrier-guards/test.ext.yml new file mode 100644 index 00000000000..8eeed7cd0b5 --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/ir-barrier-guards/test.ext.yml @@ -0,0 +1,13 @@ +extensions: + - addsTo: + pack: codeql/cpp-all + extensible: barrierModel + data: + - ["", "", False, "get_clean_pointer", "", "", "ReturnValue", "test-barrier", "manual"] + - ["", "", False, "get_clean_data", "", "", "ReturnValue[*]", "test-barrier", "manual"] + - addsTo: + pack: codeql/cpp-all + extensible: barrierGuardModel + data: + - ["", "", False, "is_clean_value", "", "", "Argument[*0]", "true", "test-barrier", "manual"] + - ["", "", False, "is_clean_pointer", "", "", "Argument[0]", "true", "test-barrier", "manual"] \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/ir-barrier-guards/test.ql b/cpp/ql/test/library-tests/dataflow/ir-barrier-guards/test.ql index 20610c55385..8948c65e33c 100644 --- a/cpp/ql/test/library-tests/dataflow/ir-barrier-guards/test.ql +++ b/cpp/ql/test/library-tests/dataflow/ir-barrier-guards/test.ql @@ -2,6 +2,7 @@ import cpp import semmle.code.cpp.dataflow.new.DataFlow import semmle.code.cpp.controlflow.IRGuards import utils.test.InlineExpectationsTest +import semmle.code.cpp.dataflow.ExternalFlow predicate instructionGuardChecks(IRGuardCondition gc, Instruction checked, boolean branch) { exists(CallInstruction call | @@ -13,26 +14,41 @@ predicate instructionGuardChecks(IRGuardCondition gc, Instruction checked, boole module BarrierGuard = DataFlow::InstructionBarrierGuard; -predicate indirectBarrierGuard(DataFlow::Node node, int indirectionIndex) { - node = BarrierGuard::getAnIndirectBarrierNode(indirectionIndex) +predicate indirectBarrierGuard(DataFlow::Node node, string s) { + node = BarrierGuard::getAnIndirectBarrierNode(_) and + if node.isGLValue() + then s = "glval<" + node.getType().toString().replaceAll(" ", "") + ">" + else s = node.getType().toString().replaceAll(" ", "") } -predicate barrierGuard(DataFlow::Node node) { node = BarrierGuard::getABarrierNode() } +predicate barrierGuard(DataFlow::Node node, string s) { + node = BarrierGuard::getABarrierNode() and + if node.isGLValue() + then s = "glval<" + node.getType().toString().replaceAll(" ", "") + ">" + else s = node.getType().toString().replaceAll(" ", "") +} + +predicate externalBarrierGuard(DataFlow::Node node, string s) { + barrierNode(node, "test-barrier") and + if node.isGLValue() + then s = "glval<" + node.getType().toString().replaceAll(" ", "") + ">" + else s = node.getType().toString().replaceAll(" ", "") +} module Test implements TestSig { - string getARelevantTag() { result = "barrier" } + string getARelevantTag() { result = ["barrier", "indirect_barrier", "external"] } predicate hasActualResult(Location location, string element, string tag, string value) { exists(DataFlow::Node node | - barrierGuard(node) and - value = "" + indirectBarrierGuard(node, value) and + tag = "indirect_barrier" or - exists(int indirectionIndex | - indirectBarrierGuard(node, indirectionIndex) and - value = indirectionIndex.toString() - ) + barrierGuard(node, value) and + tag = "barrier" + or + externalBarrierGuard(node, value) and + tag = "external" | - tag = "barrier" and element = node.toString() and location = node.getLocation() ) diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index a9dd614a9ae..45666a3b50b 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -25131,6 +25131,517 @@ ir.cpp: # 2823| Type = [ArrayType] int[] # 2823| ValueCategory = lvalue # 2824| getStmt(5): [ReturnStmt] return ... +# 2830| [TopLevelFunction] void test_assert_simple(int, int, unsigned int, int) +# 2830| : +# 2830| getParameter(0): [Parameter] x +# 2830| Type = [IntType] int +# 2830| getParameter(1): [Parameter] y +# 2830| Type = [IntType] int +# 2830| getParameter(2): [Parameter] u +# 2830| Type = [IntType] unsigned int +# 2830| getParameter(3): [Parameter] shadowed +# 2830| Type = [IntType] int +# 2830| getEntryPoint(): [BlockStmt] { ... } +# 2831| getStmt(0): [ExprStmt] ExprStmt +# 2831| getExpr(): [Literal] 0 +# 2831| Type = [IntType] int +# 2831| Value = [Literal] 0 +# 2831| ValueCategory = prvalue +# 2831| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2831| Type = [VoidType] void +# 2831| ValueCategory = prvalue +# 2831| getExpr(): [CStyleCast] (void)... +# 2831| Conversion = [VoidConversion] conversion to void +# 2831| Type = [VoidType] void +# 2831| ValueCategory = prvalue +# 2832| getStmt(1): [ExprStmt] ExprStmt +# 2832| getExpr(): [Literal] 0 +# 2832| Type = [IntType] int +# 2832| Value = [Literal] 0 +# 2832| ValueCategory = prvalue +# 2832| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2832| Type = [VoidType] void +# 2832| ValueCategory = prvalue +# 2832| getExpr(): [CStyleCast] (void)... +# 2832| Conversion = [VoidConversion] conversion to void +# 2832| Type = [VoidType] void +# 2832| ValueCategory = prvalue +# 2833| getStmt(2): [ExprStmt] ExprStmt +# 2833| getExpr(): [Literal] 0 +# 2833| Type = [IntType] int +# 2833| Value = [Literal] 0 +# 2833| ValueCategory = prvalue +# 2833| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2833| Type = [VoidType] void +# 2833| ValueCategory = prvalue +# 2833| getExpr(): [CStyleCast] (void)... +# 2833| Conversion = [VoidConversion] conversion to void +# 2833| Type = [VoidType] void +# 2833| ValueCategory = prvalue +# 2835| getStmt(3): [EmptyStmt] ; +# 2837| getStmt(4): [ExprStmt] ExprStmt +# 2837| getExpr(): [Literal] 0 +# 2837| Type = [IntType] int +# 2837| Value = [Literal] 0 +# 2837| ValueCategory = prvalue +# 2837| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2837| Type = [VoidType] void +# 2837| ValueCategory = prvalue +# 2837| getExpr(): [CStyleCast] (void)... +# 2837| Conversion = [VoidConversion] conversion to void +# 2837| Type = [VoidType] void +# 2837| ValueCategory = prvalue +# 2839| getStmt(5): [BlockStmt] { ... } +# 2840| getStmt(0): [DeclStmt] declaration +# 2840| getDeclarationEntry(0): [VariableDeclarationEntry] definition of shadowed +# 2840| Type = [IntType] int +# 2840| getVariable().getInitializer(): [Initializer] initializer for shadowed +# 2840| getExpr(): [VariableAccess] x +# 2840| Type = [IntType] int +# 2840| ValueCategory = prvalue(load) +# 2841| getStmt(1): [ExprStmt] ExprStmt +# 2841| getExpr(): [Literal] 0 +# 2841| Type = [IntType] int +# 2841| Value = [Literal] 0 +# 2841| ValueCategory = prvalue +# 2841| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2841| Type = [VoidType] void +# 2841| ValueCategory = prvalue +# 2841| getExpr(): [CStyleCast] (void)... +# 2841| Conversion = [VoidConversion] conversion to void +# 2841| Type = [VoidType] void +# 2841| ValueCategory = prvalue +# 2843| getStmt(6): [ReturnStmt] return ... +# 2846| [TemplateFunction,TopLevelFunction] void test_assert_in_template(T, int, unsigned int) +# 2846| : +# 2846| getParameter(0): [Parameter] x +# 2846| Type = [TypeTemplateParameter] T +# 2846| getParameter(1): [Parameter] y +# 2846| Type = [IntType] int +# 2846| getParameter(2): [Parameter] u +# 2846| Type = [IntType] unsigned int +# 2846| getEntryPoint(): [BlockStmt] { ... } +# 2847| getStmt(0): [ExprStmt] ExprStmt +# 2847| getExpr(): [Literal] 0 +# 2847| Type = [IntType] int +# 2847| Value = [Literal] 0 +# 2847| ValueCategory = prvalue +# 2847| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2847| Type = [VoidType] void +# 2847| ValueCategory = prvalue +# 2847| getExpr(): [CStyleCast] (void)... +# 2847| Conversion = [VoidConversion] conversion to void +# 2847| Type = [VoidType] void +# 2847| ValueCategory = prvalue +# 2848| getStmt(1): [ExprStmt] ExprStmt +# 2848| getExpr(): [Literal] 0 +# 2848| Type = [IntType] int +# 2848| Value = [Literal] 0 +# 2848| ValueCategory = prvalue +# 2848| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2848| Type = [VoidType] void +# 2848| ValueCategory = prvalue +# 2848| getExpr(): [CStyleCast] (void)... +# 2848| Conversion = [VoidConversion] conversion to void +# 2848| Type = [VoidType] void +# 2848| ValueCategory = prvalue +# 2849| getStmt(2): [ExprStmt] ExprStmt +# 2849| getExpr(): [Literal] 0 +# 2849| Type = [IntType] int +# 2849| Value = [Literal] 0 +# 2849| ValueCategory = prvalue +# 2849| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2849| Type = [VoidType] void +# 2849| ValueCategory = prvalue +# 2849| getExpr(): [CStyleCast] (void)... +# 2849| Conversion = [VoidConversion] conversion to void +# 2849| Type = [VoidType] void +# 2849| ValueCategory = prvalue +# 2851| getStmt(3): [EmptyStmt] ; +# 2853| getStmt(4): [ExprStmt] ExprStmt +# 2853| getExpr(): [Literal] 0 +# 2853| Type = [IntType] int +# 2853| Value = [Literal] 0 +# 2853| ValueCategory = prvalue +# 2853| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2853| Type = [VoidType] void +# 2853| ValueCategory = prvalue +# 2853| getExpr(): [CStyleCast] (void)... +# 2853| Conversion = [VoidConversion] conversion to void +# 2853| Type = [VoidType] void +# 2853| ValueCategory = prvalue +# 2855| getStmt(5): [BlockStmt] { ... } +# 2856| getStmt(0): [DeclStmt] declaration +# 2856| getDeclarationEntry(0): [VariableDeclarationEntry] definition of shadowed +# 2856| Type = [IntType] int +# 2856| getVariable().getInitializer(): [Initializer] initializer for shadowed +# 2856| getExpr(): [VariableAccess] x +# 2856| Type = [TypeTemplateParameter] T +# 2856| ValueCategory = lvalue +# 2856| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2856| Type = [IntType] int +# 2856| ValueCategory = prvalue +# 2857| getStmt(1): [ExprStmt] ExprStmt +# 2857| getExpr(): [Literal] 0 +# 2857| Type = [IntType] int +# 2857| Value = [Literal] 0 +# 2857| ValueCategory = prvalue +# 2857| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2857| Type = [VoidType] void +# 2857| ValueCategory = prvalue +# 2857| getExpr(): [CStyleCast] (void)... +# 2857| Conversion = [VoidConversion] conversion to void +# 2857| Type = [VoidType] void +# 2857| ValueCategory = prvalue +# 2859| getStmt(6): [ExprStmt] ExprStmt +# 2859| getExpr(): [Literal] 0 +# 2859| Type = [IntType] int +# 2859| Value = [Literal] 0 +# 2859| ValueCategory = prvalue +# 2859| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2859| Type = [VoidType] void +# 2859| ValueCategory = prvalue +# 2859| getExpr(): [CStyleCast] (void)... +# 2859| Conversion = [VoidConversion] conversion to void +# 2859| Type = [VoidType] void +# 2859| ValueCategory = prvalue +# 2860| getStmt(7): [ReturnStmt] return ... +# 2846| [FunctionTemplateInstantiation,TopLevelFunction] void test_assert_in_template(int, int, unsigned int) +# 2846| : +# 2846| getParameter(0): [Parameter] x +# 2846| Type = [IntType] int +# 2846| getParameter(1): [Parameter] y +# 2846| Type = [IntType] int +# 2846| getParameter(2): [Parameter] u +# 2846| Type = [IntType] unsigned int +# 2846| getEntryPoint(): [BlockStmt] { ... } +# 2847| getStmt(0): [ExprStmt] ExprStmt +# 2847| getExpr(): [Literal] 0 +# 2847| Type = [IntType] int +# 2847| Value = [Literal] 0 +# 2847| ValueCategory = prvalue +# 2847| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2847| Type = [VoidType] void +# 2847| ValueCategory = prvalue +# 2847| getExpr(): [CStyleCast] (void)... +# 2847| Conversion = [VoidConversion] conversion to void +# 2847| Type = [VoidType] void +# 2847| ValueCategory = prvalue +# 2848| getStmt(1): [ExprStmt] ExprStmt +# 2848| getExpr(): [Literal] 0 +# 2848| Type = [IntType] int +# 2848| Value = [Literal] 0 +# 2848| ValueCategory = prvalue +# 2848| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2848| Type = [VoidType] void +# 2848| ValueCategory = prvalue +# 2848| getExpr(): [CStyleCast] (void)... +# 2848| Conversion = [VoidConversion] conversion to void +# 2848| Type = [VoidType] void +# 2848| ValueCategory = prvalue +# 2849| getStmt(2): [ExprStmt] ExprStmt +# 2849| getExpr(): [Literal] 0 +# 2849| Type = [IntType] int +# 2849| Value = [Literal] 0 +# 2849| ValueCategory = prvalue +# 2849| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2849| Type = [VoidType] void +# 2849| ValueCategory = prvalue +# 2849| getExpr(): [CStyleCast] (void)... +# 2849| Conversion = [VoidConversion] conversion to void +# 2849| Type = [VoidType] void +# 2849| ValueCategory = prvalue +# 2851| getStmt(3): [EmptyStmt] ; +# 2853| getStmt(4): [ExprStmt] ExprStmt +# 2853| getExpr(): [Literal] 0 +# 2853| Type = [IntType] int +# 2853| Value = [Literal] 0 +# 2853| ValueCategory = prvalue +# 2853| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2853| Type = [VoidType] void +# 2853| ValueCategory = prvalue +# 2853| getExpr(): [CStyleCast] (void)... +# 2853| Conversion = [VoidConversion] conversion to void +# 2853| Type = [VoidType] void +# 2853| ValueCategory = prvalue +# 2855| getStmt(5): [BlockStmt] { ... } +# 2856| getStmt(0): [DeclStmt] declaration +# 2856| getDeclarationEntry(0): [VariableDeclarationEntry] definition of shadowed +# 2856| Type = [IntType] int +# 2856| getVariable().getInitializer(): [Initializer] initializer for shadowed +# 2856| getExpr(): [VariableAccess] x +# 2856| Type = [IntType] int +# 2856| ValueCategory = prvalue(load) +# 2857| getStmt(1): [ExprStmt] ExprStmt +# 2857| getExpr(): [Literal] 0 +# 2857| Type = [IntType] int +# 2857| Value = [Literal] 0 +# 2857| ValueCategory = prvalue +# 2857| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2857| Type = [VoidType] void +# 2857| ValueCategory = prvalue +# 2857| getExpr(): [CStyleCast] (void)... +# 2857| Conversion = [VoidConversion] conversion to void +# 2857| Type = [VoidType] void +# 2857| ValueCategory = prvalue +# 2859| getStmt(6): [ExprStmt] ExprStmt +# 2859| getExpr(): [Literal] 0 +# 2859| Type = [IntType] int +# 2859| Value = [Literal] 0 +# 2859| ValueCategory = prvalue +# 2859| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2859| Type = [VoidType] void +# 2859| ValueCategory = prvalue +# 2859| getExpr(): [CStyleCast] (void)... +# 2859| Conversion = [VoidConversion] conversion to void +# 2859| Type = [VoidType] void +# 2859| ValueCategory = prvalue +# 2860| getStmt(7): [ReturnStmt] return ... +# 2846| [FunctionTemplateInstantiation,TopLevelFunction] void test_assert_in_template(short, int, unsigned int) +# 2846| : +# 2846| getParameter(0): [Parameter] x +# 2846| Type = [ShortType] short +# 2846| getParameter(1): [Parameter] y +# 2846| Type = [IntType] int +# 2846| getParameter(2): [Parameter] u +# 2846| Type = [IntType] unsigned int +# 2846| getEntryPoint(): [BlockStmt] { ... } +# 2847| getStmt(0): [ExprStmt] ExprStmt +# 2847| getExpr(): [Literal] 0 +# 2847| Type = [IntType] int +# 2847| Value = [Literal] 0 +# 2847| ValueCategory = prvalue +# 2847| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2847| Type = [VoidType] void +# 2847| ValueCategory = prvalue +# 2847| getExpr(): [CStyleCast] (void)... +# 2847| Conversion = [VoidConversion] conversion to void +# 2847| Type = [VoidType] void +# 2847| ValueCategory = prvalue +# 2848| getStmt(1): [ExprStmt] ExprStmt +# 2848| getExpr(): [Literal] 0 +# 2848| Type = [IntType] int +# 2848| Value = [Literal] 0 +# 2848| ValueCategory = prvalue +# 2848| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2848| Type = [VoidType] void +# 2848| ValueCategory = prvalue +# 2848| getExpr(): [CStyleCast] (void)... +# 2848| Conversion = [VoidConversion] conversion to void +# 2848| Type = [VoidType] void +# 2848| ValueCategory = prvalue +# 2849| getStmt(2): [ExprStmt] ExprStmt +# 2849| getExpr(): [Literal] 0 +# 2849| Type = [IntType] int +# 2849| Value = [Literal] 0 +# 2849| ValueCategory = prvalue +# 2849| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2849| Type = [VoidType] void +# 2849| ValueCategory = prvalue +# 2849| getExpr(): [CStyleCast] (void)... +# 2849| Conversion = [VoidConversion] conversion to void +# 2849| Type = [VoidType] void +# 2849| ValueCategory = prvalue +# 2851| getStmt(3): [EmptyStmt] ; +# 2853| getStmt(4): [ExprStmt] ExprStmt +# 2853| getExpr(): [Literal] 0 +# 2853| Type = [IntType] int +# 2853| Value = [Literal] 0 +# 2853| ValueCategory = prvalue +# 2853| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2853| Type = [VoidType] void +# 2853| ValueCategory = prvalue +# 2853| getExpr(): [CStyleCast] (void)... +# 2853| Conversion = [VoidConversion] conversion to void +# 2853| Type = [VoidType] void +# 2853| ValueCategory = prvalue +# 2855| getStmt(5): [BlockStmt] { ... } +# 2856| getStmt(0): [DeclStmt] declaration +# 2856| getDeclarationEntry(0): [VariableDeclarationEntry] definition of shadowed +# 2856| Type = [IntType] int +# 2856| getVariable().getInitializer(): [Initializer] initializer for shadowed +# 2856| getExpr(): [VariableAccess] x +# 2856| Type = [ShortType] short +# 2856| ValueCategory = prvalue(load) +# 2856| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2856| Conversion = [IntegralConversion] integral conversion +# 2856| Type = [IntType] int +# 2856| ValueCategory = prvalue +# 2857| getStmt(1): [ExprStmt] ExprStmt +# 2857| getExpr(): [Literal] 0 +# 2857| Type = [IntType] int +# 2857| Value = [Literal] 0 +# 2857| ValueCategory = prvalue +# 2857| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2857| Type = [VoidType] void +# 2857| ValueCategory = prvalue +# 2857| getExpr(): [CStyleCast] (void)... +# 2857| Conversion = [VoidConversion] conversion to void +# 2857| Type = [VoidType] void +# 2857| ValueCategory = prvalue +# 2859| getStmt(6): [ExprStmt] ExprStmt +# 2859| getExpr(): [Literal] 0 +# 2859| Type = [IntType] int +# 2859| Value = [Literal] 0 +# 2859| ValueCategory = prvalue +# 2859| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2859| Type = [VoidType] void +# 2859| ValueCategory = prvalue +# 2859| getExpr(): [CStyleCast] (void)... +# 2859| Conversion = [VoidConversion] conversion to void +# 2859| Type = [VoidType] void +# 2859| ValueCategory = prvalue +# 2860| getStmt(7): [ReturnStmt] return ... +# 2867| [TopLevelFunction] void (unnamed namespace)::complex_assertions(int, bool, int) +# 2867| : +# 2867| getParameter(0): [Parameter] x +# 2867| Type = [IntType] int +# 2867| getParameter(1): [Parameter] b +# 2867| Type = [BoolType] bool +# 2867| getParameter(2): [Parameter] max +# 2867| Type = [IntType] int +# 2867| getEntryPoint(): [BlockStmt] { ... } +# 2868| getStmt(0): [DeclStmt] declaration +# 2868| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2868| Type = [IntType] int +# 2868| getVariable().getInitializer(): [Initializer] initializer for y +# 2868| getExpr(): [CommaExpr] ... , ... +# 2868| Type = [IntType] int +# 2868| ValueCategory = prvalue(load) +# 2868| getLeftOperand(): [Literal] 0 +# 2868| Type = [IntType] int +# 2868| Value = [Literal] 0 +# 2868| ValueCategory = prvalue +# 2868| getRightOperand(): [VariableAccess] x +# 2868| Type = [IntType] int +# 2868| ValueCategory = prvalue(load) +# 2868| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2868| Type = [VoidType] void +# 2868| ValueCategory = prvalue +# 2868| getExpr(): [CStyleCast] (void)... +# 2868| Conversion = [VoidConversion] conversion to void +# 2868| Type = [VoidType] void +# 2868| ValueCategory = prvalue +# 2868| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2868| Type = [IntType] int +# 2868| ValueCategory = prvalue(load) +# 2869| getStmt(1): [DeclStmt] declaration +# 2869| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 2869| Type = [IntType] int +# 2869| getVariable().getInitializer(): [Initializer] initializer for z +# 2869| getExpr(): [ConditionalExpr] ... ? ... : ... +# 2869| Type = [IntType] int +# 2869| ValueCategory = prvalue +# 2869| getCondition(): [VariableAccess] b +# 2869| Type = [BoolType] bool +# 2869| ValueCategory = prvalue(load) +# 2869| getThen(): [CommaExpr] ... , ... +# 2869| Type = [IntType] int +# 2869| Value = [CommaExpr] 0 +# 2869| ValueCategory = prvalue +# 2869| getLeftOperand(): [Literal] 0 +# 2869| Type = [IntType] int +# 2869| Value = [Literal] 0 +# 2869| ValueCategory = prvalue +# 2869| getRightOperand(): [Literal] 0 +# 2869| Type = [IntType] int +# 2869| Value = [Literal] 0 +# 2869| ValueCategory = prvalue +# 2869| getLeftOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2869| Type = [VoidType] void +# 2869| ValueCategory = prvalue +# 2869| getExpr(): [CStyleCast] (void)... +# 2869| Conversion = [VoidConversion] conversion to void +# 2869| Type = [VoidType] void +# 2869| ValueCategory = prvalue +# 2869| getElse(): [Literal] 1 +# 2869| Type = [IntType] int +# 2869| Value = [Literal] 1 +# 2869| ValueCategory = prvalue +# 2869| getThen().getFullyConverted(): [ParenthesisExpr] (...) +# 2869| Type = [IntType] int +# 2869| Value = [ParenthesisExpr] 0 +# 2869| ValueCategory = prvalue +# 2871| getStmt(2): [TryStmt] try { ... } +# 2871| getStmt(): [BlockStmt] { ... } +# 2872| getStmt(0): [ExprStmt] ExprStmt +# 2872| getExpr(): [ThrowExpr] throw ... +# 2872| Type = [IntType] int +# 2872| ValueCategory = prvalue +# 2872| getExpr(): [Literal] 41 +# 2872| Type = [IntType] int +# 2872| Value = [Literal] 41 +# 2872| ValueCategory = prvalue +# 2873| getChild(1): [Handler] +# 2873| getParameter(): [Parameter] c +# 2873| Type = [IntType] int +# 2873| getBlock(): [CatchBlock] { ... } +# 2874| getStmt(0): [ExprStmt] ExprStmt +# 2874| getExpr(): [Literal] 0 +# 2874| Type = [IntType] int +# 2874| Value = [Literal] 0 +# 2874| ValueCategory = prvalue +# 2874| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2874| Type = [VoidType] void +# 2874| ValueCategory = prvalue +# 2874| getExpr(): [CStyleCast] (void)... +# 2874| Conversion = [VoidConversion] conversion to void +# 2874| Type = [VoidType] void +# 2874| ValueCategory = prvalue +# 2875| getStmt(1): [ExprStmt] ExprStmt +# 2875| getExpr(): [Literal] 0 +# 2875| Type = [IntType] int +# 2875| Value = [Literal] 0 +# 2875| ValueCategory = prvalue +# 2875| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2875| Type = [VoidType] void +# 2875| ValueCategory = prvalue +# 2875| getExpr(): [CStyleCast] (void)... +# 2875| Conversion = [VoidConversion] conversion to void +# 2875| Type = [VoidType] void +# 2875| ValueCategory = prvalue +# 2878| getStmt(3): [ExprStmt] ExprStmt +# 2878| getExpr(): [Literal] 0 +# 2878| Type = [IntType] int +# 2878| Value = [Literal] 0 +# 2878| ValueCategory = prvalue +# 2878| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2878| Type = [VoidType] void +# 2878| ValueCategory = prvalue +# 2878| getExpr(): [CStyleCast] (void)... +# 2878| Conversion = [VoidConversion] conversion to void +# 2878| Type = [VoidType] void +# 2878| ValueCategory = prvalue +# 2879| getStmt(4): [DeclStmt] declaration +# 2879| getDeclarationEntry(0): [VariableDeclarationEntry] definition of shadowed +# 2879| Type = [IntType] int +# 2881| getStmt(5): [TryStmt] try { ... } +# 2881| getStmt(): [BlockStmt] { ... } +# 2882| getStmt(0): [ExprStmt] ExprStmt +# 2882| getExpr(): [ThrowExpr] throw ... +# 2882| Type = [IntType] int +# 2882| ValueCategory = prvalue +# 2882| getExpr(): [Literal] 41 +# 2882| Type = [IntType] int +# 2882| Value = [Literal] 41 +# 2882| ValueCategory = prvalue +# 2883| getChild(1): [Handler] +# 2883| getParameter(): [Parameter] shadowed +# 2883| Type = [IntType] int +# 2883| getBlock(): [CatchBlock] { ... } +# 2884| getStmt(0): [ExprStmt] ExprStmt +# 2884| getExpr(): [Literal] 0 +# 2884| Type = [IntType] int +# 2884| Value = [Literal] 0 +# 2884| ValueCategory = prvalue +# 2884| getExpr().getFullyConverted(): [ParenthesisExpr] (...) +# 2884| Type = [VoidType] void +# 2884| ValueCategory = prvalue +# 2884| getExpr(): [CStyleCast] (void)... +# 2884| Conversion = [VoidConversion] conversion to void +# 2884| Type = [VoidType] void +# 2884| ValueCategory = prvalue +# 2886| getStmt(6): [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 94daf808a72..369cc9495a2 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -20741,6 +20741,331 @@ ir.cpp: # 2821| v2821_10(void) = AliasedUse : m2821_3 # 2821| v2821_11(void) = ExitFunction : +# 2830| void test_assert_simple(int, int, unsigned int, int) +# 2830| Block 0 +# 2830| v2830_1(void) = EnterFunction : +# 2830| m2830_2(unknown) = AliasedDefinition : +# 2830| m2830_3(unknown) = InitializeNonLocal : +# 2830| m2830_4(unknown) = Chi : total:m2830_2, partial:m2830_3 +# 2830| r2830_5(glval) = VariableAddress[x] : +# 2830| m2830_6(int) = InitializeParameter[x] : &:r2830_5 +# 2830| r2830_7(glval) = VariableAddress[y] : +# 2830| m2830_8(int) = InitializeParameter[y] : &:r2830_7 +# 2830| r2830_9(glval) = VariableAddress[u] : +# 2830| m2830_10(unsigned int) = InitializeParameter[u] : &:r2830_9 +# 2830| r2830_11(glval) = VariableAddress[shadowed] : +# 2830| m2830_12(int) = InitializeParameter[shadowed] : &:r2830_11 +# 2831| r2831_1(glval) = VariableAddress[x] : +# 2831| r2831_2(int) = Load[x] : &:r2831_1, m2830_6 +# 2831| r2831_3(int) = Constant[0] : +# 2831| r2831_4(bool) = CompareGT : r2831_2, r2831_3 +# 2831| v2831_5(void) = ConditionalBranch : r2831_4 +#-----| True -> Block 1 + +# 2832| Block 1 +# 2832| r2832_1(int) = Constant[0] : +# 2832| r2832_2(glval) = VariableAddress[x] : +# 2832| r2832_3(int) = Load[x] : &:r2832_2, m2830_6 +# 2832| r2832_4(bool) = CompareLT : r2832_1, r2832_3 +# 2832| v2832_5(void) = ConditionalBranch : r2832_4 +#-----| True -> Block 2 + +# 2833| Block 2 +# 2833| r2833_1(glval) = VariableAddress[x] : +# 2833| r2833_2(int) = Load[x] : &:r2833_1, m2830_6 +# 2833| r2833_3(glval) = VariableAddress[y] : +# 2833| r2833_4(int) = Load[y] : &:r2833_3, m2830_8 +# 2833| r2833_5(bool) = CompareLT : r2833_2, r2833_4 +# 2833| v2833_6(void) = ConditionalBranch : r2833_5 +#-----| True -> Block 3 + +# 2835| Block 3 +# 2835| r2835_1(glval) = VariableAddress[x] : +# 2835| r2835_2(int) = Load[x] : &:r2835_1, m2830_6 +# 2835| r2835_3(int) = Constant[2] : +# 2835| r2835_4(bool) = CompareNE : r2835_2, r2835_3 +# 2835| v2835_5(void) = ConditionalBranch : r2835_4 +#-----| True -> Block 4 + +# 2837| Block 4 +# 2837| r2837_1(glval) = VariableAddress[u] : +# 2837| r2837_2(unsigned int) = Load[u] : &:r2837_1, m2830_10 +# 2837| r2837_3(glval) = VariableAddress[x] : +# 2837| r2837_4(int) = Load[x] : &:r2837_3, m2830_6 +# 2837| r2837_5(bool) = CompareLT : r2837_2, r2837_4 +# 2837| v2837_6(void) = ConditionalBranch : r2837_5 +#-----| True -> Block 5 + +# 2840| Block 5 +# 2840| r2840_1(glval) = VariableAddress[shadowed] : +# 2840| r2840_2(glval) = VariableAddress[x] : +# 2840| r2840_3(int) = Load[x] : &:r2840_2, m2830_6 +# 2840| m2840_4(int) = Store[shadowed] : &:r2840_1, r2840_3 +# 2841| r2841_1(int) = Constant[0] : +# 2841| v2841_2(void) = Convert : r2841_1 +# 2843| v2843_1(void) = NoOp : +# 2830| v2830_13(void) = ReturnVoid : +# 2830| v2830_14(void) = AliasedUse : m2830_3 +# 2830| v2830_15(void) = ExitFunction : + +# 2846| void test_assert_in_template(int, int, unsigned int) +# 2846| Block 0 +# 2846| v2846_1(void) = EnterFunction : +# 2846| m2846_2(unknown) = AliasedDefinition : +# 2846| m2846_3(unknown) = InitializeNonLocal : +# 2846| m2846_4(unknown) = Chi : total:m2846_2, partial:m2846_3 +# 2846| r2846_5(glval) = VariableAddress[x] : +# 2846| m2846_6(int) = InitializeParameter[x] : &:r2846_5 +# 2846| r2846_7(glval) = VariableAddress[y] : +# 2846| m2846_8(int) = InitializeParameter[y] : &:r2846_7 +# 2846| r2846_9(glval) = VariableAddress[u] : +# 2846| m2846_10(unsigned int) = InitializeParameter[u] : &:r2846_9 +# 2847| r2847_1(glval) = VariableAddress[x] : +# 2847| r2847_2(int) = Load[x] : &:r2847_1, m2846_6 +# 2847| r2847_3(int) = Constant[0] : +# 2847| r2847_4(bool) = CompareGT : r2847_2, r2847_3 +# 2847| v2847_5(void) = ConditionalBranch : r2847_4 +#-----| True -> Block 1 + +# 2848| Block 1 +# 2848| r2848_1(int) = Constant[0] : +# 2848| r2848_2(glval) = VariableAddress[x] : +# 2848| r2848_3(int) = Load[x] : &:r2848_2, m2846_6 +# 2848| r2848_4(bool) = CompareLT : r2848_1, r2848_3 +# 2848| v2848_5(void) = ConditionalBranch : r2848_4 +#-----| True -> Block 2 + +# 2849| Block 2 +# 2849| r2849_1(glval) = VariableAddress[x] : +# 2849| r2849_2(int) = Load[x] : &:r2849_1, m2846_6 +# 2849| r2849_3(glval) = VariableAddress[y] : +# 2849| r2849_4(int) = Load[y] : &:r2849_3, m2846_8 +# 2849| r2849_5(bool) = CompareLT : r2849_2, r2849_4 +# 2849| v2849_6(void) = ConditionalBranch : r2849_5 +#-----| True -> Block 3 + +# 2851| Block 3 +# 2851| r2851_1(glval) = VariableAddress[x] : +# 2851| r2851_2(int) = Load[x] : &:r2851_1, m2846_6 +# 2851| r2851_3(int) = Constant[2] : +# 2851| r2851_4(bool) = CompareNE : r2851_2, r2851_3 +# 2851| v2851_5(void) = ConditionalBranch : r2851_4 +#-----| True -> Block 4 + +# 2853| Block 4 +# 2853| r2853_1(glval) = VariableAddress[u] : +# 2853| r2853_2(unsigned int) = Load[u] : &:r2853_1, m2846_10 +# 2853| r2853_3(glval) = VariableAddress[x] : +# 2853| r2853_4(int) = Load[x] : &:r2853_3, m2846_6 +# 2853| r2853_5(bool) = CompareLT : r2853_2, r2853_4 +# 2853| v2853_6(void) = ConditionalBranch : r2853_5 +#-----| True -> Block 5 + +# 2856| Block 5 +# 2856| r2856_1(glval) = VariableAddress[shadowed] : +# 2856| r2856_2(glval) = VariableAddress[x] : +# 2856| r2856_3(int) = Load[x] : &:r2856_2, m2846_6 +# 2856| m2856_4(int) = Store[shadowed] : &:r2856_1, r2856_3 +# 2857| r2857_1(glval) = VariableAddress[shadowed] : +# 2857| r2857_2(int) = Load[shadowed] : &:r2857_1, m2856_4 +# 2857| r2857_3(int) = Constant[0] : +# 2857| r2857_4(bool) = CompareGT : r2857_2, r2857_3 +# 2857| v2857_5(void) = ConditionalBranch : r2857_4 +#-----| True -> Block 6 + +# 2859| Block 6 +# 2859| r2859_1(glval) = VariableAddress[x] : +# 2859| r2859_2(int) = Load[x] : &:r2859_1, m2846_6 +# 2859| r2859_3(int) = Constant[0] : +# 2859| r2859_4(bool) = CompareGT : r2859_2, r2859_3 +# 2859| v2859_5(void) = ConditionalBranch : r2859_4 +#-----| True -> Block 7 + +# 2860| Block 7 +# 2860| v2860_1(void) = NoOp : +# 2846| v2846_11(void) = ReturnVoid : +# 2846| v2846_12(void) = AliasedUse : m2846_3 +# 2846| v2846_13(void) = ExitFunction : + +# 2846| void test_assert_in_template(short, int, unsigned int) +# 2846| Block 0 +# 2846| v2846_1(void) = EnterFunction : +# 2846| m2846_2(unknown) = AliasedDefinition : +# 2846| m2846_3(unknown) = InitializeNonLocal : +# 2846| m2846_4(unknown) = Chi : total:m2846_2, partial:m2846_3 +# 2846| r2846_5(glval) = VariableAddress[x] : +# 2846| m2846_6(short) = InitializeParameter[x] : &:r2846_5 +# 2846| r2846_7(glval) = VariableAddress[y] : +# 2846| m2846_8(int) = InitializeParameter[y] : &:r2846_7 +# 2846| r2846_9(glval) = VariableAddress[u] : +# 2846| m2846_10(unsigned int) = InitializeParameter[u] : &:r2846_9 +# 2847| r2847_1(glval) = VariableAddress[x] : +# 2847| r2847_2(short) = Load[x] : &:r2847_1, m2846_6 +# 2847| r2847_3(int) = Constant[0] : +# 2847| r2847_4(bool) = CompareGT : r2847_2, r2847_3 +# 2847| v2847_5(void) = ConditionalBranch : r2847_4 +#-----| True -> Block 1 + +# 2848| Block 1 +# 2848| r2848_1(int) = Constant[0] : +# 2848| r2848_2(glval) = VariableAddress[x] : +# 2848| r2848_3(short) = Load[x] : &:r2848_2, m2846_6 +# 2848| r2848_4(bool) = CompareLT : r2848_1, r2848_3 +# 2848| v2848_5(void) = ConditionalBranch : r2848_4 +#-----| True -> Block 2 + +# 2849| Block 2 +# 2849| r2849_1(glval) = VariableAddress[x] : +# 2849| r2849_2(short) = Load[x] : &:r2849_1, m2846_6 +# 2849| r2849_3(glval) = VariableAddress[y] : +# 2849| r2849_4(int) = Load[y] : &:r2849_3, m2846_8 +# 2849| r2849_5(bool) = CompareLT : r2849_2, r2849_4 +# 2849| v2849_6(void) = ConditionalBranch : r2849_5 +#-----| True -> Block 3 + +# 2851| Block 3 +# 2851| r2851_1(glval) = VariableAddress[x] : +# 2851| r2851_2(short) = Load[x] : &:r2851_1, m2846_6 +# 2851| r2851_3(int) = Constant[2] : +# 2851| r2851_4(bool) = CompareNE : r2851_2, r2851_3 +# 2851| v2851_5(void) = ConditionalBranch : r2851_4 +#-----| True -> Block 4 + +# 2853| Block 4 +# 2853| r2853_1(glval) = VariableAddress[u] : +# 2853| r2853_2(unsigned int) = Load[u] : &:r2853_1, m2846_10 +# 2853| r2853_3(glval) = VariableAddress[x] : +# 2853| r2853_4(short) = Load[x] : &:r2853_3, m2846_6 +# 2853| r2853_5(bool) = CompareLT : r2853_2, r2853_4 +# 2853| v2853_6(void) = ConditionalBranch : r2853_5 +#-----| True -> Block 5 + +# 2856| Block 5 +# 2856| r2856_1(glval) = VariableAddress[shadowed] : +# 2856| r2856_2(glval) = VariableAddress[x] : +# 2856| r2856_3(short) = Load[x] : &:r2856_2, m2846_6 +# 2856| r2856_4(int) = Convert : r2856_3 +# 2856| m2856_5(int) = Store[shadowed] : &:r2856_1, r2856_4 +# 2857| r2857_1(glval) = VariableAddress[shadowed] : +# 2857| r2857_2(int) = Load[shadowed] : &:r2857_1, m2856_5 +# 2857| r2857_3(int) = Constant[0] : +# 2857| r2857_4(bool) = CompareGT : r2857_2, r2857_3 +# 2857| v2857_5(void) = ConditionalBranch : r2857_4 +#-----| True -> Block 6 + +# 2859| Block 6 +# 2859| r2859_1(glval) = VariableAddress[x] : +# 2859| r2859_2(short) = Load[x] : &:r2859_1, m2846_6 +# 2859| r2859_3(int) = Constant[0] : +# 2859| r2859_4(bool) = CompareGT : r2859_2, r2859_3 +# 2859| v2859_5(void) = ConditionalBranch : r2859_4 +#-----| True -> Block 7 + +# 2860| Block 7 +# 2860| v2860_1(void) = NoOp : +# 2846| v2846_11(void) = ReturnVoid : +# 2846| v2846_12(void) = AliasedUse : m2846_3 +# 2846| v2846_13(void) = ExitFunction : + +# 2867| void (unnamed namespace)::complex_assertions(int, bool, int) +# 2867| Block 0 +# 2867| v2867_1(void) = EnterFunction : +# 2867| m2867_2(unknown) = AliasedDefinition : +# 2867| m2867_3(unknown) = InitializeNonLocal : +# 2867| m2867_4(unknown) = Chi : total:m2867_2, partial:m2867_3 +# 2867| r2867_5(glval) = VariableAddress[x] : +# 2867| m2867_6(int) = InitializeParameter[x] : &:r2867_5 +# 2867| r2867_7(glval) = VariableAddress[b] : +# 2867| m2867_8(bool) = InitializeParameter[b] : &:r2867_7 +# 2867| r2867_9(glval) = VariableAddress[max] : +# 2867| m2867_10(int) = InitializeParameter[max] : &:r2867_9 +# 2868| r2868_1(glval) = VariableAddress[y] : +# 2868| r2868_2(int) = Constant[0] : +# 2868| v2868_3(void) = Convert : r2868_2 +# 2868| r2868_4(glval) = VariableAddress[x] : +# 2868| r2868_5(int) = Load[x] : &:r2868_4, m2867_6 +# 2868| r2868_6(int) = CopyValue : r2868_5 +# 2868| m2868_7(int) = Store[y] : &:r2868_1, r2868_6 +# 2869| r2869_1(glval) = VariableAddress[z] : +# 2869| r2869_2(glval) = VariableAddress[b] : +# 2869| r2869_3(bool) = Load[b] : &:r2869_2, m2867_8 +# 2869| v2869_4(void) = ConditionalBranch : r2869_3 +#-----| False -> Block 5 +#-----| True -> Block 4 + +# 2867| Block 1 +# 2867| v2867_11(void) = AliasedUse : m2867_3 +# 2867| v2867_12(void) = ExitFunction : + +# 2867| Block 2 +# 2867| v2867_13(void) = Unwind : +#-----| Goto -> Block 1 + +# 2869| Block 3 +# 2869| m2869_5(int) = Phi : from 4:m2869_11, from 5:m2869_14 +# 2869| r2869_6(glval) = VariableAddress[#temp2869:17] : +# 2869| r2869_7(int) = Load[#temp2869:17] : &:r2869_6, m2869_5 +# 2869| m2869_8(int) = Store[z] : &:r2869_1, r2869_7 +# 2872| r2872_1(glval) = VariableAddress[#throw2872:13] : +# 2872| r2872_2(int) = Constant[41] : +# 2872| m2872_3(int) = Store[#throw2872:13] : &:r2872_1, r2872_2 +# 2872| v2872_4(void) = ThrowValue : &:r2872_1, m2872_3 +#-----| C++ Exception -> Block 6 + +# 2869| Block 4 +# 2869| r2869_9(int) = Constant[0] : +# 2869| r2869_10(glval) = VariableAddress[#temp2869:17] : +# 2869| m2869_11(int) = Store[#temp2869:17] : &:r2869_10, r2869_9 +#-----| Goto -> Block 3 + +# 2869| Block 5 +# 2869| r2869_12(int) = Constant[1] : +# 2869| r2869_13(glval) = VariableAddress[#temp2869:17] : +# 2869| m2869_14(int) = Store[#temp2869:17] : &:r2869_13, r2869_12 +#-----| Goto -> Block 3 + +# 2873| Block 6 +# 2873| v2873_1(void) = CatchByType[int] : +#-----| C++ Exception -> Block 2 +#-----| Goto -> Block 7 + +# 2873| Block 7 +# 2873| r2873_2(glval) = VariableAddress[c] : +# 2873| m2873_3(int) = InitializeParameter[c] : &:r2873_2 +# 2874| r2874_1(glval) = VariableAddress[c] : +# 2874| r2874_2(int) = Load[c] : &:r2874_1, m2873_3 +# 2874| r2874_3(int) = Constant[42] : +# 2874| r2874_4(bool) = CompareLT : r2874_2, r2874_3 +# 2874| v2874_5(void) = ConditionalBranch : r2874_4 +#-----| True -> Block 8 + +# 2875| Block 8 +# 2875| r2875_1(int) = Constant[0] : +# 2875| v2875_2(void) = Convert : r2875_1 +# 2878| r2878_1(int) = Constant[0] : +# 2878| v2878_2(void) = Convert : r2878_1 +# 2879| r2879_1(glval) = VariableAddress[shadowed] : +# 2879| m2879_2(int) = Uninitialized[shadowed] : &:r2879_1 +# 2882| r2882_1(glval) = VariableAddress[#throw2882:13] : +# 2882| r2882_2(int) = Constant[41] : +# 2882| m2882_3(int) = Store[#throw2882:13] : &:r2882_1, r2882_2 +# 2882| v2882_4(void) = ThrowValue : &:r2882_1, m2882_3 +#-----| C++ Exception -> Block 9 + +# 2883| Block 9 +# 2883| v2883_1(void) = CatchByType[int] : +#-----| C++ Exception -> Block 2 +#-----| Goto -> Block 10 + +# 2883| Block 10 +# 2883| r2883_2(glval) = VariableAddress[shadowed] : +# 2883| m2883_3(int) = InitializeParameter[shadowed] : &:r2883_2 +# 2884| r2884_1(int) = Constant[0] : +# 2884| v2884_2(void) = Convert : r2884_1 +# 2886| v2886_1(void) = NoOp : +# 2867| v2867_14(void) = ReturnVoid : +#-----| Goto -> Block 1 + ir23.cpp: # 1| bool consteval_1() # 1| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/assertion_variable_resolution.expected b/cpp/ql/test/library-tests/ir/ir/assertion_variable_resolution.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cpp/ql/test/library-tests/ir/ir/assertion_variable_resolution.ql b/cpp/ql/test/library-tests/ir/ir/assertion_variable_resolution.ql new file mode 100644 index 00000000000..09420b11c3b --- /dev/null +++ b/cpp/ql/test/library-tests/ir/ir/assertion_variable_resolution.ql @@ -0,0 +1,20 @@ +import cpp +import semmle.code.cpp.ir.IR +import semmle.code.cpp.ir.implementation.raw.internal.TranslatedAssertion +import utils.test.InlineExpectationsTest + +module Test implements TestSig { + string getARelevantTag() { result = "var" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(TranslatedAssertionVarAccess tava, Variable v | + v = tava.getVariable() and + location = tava.getLocation() and + tava.toString() = element and + tag = "var" and + value = v.getLocation().getStartLine().toString() + ":" + v.getName() + ) + } +} + +import MakeTest diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 99876f7e9a4..41494ec00b3 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -2823,4 +2823,67 @@ void vla_sizeof_test5(int len1, size_t len2) { size_t z = sizeof((*&tmp1)[1]); } +// Common definitions for assertions in release builds +#define assert(x) ((void)0) +#define __analysis_assume(x) + +void test_assert_simple(int x, int y, unsigned u, int shadowed) { + assert(x > 0); // $ var=2830:x + assert(0 < x); // $ var=2830:x + assert(x < y); // $ var=2830:x var=2830:y + + __analysis_assume(x != 2); // $ var=2830:x + + assert(u < x); // $ var=2830:u var=2830:x + + { + int shadowed = x; + assert(shadowed > 0); // no assertion generated since the variable is shadowed + } +} + +template +void test_assert_in_template(T x, int y, unsigned u) { + assert(x > 0); // $ var=2846:x + assert(0 < x); // $ var=2846:x + assert(x < y); // $ var=2846:x var=2846:y + + __analysis_assume(x != 2); // $ var=2846:x + + assert(u < x); // $ var=2846:u var=2846:x + + { + int shadowed = x; + assert(shadowed > 0); // $ var=2856:shadowed + } + assert(x> 0); // $ var=2846:x +} + +template void test_assert_in_template(int, int, unsigned); +template void test_assert_in_template(short, int, unsigned); +namespace { + int shadowed; + + void complex_assertions(int x, bool b, int max) { + int y = (assert(x > 0), x); // no assertion generated + int z = b ? (assert(x != 0), 0) : 1; // no assertion generated + + try { + throw 41; + } catch (int c) { + assert(c < 42); // $ var=2873:c + assert(shadowed < 42); // no assertion generated + } + + assert(shadowed > 0); // no assertion generated + int shadowed; + + try { + throw 41; + } catch (int shadowed) { + assert(shadowed < 42); // no assertion generated + } + } +} + // 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 94e18abb9df..03278f9aa72 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -18880,6 +18880,326 @@ ir.cpp: # 2821| v2821_9(void) = AliasedUse : ~m? # 2821| v2821_10(void) = ExitFunction : +# 2830| void test_assert_simple(int, int, unsigned int, int) +# 2830| Block 0 +# 2830| v2830_1(void) = EnterFunction : +# 2830| mu2830_2(unknown) = AliasedDefinition : +# 2830| mu2830_3(unknown) = InitializeNonLocal : +# 2830| r2830_4(glval) = VariableAddress[x] : +# 2830| mu2830_5(int) = InitializeParameter[x] : &:r2830_4 +# 2830| r2830_6(glval) = VariableAddress[y] : +# 2830| mu2830_7(int) = InitializeParameter[y] : &:r2830_6 +# 2830| r2830_8(glval) = VariableAddress[u] : +# 2830| mu2830_9(unsigned int) = InitializeParameter[u] : &:r2830_8 +# 2830| r2830_10(glval) = VariableAddress[shadowed] : +# 2830| mu2830_11(int) = InitializeParameter[shadowed] : &:r2830_10 +# 2831| r2831_1(glval) = VariableAddress[x] : +# 2831| r2831_2(int) = Load[x] : &:r2831_1, ~m? +# 2831| r2831_3(int) = Constant[0] : +# 2831| r2831_4(bool) = CompareGT : r2831_2, r2831_3 +# 2831| v2831_5(void) = ConditionalBranch : r2831_4 +#-----| True -> Block 1 + +# 2832| Block 1 +# 2832| r2832_1(int) = Constant[0] : +# 2832| r2832_2(glval) = VariableAddress[x] : +# 2832| r2832_3(int) = Load[x] : &:r2832_2, ~m? +# 2832| r2832_4(bool) = CompareLT : r2832_1, r2832_3 +# 2832| v2832_5(void) = ConditionalBranch : r2832_4 +#-----| True -> Block 2 + +# 2833| Block 2 +# 2833| r2833_1(glval) = VariableAddress[x] : +# 2833| r2833_2(int) = Load[x] : &:r2833_1, ~m? +# 2833| r2833_3(glval) = VariableAddress[y] : +# 2833| r2833_4(int) = Load[y] : &:r2833_3, ~m? +# 2833| r2833_5(bool) = CompareLT : r2833_2, r2833_4 +# 2833| v2833_6(void) = ConditionalBranch : r2833_5 +#-----| True -> Block 3 + +# 2835| Block 3 +# 2835| r2835_1(glval) = VariableAddress[x] : +# 2835| r2835_2(int) = Load[x] : &:r2835_1, ~m? +# 2835| r2835_3(int) = Constant[2] : +# 2835| r2835_4(bool) = CompareNE : r2835_2, r2835_3 +# 2835| v2835_5(void) = ConditionalBranch : r2835_4 +#-----| True -> Block 4 + +# 2837| Block 4 +# 2837| r2837_1(glval) = VariableAddress[u] : +# 2837| r2837_2(unsigned int) = Load[u] : &:r2837_1, ~m? +# 2837| r2837_3(glval) = VariableAddress[x] : +# 2837| r2837_4(int) = Load[x] : &:r2837_3, ~m? +# 2837| r2837_5(bool) = CompareLT : r2837_2, r2837_4 +# 2837| v2837_6(void) = ConditionalBranch : r2837_5 +#-----| True -> Block 5 + +# 2840| Block 5 +# 2840| r2840_1(glval) = VariableAddress[shadowed] : +# 2840| r2840_2(glval) = VariableAddress[x] : +# 2840| r2840_3(int) = Load[x] : &:r2840_2, ~m? +# 2840| mu2840_4(int) = Store[shadowed] : &:r2840_1, r2840_3 +# 2841| r2841_1(int) = Constant[0] : +# 2841| v2841_2(void) = Convert : r2841_1 +# 2843| v2843_1(void) = NoOp : +# 2830| v2830_12(void) = ReturnVoid : +# 2830| v2830_13(void) = AliasedUse : ~m? +# 2830| v2830_14(void) = ExitFunction : + +# 2846| void test_assert_in_template(int, int, unsigned int) +# 2846| Block 0 +# 2846| v2846_1(void) = EnterFunction : +# 2846| mu2846_2(unknown) = AliasedDefinition : +# 2846| mu2846_3(unknown) = InitializeNonLocal : +# 2846| r2846_4(glval) = VariableAddress[x] : +# 2846| mu2846_5(int) = InitializeParameter[x] : &:r2846_4 +# 2846| r2846_6(glval) = VariableAddress[y] : +# 2846| mu2846_7(int) = InitializeParameter[y] : &:r2846_6 +# 2846| r2846_8(glval) = VariableAddress[u] : +# 2846| mu2846_9(unsigned int) = InitializeParameter[u] : &:r2846_8 +# 2847| r2847_1(glval) = VariableAddress[x] : +# 2847| r2847_2(int) = Load[x] : &:r2847_1, ~m? +# 2847| r2847_3(int) = Constant[0] : +# 2847| r2847_4(bool) = CompareGT : r2847_2, r2847_3 +# 2847| v2847_5(void) = ConditionalBranch : r2847_4 +#-----| True -> Block 1 + +# 2848| Block 1 +# 2848| r2848_1(int) = Constant[0] : +# 2848| r2848_2(glval) = VariableAddress[x] : +# 2848| r2848_3(int) = Load[x] : &:r2848_2, ~m? +# 2848| r2848_4(bool) = CompareLT : r2848_1, r2848_3 +# 2848| v2848_5(void) = ConditionalBranch : r2848_4 +#-----| True -> Block 2 + +# 2849| Block 2 +# 2849| r2849_1(glval) = VariableAddress[x] : +# 2849| r2849_2(int) = Load[x] : &:r2849_1, ~m? +# 2849| r2849_3(glval) = VariableAddress[y] : +# 2849| r2849_4(int) = Load[y] : &:r2849_3, ~m? +# 2849| r2849_5(bool) = CompareLT : r2849_2, r2849_4 +# 2849| v2849_6(void) = ConditionalBranch : r2849_5 +#-----| True -> Block 3 + +# 2851| Block 3 +# 2851| r2851_1(glval) = VariableAddress[x] : +# 2851| r2851_2(int) = Load[x] : &:r2851_1, ~m? +# 2851| r2851_3(int) = Constant[2] : +# 2851| r2851_4(bool) = CompareNE : r2851_2, r2851_3 +# 2851| v2851_5(void) = ConditionalBranch : r2851_4 +#-----| True -> Block 4 + +# 2853| Block 4 +# 2853| r2853_1(glval) = VariableAddress[u] : +# 2853| r2853_2(unsigned int) = Load[u] : &:r2853_1, ~m? +# 2853| r2853_3(glval) = VariableAddress[x] : +# 2853| r2853_4(int) = Load[x] : &:r2853_3, ~m? +# 2853| r2853_5(bool) = CompareLT : r2853_2, r2853_4 +# 2853| v2853_6(void) = ConditionalBranch : r2853_5 +#-----| True -> Block 5 + +# 2856| Block 5 +# 2856| r2856_1(glval) = VariableAddress[shadowed] : +# 2856| r2856_2(glval) = VariableAddress[x] : +# 2856| r2856_3(int) = Load[x] : &:r2856_2, ~m? +# 2856| mu2856_4(int) = Store[shadowed] : &:r2856_1, r2856_3 +# 2857| r2857_1(glval) = VariableAddress[shadowed] : +# 2857| r2857_2(int) = Load[shadowed] : &:r2857_1, ~m? +# 2857| r2857_3(int) = Constant[0] : +# 2857| r2857_4(bool) = CompareGT : r2857_2, r2857_3 +# 2857| v2857_5(void) = ConditionalBranch : r2857_4 +#-----| True -> Block 6 + +# 2859| Block 6 +# 2859| r2859_1(glval) = VariableAddress[x] : +# 2859| r2859_2(int) = Load[x] : &:r2859_1, ~m? +# 2859| r2859_3(int) = Constant[0] : +# 2859| r2859_4(bool) = CompareGT : r2859_2, r2859_3 +# 2859| v2859_5(void) = ConditionalBranch : r2859_4 +#-----| True -> Block 7 + +# 2860| Block 7 +# 2860| v2860_1(void) = NoOp : +# 2846| v2846_10(void) = ReturnVoid : +# 2846| v2846_11(void) = AliasedUse : ~m? +# 2846| v2846_12(void) = ExitFunction : + +# 2846| void test_assert_in_template(short, int, unsigned int) +# 2846| Block 0 +# 2846| v2846_1(void) = EnterFunction : +# 2846| mu2846_2(unknown) = AliasedDefinition : +# 2846| mu2846_3(unknown) = InitializeNonLocal : +# 2846| r2846_4(glval) = VariableAddress[x] : +# 2846| mu2846_5(short) = InitializeParameter[x] : &:r2846_4 +# 2846| r2846_6(glval) = VariableAddress[y] : +# 2846| mu2846_7(int) = InitializeParameter[y] : &:r2846_6 +# 2846| r2846_8(glval) = VariableAddress[u] : +# 2846| mu2846_9(unsigned int) = InitializeParameter[u] : &:r2846_8 +# 2847| r2847_1(glval) = VariableAddress[x] : +# 2847| r2847_2(short) = Load[x] : &:r2847_1, ~m? +# 2847| r2847_3(int) = Constant[0] : +# 2847| r2847_4(bool) = CompareGT : r2847_2, r2847_3 +# 2847| v2847_5(void) = ConditionalBranch : r2847_4 +#-----| True -> Block 1 + +# 2848| Block 1 +# 2848| r2848_1(int) = Constant[0] : +# 2848| r2848_2(glval) = VariableAddress[x] : +# 2848| r2848_3(short) = Load[x] : &:r2848_2, ~m? +# 2848| r2848_4(bool) = CompareLT : r2848_1, r2848_3 +# 2848| v2848_5(void) = ConditionalBranch : r2848_4 +#-----| True -> Block 2 + +# 2849| Block 2 +# 2849| r2849_1(glval) = VariableAddress[x] : +# 2849| r2849_2(short) = Load[x] : &:r2849_1, ~m? +# 2849| r2849_3(glval) = VariableAddress[y] : +# 2849| r2849_4(int) = Load[y] : &:r2849_3, ~m? +# 2849| r2849_5(bool) = CompareLT : r2849_2, r2849_4 +# 2849| v2849_6(void) = ConditionalBranch : r2849_5 +#-----| True -> Block 3 + +# 2851| Block 3 +# 2851| r2851_1(glval) = VariableAddress[x] : +# 2851| r2851_2(short) = Load[x] : &:r2851_1, ~m? +# 2851| r2851_3(int) = Constant[2] : +# 2851| r2851_4(bool) = CompareNE : r2851_2, r2851_3 +# 2851| v2851_5(void) = ConditionalBranch : r2851_4 +#-----| True -> Block 4 + +# 2853| Block 4 +# 2853| r2853_1(glval) = VariableAddress[u] : +# 2853| r2853_2(unsigned int) = Load[u] : &:r2853_1, ~m? +# 2853| r2853_3(glval) = VariableAddress[x] : +# 2853| r2853_4(short) = Load[x] : &:r2853_3, ~m? +# 2853| r2853_5(bool) = CompareLT : r2853_2, r2853_4 +# 2853| v2853_6(void) = ConditionalBranch : r2853_5 +#-----| True -> Block 5 + +# 2856| Block 5 +# 2856| r2856_1(glval) = VariableAddress[shadowed] : +# 2856| r2856_2(glval) = VariableAddress[x] : +# 2856| r2856_3(short) = Load[x] : &:r2856_2, ~m? +# 2856| r2856_4(int) = Convert : r2856_3 +# 2856| mu2856_5(int) = Store[shadowed] : &:r2856_1, r2856_4 +# 2857| r2857_1(glval) = VariableAddress[shadowed] : +# 2857| r2857_2(int) = Load[shadowed] : &:r2857_1, ~m? +# 2857| r2857_3(int) = Constant[0] : +# 2857| r2857_4(bool) = CompareGT : r2857_2, r2857_3 +# 2857| v2857_5(void) = ConditionalBranch : r2857_4 +#-----| True -> Block 6 + +# 2859| Block 6 +# 2859| r2859_1(glval) = VariableAddress[x] : +# 2859| r2859_2(short) = Load[x] : &:r2859_1, ~m? +# 2859| r2859_3(int) = Constant[0] : +# 2859| r2859_4(bool) = CompareGT : r2859_2, r2859_3 +# 2859| v2859_5(void) = ConditionalBranch : r2859_4 +#-----| True -> Block 7 + +# 2860| Block 7 +# 2860| v2860_1(void) = NoOp : +# 2846| v2846_10(void) = ReturnVoid : +# 2846| v2846_11(void) = AliasedUse : ~m? +# 2846| v2846_12(void) = ExitFunction : + +# 2867| void (unnamed namespace)::complex_assertions(int, bool, int) +# 2867| Block 0 +# 2867| v2867_1(void) = EnterFunction : +# 2867| mu2867_2(unknown) = AliasedDefinition : +# 2867| mu2867_3(unknown) = InitializeNonLocal : +# 2867| r2867_4(glval) = VariableAddress[x] : +# 2867| mu2867_5(int) = InitializeParameter[x] : &:r2867_4 +# 2867| r2867_6(glval) = VariableAddress[b] : +# 2867| mu2867_7(bool) = InitializeParameter[b] : &:r2867_6 +# 2867| r2867_8(glval) = VariableAddress[max] : +# 2867| mu2867_9(int) = InitializeParameter[max] : &:r2867_8 +# 2868| r2868_1(glval) = VariableAddress[y] : +# 2868| r2868_2(int) = Constant[0] : +# 2868| v2868_3(void) = Convert : r2868_2 +# 2868| r2868_4(glval) = VariableAddress[x] : +# 2868| r2868_5(int) = Load[x] : &:r2868_4, ~m? +# 2868| r2868_6(int) = CopyValue : r2868_5 +# 2868| mu2868_7(int) = Store[y] : &:r2868_1, r2868_6 +# 2869| r2869_1(glval) = VariableAddress[z] : +# 2869| r2869_2(glval) = VariableAddress[b] : +# 2869| r2869_3(bool) = Load[b] : &:r2869_2, ~m? +# 2869| v2869_4(void) = ConditionalBranch : r2869_3 +#-----| False -> Block 5 +#-----| True -> Block 4 + +# 2867| Block 1 +# 2867| v2867_10(void) = AliasedUse : ~m? +# 2867| v2867_11(void) = ExitFunction : + +# 2867| Block 2 +# 2867| v2867_12(void) = Unwind : +#-----| Goto -> Block 1 + +# 2869| Block 3 +# 2869| r2869_5(glval) = VariableAddress[#temp2869:17] : +# 2869| r2869_6(int) = Load[#temp2869:17] : &:r2869_5, ~m? +# 2869| mu2869_7(int) = Store[z] : &:r2869_1, r2869_6 +# 2872| r2872_1(glval) = VariableAddress[#throw2872:13] : +# 2872| r2872_2(int) = Constant[41] : +# 2872| mu2872_3(int) = Store[#throw2872:13] : &:r2872_1, r2872_2 +# 2872| v2872_4(void) = ThrowValue : &:r2872_1, ~m? +#-----| C++ Exception -> Block 6 + +# 2869| Block 4 +# 2869| r2869_8(int) = Constant[0] : +# 2869| r2869_9(glval) = VariableAddress[#temp2869:17] : +# 2869| mu2869_10(int) = Store[#temp2869:17] : &:r2869_9, r2869_8 +#-----| Goto -> Block 3 + +# 2869| Block 5 +# 2869| r2869_11(int) = Constant[1] : +# 2869| r2869_12(glval) = VariableAddress[#temp2869:17] : +# 2869| mu2869_13(int) = Store[#temp2869:17] : &:r2869_12, r2869_11 +#-----| Goto -> Block 3 + +# 2873| Block 6 +# 2873| v2873_1(void) = CatchByType[int] : +#-----| C++ Exception -> Block 2 +#-----| Goto -> Block 7 + +# 2873| Block 7 +# 2873| r2873_2(glval) = VariableAddress[c] : +# 2873| mu2873_3(int) = InitializeParameter[c] : &:r2873_2 +# 2874| r2874_1(glval) = VariableAddress[c] : +# 2874| r2874_2(int) = Load[c] : &:r2874_1, ~m? +# 2874| r2874_3(int) = Constant[42] : +# 2874| r2874_4(bool) = CompareLT : r2874_2, r2874_3 +# 2874| v2874_5(void) = ConditionalBranch : r2874_4 +#-----| True -> Block 8 + +# 2875| Block 8 +# 2875| r2875_1(int) = Constant[0] : +# 2875| v2875_2(void) = Convert : r2875_1 +# 2878| r2878_1(int) = Constant[0] : +# 2878| v2878_2(void) = Convert : r2878_1 +# 2879| r2879_1(glval) = VariableAddress[shadowed] : +# 2879| mu2879_2(int) = Uninitialized[shadowed] : &:r2879_1 +# 2882| r2882_1(glval) = VariableAddress[#throw2882:13] : +# 2882| r2882_2(int) = Constant[41] : +# 2882| mu2882_3(int) = Store[#throw2882:13] : &:r2882_1, r2882_2 +# 2882| v2882_4(void) = ThrowValue : &:r2882_1, ~m? +#-----| C++ Exception -> Block 9 + +# 2883| Block 9 +# 2883| v2883_1(void) = CatchByType[int] : +#-----| C++ Exception -> Block 2 +#-----| Goto -> Block 10 + +# 2883| Block 10 +# 2883| r2883_2(glval) = VariableAddress[shadowed] : +# 2883| mu2883_3(int) = InitializeParameter[shadowed] : &:r2883_2 +# 2884| r2884_1(int) = Constant[0] : +# 2884| v2884_2(void) = Convert : r2884_1 +# 2886| v2886_1(void) = NoOp : +# 2867| v2867_13(void) = ReturnVoid : +#-----| Goto -> Block 1 + ir23.cpp: # 1| bool consteval_1() # 1| Block 0 diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 6f9460e613c..029e03a4c9e 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.57 + +No user-facing changes. + ## 1.7.56 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.57.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.57.md new file mode 100644 index 00000000000..5d7f99bf24b --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.57.md @@ -0,0 +1,3 @@ +## 1.7.57 + +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 c228b5e0e71..4b2fd88d6a3 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.56 +lastReleaseVersion: 1.7.57 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 2e3b6a3a72d..59e35f8f8a2 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.57-dev +version: 1.7.58-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 6f9460e613c..029e03a4c9e 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.57 + +No user-facing changes. + ## 1.7.56 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.57.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.57.md new file mode 100644 index 00000000000..5d7f99bf24b --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.57.md @@ -0,0 +1,3 @@ +## 1.7.57 + +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 c228b5e0e71..4b2fd88d6a3 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.56 +lastReleaseVersion: 1.7.57 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 48e68f99dfa..a37381968ef 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.57-dev +version: 1.7.58-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 346d48fca29..371e10c370a 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,22 @@ +## 5.4.5 + +### Minor Analysis Improvements + +* When a code-scanning configuration specifies the `paths:` and/or `paths-ignore:` settings, these are now taken into account by the C# extractor's search for `.config`, `.props`, XML and project files. +* Updated the generated .NET “models as data” runtime models to cover .NET 10. +* C# 14: Support for *implicit* span conversions in the QL library. +* Basic extractor support for .NET 10 is now available. Extraction is supported for .NET 10 projects in both traced mode and `build mode: none`. However, code that uses language features new to C# 14 is not yet fully supported for extraction and analysis. +* Added autobuilder and `build-mode: none` support for `.slnx` solution files. +* In `build mode: none`, .NET 10 is now used by default unless a specific .NET version is specified elsewhere. +* Added implicit reads of `System.Collections.Generic.KeyValuePair.Value` at taint-tracking sinks and at inputs to additional taint steps. As a result, taint-tracking queries will now produce more results when a container is tainted. + +### Bug Fixes + +* Fixed two issues affecting build mode `none`: + * Corrected version sorting logic when detecting the newest .NET framework to use. + * Improved stability for .NET 10 compatibility. +* Fixed an issue where compiler-generated files were not being extracted. The extractor now runs after compilation completes to ensure all generated files are properly analyzed. + ## 5.4.4 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/2025-12-03-implicit-map-value-reads.md b/csharp/ql/lib/change-notes/2025-12-03-implicit-map-value-reads.md deleted file mode 100644 index 2b7f47fe98d..00000000000 --- a/csharp/ql/lib/change-notes/2025-12-03-implicit-map-value-reads.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added implicit reads of `System.Collections.Generic.KeyValuePair.Value` at taint-tracking sinks and at inputs to additional taint steps. As a result, taint-tracking queries will now produce more results when a container is tainted. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2025-12-03-run-tracer-after-compilation.md b/csharp/ql/lib/change-notes/2025-12-03-run-tracer-after-compilation.md deleted file mode 100644 index d7dd475cb0b..00000000000 --- a/csharp/ql/lib/change-notes/2025-12-03-run-tracer-after-compilation.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed an issue where compiler-generated files were not being extracted. The extractor now runs after compilation completes to ensure all generated files are properly analyzed. diff --git a/csharp/ql/lib/change-notes/2025-12-04-bmn-dotnet-fixes.md b/csharp/ql/lib/change-notes/2025-12-04-bmn-dotnet-fixes.md deleted file mode 100644 index af1f1b91966..00000000000 --- a/csharp/ql/lib/change-notes/2025-12-04-bmn-dotnet-fixes.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: fix ---- -* Fixed two issues affecting build mode `none`: - * Corrected version sorting logic when detecting the newest .NET framework to use. - * Improved stability for .NET 10 compatibility. diff --git a/csharp/ql/lib/change-notes/2025-12-09-bmn-default-dotnet.md b/csharp/ql/lib/change-notes/2025-12-09-bmn-default-dotnet.md deleted file mode 100644 index 832e6069ee0..00000000000 --- a/csharp/ql/lib/change-notes/2025-12-09-bmn-default-dotnet.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* In `build mode: none`, .NET 10 is now used by default unless a specific .NET version is specified elsewhere. diff --git a/csharp/ql/lib/change-notes/2025-12-11-net10-basic-support.md b/csharp/ql/lib/change-notes/2025-12-11-net10-basic-support.md deleted file mode 100644 index d15a55a7eb4..00000000000 --- a/csharp/ql/lib/change-notes/2025-12-11-net10-basic-support.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Basic extractor support for .NET 10 is now available. Extraction is supported for .NET 10 projects in both traced mode and `build mode: none`. However, code that uses language features new to C# 14 is not yet fully supported for extraction and analysis. diff --git a/csharp/ql/lib/change-notes/2025-12-11-slnx-support.md b/csharp/ql/lib/change-notes/2025-12-11-slnx-support.md deleted file mode 100644 index 9ca9b989812..00000000000 --- a/csharp/ql/lib/change-notes/2025-12-11-slnx-support.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added autobuilder and `build-mode: none` support for `.slnx` solution files. diff --git a/csharp/ql/lib/change-notes/2025-12-18-implicit-span-conversions.md b/csharp/ql/lib/change-notes/2025-12-18-implicit-span-conversions.md deleted file mode 100644 index 0c2f54d2092..00000000000 --- a/csharp/ql/lib/change-notes/2025-12-18-implicit-span-conversions.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C# 14: Support for *implicit* span conversions in the QL library. diff --git a/csharp/ql/lib/change-notes/2026-01-05-net-runtime-models.md b/csharp/ql/lib/change-notes/2026-01-05-net-runtime-models.md deleted file mode 100644 index 58b27f1893f..00000000000 --- a/csharp/ql/lib/change-notes/2026-01-05-net-runtime-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Updated the generated .NET “models as data” runtime models to cover .NET 10. diff --git a/csharp/ql/lib/change-notes/2026-01-06-paths-directives-ancillary-data.md b/csharp/ql/lib/change-notes/2026-01-06-paths-directives-ancillary-data.md deleted file mode 100644 index ac96e579147..00000000000 --- a/csharp/ql/lib/change-notes/2026-01-06-paths-directives-ancillary-data.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* When a code-scanning configuration specifies the `paths:` and/or `paths-ignore:` settings, these are now taken into account by the C# extractor's search for `.config`, `.props`, XML and project files. diff --git a/csharp/ql/lib/change-notes/2026-01-14-null-conditional-assignments.md b/csharp/ql/lib/change-notes/2026-01-14-null-conditional-assignments.md new file mode 100644 index 00000000000..ebce4c187e0 --- /dev/null +++ b/csharp/ql/lib/change-notes/2026-01-14-null-conditional-assignments.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# 14: Support for null-conditional assignments (such as `c?.Prop = p`). Furthermore, the `MaybeNullExpr` class now takes null-conditional access (such as `?.`) into account when modeling potential null values. diff --git a/csharp/ql/lib/change-notes/released/5.4.5.md b/csharp/ql/lib/change-notes/released/5.4.5.md new file mode 100644 index 00000000000..a084df5f200 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.4.5.md @@ -0,0 +1,18 @@ +## 5.4.5 + +### Minor Analysis Improvements + +* When a code-scanning configuration specifies the `paths:` and/or `paths-ignore:` settings, these are now taken into account by the C# extractor's search for `.config`, `.props`, XML and project files. +* Updated the generated .NET “models as data” runtime models to cover .NET 10. +* C# 14: Support for *implicit* span conversions in the QL library. +* Basic extractor support for .NET 10 is now available. Extraction is supported for .NET 10 projects in both traced mode and `build mode: none`. However, code that uses language features new to C# 14 is not yet fully supported for extraction and analysis. +* Added autobuilder and `build-mode: none` support for `.slnx` solution files. +* In `build mode: none`, .NET 10 is now used by default unless a specific .NET version is specified elsewhere. +* Added implicit reads of `System.Collections.Generic.KeyValuePair.Value` at taint-tracking sinks and at inputs to additional taint steps. As a result, taint-tracking queries will now produce more results when a container is tainted. + +### Bug Fixes + +* Fixed two issues affecting build mode `none`: + * Corrected version sorting logic when detecting the newest .NET framework to use. + * Improved stability for .NET 10 compatibility. +* Fixed an issue where compiler-generated files were not being extracted. The extractor now runs after compilation completes to ensure all generated files are properly analyzed. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index cb0e3d32e76..e79e40bd1d8 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.4.4 +lastReleaseVersion: 5.4.5 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index a524b9cefbc..235030e2601 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.4.5-dev +version: 5.4.6-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp 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 96fe5703090..6be79a17be2 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll @@ -429,7 +429,7 @@ module Expressions { not this instanceof ObjectCreation and not this instanceof ArrayCreation and not this instanceof QualifiedWriteAccess and - not this instanceof AccessorWrite and + not this instanceof QualifiedAccessorWrite and not this instanceof NoNodeExpr and not this instanceof SwitchExpr and not this instanceof SwitchCaseExpr and @@ -446,21 +446,29 @@ module Expressions { } /** - * A qualified write access. In a qualified write access, the access itself is - * not evaluated, only the qualifier and the indexer arguments (if any). + * A qualified write access. + * + * The successor declaration in `QualifiedAccessorWrite` ensures that the access itself + * is evaluated after the qualifier and the indexer arguments (if any) + * and the right hand side of the assignment. + * + * When a qualified write access is used as an `out/ref` argument, the access itself is evaluated immediately. */ private class QualifiedWriteAccess extends ControlFlowTree instanceof WriteAccess, QualifiableExpr { QualifiedWriteAccess() { - this.hasQualifier() - or - // Member initializers like - // ```csharp - // new Dictionary() { [0] = "Zero", [1] = "One", [2] = "Two" } - // ``` - // need special treatment, because the accesses `[0]`, `[1]`, and `[2]` - // have no qualifier. - this = any(MemberInitializer mi).getLValue() + ( + this.hasQualifier() + or + // Member initializers like + // ```csharp + // new Dictionary() { [0] = "Zero", [1] = "One", [2] = "Two" } + // ``` + // need special treatment, because the accesses `[0]`, `[1]`, and `[2]` + // have no qualifier. + this = any(MemberInitializer mi).getLValue() + ) and + not exists(AssignableDefinitions::OutRefDefinition def | def.getTargetAccess() = this) } final override predicate propagatesAbnormal(AstNode child) { child = getExprChild(this, _) } @@ -470,25 +478,25 @@ module Expressions { final override predicate last(AstNode last, Completion c) { // Skip the access in a qualified write access last(getLastExprChild(this), last, c) + or + // Qualifier exits with a null completion + super.isConditional() and + last(super.getQualifier(), last, c) and + c.(NullnessCompletion).isNull() } final override predicate succ(AstNode pred, AstNode succ, Completion c) { exists(int i | last(getExprChild(this, i), pred, c) and c instanceof NormalCompletion and + (if i = 0 then not c.(NullnessCompletion).isNull() else any()) and first(getExprChild(this, i + 1), succ) ) } } - private class StatOrDynAccessorCall_ = - @dynamic_member_access_expr or @dynamic_element_access_expr or @call_access_expr; - - /** A normal or a (potential) dynamic call to an accessor. */ - private class StatOrDynAccessorCall extends Expr, StatOrDynAccessorCall_ { } - /** - * An expression that writes via an accessor call, for example `x.Prop = 0`, + * An expression that writes via a qualifiable expression, for example `x.Prop = 0`, * where `Prop` is a property. * * Accessor writes need special attention, because we need to model the fact @@ -498,13 +506,21 @@ module Expressions { * ```csharp * x -> 0 -> set_Prop -> x.Prop = 0 * ``` + * + * For consistency, control flow is implemented the same way for other qualified writes. + * For example, `x.Field = 0`, where `Field` is a field, we want a CFG that looks like + * + * ```csharp + * x -> 0 -> x.Field -> x.Field = 0 + * ``` */ - class AccessorWrite extends PostOrderTree instanceof Expr { + private class QualifiedAccessorWrite extends PostOrderTree instanceof Expr { AssignableDefinition def; - AccessorWrite() { + QualifiedAccessorWrite() { def.getExpr() = this and - def.getTargetAccess().(WriteAccess) instanceof StatOrDynAccessorCall and + def.getTargetAccess().(WriteAccess) instanceof QualifiableExpr and + not def instanceof AssignableDefinitions::OutRefDefinition and not this instanceof AssignOperationWithExpandedAssignment } @@ -512,10 +528,11 @@ module Expressions { * Gets the `i`th accessor being called in this write. More than one call * can happen in tuple assignments. */ - StatOrDynAccessorCall getCall(int i) { + QualifiableExpr getAccess(int i) { result = rank[i + 1](AssignableDefinitions::TupleAssignmentDefinition tdef | - tdef.getExpr() = this and tdef.getTargetAccess() instanceof StatOrDynAccessorCall + tdef.getExpr() = this and + tdef.getTargetAccess() instanceof QualifiableExpr | tdef order by tdef.getEvaluationOrder() ).getTargetAccess() @@ -528,7 +545,13 @@ module Expressions { final override predicate propagatesAbnormal(AstNode child) { child = getExprChild(this, _) or - child = this.getCall(_) + child = this.getAccess(_) + } + + final override predicate last(AstNode last, Completion c) { + PostOrderTree.super.last(last, c) + or + last(getExprChild(this, 0), last, c) and c.(NullnessCompletion).isNull() } final override predicate first(AstNode first) { first(getExprChild(this, 0), first) } @@ -538,24 +561,25 @@ module Expressions { exists(int i | last(getExprChild(this, i), pred, c) and c instanceof NormalCompletion and + (if i = 0 then not c.(NullnessCompletion).isNull() else any()) and first(getExprChild(this, i + 1), succ) ) or // Flow from last element of last child to first accessor call last(getLastExprChild(this), pred, c) and - succ = this.getCall(0) and + succ = this.getAccess(0) and c instanceof NormalCompletion or // Flow from one call to the next - exists(int i | pred = this.getCall(i) | - succ = this.getCall(i + 1) and + exists(int i | pred = this.getAccess(i) | + succ = this.getAccess(i + 1) and c.isValidFor(pred) and c instanceof NormalCompletion ) or // Post-order: flow from last call to element itself - exists(int last | last = max(int i | exists(this.getCall(i))) | - pred = this.getCall(last) and + exists(int last | last = max(int i | exists(this.getAccess(i))) | + pred = this.getAccess(last) and succ = this and c.isValidFor(pred) and c instanceof NormalCompletion @@ -704,7 +728,9 @@ module Expressions { private class ConditionallyQualifiedExpr extends PostOrderTree instanceof QualifiableExpr { private Expr qualifier; - ConditionallyQualifiedExpr() { this.isConditional() and qualifier = getExprChild(this, 0) } + ConditionallyQualifiedExpr() { + this.isConditional() and qualifier = getExprChild(this, 0) and not this instanceof WriteAccess + } final override predicate propagatesAbnormal(AstNode child) { child = qualifier } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll index 6a211e71f45..c7ac34d3d01 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll @@ -43,6 +43,13 @@ private Expr maybeNullExpr(Expr reason) { ) or result.(NullCoalescingExpr).getRightOperand() = maybeNullExpr(reason) + or + result = + any(QualifiableExpr qe | + qe.isConditional() and + reason = qe.getQualifier() and + not qe instanceof AssignableWrite + ) } /** An expression that may be `null`. */ diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 3ac11a9af34..b3c3276ae5c 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,14 @@ +## 1.6.0 + +### Query Metadata Changes + +* Updated the `name`, `description`, and alert message of `cs/path-combine` to have more details about why it's a problem. + +### Minor Analysis Improvements + +* Added `NHibernate.ISession.CreateSQLQuery`, `NHibernate.IStatelessSession.CreateSQLQuery` and `NHibernate.Impl.AbstractSessionImpl.CreateSQLQuery` as SQL injection sinks. +* The `Missing cross-site request forgery token validation` query was extended to support ASP.NET Core. + ## 1.5.4 No user-facing changes. diff --git a/csharp/ql/src/change-notes/2025-12-08-csrf-aspnetcore.md b/csharp/ql/src/change-notes/2025-12-08-csrf-aspnetcore.md deleted file mode 100644 index e4a1f64ef14..00000000000 --- a/csharp/ql/src/change-notes/2025-12-08-csrf-aspnetcore.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `Missing cross-site request forgery token validation` query was extended to support ASP.NET Core. diff --git a/csharp/ql/src/change-notes/2025-12-11-nhibernate-sql-sinks.md b/csharp/ql/src/change-notes/2025-12-11-nhibernate-sql-sinks.md deleted file mode 100644 index c2ce476dd7a..00000000000 --- a/csharp/ql/src/change-notes/2025-12-11-nhibernate-sql-sinks.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added `NHibernate.ISession.CreateSQLQuery`, `NHibernate.IStatelessSession.CreateSQLQuery` and `NHibernate.Impl.AbstractSessionImpl.CreateSQLQuery` as SQL injection sinks. \ No newline at end of file diff --git a/csharp/ql/src/change-notes/2025-12-16-path-combine-metadata.md b/csharp/ql/src/change-notes/2025-12-16-path-combine-metadata.md deleted file mode 100644 index 23c74d27398..00000000000 --- a/csharp/ql/src/change-notes/2025-12-16-path-combine-metadata.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: queryMetadata ---- -* Updated the `name`, `description`, and alert message of `cs/path-combine` to have more details about why it's a problem. diff --git a/csharp/ql/src/change-notes/released/1.6.0.md b/csharp/ql/src/change-notes/released/1.6.0.md new file mode 100644 index 00000000000..36b3c6574ea --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.6.0.md @@ -0,0 +1,10 @@ +## 1.6.0 + +### Query Metadata Changes + +* Updated the `name`, `description`, and alert message of `cs/path-combine` to have more details about why it's a problem. + +### Minor Analysis Improvements + +* Added `NHibernate.ISession.CreateSQLQuery`, `NHibernate.IStatelessSession.CreateSQLQuery` and `NHibernate.Impl.AbstractSessionImpl.CreateSQLQuery` as SQL injection sinks. +* The `Missing cross-site request forgery token validation` query was extended to support ASP.NET Core. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index c216828ee1c..c4f0b07d533 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.4 +lastReleaseVersion: 1.6.0 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index b54e4d5c367..2ea09521187 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.5.5-dev +version: 1.6.1-dev groups: - csharp - queries diff --git a/csharp/ql/test/library-tests/controlflow/graph/Assignments.cs b/csharp/ql/test/library-tests/controlflow/graph/Assignments.cs index bb8a645427e..e967904c80c 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Assignments.cs +++ b/csharp/ql/test/library-tests/controlflow/graph/Assignments.cs @@ -21,4 +21,26 @@ class Assignments delegate void EventHandler(object sender, object e); event EventHandler Event; + int IntField; + string StringField; + + void SetParamSingle(out int x) + { + x = 42; + } + + void SetParamMulti(out int x, object o, out string y) + { + x = 42; + y = "Hello"; + } + + void M2() + { + int x1; + SetParamSingle(out x1); + SetParamSingle(out IntField); + SetParamMulti(out var y, null, out StringField); + SetParamMulti(out IntField, null, out StringField); + } } diff --git a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected index 99d89a29c13..30f2b105155 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected @@ -3,14 +3,14 @@ | AccessorCalls.cs:5:33:5:35 | enter set_Item | AccessorCalls.cs:5:33:5:35 | exit set_Item | 4 | | AccessorCalls.cs:7:32:7:34 | enter add_Event | AccessorCalls.cs:7:32:7:34 | exit add_Event | 4 | | AccessorCalls.cs:7:40:7:45 | enter remove_Event | AccessorCalls.cs:7:40:7:45 | exit remove_Event | 4 | -| AccessorCalls.cs:10:10:10:11 | enter M1 | AccessorCalls.cs:10:10:10:11 | exit M1 | 33 | -| AccessorCalls.cs:19:10:19:11 | enter M2 | AccessorCalls.cs:19:10:19:11 | exit M2 | 41 | +| AccessorCalls.cs:10:10:10:11 | enter M1 | AccessorCalls.cs:10:10:10:11 | exit M1 | 34 | +| AccessorCalls.cs:19:10:19:11 | enter M2 | AccessorCalls.cs:19:10:19:11 | exit M2 | 42 | | AccessorCalls.cs:28:10:28:11 | enter M3 | AccessorCalls.cs:28:10:28:11 | exit M3 | 17 | | AccessorCalls.cs:35:10:35:11 | enter M4 | AccessorCalls.cs:35:10:35:11 | exit M4 | 20 | -| AccessorCalls.cs:42:10:42:11 | enter M5 | AccessorCalls.cs:42:10:42:11 | exit M5 | 33 | -| AccessorCalls.cs:49:10:49:11 | enter M6 | AccessorCalls.cs:49:10:49:11 | exit M6 | 42 | -| AccessorCalls.cs:56:10:56:11 | enter M7 | AccessorCalls.cs:56:10:56:11 | exit M7 | 24 | -| AccessorCalls.cs:61:10:61:11 | enter M8 | AccessorCalls.cs:61:10:61:11 | exit M8 | 30 | +| AccessorCalls.cs:42:10:42:11 | enter M5 | AccessorCalls.cs:42:10:42:11 | exit M5 | 34 | +| AccessorCalls.cs:49:10:49:11 | enter M6 | AccessorCalls.cs:49:10:49:11 | exit M6 | 43 | +| AccessorCalls.cs:56:10:56:11 | enter M7 | AccessorCalls.cs:56:10:56:11 | exit M7 | 25 | +| AccessorCalls.cs:61:10:61:11 | enter M8 | AccessorCalls.cs:61:10:61:11 | exit M8 | 31 | | AccessorCalls.cs:66:10:66:11 | enter M9 | AccessorCalls.cs:66:10:66:11 | exit M9 | 58 | | ArrayCreation.cs:1:7:1:19 | enter ArrayCreation | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation | 7 | | ArrayCreation.cs:3:11:3:12 | enter M1 | ArrayCreation.cs:3:11:3:12 | exit M1 | 5 | @@ -167,6 +167,9 @@ | Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | exit M | 34 | | Assignments.cs:14:18:14:35 | enter (...) => ... | Assignments.cs:14:18:14:35 | exit (...) => ... | 4 | | Assignments.cs:17:40:17:40 | enter + | Assignments.cs:17:40:17:40 | exit + | 6 | +| Assignments.cs:27:10:27:23 | enter SetParamSingle | Assignments.cs:27:10:27:23 | exit SetParamSingle | 7 | +| Assignments.cs:32:10:32:22 | enter SetParamMulti | Assignments.cs:32:10:32:22 | exit SetParamMulti | 10 | +| Assignments.cs:38:10:38:11 | enter M2 | Assignments.cs:38:10:38:11 | exit M2 | 28 | | BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | exit BreakInTry | 7 | | BreakInTry.cs:3:10:3:11 | enter M1 | BreakInTry.cs:7:33:7:36 | access to parameter args | 5 | | BreakInTry.cs:3:10:3:11 | exit M1 (normal) | BreakInTry.cs:3:10:3:11 | exit M1 | 2 | @@ -244,7 +247,30 @@ | ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:35:9:35:12 | access to property Prop | 8 | | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:32:10:32:11 | exit M8 | 2 | | ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:24 | call to method Out | 1 | -| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith | 8 | +| ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | exit get_Item | 6 | +| ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | exit set_Item | 4 | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | 4 | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | exit M9 | 2 | +| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:12:48:25 | ... = ... | 3 | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | 2 | +| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:12:49:32 | ... = ... | 3 | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | 2 | +| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:50:12:50:23 | ... = ... | 4 | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:16 | access to property Prop | 1 | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | 2 | +| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:51:18:51:31 | ... = ... | 3 | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:16 | access to property Prop | 1 | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | 2 | +| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:18:52:38 | ... = ... | 3 | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | 1 | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:20 | access to field IntField | 1 | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | 2 | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:12:53:25 | ... = ... | 4 | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | 1 | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | 1 | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | 2 | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:12:54:29 | ... = ... | 4 | +| ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | 8 | | Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | exit Conditions | 7 | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:5:13:5:15 | access to parameter inc | 4 | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | exit IncrOrDecr | 2 | @@ -490,8 +516,8 @@ | 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.cs:209:21:209:22 | access to parameter b3 | 3 | | 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:211:13:211:28 | ... = ... | 4 | -| Finally.cs:213:9:213:25 | ...; | Finally.cs:195:10:195:12 | exit M10 (normal) | 5 | +| Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:28 | ... = ... | 5 | +| Finally.cs:213:9:213:25 | ...; | Finally.cs:195:10:195:12 | exit M10 (normal) | 6 | | 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 | @@ -539,21 +565,21 @@ | Foreach.cs:36:10:36:11 | exit M6 (normal) | Foreach.cs:36:10:36:11 | exit M6 | 2 | | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | 1 | | Foreach.cs:38:26:38:26 | String x | Foreach.cs:39:11:39:11 | ; | 4 | -| Initializers.cs:3:7:3:18 | enter | Initializers.cs:3:7:3:18 | exit | 14 | +| Initializers.cs:3:7:3:18 | enter | Initializers.cs:3:7:3:18 | exit | 15 | | Initializers.cs:3:7:3:18 | enter Initializers | Initializers.cs:3:7:3:18 | exit Initializers | 4 | | Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | exit Initializers | 7 | | Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | exit Initializers | 7 | -| Initializers.cs:12:10:12:10 | enter M | Initializers.cs:12:10:12:10 | exit M | 22 | -| Initializers.cs:18:16:18:16 | enter H | Initializers.cs:18:16:18:16 | exit H | 5 | -| Initializers.cs:20:11:20:23 | enter | Initializers.cs:20:11:20:23 | exit | 9 | +| Initializers.cs:12:10:12:10 | enter M | Initializers.cs:12:10:12:10 | exit M | 23 | +| Initializers.cs:18:16:18:16 | enter H | Initializers.cs:18:16:18:16 | exit H | 6 | +| Initializers.cs:20:11:20:23 | enter | Initializers.cs:20:11:20:23 | exit | 11 | | Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:20:11:20:23 | exit NoConstructor | 7 | -| Initializers.cs:26:11:26:13 | enter | Initializers.cs:26:11:26:13 | exit | 6 | -| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | exit Sub | 11 | -| Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | exit Sub | 9 | -| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | exit Sub | 13 | +| Initializers.cs:26:11:26:13 | enter | Initializers.cs:26:11:26:13 | exit | 7 | +| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | exit Sub | 12 | +| Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | exit Sub | 10 | +| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | exit Sub | 14 | | Initializers.cs:39:7:39:23 | enter IndexInitializers | Initializers.cs:39:7:39:23 | exit IndexInitializers | 7 | | Initializers.cs:41:11:41:18 | enter Compound | Initializers.cs:41:11:41:18 | exit Compound | 7 | -| Initializers.cs:51:10:51:13 | enter Test | Initializers.cs:51:10:51:13 | exit Test | 105 | +| Initializers.cs:51:10:51:13 | enter Test | Initializers.cs:51:10:51:13 | exit Test | 116 | | LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling | 7 | | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:9:13:9:28 | ... == ... | 7 | | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:7:10:7:11 | exit M1 | 2 | @@ -629,7 +655,7 @@ | MultiImplementationA.cs:8:29:8:32 | null | MultiImplementationA.cs:8:16:8:16 | exit M (abnormal) | 3 | | MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationA.cs:11:7:11:8 | enter | 1 | | MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:11:7:11:8 | exit | 2 | -| MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:24:32:24:34 | ... = ... | 7 | +| MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:24:32:24:34 | ... = ... | 8 | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | exit get_Item (normal) | 2 | | MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationA.cs:14:31:14:31 | enter get_Item | 1 | | MultiImplementationA.cs:14:31:14:31 | exit get_Item | MultiImplementationA.cs:14:31:14:31 | exit get_Item | 1 | @@ -645,7 +671,7 @@ | MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:9:18:22 | exit M2 | 4 | | MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | enter C2 | 1 | | MultiImplementationA.cs:20:12:20:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | exit C2 | 1 | -| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | 9 | +| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | 10 | | MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationA.cs:21:12:21:13 | enter C2 | 1 | | MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | MultiImplementationA.cs:21:12:21:13 | exit C2 | 2 | | MultiImplementationA.cs:21:24:21:24 | 0 | MultiImplementationA.cs:21:27:21:29 | {...} | 3 | @@ -671,7 +697,7 @@ | MultiImplementationB.cs:4:25:4:37 | {...} | MultiImplementationA.cs:7:21:7:23 | exit get_P2 (normal) | 4 | | MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (normal) | 2 | | MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | exit M (normal) | 2 | -| MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationB.cs:22:32:22:34 | ... = ... | 7 | +| MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationB.cs:22:32:22:34 | ... = ... | 8 | | MultiImplementationB.cs:12:37:12:40 | null | MultiImplementationA.cs:14:31:14:31 | exit get_Item (abnormal) | 3 | | MultiImplementationB.cs:13:40:13:54 | {...} | MultiImplementationA.cs:15:36:15:38 | exit get_Item (abnormal) | 4 | | MultiImplementationB.cs:13:60:13:62 | {...} | MultiImplementationB.cs:13:60:13:62 | {...} | 1 | @@ -722,7 +748,7 @@ | NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:16:17:16:18 | "" | 5 | | NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:17:13:17:19 | (...) ... | 5 | | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:13:10:13:11 | exit M6 | 4 | -| PartialImplementationA.cs:1:15:1:21 | enter | PartialImplementationA.cs:1:15:1:21 | exit | 10 | +| PartialImplementationA.cs:1:15:1:21 | enter | PartialImplementationA.cs:1:15:1:21 | exit | 11 | | PartialImplementationA.cs:3:12:3:18 | enter Partial | PartialImplementationA.cs:3:12:3:18 | exit Partial | 7 | | PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | exit Partial | 7 | | Patterns.cs:3:7:3:14 | enter Patterns | Patterns.cs:3:7:3:14 | exit Patterns | 7 | @@ -1041,8 +1067,8 @@ | cflow.cs:127:32:127:57 | ... ? ... : ... | cflow.cs:127:19:127:21 | exit get_Prop | 4 | | cflow.cs:127:48:127:49 | "" | cflow.cs:127:48:127:49 | "" | 1 | | cflow.cs:127:53:127:57 | this access | cflow.cs:127:53:127:57 | access to field Field | 2 | -| cflow.cs:127:62:127:64 | enter set_Prop | cflow.cs:127:62:127:64 | exit set_Prop | 8 | -| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | exit ControlFlow | 11 | +| cflow.cs:127:62:127:64 | enter set_Prop | cflow.cs:127:62:127:64 | exit set_Prop | 9 | +| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | exit ControlFlow | 12 | | cflow.cs:134:5:134:15 | enter ControlFlow | cflow.cs:134:5:134:15 | exit ControlFlow | 9 | | cflow.cs:136:12:136:22 | enter ControlFlow | cflow.cs:136:12:136:22 | exit ControlFlow | 8 | | cflow.cs:138:40:138:40 | enter + | cflow.cs:138:40:138:40 | exit + | 9 | @@ -1104,7 +1130,7 @@ | cflow.cs:201:9:205:9 | {...} | cflow.cs:193:10:193:17 | exit Booleans (abnormal) | 5 | | cflow.cs:208:10:208:11 | enter Do | cflow.cs:210:9:221:36 | do ... while (...); | 3 | | cflow.cs:208:10:208:11 | exit Do (normal) | cflow.cs:208:10:208:11 | exit Do | 2 | -| cflow.cs:211:9:221:9 | {...} | cflow.cs:213:17:213:32 | ... > ... | 14 | +| cflow.cs:211:9:221:9 | {...} | cflow.cs:213:17:213:32 | ... > ... | 15 | | cflow.cs:214:13:216:13 | {...} | cflow.cs:215:17:215:25 | continue; | 2 | | cflow.cs:217:13:220:13 | if (...) ... | cflow.cs:217:17:217:32 | ... < ... | 6 | | cflow.cs:218:13:220:13 | {...} | cflow.cs:219:17:219:22 | break; | 2 | @@ -1112,7 +1138,7 @@ | cflow.cs:224:10:224:16 | enter Foreach | cflow.cs:226:27:226:64 | call to method Repeat | 5 | | cflow.cs:224:10:224:16 | exit Foreach (normal) | cflow.cs:224:10:224:16 | exit Foreach | 2 | | cflow.cs:226:9:237:9 | foreach (... ... in ...) ... | cflow.cs:226:9:237:9 | foreach (... ... in ...) ... | 1 | -| cflow.cs:226:22:226:22 | String x | cflow.cs:229:17:229:32 | ... > ... | 15 | +| cflow.cs:226:22:226:22 | String x | cflow.cs:229:17:229:32 | ... > ... | 16 | | cflow.cs:230:13:232:13 | {...} | cflow.cs:231:17:231:25 | continue; | 2 | | cflow.cs:233:13:236:13 | if (...) ... | cflow.cs:233:17:233:32 | ... < ... | 6 | | cflow.cs:234:13:236:13 | {...} | cflow.cs:235:17:235:22 | break; | 2 | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Condition.expected b/csharp/ql/test/library-tests/controlflow/graph/Condition.expected index 2c2f3dbb018..3ef1d481abe 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Condition.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Condition.expected @@ -91,6 +91,23 @@ conditionBlock | ConditionalAccess.cs:23:13:23:38 | Nullable j = ... | ConditionalAccess.cs:25:31:25:31 | access to local variable s | false | | ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:25:31:25:31 | access to local variable s | false | | ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:35:9:35:24 | call to method Out | false | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:48:24:48:25 | 42 | false | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:26:49:32 | "Hello" | false | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:13:50:13 | 0 | false | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:30:51:31 | 84 | false | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | false | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 | false | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:32:52:38 | "World" | false | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | false | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | false | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:20 | access to field IntField | false | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | false | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | false | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | false | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | false | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | false | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | false | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | false | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:6:13:6:16 | ...; | true | | Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:13:7:16 | [false] !... | true | | Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:13:7:16 | [true] !... | false | diff --git a/csharp/ql/test/library-tests/controlflow/graph/ConditionalAccess.cs b/csharp/ql/test/library-tests/controlflow/graph/ConditionalAccess.cs index a03564b529f..b99e940f88b 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/ConditionalAccess.cs +++ b/csharp/ql/test/library-tests/controlflow/graph/ConditionalAccess.cs @@ -34,6 +34,25 @@ class ConditionalAccess i = 0; Prop?.Out(out i); } + + string StringProp { get; set; } + int IntField; + string this[int index] + { + get { return null; } + set { } + } + + void M9(ConditionalAccess ca) + { + ca?.IntField = 42; + ca?.StringProp = "Hello"; + ca?[0] = "Set0"; + ca?.Prop?.IntField = 84; + ca?.Prop?.StringProp = "World"; + ca?.IntField -= 1; + ca?.StringProp += "!"; + } } static class Ext diff --git a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected index 8240e61a419..204092c6df2 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected @@ -21,10 +21,11 @@ dominance | AccessorCalls.cs:10:10:10:11 | exit M1 (normal) | AccessorCalls.cs:10:10:10:11 | exit M1 | | AccessorCalls.cs:11:5:17:5 | {...} | AccessorCalls.cs:12:9:12:32 | ...; | | AccessorCalls.cs:12:9:12:12 | this access | AccessorCalls.cs:12:22:12:25 | this access | +| AccessorCalls.cs:12:9:12:18 | access to field Field | AccessorCalls.cs:12:9:12:31 | ... = ... | | AccessorCalls.cs:12:9:12:31 | ... = ... | AccessorCalls.cs:13:9:13:30 | ...; | | AccessorCalls.cs:12:9:12:32 | ...; | AccessorCalls.cs:12:9:12:12 | this access | | AccessorCalls.cs:12:22:12:25 | this access | AccessorCalls.cs:12:22:12:31 | access to field Field | -| AccessorCalls.cs:12:22:12:31 | access to field Field | AccessorCalls.cs:12:9:12:31 | ... = ... | +| AccessorCalls.cs:12:22:12:31 | access to field Field | AccessorCalls.cs:12:9:12:18 | access to field Field | | AccessorCalls.cs:13:9:13:12 | this access | AccessorCalls.cs:13:21:13:24 | this access | | AccessorCalls.cs:13:9:13:17 | access to property Prop | AccessorCalls.cs:13:9:13:29 | ... = ... | | AccessorCalls.cs:13:9:13:29 | ... = ... | AccessorCalls.cs:14:9:14:26 | ...; | @@ -54,11 +55,12 @@ dominance | AccessorCalls.cs:20:5:26:5 | {...} | AccessorCalls.cs:21:9:21:36 | ...; | | AccessorCalls.cs:21:9:21:12 | this access | AccessorCalls.cs:21:9:21:14 | access to field x | | AccessorCalls.cs:21:9:21:14 | access to field x | AccessorCalls.cs:21:24:21:27 | this access | +| AccessorCalls.cs:21:9:21:20 | access to field Field | AccessorCalls.cs:21:9:21:35 | ... = ... | | AccessorCalls.cs:21:9:21:35 | ... = ... | AccessorCalls.cs:22:9:22:34 | ...; | | AccessorCalls.cs:21:9:21:36 | ...; | AccessorCalls.cs:21:9:21:12 | this access | | AccessorCalls.cs:21:24:21:27 | this access | AccessorCalls.cs:21:24:21:29 | access to field x | | AccessorCalls.cs:21:24:21:29 | access to field x | AccessorCalls.cs:21:24:21:35 | access to field Field | -| AccessorCalls.cs:21:24:21:35 | access to field Field | AccessorCalls.cs:21:9:21:35 | ... = ... | +| AccessorCalls.cs:21:24:21:35 | access to field Field | AccessorCalls.cs:21:9:21:20 | access to field Field | | AccessorCalls.cs:22:9:22:12 | this access | AccessorCalls.cs:22:9:22:14 | access to field x | | AccessorCalls.cs:22:9:22:14 | access to field x | AccessorCalls.cs:22:23:22:26 | this access | | AccessorCalls.cs:22:9:22:19 | access to property Prop | AccessorCalls.cs:22:9:22:33 | ... = ... | @@ -129,8 +131,9 @@ dominance | AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:44:9:44:33 | ...; | | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:12 | this access | | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:18 | access to field Field | +| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... = ... | | AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:23:44:26 | this access | -| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:9:44:32 | ... = ... | +| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:9:44:18 | access to field Field | | AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:45:9:45:31 | ...; | | AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:44:9:44:12 | this access | | AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:44:23:44:32 | access to field Field | @@ -163,8 +166,9 @@ dominance | AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:14 | access to field x | | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:12 | this access | | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:20 | access to field Field | +| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... = ... | | AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:25:51:28 | this access | -| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:9:51:36 | ... = ... | +| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:9:51:20 | access to field Field | | AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:52:9:52:35 | ...; | | AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:51:9:51:12 | this access | | AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:51:25:51:30 | access to field x | @@ -204,13 +208,14 @@ dominance | AccessorCalls.cs:58:9:58:85 | ... = ... | AccessorCalls.cs:56:10:56:11 | exit M7 (normal) | | AccessorCalls.cs:58:9:58:86 | ...; | AccessorCalls.cs:58:10:58:13 | this access | | AccessorCalls.cs:58:10:58:13 | this access | AccessorCalls.cs:58:22:58:25 | this access | +| AccessorCalls.cs:58:10:58:19 | access to field Field | AccessorCalls.cs:58:22:58:30 | access to property Prop | | AccessorCalls.cs:58:22:58:25 | this access | AccessorCalls.cs:58:37:58:40 | this access | | AccessorCalls.cs:58:22:58:30 | access to property Prop | AccessorCalls.cs:58:37:58:43 | access to indexer | | AccessorCalls.cs:58:33:58:44 | (..., ...) | AccessorCalls.cs:58:9:58:45 | (..., ...) | | AccessorCalls.cs:58:37:58:40 | this access | AccessorCalls.cs:58:42:58:42 | 0 | | AccessorCalls.cs:58:37:58:43 | access to indexer | AccessorCalls.cs:58:9:58:85 | ... = ... | | AccessorCalls.cs:58:42:58:42 | 0 | AccessorCalls.cs:58:33:58:44 | (..., ...) | -| AccessorCalls.cs:58:49:58:85 | (..., ...) | AccessorCalls.cs:58:22:58:30 | access to property Prop | +| AccessorCalls.cs:58:49:58:85 | (..., ...) | AccessorCalls.cs:58:10:58:19 | access to field Field | | AccessorCalls.cs:58:50:58:53 | this access | AccessorCalls.cs:58:50:58:59 | access to field Field | | AccessorCalls.cs:58:50:58:59 | access to field Field | AccessorCalls.cs:58:62:58:65 | this access | | AccessorCalls.cs:58:62:58:65 | this access | AccessorCalls.cs:58:62:58:70 | access to property Prop | @@ -228,6 +233,7 @@ dominance | AccessorCalls.cs:63:9:63:98 | ...; | AccessorCalls.cs:63:10:63:13 | this access | | AccessorCalls.cs:63:10:63:13 | this access | AccessorCalls.cs:63:10:63:15 | access to field x | | AccessorCalls.cs:63:10:63:15 | access to field x | AccessorCalls.cs:63:24:63:27 | this access | +| AccessorCalls.cs:63:10:63:21 | access to field Field | AccessorCalls.cs:63:24:63:34 | access to property Prop | | AccessorCalls.cs:63:24:63:27 | this access | AccessorCalls.cs:63:24:63:29 | access to field x | | AccessorCalls.cs:63:24:63:29 | access to field x | AccessorCalls.cs:63:41:63:44 | this access | | AccessorCalls.cs:63:24:63:34 | access to property Prop | AccessorCalls.cs:63:41:63:49 | access to indexer | @@ -236,7 +242,7 @@ dominance | AccessorCalls.cs:63:41:63:46 | access to field x | AccessorCalls.cs:63:48:63:48 | 0 | | AccessorCalls.cs:63:41:63:49 | access to indexer | AccessorCalls.cs:63:9:63:97 | ... = ... | | AccessorCalls.cs:63:48:63:48 | 0 | AccessorCalls.cs:63:37:63:50 | (..., ...) | -| AccessorCalls.cs:63:55:63:97 | (..., ...) | AccessorCalls.cs:63:24:63:34 | access to property Prop | +| AccessorCalls.cs:63:55:63:97 | (..., ...) | AccessorCalls.cs:63:10:63:21 | access to field Field | | AccessorCalls.cs:63:56:63:59 | this access | AccessorCalls.cs:63:56:63:61 | access to field x | | AccessorCalls.cs:63:56:63:61 | access to field x | AccessorCalls.cs:63:56:63:67 | access to field Field | | AccessorCalls.cs:63:56:63:67 | access to field Field | AccessorCalls.cs:63:70:63:73 | this access | @@ -760,6 +766,48 @@ dominance | Assignments.cs:18:5:20:5 | {...} | Assignments.cs:19:16:19:16 | access to parameter x | | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:17:40:17:40 | exit + (normal) | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:9:19:17 | return ...; | +| Assignments.cs:27:10:27:23 | enter SetParamSingle | Assignments.cs:28:5:30:5 | {...} | +| Assignments.cs:27:10:27:23 | exit SetParamSingle (normal) | Assignments.cs:27:10:27:23 | exit SetParamSingle | +| Assignments.cs:28:5:30:5 | {...} | Assignments.cs:29:9:29:15 | ...; | +| Assignments.cs:29:9:29:14 | ... = ... | Assignments.cs:27:10:27:23 | exit SetParamSingle (normal) | +| Assignments.cs:29:9:29:15 | ...; | Assignments.cs:29:13:29:14 | 42 | +| Assignments.cs:29:13:29:14 | 42 | Assignments.cs:29:9:29:14 | ... = ... | +| Assignments.cs:32:10:32:22 | enter SetParamMulti | Assignments.cs:33:5:36:5 | {...} | +| Assignments.cs:32:10:32:22 | exit SetParamMulti (normal) | Assignments.cs:32:10:32:22 | exit SetParamMulti | +| Assignments.cs:33:5:36:5 | {...} | Assignments.cs:34:9:34:15 | ...; | +| Assignments.cs:34:9:34:14 | ... = ... | Assignments.cs:35:9:35:20 | ...; | +| Assignments.cs:34:9:34:15 | ...; | Assignments.cs:34:13:34:14 | 42 | +| Assignments.cs:34:13:34:14 | 42 | Assignments.cs:34:9:34:14 | ... = ... | +| Assignments.cs:35:9:35:19 | ... = ... | Assignments.cs:32:10:32:22 | exit SetParamMulti (normal) | +| Assignments.cs:35:9:35:20 | ...; | Assignments.cs:35:13:35:19 | "Hello" | +| Assignments.cs:35:13:35:19 | "Hello" | Assignments.cs:35:9:35:19 | ... = ... | +| Assignments.cs:38:10:38:11 | enter M2 | Assignments.cs:39:5:45:5 | {...} | +| Assignments.cs:38:10:38:11 | exit M2 (normal) | Assignments.cs:38:10:38:11 | exit M2 | +| Assignments.cs:39:5:45:5 | {...} | Assignments.cs:40:9:40:15 | ... ...; | +| Assignments.cs:40:9:40:15 | ... ...; | Assignments.cs:40:13:40:14 | Int32 x1 | +| Assignments.cs:40:13:40:14 | Int32 x1 | Assignments.cs:41:9:41:31 | ...; | +| Assignments.cs:41:9:41:30 | call to method SetParamSingle | Assignments.cs:42:9:42:37 | ...; | +| Assignments.cs:41:9:41:30 | this access | Assignments.cs:41:9:41:30 | call to method SetParamSingle | +| Assignments.cs:41:9:41:31 | ...; | Assignments.cs:41:9:41:30 | this access | +| Assignments.cs:42:9:42:36 | call to method SetParamSingle | Assignments.cs:43:9:43:56 | ...; | +| Assignments.cs:42:9:42:36 | this access | Assignments.cs:42:28:42:35 | this access | +| Assignments.cs:42:9:42:37 | ...; | Assignments.cs:42:9:42:36 | this access | +| Assignments.cs:42:28:42:35 | access to field IntField | Assignments.cs:42:9:42:36 | call to method SetParamSingle | +| Assignments.cs:42:28:42:35 | this access | Assignments.cs:42:28:42:35 | access to field IntField | +| Assignments.cs:43:9:43:55 | call to method SetParamMulti | Assignments.cs:44:9:44:59 | ...; | +| Assignments.cs:43:9:43:55 | this access | Assignments.cs:43:34:43:37 | null | +| Assignments.cs:43:9:43:56 | ...; | Assignments.cs:43:9:43:55 | this access | +| Assignments.cs:43:34:43:37 | null | Assignments.cs:43:44:43:54 | this access | +| Assignments.cs:43:44:43:54 | access to field StringField | Assignments.cs:43:9:43:55 | call to method SetParamMulti | +| Assignments.cs:43:44:43:54 | this access | Assignments.cs:43:44:43:54 | access to field StringField | +| Assignments.cs:44:9:44:58 | call to method SetParamMulti | Assignments.cs:38:10:38:11 | exit M2 (normal) | +| Assignments.cs:44:9:44:58 | this access | Assignments.cs:44:27:44:34 | this access | +| Assignments.cs:44:9:44:59 | ...; | Assignments.cs:44:9:44:58 | this access | +| Assignments.cs:44:27:44:34 | access to field IntField | Assignments.cs:44:37:44:40 | null | +| Assignments.cs:44:27:44:34 | this access | Assignments.cs:44:27:44:34 | access to field IntField | +| Assignments.cs:44:37:44:40 | null | Assignments.cs:44:47:44:57 | this access | +| Assignments.cs:44:47:44:57 | access to field StringField | Assignments.cs:44:9:44:58 | call to method SetParamMulti | +| Assignments.cs:44:47:44:57 | this access | Assignments.cs:44:47:44:57 | access to field StringField | | BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | {...} | | BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | call to constructor Object | | BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | this access | @@ -971,13 +1019,68 @@ dominance | ConditionalAccess.cs:35:9:35:12 | access to property Prop | ConditionalAccess.cs:35:9:35:24 | call to method Out | | ConditionalAccess.cs:35:9:35:12 | this access | ConditionalAccess.cs:35:9:35:12 | access to property Prop | | ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:12 | this access | -| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | -| ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith | -| ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | ConditionalAccess.cs:41:75:41:78 | ", " | -| ConditionalAccess.cs:41:70:41:78 | ... + ... | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | -| ConditionalAccess.cs:41:70:41:83 | ... + ... | ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith (normal) | -| ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:70:41:78 | ... + ... | -| ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:70:41:83 | ... + ... | +| ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:13:42:28 | {...} | +| ConditionalAccess.cs:42:9:42:11 | exit get_Item (normal) | ConditionalAccess.cs:42:9:42:11 | exit get_Item | +| ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:22:42:25 | null | +| ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:9:42:11 | exit get_Item (normal) | +| ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:15:42:26 | return ...; | +| ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:13:43:15 | {...} | +| ConditionalAccess.cs:43:9:43:11 | exit set_Item (normal) | ConditionalAccess.cs:43:9:43:11 | exit set_Item | +| ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:9:43:11 | exit set_Item (normal) | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:47:5:55:5 | {...} | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | exit M9 | +| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:48:9:48:26 | ...; | +| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:12:48:25 | ... = ... | +| ConditionalAccess.cs:48:9:48:26 | ...; | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | +| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:9:48:20 | access to field IntField | +| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:49:9:49:22 | access to property StringProp | ConditionalAccess.cs:49:12:49:32 | ... = ... | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | +| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:9:49:22 | access to property StringProp | +| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:50:9:50:14 | access to indexer | ConditionalAccess.cs:50:12:50:23 | ... = ... | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | +| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:50:18:50:23 | "Set0" | +| ConditionalAccess.cs:50:18:50:23 | "Set0" | ConditionalAccess.cs:50:9:50:14 | access to indexer | +| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:51:18:51:31 | ... = ... | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | +| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:51:9:51:26 | access to field IntField | +| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:26 | ...; | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:52:18:52:38 | ... = ... | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | +| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:9:52:28 | access to property StringProp | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:30 | ...; | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:12:53:25 | ... = ... | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:12:53:25 | ... - ... | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:12:54:29 | ... = ... | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:12:54:29 | ... + ... | +| ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | +| ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | +| ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:75:60:78 | ", " | +| ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | +| ConditionalAccess.cs:60:70:60:83 | ... + ... | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) | +| ConditionalAccess.cs:60:75:60:78 | ", " | ConditionalAccess.cs:60:70:60:78 | ... + ... | +| ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | ConditionalAccess.cs:60:70:60:83 | ... + ... | | Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | {...} | | Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | call to constructor Object | | Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | this access | @@ -1763,13 +1866,15 @@ dominance | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:211:13:211:29 | ...; | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:25:209:47 | throw ...; | | Finally.cs:211:13:211:16 | this access | Finally.cs:211:26:211:28 | "0" | +| Finally.cs:211:13:211:22 | access to field Field | Finally.cs:211:13:211:28 | ... = ... | | 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:26:211:28 | "0" | Finally.cs:211:13:211:28 | ... = ... | +| Finally.cs:211:26:211:28 | "0" | Finally.cs:211:13:211:22 | access to field Field | | Finally.cs:213:9:213:12 | this access | Finally.cs:213:22:213:24 | "1" | +| Finally.cs:213:9:213:18 | access to field Field | Finally.cs:213:9:213:24 | ... = ... | | 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 | -| Finally.cs:213:22:213:24 | "1" | Finally.cs:213:9:213:24 | ... = ... | +| Finally.cs:213:22:213:24 | "1" | Finally.cs:213:9:213:18 | access to field Field | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:217:5:231:5 | {...} | | Finally.cs:216:10:216:12 | exit M11 (normal) | Finally.cs:216:10:216:12 | exit M11 | | Finally.cs:217:5:231:5 | {...} | Finally.cs:218:9:229:9 | try {...} ... | @@ -1900,10 +2005,11 @@ dominance | Initializers.cs:3:7:3:18 | exit (normal) | Initializers.cs:3:7:3:18 | exit | | Initializers.cs:3:7:3:18 | exit Initializers (normal) | Initializers.cs:3:7:3:18 | exit Initializers | | Initializers.cs:3:7:3:18 | {...} | Initializers.cs:3:7:3:18 | exit Initializers (normal) | +| Initializers.cs:5:9:5:9 | access to field F | Initializers.cs:5:9:5:17 | ... = ... | | Initializers.cs:5:9:5:9 | this access | Initializers.cs:5:13:5:13 | access to field H | | Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:6:9:6:9 | this access | | Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:5:17:5:17 | 1 | -| Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:5:9:5:17 | ... = ... | +| Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:5:9:5:9 | access to field F | | Initializers.cs:5:17:5:17 | 1 | Initializers.cs:5:13:5:17 | ... + ... | | Initializers.cs:6:9:6:9 | access to property G | Initializers.cs:6:25:6:31 | ... = ... | | Initializers.cs:6:9:6:9 | this access | Initializers.cs:6:27:6:27 | access to field H | @@ -1931,8 +2037,9 @@ dominance | Initializers.cs:14:17:14:53 | object creation of type Initializers | Initializers.cs:14:44:14:44 | 0 | | Initializers.cs:14:34:14:35 | "" | Initializers.cs:14:17:14:53 | object creation of type Initializers | | Initializers.cs:14:38:14:53 | { ..., ... } | Initializers.cs:14:13:14:53 | Initializers i = ... | +| Initializers.cs:14:40:14:40 | access to field F | Initializers.cs:14:40:14:44 | ... = ... | | Initializers.cs:14:40:14:44 | ... = ... | Initializers.cs:14:51:14:51 | 1 | -| Initializers.cs:14:44:14:44 | 0 | Initializers.cs:14:40:14:44 | ... = ... | +| Initializers.cs:14:44:14:44 | 0 | Initializers.cs:14:40:14:40 | access to field F | | Initializers.cs:14:47:14:47 | access to property G | Initializers.cs:14:47:14:51 | ... = ... | | Initializers.cs:14:47:14:51 | ... = ... | Initializers.cs:14:38:14:53 | { ..., ... } | | Initializers.cs:14:51:14:51 | 1 | Initializers.cs:14:47:14:47 | access to property G | @@ -1944,10 +2051,11 @@ dominance | Initializers.cs:15:39:15:39 | access to local variable i | Initializers.cs:15:59:15:60 | "" | | Initializers.cs:15:42:15:61 | object creation of type Initializers | Initializers.cs:15:37:15:63 | { ..., ... } | | Initializers.cs:15:59:15:60 | "" | Initializers.cs:15:42:15:61 | object creation of type Initializers | +| Initializers.cs:18:16:18:16 | access to field H | Initializers.cs:18:16:18:20 | ... = ... | | Initializers.cs:18:16:18:16 | enter H | Initializers.cs:18:20:18:20 | 1 | | Initializers.cs:18:16:18:16 | exit H (normal) | Initializers.cs:18:16:18:16 | exit H | | Initializers.cs:18:16:18:20 | ... = ... | Initializers.cs:18:16:18:16 | exit H (normal) | -| Initializers.cs:18:20:18:20 | 1 | Initializers.cs:18:16:18:20 | ... = ... | +| Initializers.cs:18:20:18:20 | 1 | Initializers.cs:18:16:18:16 | access to field H | | Initializers.cs:20:11:20:23 | call to constructor Object | Initializers.cs:20:11:20:23 | {...} | | Initializers.cs:20:11:20:23 | call to method | Initializers.cs:20:11:20:23 | call to constructor Object | | Initializers.cs:20:11:20:23 | enter | Initializers.cs:22:23:22:23 | this access | @@ -1956,46 +2064,52 @@ dominance | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:20:11:20:23 | exit NoConstructor | | Initializers.cs:20:11:20:23 | this access | Initializers.cs:20:11:20:23 | call to method | | Initializers.cs:20:11:20:23 | {...} | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | +| Initializers.cs:22:23:22:23 | access to field F | Initializers.cs:22:23:22:27 | ... = ... | | Initializers.cs:22:23:22:23 | this access | Initializers.cs:22:27:22:27 | 0 | | Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:23:23:23:23 | this access | -| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:27 | ... = ... | +| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:23 | access to field F | +| Initializers.cs:23:23:23:23 | access to field G | Initializers.cs:23:23:23:27 | ... = ... | | Initializers.cs:23:23:23:23 | this access | Initializers.cs:23:27:23:27 | 1 | | Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | exit (normal) | -| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:27 | ... = ... | +| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:23 | access to field G | | Initializers.cs:26:11:26:13 | enter | Initializers.cs:28:13:28:13 | this access | | Initializers.cs:26:11:26:13 | exit (normal) | Initializers.cs:26:11:26:13 | exit | +| Initializers.cs:28:13:28:13 | access to field H | Initializers.cs:28:13:28:17 | ... = ... | | Initializers.cs:28:13:28:13 | this access | Initializers.cs:28:17:28:17 | 2 | | Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:26:11:26:13 | exit (normal) | -| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:17 | ... = ... | +| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:13 | access to field H | | Initializers.cs:31:9:31:11 | call to method | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | | Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | this access | | Initializers.cs:31:9:31:11 | exit Sub (normal) | Initializers.cs:31:9:31:11 | exit Sub | | Initializers.cs:31:9:31:11 | this access | Initializers.cs:31:9:31:11 | call to method | | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:31:24:31:33 | {...} | | Initializers.cs:31:24:31:33 | {...} | Initializers.cs:31:26:31:31 | ...; | +| Initializers.cs:31:26:31:26 | access to field I | Initializers.cs:31:26:31:30 | ... = ... | | Initializers.cs:31:26:31:26 | this access | Initializers.cs:31:30:31:30 | 3 | | Initializers.cs:31:26:31:30 | ... = ... | Initializers.cs:31:9:31:11 | exit Sub (normal) | | Initializers.cs:31:26:31:31 | ...; | Initializers.cs:31:26:31:26 | this access | -| Initializers.cs:31:30:31:30 | 3 | Initializers.cs:31:26:31:30 | ... = ... | +| Initializers.cs:31:30:31:30 | 3 | Initializers.cs:31:26:31:26 | access to field I | | Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:22:33:25 | call to constructor Sub | | Initializers.cs:33:9:33:11 | exit Sub (normal) | Initializers.cs:33:9:33:11 | exit Sub | | Initializers.cs:33:22:33:25 | call to constructor Sub | Initializers.cs:33:29:33:38 | {...} | | Initializers.cs:33:29:33:38 | {...} | Initializers.cs:33:31:33:36 | ...; | +| Initializers.cs:33:31:33:31 | access to field I | Initializers.cs:33:31:33:35 | ... = ... | | Initializers.cs:33:31:33:31 | this access | Initializers.cs:33:35:33:35 | access to parameter i | | Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:9:33:11 | exit Sub (normal) | | Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:31:33:31 | this access | -| Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:31:33:35 | ... = ... | +| Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:31:33:31 | access to field I | | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:27:35:40 | {...} | | Initializers.cs:35:9:35:11 | call to method | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | | Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | this access | | Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:9:35:11 | exit Sub | | Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | call to method | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:29:35:38 | ...; | +| Initializers.cs:35:29:35:29 | access to field I | Initializers.cs:35:29:35:37 | ... = ... | | Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:33:35:33 | access to parameter i | | Initializers.cs:35:29:35:37 | ... = ... | Initializers.cs:35:9:35:11 | exit Sub (normal) | | Initializers.cs:35:29:35:38 | ...; | Initializers.cs:35:29:35:29 | this access | | Initializers.cs:35:33:35:33 | access to parameter i | Initializers.cs:35:37:35:37 | access to parameter j | -| Initializers.cs:35:33:35:37 | ... + ... | Initializers.cs:35:29:35:37 | ... = ... | +| Initializers.cs:35:33:35:37 | ... + ... | Initializers.cs:35:29:35:29 | access to field I | | Initializers.cs:35:37:35:37 | access to parameter j | Initializers.cs:35:33:35:37 | ... + ... | | Initializers.cs:39:7:39:23 | call to constructor Object | Initializers.cs:39:7:39:23 | {...} | | Initializers.cs:39:7:39:23 | call to method | Initializers.cs:39:7:39:23 | call to constructor Object | @@ -2034,8 +2148,9 @@ dominance | Initializers.cs:57:13:65:9 | Compound compound = ... | Initializers.cs:51:10:51:13 | exit Test (normal) | | Initializers.cs:57:24:65:9 | object creation of type Compound | Initializers.cs:59:34:59:34 | 0 | | Initializers.cs:58:9:65:9 | { ..., ... } | Initializers.cs:57:13:65:9 | Compound compound = ... | +| Initializers.cs:59:13:59:27 | access to field DictionaryField | Initializers.cs:59:13:59:76 | ... = ... | | Initializers.cs:59:13:59:76 | ... = ... | Initializers.cs:60:37:60:37 | 3 | -| Initializers.cs:59:31:59:76 | { ..., ... } | Initializers.cs:59:13:59:76 | ... = ... | +| Initializers.cs:59:31:59:76 | { ..., ... } | Initializers.cs:59:13:59:27 | access to field DictionaryField | | Initializers.cs:59:33:59:35 | access to indexer | Initializers.cs:59:33:59:44 | ... = ... | | Initializers.cs:59:33:59:44 | ... = ... | Initializers.cs:59:48:59:48 | 1 | | Initializers.cs:59:34:59:34 | 0 | Initializers.cs:59:39:59:44 | "Zero" | @@ -2067,52 +2182,62 @@ dominance | Initializers.cs:60:65:60:69 | ... + ... | Initializers.cs:60:74:60:78 | "One" | | Initializers.cs:60:69:60:69 | 1 | Initializers.cs:60:65:60:69 | ... + ... | | Initializers.cs:60:74:60:78 | "One" | Initializers.cs:60:64:60:70 | access to indexer | +| Initializers.cs:61:13:61:22 | access to field ArrayField | Initializers.cs:61:13:61:58 | ... = ... | | Initializers.cs:61:13:61:58 | ... = ... | Initializers.cs:62:30:62:30 | 0 | -| Initializers.cs:61:26:61:58 | { ..., ... } | Initializers.cs:61:13:61:58 | ... = ... | +| Initializers.cs:61:26:61:58 | { ..., ... } | Initializers.cs:61:13:61:22 | access to field ArrayField | +| Initializers.cs:61:28:61:30 | access to array element | Initializers.cs:61:28:61:39 | ... = ... | | Initializers.cs:61:28:61:39 | ... = ... | Initializers.cs:61:43:61:43 | access to parameter i | | Initializers.cs:61:29:61:29 | 0 | Initializers.cs:61:34:61:39 | "Zero" | -| Initializers.cs:61:34:61:39 | "Zero" | Initializers.cs:61:28:61:39 | ... = ... | +| Initializers.cs:61:34:61:39 | "Zero" | Initializers.cs:61:28:61:30 | access to array element | +| Initializers.cs:61:42:61:48 | access to array element | Initializers.cs:61:42:61:56 | ... = ... | | Initializers.cs:61:42:61:56 | ... = ... | Initializers.cs:61:26:61:58 | { ..., ... } | | Initializers.cs:61:43:61:43 | access to parameter i | Initializers.cs:61:47:61:47 | 1 | | Initializers.cs:61:43:61:47 | ... + ... | Initializers.cs:61:52:61:56 | "One" | | Initializers.cs:61:47:61:47 | 1 | Initializers.cs:61:43:61:47 | ... + ... | -| Initializers.cs:61:52:61:56 | "One" | Initializers.cs:61:42:61:56 | ... = ... | +| Initializers.cs:61:52:61:56 | "One" | Initializers.cs:61:42:61:48 | access to array element | +| Initializers.cs:62:13:62:23 | access to field ArrayField2 | Initializers.cs:62:13:62:60 | ... = ... | | Initializers.cs:62:13:62:60 | ... = ... | Initializers.cs:63:32:63:32 | 1 | -| Initializers.cs:62:27:62:60 | { ..., ... } | Initializers.cs:62:13:62:60 | ... = ... | +| Initializers.cs:62:27:62:60 | { ..., ... } | Initializers.cs:62:13:62:23 | access to field ArrayField2 | +| Initializers.cs:62:29:62:34 | access to array element | Initializers.cs:62:29:62:40 | ... = ... | | Initializers.cs:62:29:62:40 | ... = ... | Initializers.cs:62:44:62:44 | 1 | | Initializers.cs:62:30:62:30 | 0 | Initializers.cs:62:33:62:33 | 1 | | Initializers.cs:62:33:62:33 | 1 | Initializers.cs:62:38:62:40 | "i" | -| Initializers.cs:62:38:62:40 | "i" | Initializers.cs:62:29:62:40 | ... = ... | +| Initializers.cs:62:38:62:40 | "i" | Initializers.cs:62:29:62:34 | access to array element | +| Initializers.cs:62:43:62:52 | access to array element | Initializers.cs:62:43:62:58 | ... = ... | | Initializers.cs:62:43:62:58 | ... = ... | Initializers.cs:62:27:62:60 | { ..., ... } | | Initializers.cs:62:44:62:44 | 1 | Initializers.cs:62:47:62:47 | access to parameter i | | Initializers.cs:62:47:62:47 | access to parameter i | Initializers.cs:62:51:62:51 | 0 | | Initializers.cs:62:47:62:51 | ... + ... | Initializers.cs:62:56:62:58 | "1" | | Initializers.cs:62:51:62:51 | 0 | Initializers.cs:62:47:62:51 | ... + ... | -| Initializers.cs:62:56:62:58 | "1" | Initializers.cs:62:43:62:58 | ... = ... | +| Initializers.cs:62:56:62:58 | "1" | Initializers.cs:62:43:62:52 | access to array element | | Initializers.cs:63:13:63:25 | access to property ArrayProperty | Initializers.cs:63:13:63:60 | ... = ... | | Initializers.cs:63:13:63:60 | ... = ... | Initializers.cs:64:33:64:33 | 0 | | Initializers.cs:63:29:63:60 | { ..., ... } | Initializers.cs:63:13:63:25 | access to property ArrayProperty | +| Initializers.cs:63:31:63:33 | access to array element | Initializers.cs:63:31:63:41 | ... = ... | | Initializers.cs:63:31:63:41 | ... = ... | Initializers.cs:63:45:63:45 | access to parameter i | | Initializers.cs:63:32:63:32 | 1 | Initializers.cs:63:37:63:41 | "One" | -| Initializers.cs:63:37:63:41 | "One" | Initializers.cs:63:31:63:41 | ... = ... | +| Initializers.cs:63:37:63:41 | "One" | Initializers.cs:63:31:63:33 | access to array element | +| Initializers.cs:63:44:63:50 | access to array element | Initializers.cs:63:44:63:58 | ... = ... | | Initializers.cs:63:44:63:58 | ... = ... | Initializers.cs:63:29:63:60 | { ..., ... } | | Initializers.cs:63:45:63:45 | access to parameter i | Initializers.cs:63:49:63:49 | 2 | | Initializers.cs:63:45:63:49 | ... + ... | Initializers.cs:63:54:63:58 | "Two" | | Initializers.cs:63:49:63:49 | 2 | Initializers.cs:63:45:63:49 | ... + ... | -| Initializers.cs:63:54:63:58 | "Two" | Initializers.cs:63:44:63:58 | ... = ... | +| Initializers.cs:63:54:63:58 | "Two" | Initializers.cs:63:44:63:50 | access to array element | | Initializers.cs:64:13:64:26 | access to property ArrayProperty2 | Initializers.cs:64:13:64:63 | ... = ... | | Initializers.cs:64:13:64:63 | ... = ... | Initializers.cs:58:9:65:9 | { ..., ... } | | Initializers.cs:64:30:64:63 | { ..., ... } | Initializers.cs:64:13:64:26 | access to property ArrayProperty2 | +| Initializers.cs:64:32:64:37 | access to array element | Initializers.cs:64:32:64:43 | ... = ... | | Initializers.cs:64:32:64:43 | ... = ... | Initializers.cs:64:47:64:47 | 1 | | Initializers.cs:64:33:64:33 | 0 | Initializers.cs:64:36:64:36 | 1 | | Initializers.cs:64:36:64:36 | 1 | Initializers.cs:64:41:64:43 | "i" | -| Initializers.cs:64:41:64:43 | "i" | Initializers.cs:64:32:64:43 | ... = ... | +| Initializers.cs:64:41:64:43 | "i" | Initializers.cs:64:32:64:37 | access to array element | +| Initializers.cs:64:46:64:55 | access to array element | Initializers.cs:64:46:64:61 | ... = ... | | Initializers.cs:64:46:64:61 | ... = ... | Initializers.cs:64:30:64:63 | { ..., ... } | | Initializers.cs:64:47:64:47 | 1 | Initializers.cs:64:50:64:50 | access to parameter i | | Initializers.cs:64:50:64:50 | access to parameter i | Initializers.cs:64:54:64:54 | 0 | | Initializers.cs:64:50:64:54 | ... + ... | Initializers.cs:64:59:64:61 | "1" | | Initializers.cs:64:54:64:54 | 0 | Initializers.cs:64:50:64:54 | ... + ... | -| Initializers.cs:64:59:64:61 | "1" | Initializers.cs:64:46:64:61 | ... = ... | +| Initializers.cs:64:59:64:61 | "1" | Initializers.cs:64:46:64:55 | access to array element | | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | LoopUnrolling.cs:5:7:5:19 | {...} | | LoopUnrolling.cs:5:7:5:19 | call to method | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | | LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | this access | @@ -2339,9 +2464,10 @@ dominance | MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationA.cs:13:16:13:16 | this access | | MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationB.cs:11:16:11:16 | this access | | MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:11:7:11:8 | exit | +| MultiImplementationA.cs:13:16:13:16 | access to field F | MultiImplementationA.cs:13:16:13:20 | ... = ... | | 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 | -| MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:16:13:20 | ... = ... | +| MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:16:13:16 | access to field F | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | exit get_Item (normal) | | MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationA.cs:14:31:14:31 | access to parameter i | | MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationB.cs:12:37:12:40 | null | @@ -2366,10 +2492,11 @@ dominance | MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationB.cs:18:12:18:13 | this access | | MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | call to method | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:24:20:29 | ...; | +| MultiImplementationA.cs:20:24:20:24 | access to field F | MultiImplementationA.cs:20:24:20:28 | ... = ... | | MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:28:20:28 | access to parameter i | | MultiImplementationA.cs:20:24:20:28 | ... = ... | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | | MultiImplementationA.cs:20:24:20:29 | ...; | MultiImplementationA.cs:20:24:20:24 | this access | -| MultiImplementationA.cs:20:28:20:28 | access to parameter i | MultiImplementationA.cs:20:24:20:28 | ... = ... | +| MultiImplementationA.cs:20:28:20:28 | access to parameter i | MultiImplementationA.cs:20:24:20:24 | access to field F | | MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationA.cs:21:24:21:24 | 0 | | MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationB.cs:19:24:19:24 | 1 | | MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | MultiImplementationA.cs:21:12:21:13 | exit C2 | @@ -2419,9 +2546,10 @@ dominance | MultiImplementationB.cs:4:34:4:34 | 1 | MultiImplementationB.cs:4:27:4:35 | return ...; | | MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (normal) | | MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | exit M (normal) | +| MultiImplementationB.cs:11:16:11:16 | access to field F | MultiImplementationB.cs:11:16:11:20 | ... = ... | | 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:11:20:11:20 | 1 | MultiImplementationB.cs:11:16:11:16 | access to field F | | MultiImplementationB.cs:12:31:12:40 | throw ... | MultiImplementationA.cs:14:31:14:31 | exit get_Item (abnormal) | | 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 | @@ -2525,9 +2653,10 @@ dominance | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | PartialImplementationA.cs:3:12:3:18 | exit Partial | | PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | call to method | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | +| PartialImplementationB.cs:3:16:3:16 | access to field F | PartialImplementationB.cs:3:16:3:20 | ... = ... | | PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationB.cs:3:20:3:20 | 0 | | PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:5:16:5:16 | this access | -| PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:16:3:20 | ... = ... | +| PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:16:3:16 | access to field F | | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | PartialImplementationB.cs:4:22:4:24 | {...} | | PartialImplementationB.cs:4:12:4:18 | call to method | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | | PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | this access | @@ -3462,20 +3591,22 @@ dominance | cflow.cs:127:62:127:64 | enter set_Prop | cflow.cs:127:66:127:83 | {...} | | cflow.cs:127:62:127:64 | exit set_Prop (normal) | cflow.cs:127:62:127:64 | exit set_Prop | | cflow.cs:127:66:127:83 | {...} | cflow.cs:127:68:127:81 | ...; | +| cflow.cs:127:68:127:72 | access to field Field | cflow.cs:127:68:127:80 | ... = ... | | cflow.cs:127:68:127:72 | this access | cflow.cs:127:76:127:80 | access to parameter value | | cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:62:127:64 | exit set_Prop (normal) | | cflow.cs:127:68:127:81 | ...; | cflow.cs:127:68:127:72 | this access | -| cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:68:127:80 | ... = ... | +| cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:68:127:72 | access to field Field | | cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:130:5:132:5 | {...} | | cflow.cs:129:5:129:15 | call to method | cflow.cs:129:5:129:15 | call to constructor Object | | cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | this access | | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:129:5:129:15 | exit ControlFlow | | cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | call to method | | cflow.cs:130:5:132:5 | {...} | cflow.cs:131:9:131:18 | ...; | +| cflow.cs:131:9:131:13 | access to field Field | cflow.cs:131:9:131:17 | ... = ... | | cflow.cs:131:9:131:13 | this access | cflow.cs:131:17:131:17 | access to parameter s | | cflow.cs:131:9:131:17 | ... = ... | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | | cflow.cs:131:9:131:18 | ...; | cflow.cs:131:9:131:13 | this access | -| cflow.cs:131:17:131:17 | access to parameter s | cflow.cs:131:9:131:17 | ... = ... | +| cflow.cs:131:17:131:17 | access to parameter s | cflow.cs:131:9:131:13 | access to field Field | | cflow.cs:134:5:134:15 | enter ControlFlow | cflow.cs:134:31:134:31 | access to parameter i | | cflow.cs:134:5:134:15 | exit ControlFlow (normal) | cflow.cs:134:5:134:15 | exit ControlFlow | | cflow.cs:134:26:134:29 | call to constructor ControlFlow | cflow.cs:134:39:134:41 | {...} | @@ -3688,10 +3819,11 @@ dominance | cflow.cs:209:5:222:5 | {...} | cflow.cs:210:9:221:36 | do ... while (...); | | cflow.cs:210:9:221:36 | do ... while (...); | cflow.cs:211:9:221:9 | {...} | | cflow.cs:211:9:221:9 | {...} | cflow.cs:212:13:212:25 | ...; | +| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:24 | ... = ... | | cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:22:212:24 | "a" | | cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | access to field Field | | cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access | -| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:13:212:24 | ... = ... | +| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:13:212:17 | access to field Field | | cflow.cs:212:13:212:24 | ... = ... | cflow.cs:213:13:216:13 | if (...) ... | | cflow.cs:212:13:212:25 | ...; | cflow.cs:212:13:212:17 | this access | | cflow.cs:212:22:212:24 | "a" | cflow.cs:212:13:212:24 | ... + ... | @@ -3724,10 +3856,11 @@ dominance | cflow.cs:226:57:226:59 | "a" | cflow.cs:226:62:226:63 | 10 | | cflow.cs:226:62:226:63 | 10 | cflow.cs:226:27:226:64 | call to method Repeat | | cflow.cs:227:9:237:9 | {...} | cflow.cs:228:13:228:23 | ...; | +| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:22 | ... = ... | | cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:22:228:22 | access to local variable x | | cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | access to field Field | | cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access | -| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:13:228:22 | ... = ... | +| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:13:228:17 | access to field Field | | cflow.cs:228:13:228:22 | ... = ... | cflow.cs:229:13:232:13 | if (...) ... | | cflow.cs:228:13:228:23 | ...; | cflow.cs:228:13:228:17 | this access | | cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:13:228:22 | ... + ... | @@ -3899,7 +4032,8 @@ postDominance | AccessorCalls.cs:10:10:10:11 | exit M1 (normal) | AccessorCalls.cs:16:9:16:23 | ... -= ... | | AccessorCalls.cs:11:5:17:5 | {...} | AccessorCalls.cs:10:10:10:11 | enter M1 | | AccessorCalls.cs:12:9:12:12 | this access | AccessorCalls.cs:12:9:12:32 | ...; | -| AccessorCalls.cs:12:9:12:31 | ... = ... | AccessorCalls.cs:12:22:12:31 | access to field Field | +| AccessorCalls.cs:12:9:12:18 | access to field Field | AccessorCalls.cs:12:22:12:31 | access to field Field | +| AccessorCalls.cs:12:9:12:31 | ... = ... | AccessorCalls.cs:12:9:12:18 | access to field Field | | AccessorCalls.cs:12:9:12:32 | ...; | AccessorCalls.cs:11:5:17:5 | {...} | | AccessorCalls.cs:12:22:12:25 | this access | AccessorCalls.cs:12:9:12:12 | this access | | AccessorCalls.cs:12:22:12:31 | access to field Field | AccessorCalls.cs:12:22:12:25 | this access | @@ -3932,7 +4066,8 @@ postDominance | AccessorCalls.cs:20:5:26:5 | {...} | AccessorCalls.cs:19:10:19:11 | enter M2 | | AccessorCalls.cs:21:9:21:12 | this access | AccessorCalls.cs:21:9:21:36 | ...; | | AccessorCalls.cs:21:9:21:14 | access to field x | AccessorCalls.cs:21:9:21:12 | this access | -| AccessorCalls.cs:21:9:21:35 | ... = ... | AccessorCalls.cs:21:24:21:35 | access to field Field | +| AccessorCalls.cs:21:9:21:20 | access to field Field | AccessorCalls.cs:21:24:21:35 | access to field Field | +| AccessorCalls.cs:21:9:21:35 | ... = ... | AccessorCalls.cs:21:9:21:20 | access to field Field | | AccessorCalls.cs:21:9:21:36 | ...; | AccessorCalls.cs:20:5:26:5 | {...} | | AccessorCalls.cs:21:24:21:27 | this access | AccessorCalls.cs:21:9:21:14 | access to field x | | AccessorCalls.cs:21:24:21:29 | access to field x | AccessorCalls.cs:21:24:21:27 | this access | @@ -4008,8 +4143,9 @@ postDominance | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:12 | this access | | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:33 | ...; | | AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:12 | this access | +| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... + ... | | AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:23:44:32 | access to field Field | -| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:44:9:44:32 | ... + ... | +| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:44:9:44:18 | access to field Field | | AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:43:5:47:5 | {...} | | AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:44:9:44:18 | access to field Field | | AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:23:44:26 | this access | @@ -4042,8 +4178,9 @@ postDominance | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:12 | this access | | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:12 | this access | | AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:14 | access to field x | +| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... + ... | | AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:25:51:36 | access to field Field | -| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:51:9:51:36 | ... + ... | +| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:51:9:51:20 | access to field Field | | AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:50:5:54:5 | {...} | | AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:51:9:51:20 | access to field Field | | AccessorCalls.cs:51:25:51:30 | access to field x | AccessorCalls.cs:51:25:51:28 | this access | @@ -4082,8 +4219,9 @@ postDominance | AccessorCalls.cs:58:9:58:85 | ... = ... | AccessorCalls.cs:58:37:58:43 | access to indexer | | AccessorCalls.cs:58:9:58:86 | ...; | AccessorCalls.cs:57:5:59:5 | {...} | | AccessorCalls.cs:58:10:58:13 | this access | AccessorCalls.cs:58:9:58:86 | ...; | +| AccessorCalls.cs:58:10:58:19 | access to field Field | AccessorCalls.cs:58:49:58:85 | (..., ...) | | AccessorCalls.cs:58:22:58:25 | this access | AccessorCalls.cs:58:10:58:13 | this access | -| AccessorCalls.cs:58:22:58:30 | access to property Prop | AccessorCalls.cs:58:49:58:85 | (..., ...) | +| AccessorCalls.cs:58:22:58:30 | access to property Prop | AccessorCalls.cs:58:10:58:19 | access to field Field | | AccessorCalls.cs:58:33:58:44 | (..., ...) | AccessorCalls.cs:58:42:58:42 | 0 | | AccessorCalls.cs:58:37:58:40 | this access | AccessorCalls.cs:58:22:58:25 | this access | | AccessorCalls.cs:58:37:58:43 | access to indexer | AccessorCalls.cs:58:22:58:30 | access to property Prop | @@ -4106,9 +4244,10 @@ postDominance | AccessorCalls.cs:63:9:63:98 | ...; | AccessorCalls.cs:62:5:64:5 | {...} | | AccessorCalls.cs:63:10:63:13 | this access | AccessorCalls.cs:63:9:63:98 | ...; | | AccessorCalls.cs:63:10:63:15 | access to field x | AccessorCalls.cs:63:10:63:13 | this access | +| AccessorCalls.cs:63:10:63:21 | access to field Field | AccessorCalls.cs:63:55:63:97 | (..., ...) | | AccessorCalls.cs:63:24:63:27 | this access | AccessorCalls.cs:63:10:63:15 | access to field x | | AccessorCalls.cs:63:24:63:29 | access to field x | AccessorCalls.cs:63:24:63:27 | this access | -| AccessorCalls.cs:63:24:63:34 | access to property Prop | AccessorCalls.cs:63:55:63:97 | (..., ...) | +| AccessorCalls.cs:63:24:63:34 | access to property Prop | AccessorCalls.cs:63:10:63:21 | access to field Field | | AccessorCalls.cs:63:37:63:50 | (..., ...) | AccessorCalls.cs:63:48:63:48 | 0 | | AccessorCalls.cs:63:41:63:44 | this access | AccessorCalls.cs:63:24:63:29 | access to field x | | AccessorCalls.cs:63:41:63:46 | access to field x | AccessorCalls.cs:63:41:63:44 | this access | @@ -4625,6 +4764,48 @@ postDominance | Assignments.cs:18:5:20:5 | {...} | Assignments.cs:17:40:17:40 | enter + | | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:19:16:19:16 | access to parameter x | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:18:5:20:5 | {...} | +| Assignments.cs:27:10:27:23 | exit SetParamSingle | Assignments.cs:27:10:27:23 | exit SetParamSingle (normal) | +| Assignments.cs:27:10:27:23 | exit SetParamSingle (normal) | Assignments.cs:29:9:29:14 | ... = ... | +| Assignments.cs:28:5:30:5 | {...} | Assignments.cs:27:10:27:23 | enter SetParamSingle | +| Assignments.cs:29:9:29:14 | ... = ... | Assignments.cs:29:13:29:14 | 42 | +| Assignments.cs:29:9:29:15 | ...; | Assignments.cs:28:5:30:5 | {...} | +| Assignments.cs:29:13:29:14 | 42 | Assignments.cs:29:9:29:15 | ...; | +| Assignments.cs:32:10:32:22 | exit SetParamMulti | Assignments.cs:32:10:32:22 | exit SetParamMulti (normal) | +| Assignments.cs:32:10:32:22 | exit SetParamMulti (normal) | Assignments.cs:35:9:35:19 | ... = ... | +| Assignments.cs:33:5:36:5 | {...} | Assignments.cs:32:10:32:22 | enter SetParamMulti | +| Assignments.cs:34:9:34:14 | ... = ... | Assignments.cs:34:13:34:14 | 42 | +| Assignments.cs:34:9:34:15 | ...; | Assignments.cs:33:5:36:5 | {...} | +| Assignments.cs:34:13:34:14 | 42 | Assignments.cs:34:9:34:15 | ...; | +| Assignments.cs:35:9:35:19 | ... = ... | Assignments.cs:35:13:35:19 | "Hello" | +| Assignments.cs:35:9:35:20 | ...; | Assignments.cs:34:9:34:14 | ... = ... | +| Assignments.cs:35:13:35:19 | "Hello" | Assignments.cs:35:9:35:20 | ...; | +| Assignments.cs:38:10:38:11 | exit M2 | Assignments.cs:38:10:38:11 | exit M2 (normal) | +| Assignments.cs:38:10:38:11 | exit M2 (normal) | Assignments.cs:44:9:44:58 | call to method SetParamMulti | +| Assignments.cs:39:5:45:5 | {...} | Assignments.cs:38:10:38:11 | enter M2 | +| Assignments.cs:40:9:40:15 | ... ...; | Assignments.cs:39:5:45:5 | {...} | +| Assignments.cs:40:13:40:14 | Int32 x1 | Assignments.cs:40:9:40:15 | ... ...; | +| Assignments.cs:41:9:41:30 | call to method SetParamSingle | Assignments.cs:41:9:41:30 | this access | +| Assignments.cs:41:9:41:30 | this access | Assignments.cs:41:9:41:31 | ...; | +| Assignments.cs:41:9:41:31 | ...; | Assignments.cs:40:13:40:14 | Int32 x1 | +| Assignments.cs:42:9:42:36 | call to method SetParamSingle | Assignments.cs:42:28:42:35 | access to field IntField | +| Assignments.cs:42:9:42:36 | this access | Assignments.cs:42:9:42:37 | ...; | +| Assignments.cs:42:9:42:37 | ...; | Assignments.cs:41:9:41:30 | call to method SetParamSingle | +| Assignments.cs:42:28:42:35 | access to field IntField | Assignments.cs:42:28:42:35 | this access | +| Assignments.cs:42:28:42:35 | this access | Assignments.cs:42:9:42:36 | this access | +| Assignments.cs:43:9:43:55 | call to method SetParamMulti | Assignments.cs:43:44:43:54 | access to field StringField | +| Assignments.cs:43:9:43:55 | this access | Assignments.cs:43:9:43:56 | ...; | +| Assignments.cs:43:9:43:56 | ...; | Assignments.cs:42:9:42:36 | call to method SetParamSingle | +| Assignments.cs:43:34:43:37 | null | Assignments.cs:43:9:43:55 | this access | +| Assignments.cs:43:44:43:54 | access to field StringField | Assignments.cs:43:44:43:54 | this access | +| Assignments.cs:43:44:43:54 | this access | Assignments.cs:43:34:43:37 | null | +| Assignments.cs:44:9:44:58 | call to method SetParamMulti | Assignments.cs:44:47:44:57 | access to field StringField | +| Assignments.cs:44:9:44:58 | this access | Assignments.cs:44:9:44:59 | ...; | +| Assignments.cs:44:9:44:59 | ...; | Assignments.cs:43:9:43:55 | call to method SetParamMulti | +| Assignments.cs:44:27:44:34 | access to field IntField | Assignments.cs:44:27:44:34 | this access | +| Assignments.cs:44:27:44:34 | this access | Assignments.cs:44:9:44:58 | this access | +| Assignments.cs:44:37:44:40 | null | Assignments.cs:44:27:44:34 | access to field IntField | +| Assignments.cs:44:47:44:57 | access to field StringField | Assignments.cs:44:47:44:57 | this access | +| Assignments.cs:44:47:44:57 | this access | Assignments.cs:44:37:44:40 | null | | BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | call to method | | BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | this access | | BreakInTry.cs:1:7:1:16 | exit BreakInTry | BreakInTry.cs:1:7:1:16 | exit BreakInTry (normal) | @@ -4832,13 +5013,68 @@ postDominance | ConditionalAccess.cs:35:9:35:12 | access to property Prop | ConditionalAccess.cs:35:9:35:12 | this access | | ConditionalAccess.cs:35:9:35:12 | this access | ConditionalAccess.cs:35:9:35:25 | ...; | | ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:34:9:34:13 | ... = ... | -| ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith (normal) | -| ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:41:70:41:83 | ... + ... | -| ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | -| ConditionalAccess.cs:41:70:41:78 | ... + ... | ConditionalAccess.cs:41:75:41:78 | ", " | -| ConditionalAccess.cs:41:70:41:83 | ... + ... | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | -| ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | -| ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:70:41:78 | ... + ... | +| ConditionalAccess.cs:42:9:42:11 | exit get_Item | ConditionalAccess.cs:42:9:42:11 | exit get_Item (normal) | +| ConditionalAccess.cs:42:9:42:11 | exit get_Item (normal) | ConditionalAccess.cs:42:15:42:26 | return ...; | +| ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:9:42:11 | enter get_Item | +| ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:22:42:25 | null | +| ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:13:42:28 | {...} | +| ConditionalAccess.cs:43:9:43:11 | exit set_Item | ConditionalAccess.cs:43:9:43:11 | exit set_Item (normal) | +| ConditionalAccess.cs:43:9:43:11 | exit set_Item (normal) | ConditionalAccess.cs:43:13:43:15 | {...} | +| ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:9:43:11 | enter set_Item | +| ConditionalAccess.cs:46:10:46:11 | exit M9 | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:12:54:29 | ... = ... | +| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:46:10:46:11 | enter M9 | +| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:9:48:26 | ...; | +| ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:48:9:48:26 | ...; | ConditionalAccess.cs:47:5:55:5 | {...} | +| ConditionalAccess.cs:48:12:48:25 | ... = ... | ConditionalAccess.cs:48:9:48:20 | access to field IntField | +| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:49:9:49:22 | access to property StringProp | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:48:12:48:25 | ... = ... | +| ConditionalAccess.cs:49:12:49:32 | ... = ... | ConditionalAccess.cs:49:9:49:22 | access to property StringProp | +| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:50:9:50:14 | access to indexer | ConditionalAccess.cs:50:18:50:23 | "Set0" | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:49:12:49:32 | ... = ... | +| ConditionalAccess.cs:50:12:50:23 | ... = ... | ConditionalAccess.cs:50:9:50:14 | access to indexer | +| ConditionalAccess.cs:50:18:50:23 | "Set0" | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:50:12:50:23 | ... = ... | +| ConditionalAccess.cs:51:18:51:31 | ... = ... | ConditionalAccess.cs:51:9:51:26 | access to field IntField | +| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:51:18:51:31 | ... = ... | +| ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:52:9:52:28 | access to property StringProp | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:26 | ...; | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:12:53:25 | ... - ... | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:18:52:38 | ... = ... | +| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:30 | ...; | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:12:54:29 | ... + ... | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:12:53:25 | ... = ... | +| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) | +| ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:60:70:60:83 | ... + ... | +| ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | +| ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:75:60:78 | ", " | +| ConditionalAccess.cs:60:70:60:83 | ... + ... | ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | +| ConditionalAccess.cs:60:75:60:78 | ", " | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | +| ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | ConditionalAccess.cs:60:70:60:78 | ... + ... | | Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | call to method | | Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | this access | | Conditions.cs:1:7:1:16 | exit Conditions | Conditions.cs:1:7:1:16 | exit Conditions (normal) | @@ -5594,11 +5830,13 @@ postDominance | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:209:17:209:47 | if (...) ... | | Finally.cs:209:25:209:47 | throw ...; | Finally.cs:209:31:209:46 | object creation of type ExceptionC | | 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:22 | access to field Field | Finally.cs:211:26:211:28 | "0" | +| Finally.cs:211:13:211:28 | ... = ... | Finally.cs:211:13:211:22 | access to field Field | | 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: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:18 | access to field Field | Finally.cs:213:22:213:24 | "1" | +| Finally.cs:213:9:213:24 | ... = ... | Finally.cs:213:9:213:18 | access to field Field | | Finally.cs:213:9:213:25 | ...; | Finally.cs:211:13:211:28 | ... = ... | | Finally.cs:213:22:213:24 | "1" | Finally.cs:213:9:213:12 | this access | | Finally.cs:216:10:216:12 | exit M11 | Finally.cs:216:10:216:12 | exit M11 (normal) | @@ -5729,8 +5967,9 @@ postDominance | Initializers.cs:3:7:3:18 | exit Initializers | Initializers.cs:3:7:3:18 | exit Initializers (normal) | | Initializers.cs:3:7:3:18 | exit Initializers (normal) | Initializers.cs:3:7:3:18 | {...} | | Initializers.cs:3:7:3:18 | {...} | Initializers.cs:3:7:3:18 | enter Initializers | +| Initializers.cs:5:9:5:9 | access to field F | Initializers.cs:5:13:5:17 | ... + ... | | Initializers.cs:5:9:5:9 | this access | Initializers.cs:3:7:3:18 | enter | -| Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:5:13:5:17 | ... + ... | +| Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:5:9:5:9 | access to field F | | Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:5:9:5:9 | this access | | Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:5:17:5:17 | 1 | | Initializers.cs:5:17:5:17 | 1 | Initializers.cs:5:13:5:13 | access to field H | @@ -5760,7 +5999,8 @@ postDominance | Initializers.cs:14:17:14:53 | object creation of type Initializers | Initializers.cs:14:34:14:35 | "" | | Initializers.cs:14:34:14:35 | "" | Initializers.cs:14:9:14:54 | ... ...; | | Initializers.cs:14:38:14:53 | { ..., ... } | Initializers.cs:14:47:14:51 | ... = ... | -| Initializers.cs:14:40:14:44 | ... = ... | Initializers.cs:14:44:14:44 | 0 | +| Initializers.cs:14:40:14:40 | access to field F | Initializers.cs:14:44:14:44 | 0 | +| Initializers.cs:14:40:14:44 | ... = ... | Initializers.cs:14:40:14:40 | access to field F | | Initializers.cs:14:44:14:44 | 0 | Initializers.cs:14:17:14:53 | object creation of type Initializers | | Initializers.cs:14:47:14:47 | access to property G | Initializers.cs:14:51:14:51 | 1 | | Initializers.cs:14:47:14:51 | ... = ... | Initializers.cs:14:47:14:47 | access to property G | @@ -5773,9 +6013,10 @@ postDominance | Initializers.cs:15:39:15:39 | access to local variable i | Initializers.cs:15:18:15:63 | array creation of type Initializers[] | | Initializers.cs:15:42:15:61 | object creation of type Initializers | Initializers.cs:15:59:15:60 | "" | | Initializers.cs:15:59:15:60 | "" | Initializers.cs:15:39:15:39 | access to local variable i | +| Initializers.cs:18:16:18:16 | access to field H | Initializers.cs:18:20:18:20 | 1 | | Initializers.cs:18:16:18:16 | exit H | Initializers.cs:18:16:18:16 | exit H (normal) | | Initializers.cs:18:16:18:16 | exit H (normal) | Initializers.cs:18:16:18:20 | ... = ... | -| Initializers.cs:18:16:18:20 | ... = ... | Initializers.cs:18:20:18:20 | 1 | +| Initializers.cs:18:16:18:20 | ... = ... | Initializers.cs:18:16:18:16 | access to field H | | Initializers.cs:18:20:18:20 | 1 | Initializers.cs:18:16:18:16 | enter H | | Initializers.cs:20:11:20:23 | call to constructor Object | Initializers.cs:20:11:20:23 | call to method | | Initializers.cs:20:11:20:23 | call to method | Initializers.cs:20:11:20:23 | this access | @@ -5785,16 +6026,19 @@ postDominance | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:20:11:20:23 | {...} | | Initializers.cs:20:11:20:23 | this access | Initializers.cs:20:11:20:23 | enter NoConstructor | | Initializers.cs:20:11:20:23 | {...} | Initializers.cs:20:11:20:23 | call to constructor Object | +| Initializers.cs:22:23:22:23 | access to field F | Initializers.cs:22:27:22:27 | 0 | | Initializers.cs:22:23:22:23 | this access | Initializers.cs:20:11:20:23 | enter | -| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:22:27:22:27 | 0 | +| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:22:23:22:23 | access to field F | | Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:23 | this access | +| Initializers.cs:23:23:23:23 | access to field G | Initializers.cs:23:27:23:27 | 1 | | Initializers.cs:23:23:23:23 | this access | Initializers.cs:22:23:22:27 | ... = ... | -| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:23:27:23:27 | 1 | +| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:23:23:23:23 | access to field G | | Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:23 | this access | | Initializers.cs:26:11:26:13 | exit | Initializers.cs:26:11:26:13 | exit (normal) | | Initializers.cs:26:11:26:13 | exit (normal) | Initializers.cs:28:13:28:17 | ... = ... | +| Initializers.cs:28:13:28:13 | access to field H | Initializers.cs:28:17:28:17 | 2 | | Initializers.cs:28:13:28:13 | this access | Initializers.cs:26:11:26:13 | enter | -| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:28:17:28:17 | 2 | +| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:28:13:28:13 | access to field H | | Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:13 | this access | | Initializers.cs:31:9:31:11 | call to method | Initializers.cs:31:9:31:11 | this access | | Initializers.cs:31:9:31:11 | exit Sub | Initializers.cs:31:9:31:11 | exit Sub (normal) | @@ -5802,16 +6046,18 @@ postDominance | Initializers.cs:31:9:31:11 | this access | Initializers.cs:31:9:31:11 | enter Sub | | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:31:9:31:11 | call to method | | Initializers.cs:31:24:31:33 | {...} | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | +| Initializers.cs:31:26:31:26 | access to field I | Initializers.cs:31:30:31:30 | 3 | | Initializers.cs:31:26:31:26 | this access | Initializers.cs:31:26:31:31 | ...; | -| Initializers.cs:31:26:31:30 | ... = ... | Initializers.cs:31:30:31:30 | 3 | +| Initializers.cs:31:26:31:30 | ... = ... | Initializers.cs:31:26:31:26 | access to field I | | Initializers.cs:31:26:31:31 | ...; | Initializers.cs:31:24:31:33 | {...} | | Initializers.cs:31:30:31:30 | 3 | Initializers.cs:31:26:31:26 | this access | | Initializers.cs:33:9:33:11 | exit Sub | Initializers.cs:33:9:33:11 | exit Sub (normal) | | Initializers.cs:33:9:33:11 | exit Sub (normal) | Initializers.cs:33:31:33:35 | ... = ... | | Initializers.cs:33:22:33:25 | call to constructor Sub | Initializers.cs:33:9:33:11 | enter Sub | | Initializers.cs:33:29:33:38 | {...} | Initializers.cs:33:22:33:25 | call to constructor Sub | +| Initializers.cs:33:31:33:31 | access to field I | Initializers.cs:33:35:33:35 | access to parameter i | | Initializers.cs:33:31:33:31 | this access | Initializers.cs:33:31:33:36 | ...; | -| Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:35:33:35 | access to parameter i | +| Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:31:33:31 | access to field I | | Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:29:33:38 | {...} | | Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:31:33:31 | this access | | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | call to method | @@ -5820,8 +6066,9 @@ postDominance | Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:29:35:37 | ... = ... | | Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | enter Sub | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | +| Initializers.cs:35:29:35:29 | access to field I | Initializers.cs:35:33:35:37 | ... + ... | | Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:29:35:38 | ...; | -| Initializers.cs:35:29:35:37 | ... = ... | Initializers.cs:35:33:35:37 | ... + ... | +| Initializers.cs:35:29:35:37 | ... = ... | Initializers.cs:35:29:35:29 | access to field I | | Initializers.cs:35:29:35:38 | ...; | Initializers.cs:35:27:35:40 | {...} | | Initializers.cs:35:33:35:33 | access to parameter i | Initializers.cs:35:29:35:29 | this access | | Initializers.cs:35:33:35:37 | ... + ... | Initializers.cs:35:37:35:37 | access to parameter j | @@ -5863,7 +6110,8 @@ postDominance | Initializers.cs:57:13:65:9 | Compound compound = ... | Initializers.cs:58:9:65:9 | { ..., ... } | | Initializers.cs:57:24:65:9 | object creation of type Compound | Initializers.cs:57:9:65:10 | ... ...; | | Initializers.cs:58:9:65:9 | { ..., ... } | Initializers.cs:64:13:64:63 | ... = ... | -| Initializers.cs:59:13:59:76 | ... = ... | Initializers.cs:59:31:59:76 | { ..., ... } | +| Initializers.cs:59:13:59:27 | access to field DictionaryField | Initializers.cs:59:31:59:76 | { ..., ... } | +| Initializers.cs:59:13:59:76 | ... = ... | Initializers.cs:59:13:59:27 | access to field DictionaryField | | Initializers.cs:59:31:59:76 | { ..., ... } | Initializers.cs:59:60:59:74 | ... = ... | | Initializers.cs:59:33:59:35 | access to indexer | Initializers.cs:59:39:59:44 | "Zero" | | Initializers.cs:59:33:59:44 | ... = ... | Initializers.cs:59:33:59:35 | access to indexer | @@ -5896,23 +6144,29 @@ postDominance | Initializers.cs:60:65:60:69 | ... + ... | Initializers.cs:60:69:60:69 | 1 | | Initializers.cs:60:69:60:69 | 1 | Initializers.cs:60:65:60:65 | access to parameter i | | Initializers.cs:60:74:60:78 | "One" | Initializers.cs:60:65:60:69 | ... + ... | -| Initializers.cs:61:13:61:58 | ... = ... | Initializers.cs:61:26:61:58 | { ..., ... } | +| Initializers.cs:61:13:61:22 | access to field ArrayField | Initializers.cs:61:26:61:58 | { ..., ... } | +| Initializers.cs:61:13:61:58 | ... = ... | Initializers.cs:61:13:61:22 | access to field ArrayField | | Initializers.cs:61:26:61:58 | { ..., ... } | Initializers.cs:61:42:61:56 | ... = ... | -| Initializers.cs:61:28:61:39 | ... = ... | Initializers.cs:61:34:61:39 | "Zero" | +| Initializers.cs:61:28:61:30 | access to array element | Initializers.cs:61:34:61:39 | "Zero" | +| Initializers.cs:61:28:61:39 | ... = ... | Initializers.cs:61:28:61:30 | access to array element | | Initializers.cs:61:29:61:29 | 0 | Initializers.cs:60:13:60:80 | ... = ... | | Initializers.cs:61:34:61:39 | "Zero" | Initializers.cs:61:29:61:29 | 0 | -| Initializers.cs:61:42:61:56 | ... = ... | Initializers.cs:61:52:61:56 | "One" | +| Initializers.cs:61:42:61:48 | access to array element | Initializers.cs:61:52:61:56 | "One" | +| Initializers.cs:61:42:61:56 | ... = ... | Initializers.cs:61:42:61:48 | access to array element | | Initializers.cs:61:43:61:43 | access to parameter i | Initializers.cs:61:28:61:39 | ... = ... | | Initializers.cs:61:43:61:47 | ... + ... | Initializers.cs:61:47:61:47 | 1 | | Initializers.cs:61:47:61:47 | 1 | Initializers.cs:61:43:61:43 | access to parameter i | | Initializers.cs:61:52:61:56 | "One" | Initializers.cs:61:43:61:47 | ... + ... | -| Initializers.cs:62:13:62:60 | ... = ... | Initializers.cs:62:27:62:60 | { ..., ... } | +| Initializers.cs:62:13:62:23 | access to field ArrayField2 | Initializers.cs:62:27:62:60 | { ..., ... } | +| Initializers.cs:62:13:62:60 | ... = ... | Initializers.cs:62:13:62:23 | access to field ArrayField2 | | Initializers.cs:62:27:62:60 | { ..., ... } | Initializers.cs:62:43:62:58 | ... = ... | -| Initializers.cs:62:29:62:40 | ... = ... | Initializers.cs:62:38:62:40 | "i" | +| Initializers.cs:62:29:62:34 | access to array element | Initializers.cs:62:38:62:40 | "i" | +| Initializers.cs:62:29:62:40 | ... = ... | Initializers.cs:62:29:62:34 | access to array element | | Initializers.cs:62:30:62:30 | 0 | Initializers.cs:61:13:61:58 | ... = ... | | Initializers.cs:62:33:62:33 | 1 | Initializers.cs:62:30:62:30 | 0 | | Initializers.cs:62:38:62:40 | "i" | Initializers.cs:62:33:62:33 | 1 | -| Initializers.cs:62:43:62:58 | ... = ... | Initializers.cs:62:56:62:58 | "1" | +| Initializers.cs:62:43:62:52 | access to array element | Initializers.cs:62:56:62:58 | "1" | +| Initializers.cs:62:43:62:58 | ... = ... | Initializers.cs:62:43:62:52 | access to array element | | Initializers.cs:62:44:62:44 | 1 | Initializers.cs:62:29:62:40 | ... = ... | | Initializers.cs:62:47:62:47 | access to parameter i | Initializers.cs:62:44:62:44 | 1 | | Initializers.cs:62:47:62:51 | ... + ... | Initializers.cs:62:51:62:51 | 0 | @@ -5921,10 +6175,12 @@ postDominance | Initializers.cs:63:13:63:25 | access to property ArrayProperty | Initializers.cs:63:29:63:60 | { ..., ... } | | Initializers.cs:63:13:63:60 | ... = ... | Initializers.cs:63:13:63:25 | access to property ArrayProperty | | Initializers.cs:63:29:63:60 | { ..., ... } | Initializers.cs:63:44:63:58 | ... = ... | -| Initializers.cs:63:31:63:41 | ... = ... | Initializers.cs:63:37:63:41 | "One" | +| Initializers.cs:63:31:63:33 | access to array element | Initializers.cs:63:37:63:41 | "One" | +| Initializers.cs:63:31:63:41 | ... = ... | Initializers.cs:63:31:63:33 | access to array element | | Initializers.cs:63:32:63:32 | 1 | Initializers.cs:62:13:62:60 | ... = ... | | Initializers.cs:63:37:63:41 | "One" | Initializers.cs:63:32:63:32 | 1 | -| Initializers.cs:63:44:63:58 | ... = ... | Initializers.cs:63:54:63:58 | "Two" | +| Initializers.cs:63:44:63:50 | access to array element | Initializers.cs:63:54:63:58 | "Two" | +| Initializers.cs:63:44:63:58 | ... = ... | Initializers.cs:63:44:63:50 | access to array element | | Initializers.cs:63:45:63:45 | access to parameter i | Initializers.cs:63:31:63:41 | ... = ... | | Initializers.cs:63:45:63:49 | ... + ... | Initializers.cs:63:49:63:49 | 2 | | Initializers.cs:63:49:63:49 | 2 | Initializers.cs:63:45:63:45 | access to parameter i | @@ -5932,11 +6188,13 @@ postDominance | Initializers.cs:64:13:64:26 | access to property ArrayProperty2 | Initializers.cs:64:30:64:63 | { ..., ... } | | Initializers.cs:64:13:64:63 | ... = ... | Initializers.cs:64:13:64:26 | access to property ArrayProperty2 | | Initializers.cs:64:30:64:63 | { ..., ... } | Initializers.cs:64:46:64:61 | ... = ... | -| Initializers.cs:64:32:64:43 | ... = ... | Initializers.cs:64:41:64:43 | "i" | +| Initializers.cs:64:32:64:37 | access to array element | Initializers.cs:64:41:64:43 | "i" | +| Initializers.cs:64:32:64:43 | ... = ... | Initializers.cs:64:32:64:37 | access to array element | | Initializers.cs:64:33:64:33 | 0 | Initializers.cs:63:13:63:60 | ... = ... | | Initializers.cs:64:36:64:36 | 1 | Initializers.cs:64:33:64:33 | 0 | | Initializers.cs:64:41:64:43 | "i" | Initializers.cs:64:36:64:36 | 1 | -| Initializers.cs:64:46:64:61 | ... = ... | Initializers.cs:64:59:64:61 | "1" | +| Initializers.cs:64:46:64:55 | access to array element | Initializers.cs:64:59:64:61 | "1" | +| Initializers.cs:64:46:64:61 | ... = ... | Initializers.cs:64:46:64:55 | access to array element | | Initializers.cs:64:47:64:47 | 1 | Initializers.cs:64:32:64:43 | ... = ... | | Initializers.cs:64:50:64:50 | access to parameter i | Initializers.cs:64:47:64:47 | 1 | | Initializers.cs:64:50:64:54 | ... + ... | Initializers.cs:64:54:64:54 | 0 | @@ -6162,7 +6420,8 @@ postDominance | MultiImplementationA.cs:11:7:11:8 | exit | MultiImplementationA.cs:11:7:11:8 | exit (normal) | | MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:24:32:24:34 | ... = ... | | MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationB.cs:22:32:22:34 | ... = ... | -| MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:13:20:13:20 | 0 | +| MultiImplementationA.cs:13:16:13:16 | access to field F | MultiImplementationA.cs:13:20:13:20 | 0 | +| MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:13:16:13:16 | access to field F | | MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:16:13:16 | this access | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | enter get_Item | | MultiImplementationA.cs:14:31:14:31 | exit get_Item (abnormal) | MultiImplementationB.cs:12:31:12:40 | throw ... | @@ -6188,8 +6447,9 @@ postDominance | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | MultiImplementationA.cs:20:24:20:28 | ... = ... | | MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | enter C2 | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | +| MultiImplementationA.cs:20:24:20:24 | access to field F | MultiImplementationA.cs:20:28:20:28 | access to parameter i | | MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:24:20:29 | ...; | -| MultiImplementationA.cs:20:24:20:28 | ... = ... | MultiImplementationA.cs:20:28:20:28 | access to parameter i | +| MultiImplementationA.cs:20:24:20:28 | ... = ... | MultiImplementationA.cs:20:24:20:24 | access to field F | | MultiImplementationA.cs:20:24:20:29 | ...; | MultiImplementationA.cs:20:22:20:31 | {...} | | MultiImplementationA.cs:20:28:20:28 | access to parameter i | MultiImplementationA.cs:20:24:20:24 | this access | | MultiImplementationA.cs:21:12:21:13 | exit C2 | MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | @@ -6241,7 +6501,8 @@ postDominance | MultiImplementationB.cs:4:34:4:34 | 1 | MultiImplementationB.cs:4:25:4:37 | {...} | | MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | enter set_P2 | | MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | enter M | -| MultiImplementationB.cs:11:16:11:20 | ... = ... | MultiImplementationB.cs:11:20:11:20 | 1 | +| MultiImplementationB.cs:11:16:11:16 | access to field F | MultiImplementationB.cs:11:20:11:20 | 1 | +| MultiImplementationB.cs:11:16:11:20 | ... = ... | MultiImplementationB.cs:11:16:11:16 | access to field F | | MultiImplementationB.cs:11:20:11:20 | 1 | MultiImplementationB.cs:11:16:11:16 | this access | | MultiImplementationB.cs:12:31:12:40 | throw ... | MultiImplementationB.cs:12:37:12:40 | null | | MultiImplementationB.cs:13:42:13:52 | throw ...; | MultiImplementationB.cs:13:48:13:51 | null | @@ -6340,8 +6601,9 @@ postDominance | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | PartialImplementationA.cs:3:27:3:29 | {...} | | PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | enter Partial | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | +| PartialImplementationB.cs:3:16:3:16 | access to field F | PartialImplementationB.cs:3:20:3:20 | 0 | | PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationA.cs:1:15:1:21 | enter | -| PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:3:20:3:20 | 0 | +| PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:3:16:3:16 | access to field F | | PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:16:3:16 | this access | | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | PartialImplementationB.cs:4:12:4:18 | call to method | | PartialImplementationB.cs:4:12:4:18 | call to method | PartialImplementationB.cs:4:12:4:18 | this access | @@ -7233,8 +7495,9 @@ postDominance | cflow.cs:127:62:127:64 | exit set_Prop | cflow.cs:127:62:127:64 | exit set_Prop (normal) | | cflow.cs:127:62:127:64 | exit set_Prop (normal) | cflow.cs:127:68:127:80 | ... = ... | | cflow.cs:127:66:127:83 | {...} | cflow.cs:127:62:127:64 | enter set_Prop | +| cflow.cs:127:68:127:72 | access to field Field | cflow.cs:127:76:127:80 | access to parameter value | | cflow.cs:127:68:127:72 | this access | cflow.cs:127:68:127:81 | ...; | -| cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:76:127:80 | access to parameter value | +| cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:68:127:72 | access to field Field | | cflow.cs:127:68:127:81 | ...; | cflow.cs:127:66:127:83 | {...} | | cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:68:127:72 | this access | | cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | call to method | @@ -7243,8 +7506,9 @@ postDominance | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:131:9:131:17 | ... = ... | | cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | enter ControlFlow | | cflow.cs:130:5:132:5 | {...} | cflow.cs:129:5:129:15 | call to constructor Object | +| cflow.cs:131:9:131:13 | access to field Field | cflow.cs:131:17:131:17 | access to parameter s | | cflow.cs:131:9:131:13 | this access | cflow.cs:131:9:131:18 | ...; | -| cflow.cs:131:9:131:17 | ... = ... | cflow.cs:131:17:131:17 | access to parameter s | +| cflow.cs:131:9:131:17 | ... = ... | cflow.cs:131:9:131:13 | access to field Field | | cflow.cs:131:9:131:18 | ...; | cflow.cs:130:5:132:5 | {...} | | cflow.cs:131:17:131:17 | access to parameter s | cflow.cs:131:9:131:13 | this access | | cflow.cs:134:5:134:15 | exit ControlFlow | cflow.cs:134:5:134:15 | exit ControlFlow (normal) | @@ -7456,10 +7720,11 @@ postDominance | cflow.cs:210:9:221:36 | do ... while (...); | cflow.cs:209:5:222:5 | {...} | | cflow.cs:211:9:221:9 | {...} | cflow.cs:210:9:221:36 | do ... while (...); | | cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:17 | this access | +| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:24 | ... + ... | | cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access | | cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:25 | ...; | | cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:22:212:24 | "a" | -| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:212:13:212:24 | ... + ... | +| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:212:13:212:17 | access to field Field | | cflow.cs:212:13:212:25 | ...; | cflow.cs:211:9:221:9 | {...} | | cflow.cs:212:22:212:24 | "a" | cflow.cs:212:13:212:17 | access to field Field | | cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:212:13:212:24 | ... = ... | @@ -7491,10 +7756,11 @@ postDominance | cflow.cs:226:62:226:63 | 10 | cflow.cs:226:57:226:59 | "a" | | cflow.cs:227:9:237:9 | {...} | cflow.cs:226:22:226:22 | String x | | cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:17 | this access | +| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:22 | ... + ... | | cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access | | cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:23 | ...; | | cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:22:228:22 | access to local variable x | -| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:228:13:228:22 | ... + ... | +| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:228:13:228:17 | access to field Field | | cflow.cs:228:13:228:23 | ...; | cflow.cs:227:9:237:9 | {...} | | cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:13:228:17 | access to field Field | | cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:228:13:228:22 | ... = ... | @@ -8629,6 +8895,9 @@ blockDominance | Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | enter M | | Assignments.cs:14:18:14:35 | enter (...) => ... | Assignments.cs:14:18:14:35 | enter (...) => ... | | Assignments.cs:17:40:17:40 | enter + | Assignments.cs:17:40:17:40 | enter + | +| Assignments.cs:27:10:27:23 | enter SetParamSingle | Assignments.cs:27:10:27:23 | enter SetParamSingle | +| Assignments.cs:32:10:32:22 | enter SetParamMulti | Assignments.cs:32:10:32:22 | enter SetParamMulti | +| Assignments.cs:38:10:38:11 | enter M2 | Assignments.cs:38:10:38:11 | enter M2 | | BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | enter BreakInTry | | BreakInTry.cs:3:10:3:11 | enter M1 | BreakInTry.cs:3:10:3:11 | enter M1 | | BreakInTry.cs:3:10:3:11 | enter M1 | BreakInTry.cs:3:10:3:11 | exit M1 (normal) | @@ -8805,7 +9074,127 @@ blockDominance | ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:35:9:35:24 | call to method Out | | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | | ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:24 | call to method Out | -| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | +| ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | enter get_Item | +| ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | enter set_Item | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | enter M9 | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:53:9:53:26 | ...; | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:54:9:54:30 | ...; | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | +| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | | Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | enter Conditions | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:3:10:3:19 | enter IncrOrDecr | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | @@ -12456,6 +12845,9 @@ postBlockDominance | Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | enter M | | Assignments.cs:14:18:14:35 | enter (...) => ... | Assignments.cs:14:18:14:35 | enter (...) => ... | | Assignments.cs:17:40:17:40 | enter + | Assignments.cs:17:40:17:40 | enter + | +| Assignments.cs:27:10:27:23 | enter SetParamSingle | Assignments.cs:27:10:27:23 | enter SetParamSingle | +| Assignments.cs:32:10:32:22 | enter SetParamMulti | Assignments.cs:32:10:32:22 | enter SetParamMulti | +| Assignments.cs:38:10:38:11 | enter M2 | Assignments.cs:38:10:38:11 | enter M2 | | BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | enter BreakInTry | | BreakInTry.cs:3:10:3:11 | enter M1 | BreakInTry.cs:3:10:3:11 | enter M1 | | BreakInTry.cs:3:10:3:11 | exit M1 (normal) | BreakInTry.cs:3:10:3:11 | enter M1 | @@ -12610,7 +13002,103 @@ postBlockDominance | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:35:9:35:24 | call to method Out | | ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:24 | call to method Out | -| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | +| ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | enter get_Item | +| ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | enter set_Item | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | enter M9 | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | enter M9 | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:53:9:53:26 | ...; | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:9:54:30 | ...; | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:46:10:46:11 | enter M9 | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:46:10:46:11 | enter M9 | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:46:10:46:11 | enter M9 | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:46:10:46:11 | enter M9 | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:46:10:46:11 | enter M9 | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:46:10:46:11 | enter M9 | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | | Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | enter Conditions | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:3:10:3:19 | enter IncrOrDecr | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | enter IncrOrDecr | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected index 14dcdb56b26..8f48cd46fc3 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected @@ -27,6 +27,7 @@ nodeEnclosing | AccessorCalls.cs:10:10:10:11 | exit M1 (normal) | AccessorCalls.cs:10:10:10:11 | M1 | | AccessorCalls.cs:11:5:17:5 | {...} | AccessorCalls.cs:10:10:10:11 | M1 | | AccessorCalls.cs:12:9:12:12 | this access | AccessorCalls.cs:10:10:10:11 | M1 | +| AccessorCalls.cs:12:9:12:18 | access to field Field | AccessorCalls.cs:10:10:10:11 | M1 | | AccessorCalls.cs:12:9:12:31 | ... = ... | AccessorCalls.cs:10:10:10:11 | M1 | | AccessorCalls.cs:12:9:12:32 | ...; | AccessorCalls.cs:10:10:10:11 | M1 | | AccessorCalls.cs:12:22:12:25 | this access | AccessorCalls.cs:10:10:10:11 | M1 | @@ -61,6 +62,7 @@ nodeEnclosing | AccessorCalls.cs:20:5:26:5 | {...} | AccessorCalls.cs:19:10:19:11 | M2 | | AccessorCalls.cs:21:9:21:12 | this access | AccessorCalls.cs:19:10:19:11 | M2 | | AccessorCalls.cs:21:9:21:14 | access to field x | AccessorCalls.cs:19:10:19:11 | M2 | +| AccessorCalls.cs:21:9:21:20 | access to field Field | AccessorCalls.cs:19:10:19:11 | M2 | | AccessorCalls.cs:21:9:21:35 | ... = ... | AccessorCalls.cs:19:10:19:11 | M2 | | AccessorCalls.cs:21:9:21:36 | ...; | AccessorCalls.cs:19:10:19:11 | M2 | | AccessorCalls.cs:21:24:21:27 | this access | AccessorCalls.cs:19:10:19:11 | M2 | @@ -140,6 +142,7 @@ nodeEnclosing | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:42:10:42:11 | M5 | +| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:42:10:42:11 | M5 | @@ -175,6 +178,7 @@ nodeEnclosing | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:49:10:49:11 | M6 | +| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:49:10:49:11 | M6 | @@ -216,6 +220,7 @@ nodeEnclosing | AccessorCalls.cs:58:9:58:85 | ... = ... | AccessorCalls.cs:56:10:56:11 | M7 | | AccessorCalls.cs:58:9:58:86 | ...; | AccessorCalls.cs:56:10:56:11 | M7 | | AccessorCalls.cs:58:10:58:13 | this access | AccessorCalls.cs:56:10:56:11 | M7 | +| AccessorCalls.cs:58:10:58:19 | access to field Field | AccessorCalls.cs:56:10:56:11 | M7 | | AccessorCalls.cs:58:22:58:25 | this access | AccessorCalls.cs:56:10:56:11 | M7 | | AccessorCalls.cs:58:22:58:30 | access to property Prop | AccessorCalls.cs:56:10:56:11 | M7 | | AccessorCalls.cs:58:33:58:44 | (..., ...) | AccessorCalls.cs:56:10:56:11 | M7 | @@ -241,6 +246,7 @@ nodeEnclosing | AccessorCalls.cs:63:9:63:98 | ...; | AccessorCalls.cs:61:10:61:11 | M8 | | AccessorCalls.cs:63:10:63:13 | this access | AccessorCalls.cs:61:10:61:11 | M8 | | AccessorCalls.cs:63:10:63:15 | access to field x | AccessorCalls.cs:61:10:61:11 | M8 | +| AccessorCalls.cs:63:10:63:21 | access to field Field | AccessorCalls.cs:61:10:61:11 | M8 | | AccessorCalls.cs:63:24:63:27 | this access | AccessorCalls.cs:61:10:61:11 | M8 | | AccessorCalls.cs:63:24:63:29 | access to field x | AccessorCalls.cs:61:10:61:11 | M8 | | AccessorCalls.cs:63:24:63:34 | access to property Prop | AccessorCalls.cs:61:10:61:11 | M8 | @@ -833,6 +839,51 @@ nodeEnclosing | Assignments.cs:18:5:20:5 | {...} | Assignments.cs:17:40:17:40 | + | | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:17:40:17:40 | + | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:17:40:17:40 | + | +| Assignments.cs:27:10:27:23 | enter SetParamSingle | Assignments.cs:27:10:27:23 | SetParamSingle | +| Assignments.cs:27:10:27:23 | exit SetParamSingle | Assignments.cs:27:10:27:23 | SetParamSingle | +| Assignments.cs:27:10:27:23 | exit SetParamSingle (normal) | Assignments.cs:27:10:27:23 | SetParamSingle | +| Assignments.cs:28:5:30:5 | {...} | Assignments.cs:27:10:27:23 | SetParamSingle | +| Assignments.cs:29:9:29:14 | ... = ... | Assignments.cs:27:10:27:23 | SetParamSingle | +| Assignments.cs:29:9:29:15 | ...; | Assignments.cs:27:10:27:23 | SetParamSingle | +| Assignments.cs:29:13:29:14 | 42 | Assignments.cs:27:10:27:23 | SetParamSingle | +| Assignments.cs:32:10:32:22 | enter SetParamMulti | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:32:10:32:22 | exit SetParamMulti | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:32:10:32:22 | exit SetParamMulti (normal) | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:33:5:36:5 | {...} | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:34:9:34:14 | ... = ... | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:34:9:34:15 | ...; | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:34:13:34:14 | 42 | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:35:9:35:19 | ... = ... | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:35:9:35:20 | ...; | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:35:13:35:19 | "Hello" | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:38:10:38:11 | enter M2 | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:38:10:38:11 | exit M2 | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:38:10:38:11 | exit M2 (normal) | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:39:5:45:5 | {...} | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:40:9:40:15 | ... ...; | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:40:13:40:14 | Int32 x1 | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:41:9:41:30 | call to method SetParamSingle | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:41:9:41:30 | this access | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:41:9:41:31 | ...; | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:42:9:42:36 | call to method SetParamSingle | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:42:9:42:36 | this access | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:42:9:42:37 | ...; | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:42:28:42:35 | access to field IntField | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:42:28:42:35 | this access | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:43:9:43:55 | call to method SetParamMulti | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:43:9:43:55 | this access | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:43:9:43:56 | ...; | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:43:34:43:37 | null | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:43:44:43:54 | access to field StringField | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:43:44:43:54 | this access | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:44:9:44:58 | call to method SetParamMulti | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:44:9:44:58 | this access | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:44:9:44:59 | ...; | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:44:27:44:34 | access to field IntField | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:44:27:44:34 | this access | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:44:37:44:40 | null | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:44:47:44:57 | access to field StringField | Assignments.cs:38:10:38:11 | M2 | +| Assignments.cs:44:47:44:57 | this access | Assignments.cs:38:10:38:11 | M2 | | BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | BreakInTry | | BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | BreakInTry | | BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | BreakInTry | @@ -1071,14 +1122,72 @@ nodeEnclosing | ConditionalAccess.cs:35:9:35:12 | this access | ConditionalAccess.cs:32:10:32:11 | M8 | | ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:32:10:32:11 | M8 | | ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:32:10:32:11 | M8 | -| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | -| ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | -| ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | -| ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | -| ConditionalAccess.cs:41:70:41:78 | ... + ... | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | -| ConditionalAccess.cs:41:70:41:83 | ... + ... | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | -| ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | -| ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | +| ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | get_Item | +| ConditionalAccess.cs:42:9:42:11 | exit get_Item | ConditionalAccess.cs:42:9:42:11 | get_Item | +| ConditionalAccess.cs:42:9:42:11 | exit get_Item (normal) | ConditionalAccess.cs:42:9:42:11 | get_Item | +| ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:9:42:11 | get_Item | +| ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:9:42:11 | get_Item | +| ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:9:42:11 | get_Item | +| ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | set_Item | +| ConditionalAccess.cs:43:9:43:11 | exit set_Item | ConditionalAccess.cs:43:9:43:11 | set_Item | +| ConditionalAccess.cs:43:9:43:11 | exit set_Item (normal) | ConditionalAccess.cs:43:9:43:11 | set_Item | +| ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:9:43:11 | set_Item | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:46:10:46:11 | exit M9 | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:48:9:48:26 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:48:12:48:25 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:49:9:49:22 | access to property StringProp | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:49:12:49:32 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:50:9:50:14 | access to indexer | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:50:12:50:23 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:50:18:50:23 | "Set0" | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:51:18:51:31 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | +| ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | +| ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | +| ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | +| ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | +| ConditionalAccess.cs:60:70:60:83 | ... + ... | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | +| ConditionalAccess.cs:60:75:60:78 | ", " | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | +| ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | | Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | Conditions | | Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | Conditions | | Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | Conditions | @@ -1943,10 +2052,12 @@ nodeEnclosing | Finally.cs:209:25:209:47 | throw ...; | 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 | this access | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:211:13:211:22 | access to field Field | 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:29 | ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:211:26:211:28 | "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:18 | access to field Field | 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 | | Finally.cs:213:22:213:24 | "1" | Finally.cs:195:10:195:12 | M10 | @@ -2095,6 +2206,7 @@ nodeEnclosing | Initializers.cs:3:7:3:18 | exit Initializers | Initializers.cs:3:7:3:18 | Initializers | | Initializers.cs:3:7:3:18 | exit Initializers (normal) | Initializers.cs:3:7:3:18 | Initializers | | Initializers.cs:3:7:3:18 | {...} | Initializers.cs:3:7:3:18 | Initializers | +| Initializers.cs:5:9:5:9 | access to field F | Initializers.cs:3:7:3:18 | | | Initializers.cs:5:9:5:9 | this access | Initializers.cs:3:7:3:18 | | | Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:3:7:3:18 | | | Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:3:7:3:18 | | @@ -2129,6 +2241,7 @@ nodeEnclosing | Initializers.cs:14:17:14:53 | object creation of type Initializers | Initializers.cs:12:10:12:10 | M | | Initializers.cs:14:34:14:35 | "" | Initializers.cs:12:10:12:10 | M | | Initializers.cs:14:38:14:53 | { ..., ... } | Initializers.cs:12:10:12:10 | M | +| Initializers.cs:14:40:14:40 | access to field F | Initializers.cs:12:10:12:10 | M | | Initializers.cs:14:40:14:44 | ... = ... | Initializers.cs:12:10:12:10 | M | | Initializers.cs:14:44:14:44 | 0 | Initializers.cs:12:10:12:10 | M | | Initializers.cs:14:47:14:47 | access to property G | Initializers.cs:12:10:12:10 | M | @@ -2152,15 +2265,18 @@ nodeEnclosing | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:20:11:20:23 | NoConstructor | | Initializers.cs:20:11:20:23 | this access | Initializers.cs:20:11:20:23 | NoConstructor | | Initializers.cs:20:11:20:23 | {...} | Initializers.cs:20:11:20:23 | NoConstructor | +| Initializers.cs:22:23:22:23 | access to field F | Initializers.cs:20:11:20:23 | | | Initializers.cs:22:23:22:23 | this access | Initializers.cs:20:11:20:23 | | | Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:20:11:20:23 | | | Initializers.cs:22:27:22:27 | 0 | Initializers.cs:20:11:20:23 | | +| Initializers.cs:23:23:23:23 | access to field G | Initializers.cs:20:11:20:23 | | | Initializers.cs:23:23:23:23 | this access | Initializers.cs:20:11:20:23 | | | Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | | | Initializers.cs:23:27:23:27 | 1 | Initializers.cs:20:11:20:23 | | | Initializers.cs:26:11:26:13 | enter | Initializers.cs:26:11:26:13 | | | Initializers.cs:26:11:26:13 | exit | Initializers.cs:26:11:26:13 | | | Initializers.cs:26:11:26:13 | exit (normal) | Initializers.cs:26:11:26:13 | | +| Initializers.cs:28:13:28:13 | access to field H | Initializers.cs:26:11:26:13 | | | Initializers.cs:28:13:28:13 | this access | Initializers.cs:26:11:26:13 | | | Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:26:11:26:13 | | | Initializers.cs:28:17:28:17 | 2 | Initializers.cs:26:11:26:13 | | @@ -2171,6 +2287,7 @@ nodeEnclosing | Initializers.cs:31:9:31:11 | this access | Initializers.cs:31:9:31:11 | Sub | | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:31:9:31:11 | Sub | | Initializers.cs:31:24:31:33 | {...} | Initializers.cs:31:9:31:11 | Sub | +| Initializers.cs:31:26:31:26 | access to field I | Initializers.cs:31:9:31:11 | Sub | | Initializers.cs:31:26:31:26 | this access | Initializers.cs:31:9:31:11 | Sub | | Initializers.cs:31:26:31:30 | ... = ... | Initializers.cs:31:9:31:11 | Sub | | Initializers.cs:31:26:31:31 | ...; | Initializers.cs:31:9:31:11 | Sub | @@ -2180,6 +2297,7 @@ nodeEnclosing | Initializers.cs:33:9:33:11 | exit Sub (normal) | Initializers.cs:33:9:33:11 | Sub | | Initializers.cs:33:22:33:25 | call to constructor Sub | Initializers.cs:33:9:33:11 | Sub | | Initializers.cs:33:29:33:38 | {...} | Initializers.cs:33:9:33:11 | Sub | +| Initializers.cs:33:31:33:31 | access to field I | Initializers.cs:33:9:33:11 | Sub | | Initializers.cs:33:31:33:31 | this access | Initializers.cs:33:9:33:11 | Sub | | Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:9:33:11 | Sub | | Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:9:33:11 | Sub | @@ -2191,6 +2309,7 @@ nodeEnclosing | Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:9:35:11 | Sub | +| Initializers.cs:35:29:35:29 | access to field I | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:29:35:37 | ... = ... | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:29:35:38 | ...; | Initializers.cs:35:9:35:11 | Sub | @@ -2237,6 +2356,7 @@ nodeEnclosing | Initializers.cs:57:13:65:9 | Compound compound = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:57:24:65:9 | object creation of type Compound | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:58:9:65:9 | { ..., ... } | Initializers.cs:51:10:51:13 | Test | +| Initializers.cs:59:13:59:27 | access to field DictionaryField | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:59:13:59:76 | ... = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:59:31:59:76 | { ..., ... } | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:59:33:59:35 | access to indexer | Initializers.cs:51:10:51:13 | Test | @@ -2270,22 +2390,28 @@ nodeEnclosing | Initializers.cs:60:65:60:69 | ... + ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:60:69:60:69 | 1 | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:60:74:60:78 | "One" | Initializers.cs:51:10:51:13 | Test | +| Initializers.cs:61:13:61:22 | access to field ArrayField | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:61:13:61:58 | ... = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:61:26:61:58 | { ..., ... } | Initializers.cs:51:10:51:13 | Test | +| Initializers.cs:61:28:61:30 | access to array element | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:61:28:61:39 | ... = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:61:29:61:29 | 0 | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:61:34:61:39 | "Zero" | Initializers.cs:51:10:51:13 | Test | +| Initializers.cs:61:42:61:48 | access to array element | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:61:42:61:56 | ... = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:61:43:61:43 | access to parameter i | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:61:43:61:47 | ... + ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:61:47:61:47 | 1 | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:61:52:61:56 | "One" | Initializers.cs:51:10:51:13 | Test | +| Initializers.cs:62:13:62:23 | access to field ArrayField2 | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:62:13:62:60 | ... = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:62:27:62:60 | { ..., ... } | Initializers.cs:51:10:51:13 | Test | +| Initializers.cs:62:29:62:34 | access to array element | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:62:29:62:40 | ... = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:62:30:62:30 | 0 | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:62:33:62:33 | 1 | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:62:38:62:40 | "i" | Initializers.cs:51:10:51:13 | Test | +| Initializers.cs:62:43:62:52 | access to array element | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:62:43:62:58 | ... = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:62:44:62:44 | 1 | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:62:47:62:47 | access to parameter i | Initializers.cs:51:10:51:13 | Test | @@ -2295,9 +2421,11 @@ nodeEnclosing | Initializers.cs:63:13:63:25 | access to property ArrayProperty | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:63:13:63:60 | ... = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:63:29:63:60 | { ..., ... } | Initializers.cs:51:10:51:13 | Test | +| Initializers.cs:63:31:63:33 | access to array element | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:63:31:63:41 | ... = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:63:32:63:32 | 1 | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:63:37:63:41 | "One" | Initializers.cs:51:10:51:13 | Test | +| Initializers.cs:63:44:63:50 | access to array element | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:63:44:63:58 | ... = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:63:45:63:45 | access to parameter i | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:63:45:63:49 | ... + ... | Initializers.cs:51:10:51:13 | Test | @@ -2306,10 +2434,12 @@ nodeEnclosing | Initializers.cs:64:13:64:26 | access to property ArrayProperty2 | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:64:13:64:63 | ... = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:64:30:64:63 | { ..., ... } | Initializers.cs:51:10:51:13 | Test | +| Initializers.cs:64:32:64:37 | access to array element | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:64:32:64:43 | ... = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:64:33:64:33 | 0 | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:64:36:64:36 | 1 | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:64:41:64:43 | "i" | Initializers.cs:51:10:51:13 | Test | +| Initializers.cs:64:46:64:55 | access to array element | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:64:46:64:61 | ... = ... | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:64:47:64:47 | 1 | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:64:50:64:50 | access to parameter i | Initializers.cs:51:10:51:13 | Test | @@ -2565,6 +2695,7 @@ nodeEnclosing | MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationA.cs:11:7:11:8 | exit | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationA.cs:13:16:13:16 | access to field F | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:11:7:11:8 | | @@ -2601,6 +2732,7 @@ nodeEnclosing | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:12:20:13 | C2 | +| MultiImplementationA.cs:20:24:20:24 | access to field F | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:24:20:28 | ... = ... | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:24:20:29 | ...; | MultiImplementationA.cs:20:12:20:13 | C2 | @@ -2667,6 +2799,7 @@ nodeEnclosing | MultiImplementationB.cs:4:34:4:34 | 1 | MultiImplementationA.cs:7:21:7:23 | get_P2 | | MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | set_P2 | | MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | M | +| MultiImplementationB.cs:11:16:11:16 | access to field F | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationB.cs:11:16:11:20 | ... = ... | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationB.cs:11:20:11:20 | 1 | MultiImplementationA.cs:11:7:11:8 | | @@ -2794,6 +2927,7 @@ nodeEnclosing | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | PartialImplementationA.cs:3:12:3:18 | Partial | | PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | Partial | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | Partial | +| PartialImplementationB.cs:3:16:3:16 | access to field F | PartialImplementationA.cs:1:15:1:21 | | | PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationA.cs:1:15:1:21 | | | PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationA.cs:1:15:1:21 | | | PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationA.cs:1:15:1:21 | | @@ -3824,6 +3958,7 @@ nodeEnclosing | cflow.cs:127:62:127:64 | exit set_Prop | cflow.cs:127:62:127:64 | set_Prop | | cflow.cs:127:62:127:64 | exit set_Prop (normal) | cflow.cs:127:62:127:64 | set_Prop | | cflow.cs:127:66:127:83 | {...} | cflow.cs:127:62:127:64 | set_Prop | +| cflow.cs:127:68:127:72 | access to field Field | cflow.cs:127:62:127:64 | set_Prop | | cflow.cs:127:68:127:72 | this access | cflow.cs:127:62:127:64 | set_Prop | | cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:62:127:64 | set_Prop | | cflow.cs:127:68:127:81 | ...; | cflow.cs:127:62:127:64 | set_Prop | @@ -3835,6 +3970,7 @@ nodeEnclosing | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:130:5:132:5 | {...} | cflow.cs:129:5:129:15 | ControlFlow | +| cflow.cs:131:9:131:13 | access to field Field | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:131:9:131:13 | this access | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:131:9:131:17 | ... = ... | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:131:9:131:18 | ...; | cflow.cs:129:5:129:15 | ControlFlow | @@ -4068,6 +4204,7 @@ nodeEnclosing | cflow.cs:210:9:221:36 | do ... while (...); | cflow.cs:208:10:208:11 | Do | | cflow.cs:211:9:221:9 | {...} | cflow.cs:208:10:208:11 | Do | | cflow.cs:212:13:212:17 | access to field Field | cflow.cs:208:10:208:11 | Do | +| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:208:10:208:11 | Do | | cflow.cs:212:13:212:17 | this access | cflow.cs:208:10:208:11 | Do | | cflow.cs:212:13:212:17 | this access | cflow.cs:208:10:208:11 | Do | | cflow.cs:212:13:212:24 | ... + ... | cflow.cs:208:10:208:11 | Do | @@ -4106,6 +4243,7 @@ nodeEnclosing | cflow.cs:226:62:226:63 | 10 | cflow.cs:224:10:224:16 | Foreach | | cflow.cs:227:9:237:9 | {...} | cflow.cs:224:10:224:16 | Foreach | | cflow.cs:228:13:228:17 | access to field Field | cflow.cs:224:10:224:16 | Foreach | +| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:224:10:224:16 | Foreach | | cflow.cs:228:13:228:17 | this access | cflow.cs:224:10:224:16 | Foreach | | cflow.cs:228:13:228:17 | this access | cflow.cs:224:10:224:16 | Foreach | | cflow.cs:228:13:228:22 | ... + ... | cflow.cs:224:10:224:16 | Foreach | @@ -4445,6 +4583,9 @@ blockEnclosing | Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | M | | Assignments.cs:14:18:14:35 | enter (...) => ... | Assignments.cs:14:18:14:35 | (...) => ... | | Assignments.cs:17:40:17:40 | enter + | Assignments.cs:17:40:17:40 | + | +| Assignments.cs:27:10:27:23 | enter SetParamSingle | Assignments.cs:27:10:27:23 | SetParamSingle | +| Assignments.cs:32:10:32:22 | enter SetParamMulti | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:38:10:38:11 | enter M2 | Assignments.cs:38:10:38:11 | M2 | | BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | BreakInTry | | BreakInTry.cs:3:10:3:11 | enter M1 | BreakInTry.cs:3:10:3:11 | M1 | | BreakInTry.cs:3:10:3:11 | exit M1 (normal) | BreakInTry.cs:3:10:3:11 | M1 | @@ -4522,7 +4663,30 @@ blockEnclosing | ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:32:10:32:11 | M8 | | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:32:10:32:11 | M8 | | ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:32:10:32:11 | M8 | -| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | +| ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | get_Item | +| ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | set_Item | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | | Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | Conditions | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | IncrOrDecr | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected b/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected index da8fe4664f5..410916afabd 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected @@ -722,6 +722,42 @@ | Assignments.cs:18:5:20:5 | {...} | Assignments.cs:18:5:20:5 | {...} | | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:19:16:19:16 | access to parameter x | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:16:19:16 | access to parameter x | +| Assignments.cs:28:5:30:5 | {...} | Assignments.cs:28:5:30:5 | {...} | +| Assignments.cs:29:9:29:14 | ... = ... | Assignments.cs:29:13:29:14 | 42 | +| Assignments.cs:29:9:29:15 | ...; | Assignments.cs:29:9:29:15 | ...; | +| Assignments.cs:29:13:29:14 | 42 | Assignments.cs:29:13:29:14 | 42 | +| Assignments.cs:33:5:36:5 | {...} | Assignments.cs:33:5:36:5 | {...} | +| Assignments.cs:34:9:34:14 | ... = ... | Assignments.cs:34:13:34:14 | 42 | +| Assignments.cs:34:9:34:15 | ...; | Assignments.cs:34:9:34:15 | ...; | +| Assignments.cs:34:13:34:14 | 42 | Assignments.cs:34:13:34:14 | 42 | +| Assignments.cs:35:9:35:19 | ... = ... | Assignments.cs:35:13:35:19 | "Hello" | +| Assignments.cs:35:9:35:20 | ...; | Assignments.cs:35:9:35:20 | ...; | +| Assignments.cs:35:13:35:19 | "Hello" | Assignments.cs:35:13:35:19 | "Hello" | +| Assignments.cs:39:5:45:5 | {...} | Assignments.cs:39:5:45:5 | {...} | +| Assignments.cs:40:9:40:15 | ... ...; | Assignments.cs:40:9:40:15 | ... ...; | +| Assignments.cs:40:13:40:14 | Int32 x1 | Assignments.cs:40:13:40:14 | Int32 x1 | +| Assignments.cs:41:9:41:30 | call to method SetParamSingle | Assignments.cs:41:9:41:30 | this access | +| Assignments.cs:41:9:41:30 | this access | Assignments.cs:41:9:41:30 | this access | +| Assignments.cs:41:9:41:31 | ...; | Assignments.cs:41:9:41:31 | ...; | +| Assignments.cs:42:9:42:36 | call to method SetParamSingle | Assignments.cs:42:9:42:36 | this access | +| Assignments.cs:42:9:42:36 | this access | Assignments.cs:42:9:42:36 | this access | +| Assignments.cs:42:9:42:37 | ...; | Assignments.cs:42:9:42:37 | ...; | +| Assignments.cs:42:28:42:35 | access to field IntField | Assignments.cs:42:28:42:35 | this access | +| Assignments.cs:42:28:42:35 | this access | Assignments.cs:42:28:42:35 | this access | +| Assignments.cs:43:9:43:55 | call to method SetParamMulti | Assignments.cs:43:9:43:55 | this access | +| Assignments.cs:43:9:43:55 | this access | Assignments.cs:43:9:43:55 | this access | +| Assignments.cs:43:9:43:56 | ...; | Assignments.cs:43:9:43:56 | ...; | +| Assignments.cs:43:34:43:37 | null | Assignments.cs:43:34:43:37 | null | +| Assignments.cs:43:44:43:54 | access to field StringField | Assignments.cs:43:44:43:54 | this access | +| Assignments.cs:43:44:43:54 | this access | Assignments.cs:43:44:43:54 | this access | +| Assignments.cs:44:9:44:58 | call to method SetParamMulti | Assignments.cs:44:9:44:58 | this access | +| Assignments.cs:44:9:44:58 | this access | Assignments.cs:44:9:44:58 | this access | +| Assignments.cs:44:9:44:59 | ...; | Assignments.cs:44:9:44:59 | ...; | +| Assignments.cs:44:27:44:34 | access to field IntField | Assignments.cs:44:27:44:34 | this access | +| Assignments.cs:44:27:44:34 | this access | Assignments.cs:44:27:44:34 | this access | +| Assignments.cs:44:37:44:40 | null | Assignments.cs:44:37:44:40 | null | +| Assignments.cs:44:47:44:57 | access to field StringField | Assignments.cs:44:47:44:57 | this access | +| Assignments.cs:44:47:44:57 | this access | Assignments.cs:44:47:44:57 | this access | | BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | call to constructor Object | | BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | this access | | BreakInTry.cs:1:7:1:16 | this access | BreakInTry.cs:1:7:1:16 | this access | @@ -896,11 +932,62 @@ | ConditionalAccess.cs:35:9:35:12 | this access | ConditionalAccess.cs:35:9:35:12 | this access | | ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:12 | this access | | ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:25 | ...; | -| ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | -| ConditionalAccess.cs:41:70:41:78 | ... + ... | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | -| ConditionalAccess.cs:41:70:41:83 | ... + ... | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | -| ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:75:41:78 | ", " | -| ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | +| ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:13:42:28 | {...} | +| ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:22:42:25 | null | +| ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:22:42:25 | null | +| ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:13:43:15 | {...} | +| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:47:5:55:5 | {...} | +| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | +| ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | +| ConditionalAccess.cs:48:9:48:26 | ...; | ConditionalAccess.cs:48:9:48:26 | ...; | +| ConditionalAccess.cs:48:12:48:25 | ... = ... | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | +| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | +| ConditionalAccess.cs:49:9:49:22 | access to property StringProp | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:49:12:49:32 | ... = ... | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | +| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | +| ConditionalAccess.cs:50:9:50:14 | access to indexer | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:50:12:50:23 | ... = ... | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | +| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:50:18:50:23 | "Set0" | ConditionalAccess.cs:50:18:50:23 | "Set0" | +| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | +| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:51:18:51:31 | ... = ... | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | +| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | +| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | +| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | +| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:25:53:25 | 1 | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | +| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | +| ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | +| ConditionalAccess.cs:60:70:60:83 | ... + ... | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | +| ConditionalAccess.cs:60:75:60:78 | ", " | ConditionalAccess.cs:60:75:60:78 | ", " | +| ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | | Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | call to constructor Object | | Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | this access | | Conditions.cs:1:7:1:16 | this access | Conditions.cs:1:7:1:16 | this access | diff --git a/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected b/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected index e3d13701cff..a6794112ebd 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected @@ -821,6 +821,42 @@ | Assignments.cs:18:5:20:5 | {...} | Assignments.cs:19:9:19:17 | return ...; | return | | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:19:9:19:17 | return ...; | return | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:16:19:16 | access to parameter x | normal | +| Assignments.cs:28:5:30:5 | {...} | Assignments.cs:29:9:29:14 | ... = ... | normal | +| Assignments.cs:29:9:29:14 | ... = ... | Assignments.cs:29:9:29:14 | ... = ... | normal | +| Assignments.cs:29:9:29:15 | ...; | Assignments.cs:29:9:29:14 | ... = ... | normal | +| Assignments.cs:29:13:29:14 | 42 | Assignments.cs:29:13:29:14 | 42 | normal | +| Assignments.cs:33:5:36:5 | {...} | Assignments.cs:35:9:35:19 | ... = ... | normal | +| Assignments.cs:34:9:34:14 | ... = ... | Assignments.cs:34:9:34:14 | ... = ... | normal | +| Assignments.cs:34:9:34:15 | ...; | Assignments.cs:34:9:34:14 | ... = ... | normal | +| Assignments.cs:34:13:34:14 | 42 | Assignments.cs:34:13:34:14 | 42 | normal | +| Assignments.cs:35:9:35:19 | ... = ... | Assignments.cs:35:9:35:19 | ... = ... | normal | +| Assignments.cs:35:9:35:20 | ...; | Assignments.cs:35:9:35:19 | ... = ... | normal | +| Assignments.cs:35:13:35:19 | "Hello" | Assignments.cs:35:13:35:19 | "Hello" | normal | +| Assignments.cs:39:5:45:5 | {...} | Assignments.cs:44:9:44:58 | call to method SetParamMulti | normal | +| Assignments.cs:40:9:40:15 | ... ...; | Assignments.cs:40:13:40:14 | Int32 x1 | normal | +| Assignments.cs:40:13:40:14 | Int32 x1 | Assignments.cs:40:13:40:14 | Int32 x1 | normal | +| Assignments.cs:41:9:41:30 | call to method SetParamSingle | Assignments.cs:41:9:41:30 | call to method SetParamSingle | normal | +| Assignments.cs:41:9:41:30 | this access | Assignments.cs:41:9:41:30 | this access | normal | +| Assignments.cs:41:9:41:31 | ...; | Assignments.cs:41:9:41:30 | call to method SetParamSingle | normal | +| Assignments.cs:42:9:42:36 | call to method SetParamSingle | Assignments.cs:42:9:42:36 | call to method SetParamSingle | normal | +| Assignments.cs:42:9:42:36 | this access | Assignments.cs:42:9:42:36 | this access | normal | +| Assignments.cs:42:9:42:37 | ...; | Assignments.cs:42:9:42:36 | call to method SetParamSingle | normal | +| Assignments.cs:42:28:42:35 | access to field IntField | Assignments.cs:42:28:42:35 | access to field IntField | normal | +| Assignments.cs:42:28:42:35 | this access | Assignments.cs:42:28:42:35 | this access | normal | +| Assignments.cs:43:9:43:55 | call to method SetParamMulti | Assignments.cs:43:9:43:55 | call to method SetParamMulti | normal | +| Assignments.cs:43:9:43:55 | this access | Assignments.cs:43:9:43:55 | this access | normal | +| Assignments.cs:43:9:43:56 | ...; | Assignments.cs:43:9:43:55 | call to method SetParamMulti | normal | +| Assignments.cs:43:34:43:37 | null | Assignments.cs:43:34:43:37 | null | normal | +| Assignments.cs:43:44:43:54 | access to field StringField | Assignments.cs:43:44:43:54 | access to field StringField | normal | +| Assignments.cs:43:44:43:54 | this access | Assignments.cs:43:44:43:54 | this access | normal | +| Assignments.cs:44:9:44:58 | call to method SetParamMulti | Assignments.cs:44:9:44:58 | call to method SetParamMulti | normal | +| Assignments.cs:44:9:44:58 | this access | Assignments.cs:44:9:44:58 | this access | normal | +| Assignments.cs:44:9:44:59 | ...; | Assignments.cs:44:9:44:58 | call to method SetParamMulti | normal | +| Assignments.cs:44:27:44:34 | access to field IntField | Assignments.cs:44:27:44:34 | access to field IntField | normal | +| Assignments.cs:44:27:44:34 | this access | Assignments.cs:44:27:44:34 | this access | normal | +| Assignments.cs:44:37:44:40 | null | Assignments.cs:44:37:44:40 | null | normal | +| Assignments.cs:44:47:44:57 | access to field StringField | Assignments.cs:44:47:44:57 | access to field StringField | normal | +| Assignments.cs:44:47:44:57 | this access | Assignments.cs:44:47:44:57 | this access | normal | | BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | call to constructor Object | normal | | BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | call to method | normal | | BreakInTry.cs:1:7:1:16 | this access | BreakInTry.cs:1:7:1:16 | this access | normal | @@ -1080,11 +1116,107 @@ | ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:24 | call to method Out | normal | | ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:12 | access to property Prop | null | | ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:24 | call to method Out | normal | -| ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | normal | -| ConditionalAccess.cs:41:70:41:78 | ... + ... | ConditionalAccess.cs:41:70:41:78 | ... + ... | normal | -| ConditionalAccess.cs:41:70:41:83 | ... + ... | ConditionalAccess.cs:41:70:41:83 | ... + ... | normal | -| ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:75:41:78 | ", " | normal | -| ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | normal | +| ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:15:42:26 | return ...; | return | +| ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:15:42:26 | return ...; | return | +| ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:22:42:25 | null | normal | +| ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:13:43:15 | {...} | normal | +| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | +| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:54:12:54:29 | ... = ... | normal | +| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | null | +| ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | null | +| ConditionalAccess.cs:48:9:48:26 | ...; | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | null | +| ConditionalAccess.cs:48:9:48:26 | ...; | ConditionalAccess.cs:48:12:48:25 | ... = ... | normal | +| ConditionalAccess.cs:48:12:48:25 | ... = ... | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | null | +| ConditionalAccess.cs:48:12:48:25 | ... = ... | ConditionalAccess.cs:48:12:48:25 | ... = ... | normal | +| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:24:48:25 | 42 | normal | +| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | null | +| ConditionalAccess.cs:49:9:49:22 | access to property StringProp | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:49:9:49:22 | access to property StringProp | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | null | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | null | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:12:49:32 | ... = ... | normal | +| ConditionalAccess.cs:49:12:49:32 | ... = ... | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | null | +| ConditionalAccess.cs:49:12:49:32 | ... = ... | ConditionalAccess.cs:49:12:49:32 | ... = ... | normal | +| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:26:49:32 | "Hello" | normal | +| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | null | +| ConditionalAccess.cs:50:9:50:14 | access to indexer | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | null | +| ConditionalAccess.cs:50:9:50:14 | access to indexer | ConditionalAccess.cs:50:13:50:13 | 0 | normal | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | null | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:12:50:23 | ... = ... | normal | +| ConditionalAccess.cs:50:12:50:23 | ... = ... | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | null | +| ConditionalAccess.cs:50:12:50:23 | ... = ... | ConditionalAccess.cs:50:12:50:23 | ... = ... | normal | +| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:50:13:50:13 | 0 | normal | +| ConditionalAccess.cs:50:18:50:23 | "Set0" | ConditionalAccess.cs:50:18:50:23 | "Set0" | normal | +| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | null | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | null | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:16 | access to property Prop | non-null | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:16 | access to property Prop | null | +| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | null | +| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:51:9:51:16 | access to property Prop | non-null | +| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:51:9:51:16 | access to property Prop | null | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | null | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | null | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:18:51:31 | ... = ... | normal | +| ConditionalAccess.cs:51:18:51:31 | ... = ... | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | null | +| ConditionalAccess.cs:51:18:51:31 | ... = ... | ConditionalAccess.cs:51:9:51:16 | access to property Prop | null | +| ConditionalAccess.cs:51:18:51:31 | ... = ... | ConditionalAccess.cs:51:18:51:31 | ... = ... | normal | +| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:51:30:51:31 | 84 | normal | +| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | null | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | null | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:16 | access to property Prop | non-null | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:16 | access to property Prop | null | +| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | null | +| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:52:9:52:16 | access to property Prop | non-null | +| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:52:9:52:16 | access to property Prop | null | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | null | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | null | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:18:52:38 | ... = ... | normal | +| ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | null | +| ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:52:9:52:16 | access to property Prop | null | +| ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:52:18:52:38 | ... = ... | normal | +| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:32:52:38 | "World" | normal | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:20 | access to field IntField | normal | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:12:53:25 | ... = ... | normal | +| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:12:53:25 | ... - ... | normal | +| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | +| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:53:12:53:25 | ... = ... | normal | +| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | +| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:53:12:53:25 | ... = ... | normal | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:25:53:25 | 1 | normal | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | normal | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:12:54:29 | ... = ... | normal | +| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:12:54:29 | ... + ... | normal | +| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | +| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:54:12:54:29 | ... = ... | normal | +| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | +| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:54:12:54:29 | ... = ... | normal | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:27:54:29 | "!" | normal | +| ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | normal | +| ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:70:60:78 | ... + ... | normal | +| ConditionalAccess.cs:60:70:60:83 | ... + ... | ConditionalAccess.cs:60:70:60:83 | ... + ... | normal | +| ConditionalAccess.cs:60:75:60:78 | ", " | ConditionalAccess.cs:60:75:60:78 | ", " | normal | +| ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | normal | | Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | call to constructor Object | normal | | Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | call to method | normal | | Conditions.cs:1:7:1:16 | this access | Conditions.cs:1:7:1:16 | this access | normal | diff --git a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected index b764e2fb2a5..4ce98d5096f 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected @@ -20,10 +20,11 @@ | AccessorCalls.cs:10:10:10:11 | exit M1 (normal) | AccessorCalls.cs:10:10:10:11 | exit M1 | | | AccessorCalls.cs:11:5:17:5 | {...} | AccessorCalls.cs:12:9:12:32 | ...; | | | AccessorCalls.cs:12:9:12:12 | this access | AccessorCalls.cs:12:22:12:25 | this access | | +| AccessorCalls.cs:12:9:12:18 | access to field Field | AccessorCalls.cs:12:9:12:31 | ... = ... | | | AccessorCalls.cs:12:9:12:31 | ... = ... | AccessorCalls.cs:13:9:13:30 | ...; | | | AccessorCalls.cs:12:9:12:32 | ...; | AccessorCalls.cs:12:9:12:12 | this access | | | AccessorCalls.cs:12:22:12:25 | this access | AccessorCalls.cs:12:22:12:31 | access to field Field | | -| AccessorCalls.cs:12:22:12:31 | access to field Field | AccessorCalls.cs:12:9:12:31 | ... = ... | | +| AccessorCalls.cs:12:22:12:31 | access to field Field | AccessorCalls.cs:12:9:12:18 | access to field Field | | | AccessorCalls.cs:13:9:13:12 | this access | AccessorCalls.cs:13:21:13:24 | this access | | | AccessorCalls.cs:13:9:13:17 | access to property Prop | AccessorCalls.cs:13:9:13:29 | ... = ... | | | AccessorCalls.cs:13:9:13:29 | ... = ... | AccessorCalls.cs:14:9:14:26 | ...; | | @@ -53,11 +54,12 @@ | AccessorCalls.cs:20:5:26:5 | {...} | AccessorCalls.cs:21:9:21:36 | ...; | | | AccessorCalls.cs:21:9:21:12 | this access | AccessorCalls.cs:21:9:21:14 | access to field x | | | AccessorCalls.cs:21:9:21:14 | access to field x | AccessorCalls.cs:21:24:21:27 | this access | | +| AccessorCalls.cs:21:9:21:20 | access to field Field | AccessorCalls.cs:21:9:21:35 | ... = ... | | | AccessorCalls.cs:21:9:21:35 | ... = ... | AccessorCalls.cs:22:9:22:34 | ...; | | | AccessorCalls.cs:21:9:21:36 | ...; | AccessorCalls.cs:21:9:21:12 | this access | | | AccessorCalls.cs:21:24:21:27 | this access | AccessorCalls.cs:21:24:21:29 | access to field x | | | AccessorCalls.cs:21:24:21:29 | access to field x | AccessorCalls.cs:21:24:21:35 | access to field Field | | -| AccessorCalls.cs:21:24:21:35 | access to field Field | AccessorCalls.cs:21:9:21:35 | ... = ... | | +| AccessorCalls.cs:21:24:21:35 | access to field Field | AccessorCalls.cs:21:9:21:20 | access to field Field | | | AccessorCalls.cs:22:9:22:12 | this access | AccessorCalls.cs:22:9:22:14 | access to field x | | | AccessorCalls.cs:22:9:22:14 | access to field x | AccessorCalls.cs:22:23:22:26 | this access | | | AccessorCalls.cs:22:9:22:19 | access to property Prop | AccessorCalls.cs:22:9:22:33 | ... = ... | | @@ -128,8 +130,9 @@ | AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:44:9:44:33 | ...; | | | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:12 | this access | | | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:18 | access to field Field | | +| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... = ... | | | AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:23:44:26 | this access | | -| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:9:44:32 | ... = ... | | +| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:9:44:18 | access to field Field | | | AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:45:9:45:31 | ...; | | | AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:44:9:44:12 | this access | | | AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:44:23:44:32 | access to field Field | | @@ -162,8 +165,9 @@ | AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:14 | access to field x | | | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:12 | this access | | | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:20 | access to field Field | | +| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... = ... | | | AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:25:51:28 | this access | | -| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:9:51:36 | ... = ... | | +| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:9:51:20 | access to field Field | | | AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:52:9:52:35 | ...; | | | AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:51:9:51:12 | this access | | | AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:51:25:51:30 | access to field x | | @@ -203,13 +207,14 @@ | AccessorCalls.cs:58:9:58:85 | ... = ... | AccessorCalls.cs:56:10:56:11 | exit M7 (normal) | | | AccessorCalls.cs:58:9:58:86 | ...; | AccessorCalls.cs:58:10:58:13 | this access | | | AccessorCalls.cs:58:10:58:13 | this access | AccessorCalls.cs:58:22:58:25 | this access | | +| AccessorCalls.cs:58:10:58:19 | access to field Field | AccessorCalls.cs:58:22:58:30 | access to property Prop | | | AccessorCalls.cs:58:22:58:25 | this access | AccessorCalls.cs:58:37:58:40 | this access | | | AccessorCalls.cs:58:22:58:30 | access to property Prop | AccessorCalls.cs:58:37:58:43 | access to indexer | | | AccessorCalls.cs:58:33:58:44 | (..., ...) | AccessorCalls.cs:58:9:58:45 | (..., ...) | | | AccessorCalls.cs:58:37:58:40 | this access | AccessorCalls.cs:58:42:58:42 | 0 | | | AccessorCalls.cs:58:37:58:43 | access to indexer | AccessorCalls.cs:58:9:58:85 | ... = ... | | | AccessorCalls.cs:58:42:58:42 | 0 | AccessorCalls.cs:58:33:58:44 | (..., ...) | | -| AccessorCalls.cs:58:49:58:85 | (..., ...) | AccessorCalls.cs:58:22:58:30 | access to property Prop | | +| AccessorCalls.cs:58:49:58:85 | (..., ...) | AccessorCalls.cs:58:10:58:19 | access to field Field | | | AccessorCalls.cs:58:50:58:53 | this access | AccessorCalls.cs:58:50:58:59 | access to field Field | | | AccessorCalls.cs:58:50:58:59 | access to field Field | AccessorCalls.cs:58:62:58:65 | this access | | | AccessorCalls.cs:58:62:58:65 | this access | AccessorCalls.cs:58:62:58:70 | access to property Prop | | @@ -227,6 +232,7 @@ | AccessorCalls.cs:63:9:63:98 | ...; | AccessorCalls.cs:63:10:63:13 | this access | | | AccessorCalls.cs:63:10:63:13 | this access | AccessorCalls.cs:63:10:63:15 | access to field x | | | AccessorCalls.cs:63:10:63:15 | access to field x | AccessorCalls.cs:63:24:63:27 | this access | | +| AccessorCalls.cs:63:10:63:21 | access to field Field | AccessorCalls.cs:63:24:63:34 | access to property Prop | | | AccessorCalls.cs:63:24:63:27 | this access | AccessorCalls.cs:63:24:63:29 | access to field x | | | AccessorCalls.cs:63:24:63:29 | access to field x | AccessorCalls.cs:63:41:63:44 | this access | | | AccessorCalls.cs:63:24:63:34 | access to property Prop | AccessorCalls.cs:63:41:63:49 | access to indexer | | @@ -235,7 +241,7 @@ | AccessorCalls.cs:63:41:63:46 | access to field x | AccessorCalls.cs:63:48:63:48 | 0 | | | AccessorCalls.cs:63:41:63:49 | access to indexer | AccessorCalls.cs:63:9:63:97 | ... = ... | | | AccessorCalls.cs:63:48:63:48 | 0 | AccessorCalls.cs:63:37:63:50 | (..., ...) | | -| AccessorCalls.cs:63:55:63:97 | (..., ...) | AccessorCalls.cs:63:24:63:34 | access to property Prop | | +| AccessorCalls.cs:63:55:63:97 | (..., ...) | AccessorCalls.cs:63:10:63:21 | access to field Field | | | AccessorCalls.cs:63:56:63:59 | this access | AccessorCalls.cs:63:56:63:61 | access to field x | | | AccessorCalls.cs:63:56:63:61 | access to field x | AccessorCalls.cs:63:56:63:67 | access to field Field | | | AccessorCalls.cs:63:56:63:67 | access to field Field | AccessorCalls.cs:63:70:63:73 | this access | | @@ -847,6 +853,48 @@ | Assignments.cs:18:5:20:5 | {...} | Assignments.cs:19:16:19:16 | access to parameter x | | | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:17:40:17:40 | exit + (normal) | return | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:9:19:17 | return ...; | | +| Assignments.cs:27:10:27:23 | enter SetParamSingle | Assignments.cs:28:5:30:5 | {...} | | +| Assignments.cs:27:10:27:23 | exit SetParamSingle (normal) | Assignments.cs:27:10:27:23 | exit SetParamSingle | | +| Assignments.cs:28:5:30:5 | {...} | Assignments.cs:29:9:29:15 | ...; | | +| Assignments.cs:29:9:29:14 | ... = ... | Assignments.cs:27:10:27:23 | exit SetParamSingle (normal) | | +| Assignments.cs:29:9:29:15 | ...; | Assignments.cs:29:13:29:14 | 42 | | +| Assignments.cs:29:13:29:14 | 42 | Assignments.cs:29:9:29:14 | ... = ... | | +| Assignments.cs:32:10:32:22 | enter SetParamMulti | Assignments.cs:33:5:36:5 | {...} | | +| Assignments.cs:32:10:32:22 | exit SetParamMulti (normal) | Assignments.cs:32:10:32:22 | exit SetParamMulti | | +| Assignments.cs:33:5:36:5 | {...} | Assignments.cs:34:9:34:15 | ...; | | +| Assignments.cs:34:9:34:14 | ... = ... | Assignments.cs:35:9:35:20 | ...; | | +| Assignments.cs:34:9:34:15 | ...; | Assignments.cs:34:13:34:14 | 42 | | +| Assignments.cs:34:13:34:14 | 42 | Assignments.cs:34:9:34:14 | ... = ... | | +| Assignments.cs:35:9:35:19 | ... = ... | Assignments.cs:32:10:32:22 | exit SetParamMulti (normal) | | +| Assignments.cs:35:9:35:20 | ...; | Assignments.cs:35:13:35:19 | "Hello" | | +| Assignments.cs:35:13:35:19 | "Hello" | Assignments.cs:35:9:35:19 | ... = ... | | +| Assignments.cs:38:10:38:11 | enter M2 | Assignments.cs:39:5:45:5 | {...} | | +| Assignments.cs:38:10:38:11 | exit M2 (normal) | Assignments.cs:38:10:38:11 | exit M2 | | +| Assignments.cs:39:5:45:5 | {...} | Assignments.cs:40:9:40:15 | ... ...; | | +| Assignments.cs:40:9:40:15 | ... ...; | Assignments.cs:40:13:40:14 | Int32 x1 | | +| Assignments.cs:40:13:40:14 | Int32 x1 | Assignments.cs:41:9:41:31 | ...; | | +| Assignments.cs:41:9:41:30 | call to method SetParamSingle | Assignments.cs:42:9:42:37 | ...; | | +| Assignments.cs:41:9:41:30 | this access | Assignments.cs:41:9:41:30 | call to method SetParamSingle | | +| Assignments.cs:41:9:41:31 | ...; | Assignments.cs:41:9:41:30 | this access | | +| Assignments.cs:42:9:42:36 | call to method SetParamSingle | Assignments.cs:43:9:43:56 | ...; | | +| Assignments.cs:42:9:42:36 | this access | Assignments.cs:42:28:42:35 | this access | | +| Assignments.cs:42:9:42:37 | ...; | Assignments.cs:42:9:42:36 | this access | | +| Assignments.cs:42:28:42:35 | access to field IntField | Assignments.cs:42:9:42:36 | call to method SetParamSingle | | +| Assignments.cs:42:28:42:35 | this access | Assignments.cs:42:28:42:35 | access to field IntField | | +| Assignments.cs:43:9:43:55 | call to method SetParamMulti | Assignments.cs:44:9:44:59 | ...; | | +| Assignments.cs:43:9:43:55 | this access | Assignments.cs:43:34:43:37 | null | | +| Assignments.cs:43:9:43:56 | ...; | Assignments.cs:43:9:43:55 | this access | | +| Assignments.cs:43:34:43:37 | null | Assignments.cs:43:44:43:54 | this access | | +| Assignments.cs:43:44:43:54 | access to field StringField | Assignments.cs:43:9:43:55 | call to method SetParamMulti | | +| Assignments.cs:43:44:43:54 | this access | Assignments.cs:43:44:43:54 | access to field StringField | | +| Assignments.cs:44:9:44:58 | call to method SetParamMulti | Assignments.cs:38:10:38:11 | exit M2 (normal) | | +| Assignments.cs:44:9:44:58 | this access | Assignments.cs:44:27:44:34 | this access | | +| Assignments.cs:44:9:44:59 | ...; | Assignments.cs:44:9:44:58 | this access | | +| Assignments.cs:44:27:44:34 | access to field IntField | Assignments.cs:44:37:44:40 | null | | +| Assignments.cs:44:27:44:34 | this access | Assignments.cs:44:27:44:34 | access to field IntField | | +| Assignments.cs:44:37:44:40 | null | Assignments.cs:44:47:44:57 | this access | | +| Assignments.cs:44:47:44:57 | access to field StringField | Assignments.cs:44:9:44:58 | call to method SetParamMulti | | +| Assignments.cs:44:47:44:57 | this access | Assignments.cs:44:47:44:57 | access to field StringField | | | BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | {...} | | | BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | call to constructor Object | | | BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | this access | | @@ -1093,13 +1141,79 @@ | ConditionalAccess.cs:35:9:35:12 | this access | ConditionalAccess.cs:35:9:35:12 | access to property Prop | | | ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | | | ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:12 | this access | | -| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | | -| ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith | | -| ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | ConditionalAccess.cs:41:75:41:78 | ", " | | -| ConditionalAccess.cs:41:70:41:78 | ... + ... | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | | -| ConditionalAccess.cs:41:70:41:83 | ... + ... | ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith (normal) | | -| ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:70:41:78 | ... + ... | | -| ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:70:41:83 | ... + ... | | +| ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:13:42:28 | {...} | | +| ConditionalAccess.cs:42:9:42:11 | exit get_Item (normal) | ConditionalAccess.cs:42:9:42:11 | exit get_Item | | +| ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:22:42:25 | null | | +| ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:9:42:11 | exit get_Item (normal) | return | +| ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:15:42:26 | return ...; | | +| ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:13:43:15 | {...} | | +| ConditionalAccess.cs:43:9:43:11 | exit set_Item (normal) | ConditionalAccess.cs:43:9:43:11 | exit set_Item | | +| ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:9:43:11 | exit set_Item (normal) | | +| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:47:5:55:5 | {...} | | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | exit M9 | | +| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:48:9:48:26 | ...; | | +| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:24:48:25 | 42 | non-null | +| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:49:9:49:33 | ...; | null | +| ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:12:48:25 | ... = ... | | +| ConditionalAccess.cs:48:9:48:26 | ...; | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | | +| ConditionalAccess.cs:48:12:48:25 | ... = ... | ConditionalAccess.cs:49:9:49:33 | ...; | | +| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:9:48:20 | access to field IntField | | +| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:49:26:49:32 | "Hello" | non-null | +| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:50:9:50:24 | ...; | null | +| ConditionalAccess.cs:49:9:49:22 | access to property StringProp | ConditionalAccess.cs:49:12:49:32 | ... = ... | | +| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | | +| ConditionalAccess.cs:49:12:49:32 | ... = ... | ConditionalAccess.cs:50:9:50:24 | ...; | | +| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:9:49:22 | access to property StringProp | | +| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:50:13:50:13 | 0 | non-null | +| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:51:9:51:32 | ...; | null | +| ConditionalAccess.cs:50:9:50:14 | access to indexer | ConditionalAccess.cs:50:12:50:23 | ... = ... | | +| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | | +| ConditionalAccess.cs:50:12:50:23 | ... = ... | ConditionalAccess.cs:51:9:51:32 | ...; | | +| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:50:18:50:23 | "Set0" | | +| ConditionalAccess.cs:50:18:50:23 | "Set0" | ConditionalAccess.cs:50:9:50:14 | access to indexer | | +| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:51:9:51:16 | access to property Prop | non-null | +| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:52:9:52:39 | ...; | null | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:30:51:31 | 84 | non-null | +| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:52:9:52:39 | ...; | null | +| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:51:18:51:31 | ... = ... | | +| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | | +| ConditionalAccess.cs:51:18:51:31 | ... = ... | ConditionalAccess.cs:52:9:52:39 | ...; | | +| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:51:9:51:26 | access to field IntField | | +| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:52:9:52:16 | access to property Prop | non-null | +| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:26 | ...; | null | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:32:52:38 | "World" | non-null | +| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:53:9:53:26 | ...; | null | +| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:52:18:52:38 | ... = ... | | +| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | | +| ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:53:9:53:26 | ...; | | +| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:9:52:28 | access to property StringProp | | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:20 | access to field IntField | non-null | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:25:53:25 | 1 | null | +| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:30 | ...; | null | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:12:53:25 | ... = ... | | +| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:25:53:25 | 1 | | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | +| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:9:53:20 | access to field IntField | | +| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:54:9:54:30 | ...; | | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:12:53:25 | ... - ... | | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | null | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | non-null | +| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:27:54:29 | "!" | null | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:12:54:29 | ... = ... | | +| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:27:54:29 | "!" | | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | +| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | | +| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:12:54:29 | ... + ... | | +| ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | | +| ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | | +| ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:75:60:78 | ", " | | +| ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | | +| ConditionalAccess.cs:60:70:60:83 | ... + ... | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) | | +| ConditionalAccess.cs:60:75:60:78 | ", " | ConditionalAccess.cs:60:70:60:78 | ... + ... | | +| ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | ConditionalAccess.cs:60:70:60:83 | ... + ... | | | Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | {...} | | | Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | call to constructor Object | | | Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | this access | | @@ -2007,14 +2121,16 @@ | Finally.cs:209:25:209:47 | throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:25:209:47 | throw ...; | | | Finally.cs:211:13:211:16 | this access | Finally.cs:211:26:211:28 | "0" | | +| Finally.cs:211:13:211:22 | access to field Field | Finally.cs:211:13:211:28 | ... = ... | | | Finally.cs:211:13:211:28 | ... = ... | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception | | 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:26:211:28 | "0" | Finally.cs:211:13:211:28 | ... = ... | | +| Finally.cs:211:26:211:28 | "0" | Finally.cs:211:13:211:22 | access to field Field | | | Finally.cs:213:9:213:12 | this access | Finally.cs:213:22:213:24 | "1" | | +| Finally.cs:213:9:213:18 | access to field Field | Finally.cs:213:9:213:24 | ... = ... | | | 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 | | -| Finally.cs:213:22:213:24 | "1" | Finally.cs:213:9:213:24 | ... = ... | | +| Finally.cs:213:22:213:24 | "1" | Finally.cs:213:9:213:18 | access to field Field | | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:217:5:231:5 | {...} | | | Finally.cs:216:10:216:12 | exit M11 (normal) | Finally.cs:216:10:216:12 | exit M11 | | | Finally.cs:217:5:231:5 | {...} | Finally.cs:218:9:229:9 | try {...} ... | | @@ -2164,10 +2280,11 @@ | Initializers.cs:3:7:3:18 | exit (normal) | Initializers.cs:3:7:3:18 | exit | | | Initializers.cs:3:7:3:18 | exit Initializers (normal) | Initializers.cs:3:7:3:18 | exit Initializers | | | Initializers.cs:3:7:3:18 | {...} | Initializers.cs:3:7:3:18 | exit Initializers (normal) | | +| Initializers.cs:5:9:5:9 | access to field F | Initializers.cs:5:9:5:17 | ... = ... | | | Initializers.cs:5:9:5:9 | this access | Initializers.cs:5:13:5:13 | access to field H | | | Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:6:9:6:9 | this access | | | Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:5:17:5:17 | 1 | | -| Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:5:9:5:17 | ... = ... | | +| Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:5:9:5:9 | access to field F | | | Initializers.cs:5:17:5:17 | 1 | Initializers.cs:5:13:5:17 | ... + ... | | | Initializers.cs:6:9:6:9 | access to property G | Initializers.cs:6:25:6:31 | ... = ... | | | Initializers.cs:6:9:6:9 | this access | Initializers.cs:6:27:6:27 | access to field H | | @@ -2195,8 +2312,9 @@ | Initializers.cs:14:17:14:53 | object creation of type Initializers | Initializers.cs:14:44:14:44 | 0 | | | Initializers.cs:14:34:14:35 | "" | Initializers.cs:14:17:14:53 | object creation of type Initializers | | | Initializers.cs:14:38:14:53 | { ..., ... } | Initializers.cs:14:13:14:53 | Initializers i = ... | | +| Initializers.cs:14:40:14:40 | access to field F | Initializers.cs:14:40:14:44 | ... = ... | | | Initializers.cs:14:40:14:44 | ... = ... | Initializers.cs:14:51:14:51 | 1 | | -| Initializers.cs:14:44:14:44 | 0 | Initializers.cs:14:40:14:44 | ... = ... | | +| Initializers.cs:14:44:14:44 | 0 | Initializers.cs:14:40:14:40 | access to field F | | | Initializers.cs:14:47:14:47 | access to property G | Initializers.cs:14:47:14:51 | ... = ... | | | Initializers.cs:14:47:14:51 | ... = ... | Initializers.cs:14:38:14:53 | { ..., ... } | | | Initializers.cs:14:51:14:51 | 1 | Initializers.cs:14:47:14:47 | access to property G | | @@ -2208,10 +2326,11 @@ | Initializers.cs:15:39:15:39 | access to local variable i | Initializers.cs:15:59:15:60 | "" | | | Initializers.cs:15:42:15:61 | object creation of type Initializers | Initializers.cs:15:37:15:63 | { ..., ... } | | | Initializers.cs:15:59:15:60 | "" | Initializers.cs:15:42:15:61 | object creation of type Initializers | | +| Initializers.cs:18:16:18:16 | access to field H | Initializers.cs:18:16:18:20 | ... = ... | | | Initializers.cs:18:16:18:16 | enter H | Initializers.cs:18:20:18:20 | 1 | | | Initializers.cs:18:16:18:16 | exit H (normal) | Initializers.cs:18:16:18:16 | exit H | | | Initializers.cs:18:16:18:20 | ... = ... | Initializers.cs:18:16:18:16 | exit H (normal) | | -| Initializers.cs:18:20:18:20 | 1 | Initializers.cs:18:16:18:20 | ... = ... | | +| Initializers.cs:18:20:18:20 | 1 | Initializers.cs:18:16:18:16 | access to field H | | | Initializers.cs:20:11:20:23 | call to constructor Object | Initializers.cs:20:11:20:23 | {...} | | | Initializers.cs:20:11:20:23 | call to method | Initializers.cs:20:11:20:23 | call to constructor Object | | | Initializers.cs:20:11:20:23 | enter | Initializers.cs:22:23:22:23 | this access | | @@ -2220,46 +2339,52 @@ | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:20:11:20:23 | exit NoConstructor | | | Initializers.cs:20:11:20:23 | this access | Initializers.cs:20:11:20:23 | call to method | | | Initializers.cs:20:11:20:23 | {...} | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | | +| Initializers.cs:22:23:22:23 | access to field F | Initializers.cs:22:23:22:27 | ... = ... | | | Initializers.cs:22:23:22:23 | this access | Initializers.cs:22:27:22:27 | 0 | | | Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:23:23:23:23 | this access | | -| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:27 | ... = ... | | +| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:23 | access to field F | | +| Initializers.cs:23:23:23:23 | access to field G | Initializers.cs:23:23:23:27 | ... = ... | | | Initializers.cs:23:23:23:23 | this access | Initializers.cs:23:27:23:27 | 1 | | | Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | exit (normal) | | -| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:27 | ... = ... | | +| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:23 | access to field G | | | Initializers.cs:26:11:26:13 | enter | Initializers.cs:28:13:28:13 | this access | | | Initializers.cs:26:11:26:13 | exit (normal) | Initializers.cs:26:11:26:13 | exit | | +| Initializers.cs:28:13:28:13 | access to field H | Initializers.cs:28:13:28:17 | ... = ... | | | Initializers.cs:28:13:28:13 | this access | Initializers.cs:28:17:28:17 | 2 | | | Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:26:11:26:13 | exit (normal) | | -| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:17 | ... = ... | | +| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:13 | access to field H | | | Initializers.cs:31:9:31:11 | call to method | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | | | Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | this access | | | Initializers.cs:31:9:31:11 | exit Sub (normal) | Initializers.cs:31:9:31:11 | exit Sub | | | Initializers.cs:31:9:31:11 | this access | Initializers.cs:31:9:31:11 | call to method | | | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:31:24:31:33 | {...} | | | Initializers.cs:31:24:31:33 | {...} | Initializers.cs:31:26:31:31 | ...; | | +| Initializers.cs:31:26:31:26 | access to field I | Initializers.cs:31:26:31:30 | ... = ... | | | Initializers.cs:31:26:31:26 | this access | Initializers.cs:31:30:31:30 | 3 | | | Initializers.cs:31:26:31:30 | ... = ... | Initializers.cs:31:9:31:11 | exit Sub (normal) | | | Initializers.cs:31:26:31:31 | ...; | Initializers.cs:31:26:31:26 | this access | | -| Initializers.cs:31:30:31:30 | 3 | Initializers.cs:31:26:31:30 | ... = ... | | +| Initializers.cs:31:30:31:30 | 3 | Initializers.cs:31:26:31:26 | access to field I | | | Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:22:33:25 | call to constructor Sub | | | Initializers.cs:33:9:33:11 | exit Sub (normal) | Initializers.cs:33:9:33:11 | exit Sub | | | Initializers.cs:33:22:33:25 | call to constructor Sub | Initializers.cs:33:29:33:38 | {...} | | | Initializers.cs:33:29:33:38 | {...} | Initializers.cs:33:31:33:36 | ...; | | +| Initializers.cs:33:31:33:31 | access to field I | Initializers.cs:33:31:33:35 | ... = ... | | | Initializers.cs:33:31:33:31 | this access | Initializers.cs:33:35:33:35 | access to parameter i | | | Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:9:33:11 | exit Sub (normal) | | | Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:31:33:31 | this access | | -| Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:31:33:35 | ... = ... | | +| Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:31:33:31 | access to field I | | | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:27:35:40 | {...} | | | Initializers.cs:35:9:35:11 | call to method | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | | | Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | this access | | | Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:9:35:11 | exit Sub | | | Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | call to method | | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:29:35:38 | ...; | | +| Initializers.cs:35:29:35:29 | access to field I | Initializers.cs:35:29:35:37 | ... = ... | | | Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:33:35:33 | access to parameter i | | | Initializers.cs:35:29:35:37 | ... = ... | Initializers.cs:35:9:35:11 | exit Sub (normal) | | | Initializers.cs:35:29:35:38 | ...; | Initializers.cs:35:29:35:29 | this access | | | Initializers.cs:35:33:35:33 | access to parameter i | Initializers.cs:35:37:35:37 | access to parameter j | | -| Initializers.cs:35:33:35:37 | ... + ... | Initializers.cs:35:29:35:37 | ... = ... | | +| Initializers.cs:35:33:35:37 | ... + ... | Initializers.cs:35:29:35:29 | access to field I | | | Initializers.cs:35:37:35:37 | access to parameter j | Initializers.cs:35:33:35:37 | ... + ... | | | Initializers.cs:39:7:39:23 | call to constructor Object | Initializers.cs:39:7:39:23 | {...} | | | Initializers.cs:39:7:39:23 | call to method | Initializers.cs:39:7:39:23 | call to constructor Object | | @@ -2298,8 +2423,9 @@ | Initializers.cs:57:13:65:9 | Compound compound = ... | Initializers.cs:51:10:51:13 | exit Test (normal) | | | Initializers.cs:57:24:65:9 | object creation of type Compound | Initializers.cs:59:34:59:34 | 0 | | | Initializers.cs:58:9:65:9 | { ..., ... } | Initializers.cs:57:13:65:9 | Compound compound = ... | | +| Initializers.cs:59:13:59:27 | access to field DictionaryField | Initializers.cs:59:13:59:76 | ... = ... | | | Initializers.cs:59:13:59:76 | ... = ... | Initializers.cs:60:37:60:37 | 3 | | -| Initializers.cs:59:31:59:76 | { ..., ... } | Initializers.cs:59:13:59:76 | ... = ... | | +| Initializers.cs:59:31:59:76 | { ..., ... } | Initializers.cs:59:13:59:27 | access to field DictionaryField | | | Initializers.cs:59:33:59:35 | access to indexer | Initializers.cs:59:33:59:44 | ... = ... | | | Initializers.cs:59:33:59:44 | ... = ... | Initializers.cs:59:48:59:48 | 1 | | | Initializers.cs:59:34:59:34 | 0 | Initializers.cs:59:39:59:44 | "Zero" | | @@ -2331,52 +2457,62 @@ | Initializers.cs:60:65:60:69 | ... + ... | Initializers.cs:60:74:60:78 | "One" | | | Initializers.cs:60:69:60:69 | 1 | Initializers.cs:60:65:60:69 | ... + ... | | | Initializers.cs:60:74:60:78 | "One" | Initializers.cs:60:64:60:70 | access to indexer | | +| Initializers.cs:61:13:61:22 | access to field ArrayField | Initializers.cs:61:13:61:58 | ... = ... | | | Initializers.cs:61:13:61:58 | ... = ... | Initializers.cs:62:30:62:30 | 0 | | -| Initializers.cs:61:26:61:58 | { ..., ... } | Initializers.cs:61:13:61:58 | ... = ... | | +| Initializers.cs:61:26:61:58 | { ..., ... } | Initializers.cs:61:13:61:22 | access to field ArrayField | | +| Initializers.cs:61:28:61:30 | access to array element | Initializers.cs:61:28:61:39 | ... = ... | | | Initializers.cs:61:28:61:39 | ... = ... | Initializers.cs:61:43:61:43 | access to parameter i | | | Initializers.cs:61:29:61:29 | 0 | Initializers.cs:61:34:61:39 | "Zero" | | -| Initializers.cs:61:34:61:39 | "Zero" | Initializers.cs:61:28:61:39 | ... = ... | | +| Initializers.cs:61:34:61:39 | "Zero" | Initializers.cs:61:28:61:30 | access to array element | | +| Initializers.cs:61:42:61:48 | access to array element | Initializers.cs:61:42:61:56 | ... = ... | | | Initializers.cs:61:42:61:56 | ... = ... | Initializers.cs:61:26:61:58 | { ..., ... } | | | Initializers.cs:61:43:61:43 | access to parameter i | Initializers.cs:61:47:61:47 | 1 | | | Initializers.cs:61:43:61:47 | ... + ... | Initializers.cs:61:52:61:56 | "One" | | | Initializers.cs:61:47:61:47 | 1 | Initializers.cs:61:43:61:47 | ... + ... | | -| Initializers.cs:61:52:61:56 | "One" | Initializers.cs:61:42:61:56 | ... = ... | | +| Initializers.cs:61:52:61:56 | "One" | Initializers.cs:61:42:61:48 | access to array element | | +| Initializers.cs:62:13:62:23 | access to field ArrayField2 | Initializers.cs:62:13:62:60 | ... = ... | | | Initializers.cs:62:13:62:60 | ... = ... | Initializers.cs:63:32:63:32 | 1 | | -| Initializers.cs:62:27:62:60 | { ..., ... } | Initializers.cs:62:13:62:60 | ... = ... | | +| Initializers.cs:62:27:62:60 | { ..., ... } | Initializers.cs:62:13:62:23 | access to field ArrayField2 | | +| Initializers.cs:62:29:62:34 | access to array element | Initializers.cs:62:29:62:40 | ... = ... | | | Initializers.cs:62:29:62:40 | ... = ... | Initializers.cs:62:44:62:44 | 1 | | | Initializers.cs:62:30:62:30 | 0 | Initializers.cs:62:33:62:33 | 1 | | | Initializers.cs:62:33:62:33 | 1 | Initializers.cs:62:38:62:40 | "i" | | -| Initializers.cs:62:38:62:40 | "i" | Initializers.cs:62:29:62:40 | ... = ... | | +| Initializers.cs:62:38:62:40 | "i" | Initializers.cs:62:29:62:34 | access to array element | | +| Initializers.cs:62:43:62:52 | access to array element | Initializers.cs:62:43:62:58 | ... = ... | | | Initializers.cs:62:43:62:58 | ... = ... | Initializers.cs:62:27:62:60 | { ..., ... } | | | Initializers.cs:62:44:62:44 | 1 | Initializers.cs:62:47:62:47 | access to parameter i | | | Initializers.cs:62:47:62:47 | access to parameter i | Initializers.cs:62:51:62:51 | 0 | | | Initializers.cs:62:47:62:51 | ... + ... | Initializers.cs:62:56:62:58 | "1" | | | Initializers.cs:62:51:62:51 | 0 | Initializers.cs:62:47:62:51 | ... + ... | | -| Initializers.cs:62:56:62:58 | "1" | Initializers.cs:62:43:62:58 | ... = ... | | +| Initializers.cs:62:56:62:58 | "1" | Initializers.cs:62:43:62:52 | access to array element | | | Initializers.cs:63:13:63:25 | access to property ArrayProperty | Initializers.cs:63:13:63:60 | ... = ... | | | Initializers.cs:63:13:63:60 | ... = ... | Initializers.cs:64:33:64:33 | 0 | | | Initializers.cs:63:29:63:60 | { ..., ... } | Initializers.cs:63:13:63:25 | access to property ArrayProperty | | +| Initializers.cs:63:31:63:33 | access to array element | Initializers.cs:63:31:63:41 | ... = ... | | | Initializers.cs:63:31:63:41 | ... = ... | Initializers.cs:63:45:63:45 | access to parameter i | | | Initializers.cs:63:32:63:32 | 1 | Initializers.cs:63:37:63:41 | "One" | | -| Initializers.cs:63:37:63:41 | "One" | Initializers.cs:63:31:63:41 | ... = ... | | +| Initializers.cs:63:37:63:41 | "One" | Initializers.cs:63:31:63:33 | access to array element | | +| Initializers.cs:63:44:63:50 | access to array element | Initializers.cs:63:44:63:58 | ... = ... | | | Initializers.cs:63:44:63:58 | ... = ... | Initializers.cs:63:29:63:60 | { ..., ... } | | | Initializers.cs:63:45:63:45 | access to parameter i | Initializers.cs:63:49:63:49 | 2 | | | Initializers.cs:63:45:63:49 | ... + ... | Initializers.cs:63:54:63:58 | "Two" | | | Initializers.cs:63:49:63:49 | 2 | Initializers.cs:63:45:63:49 | ... + ... | | -| Initializers.cs:63:54:63:58 | "Two" | Initializers.cs:63:44:63:58 | ... = ... | | +| Initializers.cs:63:54:63:58 | "Two" | Initializers.cs:63:44:63:50 | access to array element | | | Initializers.cs:64:13:64:26 | access to property ArrayProperty2 | Initializers.cs:64:13:64:63 | ... = ... | | | Initializers.cs:64:13:64:63 | ... = ... | Initializers.cs:58:9:65:9 | { ..., ... } | | | Initializers.cs:64:30:64:63 | { ..., ... } | Initializers.cs:64:13:64:26 | access to property ArrayProperty2 | | +| Initializers.cs:64:32:64:37 | access to array element | Initializers.cs:64:32:64:43 | ... = ... | | | Initializers.cs:64:32:64:43 | ... = ... | Initializers.cs:64:47:64:47 | 1 | | | Initializers.cs:64:33:64:33 | 0 | Initializers.cs:64:36:64:36 | 1 | | | Initializers.cs:64:36:64:36 | 1 | Initializers.cs:64:41:64:43 | "i" | | -| Initializers.cs:64:41:64:43 | "i" | Initializers.cs:64:32:64:43 | ... = ... | | +| Initializers.cs:64:41:64:43 | "i" | Initializers.cs:64:32:64:37 | access to array element | | +| Initializers.cs:64:46:64:55 | access to array element | Initializers.cs:64:46:64:61 | ... = ... | | | Initializers.cs:64:46:64:61 | ... = ... | Initializers.cs:64:30:64:63 | { ..., ... } | | | Initializers.cs:64:47:64:47 | 1 | Initializers.cs:64:50:64:50 | access to parameter i | | | Initializers.cs:64:50:64:50 | access to parameter i | Initializers.cs:64:54:64:54 | 0 | | | Initializers.cs:64:50:64:54 | ... + ... | Initializers.cs:64:59:64:61 | "1" | | | Initializers.cs:64:54:64:54 | 0 | Initializers.cs:64:50:64:54 | ... + ... | | -| Initializers.cs:64:59:64:61 | "1" | Initializers.cs:64:46:64:61 | ... = ... | | +| Initializers.cs:64:59:64:61 | "1" | Initializers.cs:64:46:64:55 | access to array element | | | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | LoopUnrolling.cs:5:7:5:19 | {...} | | | LoopUnrolling.cs:5:7:5:19 | call to method | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | | | LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | this access | | @@ -2631,9 +2767,10 @@ | MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationA.cs:13:16:13:16 | this access | | | MultiImplementationA.cs:11:7:11:8 | enter | MultiImplementationB.cs:11:16:11:16 | this access | | | MultiImplementationA.cs:11:7:11:8 | exit (normal) | MultiImplementationA.cs:11:7:11:8 | exit | | +| MultiImplementationA.cs:13:16:13:16 | access to field F | MultiImplementationA.cs:13:16:13:20 | ... = ... | | | 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 | | -| MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:16:13:20 | ... = ... | | +| MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:16:13:16 | access to field F | | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | exit get_Item (normal) | | | MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationA.cs:14:31:14:31 | access to parameter i | | | MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationB.cs:12:37:12:40 | null | | @@ -2666,10 +2803,11 @@ | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | MultiImplementationA.cs:20:12:20:13 | exit C2 | | | MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | call to method | | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:24:20:29 | ...; | | +| MultiImplementationA.cs:20:24:20:24 | access to field F | MultiImplementationA.cs:20:24:20:28 | ... = ... | | | MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:28:20:28 | access to parameter i | | | MultiImplementationA.cs:20:24:20:28 | ... = ... | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | | | MultiImplementationA.cs:20:24:20:29 | ...; | MultiImplementationA.cs:20:24:20:24 | this access | | -| MultiImplementationA.cs:20:28:20:28 | access to parameter i | MultiImplementationA.cs:20:24:20:28 | ... = ... | | +| MultiImplementationA.cs:20:28:20:28 | access to parameter i | MultiImplementationA.cs:20:24:20:24 | access to field F | | | MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationA.cs:21:24:21:24 | 0 | | | MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationB.cs:19:24:19:24 | 1 | | | MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | MultiImplementationA.cs:21:12:21:13 | exit C2 | | @@ -2730,9 +2868,10 @@ | MultiImplementationB.cs:4:34:4:34 | 1 | MultiImplementationB.cs:4:27:4:35 | return ...; | | | MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (normal) | | | MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | exit M (normal) | | +| MultiImplementationB.cs:11:16:11:16 | access to field F | MultiImplementationB.cs:11:16:11:20 | ... = ... | | | 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:11:20:11:20 | 1 | MultiImplementationB.cs:11:16:11:16 | access to field F | | | 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 | | @@ -2859,9 +2998,10 @@ | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | PartialImplementationA.cs:3:12:3:18 | exit Partial | | | PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | call to method | | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | | +| PartialImplementationB.cs:3:16:3:16 | access to field F | PartialImplementationB.cs:3:16:3:20 | ... = ... | | | PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationB.cs:3:20:3:20 | 0 | | | PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:5:16:5:16 | this access | | -| PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:16:3:20 | ... = ... | | +| PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:16:3:16 | access to field F | | | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | PartialImplementationB.cs:4:22:4:24 | {...} | | | PartialImplementationB.cs:4:12:4:18 | call to method | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | | | PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | this access | | @@ -3922,20 +4062,22 @@ | cflow.cs:127:62:127:64 | enter set_Prop | cflow.cs:127:66:127:83 | {...} | | | cflow.cs:127:62:127:64 | exit set_Prop (normal) | cflow.cs:127:62:127:64 | exit set_Prop | | | cflow.cs:127:66:127:83 | {...} | cflow.cs:127:68:127:81 | ...; | | +| cflow.cs:127:68:127:72 | access to field Field | cflow.cs:127:68:127:80 | ... = ... | | | cflow.cs:127:68:127:72 | this access | cflow.cs:127:76:127:80 | access to parameter value | | | cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:62:127:64 | exit set_Prop (normal) | | | cflow.cs:127:68:127:81 | ...; | cflow.cs:127:68:127:72 | this access | | -| cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:68:127:80 | ... = ... | | +| cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:68:127:72 | access to field Field | | | cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:130:5:132:5 | {...} | | | cflow.cs:129:5:129:15 | call to method | cflow.cs:129:5:129:15 | call to constructor Object | | | cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | this access | | | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:129:5:129:15 | exit ControlFlow | | | cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | call to method | | | cflow.cs:130:5:132:5 | {...} | cflow.cs:131:9:131:18 | ...; | | +| cflow.cs:131:9:131:13 | access to field Field | cflow.cs:131:9:131:17 | ... = ... | | | cflow.cs:131:9:131:13 | this access | cflow.cs:131:17:131:17 | access to parameter s | | | cflow.cs:131:9:131:17 | ... = ... | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | | | cflow.cs:131:9:131:18 | ...; | cflow.cs:131:9:131:13 | this access | | -| cflow.cs:131:17:131:17 | access to parameter s | cflow.cs:131:9:131:17 | ... = ... | | +| cflow.cs:131:17:131:17 | access to parameter s | cflow.cs:131:9:131:13 | access to field Field | | | cflow.cs:134:5:134:15 | enter ControlFlow | cflow.cs:134:31:134:31 | access to parameter i | | | cflow.cs:134:5:134:15 | exit ControlFlow (normal) | cflow.cs:134:5:134:15 | exit ControlFlow | | | cflow.cs:134:26:134:29 | call to constructor ControlFlow | cflow.cs:134:39:134:41 | {...} | | @@ -4163,10 +4305,11 @@ | cflow.cs:209:5:222:5 | {...} | cflow.cs:210:9:221:36 | do ... while (...); | | | cflow.cs:210:9:221:36 | do ... while (...); | cflow.cs:211:9:221:9 | {...} | | | cflow.cs:211:9:221:9 | {...} | cflow.cs:212:13:212:25 | ...; | | +| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:24 | ... = ... | | | cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:22:212:24 | "a" | | | cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | access to field Field | | | cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access | | -| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:13:212:24 | ... = ... | | +| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:13:212:17 | access to field Field | | | cflow.cs:212:13:212:24 | ... = ... | cflow.cs:213:13:216:13 | if (...) ... | | | cflow.cs:212:13:212:25 | ...; | cflow.cs:212:13:212:17 | this access | | | cflow.cs:212:22:212:24 | "a" | cflow.cs:212:13:212:24 | ... + ... | | @@ -4204,10 +4347,11 @@ | cflow.cs:226:57:226:59 | "a" | cflow.cs:226:62:226:63 | 10 | | | cflow.cs:226:62:226:63 | 10 | cflow.cs:226:27:226:64 | call to method Repeat | | | cflow.cs:227:9:237:9 | {...} | cflow.cs:228:13:228:23 | ...; | | +| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:22 | ... = ... | | | cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:22:228:22 | access to local variable x | | | cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | access to field Field | | | cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access | | -| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:13:228:22 | ... = ... | | +| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:13:228:17 | access to field Field | | | cflow.cs:228:13:228:22 | ... = ... | cflow.cs:229:13:232:13 | if (...) ... | | | cflow.cs:228:13:228:23 | ...; | cflow.cs:228:13:228:17 | this access | | | cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:13:228:22 | ... + ... | | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected b/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected index aff87481461..d76f989e5cf 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected @@ -36,6 +36,9 @@ | Assignments.cs:3:10:3:10 | M | Assignments.cs:4:5:15:5 | {...} | | Assignments.cs:14:18:14:35 | (...) => ... | Assignments.cs:14:33:14:35 | {...} | | Assignments.cs:17:40:17:40 | + | Assignments.cs:18:5:20:5 | {...} | +| Assignments.cs:27:10:27:23 | SetParamSingle | Assignments.cs:28:5:30:5 | {...} | +| Assignments.cs:32:10:32:22 | SetParamMulti | Assignments.cs:33:5:36:5 | {...} | +| Assignments.cs:38:10:38:11 | M2 | Assignments.cs:39:5:45:5 | {...} | | BreakInTry.cs:1:7:1:16 | BreakInTry | BreakInTry.cs:1:7:1:16 | this access | | BreakInTry.cs:3:10:3:11 | M1 | BreakInTry.cs:4:5:18:5 | {...} | | BreakInTry.cs:20:10:20:11 | M2 | BreakInTry.cs:21:5:36:5 | {...} | @@ -58,7 +61,10 @@ | ConditionalAccess.cs:21:10:21:11 | M7 | ConditionalAccess.cs:22:5:26:5 | {...} | | ConditionalAccess.cs:30:10:30:12 | Out | ConditionalAccess.cs:30:32:30:32 | 0 | | ConditionalAccess.cs:32:10:32:11 | M8 | ConditionalAccess.cs:33:5:36:5 | {...} | -| ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | +| ConditionalAccess.cs:42:9:42:11 | get_Item | ConditionalAccess.cs:42:13:42:28 | {...} | +| ConditionalAccess.cs:43:9:43:11 | set_Item | ConditionalAccess.cs:43:13:43:15 | {...} | +| ConditionalAccess.cs:46:10:46:11 | M9 | ConditionalAccess.cs:47:5:55:5 | {...} | +| ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | | Conditions.cs:1:7:1:16 | Conditions | Conditions.cs:1:7:1:16 | this access | | Conditions.cs:3:10:3:19 | IncrOrDecr | Conditions.cs:4:5:9:5 | {...} | | Conditions.cs:11:9:11:10 | M1 | Conditions.cs:12:5:20:5 | {...} | diff --git a/csharp/ql/test/library-tests/csharp8/ispatternflow.expected b/csharp/ql/test/library-tests/csharp8/ispatternflow.expected index 553f416cd96..f8d1de5d7e9 100644 --- a/csharp/ql/test/library-tests/csharp8/ispatternflow.expected +++ b/csharp/ql/test/library-tests/csharp8/ispatternflow.expected @@ -6,8 +6,9 @@ | patterns.cs:7:20:7:41 | (...) ... | patterns.cs:7:16:7:41 | Object o = ... | semmle.label | successor | | patterns.cs:7:20:7:41 | object creation of type MyStruct | patterns.cs:7:39:7:39 | 2 | semmle.label | successor | | patterns.cs:7:33:7:41 | { ..., ... } | patterns.cs:7:20:7:41 | (...) ... | semmle.label | successor | +| patterns.cs:7:35:7:35 | access to field X | patterns.cs:7:35:7:39 | ... = ... | semmle.label | successor | | patterns.cs:7:35:7:39 | ... = ... | patterns.cs:7:33:7:41 | { ..., ... } | semmle.label | successor | -| patterns.cs:7:39:7:39 | 2 | patterns.cs:7:35:7:39 | ... = ... | semmle.label | successor | +| patterns.cs:7:39:7:39 | 2 | patterns.cs:7:35:7:35 | access to field X | semmle.label | successor | | patterns.cs:9:9:11:9 | if (...) ... | patterns.cs:9:13:9:13 | access to local variable o | semmle.label | successor | | patterns.cs:9:13:9:13 | access to local variable o | patterns.cs:9:18:9:29 | MyStruct ms1 | semmle.label | successor | | patterns.cs:9:13:9:29 | [false] ... is ... | patterns.cs:13:9:15:9 | if (...) ... | semmle.label | false | diff --git a/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected b/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected index 83438c26f6e..c6ecf8bcfd9 100644 --- a/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected +++ b/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected @@ -108,8 +108,9 @@ | patterns.cs:125:13:125:38 | MyStruct s = ... | patterns.cs:126:9:132:10 | ... ...; | semmle.label | successor | | patterns.cs:125:17:125:38 | object creation of type MyStruct | patterns.cs:125:36:125:36 | 0 | semmle.label | successor | | patterns.cs:125:30:125:38 | { ..., ... } | patterns.cs:125:13:125:38 | MyStruct s = ... | semmle.label | successor | +| patterns.cs:125:32:125:32 | access to field X | patterns.cs:125:32:125:36 | ... = ... | semmle.label | successor | | patterns.cs:125:32:125:36 | ... = ... | patterns.cs:125:30:125:38 | { ..., ... } | semmle.label | successor | -| patterns.cs:125:36:125:36 | 0 | patterns.cs:125:32:125:36 | ... = ... | semmle.label | successor | +| patterns.cs:125:36:125:36 | 0 | patterns.cs:125:32:125:32 | access to field X | semmle.label | successor | | patterns.cs:126:9:132:10 | ... ...; | patterns.cs:126:17:126:17 | access to local variable s | semmle.label | successor | | patterns.cs:126:13:132:9 | Int32 r = ... | patterns.cs:134:9:148:9 | try {...} ... | semmle.label | successor | | patterns.cs:126:17:126:17 | access to local variable s | patterns.cs:128:13:128:20 | access to type MyStruct | semmle.label | successor | diff --git a/csharp/ql/test/library-tests/csharp8/switchstmtctrlflow.expected b/csharp/ql/test/library-tests/csharp8/switchstmtctrlflow.expected index 64e16c2d7cf..06e4623611b 100644 --- a/csharp/ql/test/library-tests/csharp8/switchstmtctrlflow.expected +++ b/csharp/ql/test/library-tests/csharp8/switchstmtctrlflow.expected @@ -5,8 +5,9 @@ | patterns.cs:34:13:34:38 | MyStruct s = ... | patterns.cs:36:9:44:9 | switch (...) {...} | semmle.label | successor | | patterns.cs:34:17:34:38 | object creation of type MyStruct | patterns.cs:34:36:34:36 | 0 | semmle.label | successor | | patterns.cs:34:30:34:38 | { ..., ... } | patterns.cs:34:13:34:38 | MyStruct s = ... | semmle.label | successor | +| patterns.cs:34:32:34:32 | access to field X | patterns.cs:34:32:34:36 | ... = ... | semmle.label | successor | | patterns.cs:34:32:34:36 | ... = ... | patterns.cs:34:30:34:38 | { ..., ... } | semmle.label | successor | -| patterns.cs:34:36:34:36 | 0 | patterns.cs:34:32:34:36 | ... = ... | semmle.label | successor | +| patterns.cs:34:36:34:36 | 0 | patterns.cs:34:32:34:32 | access to field X | semmle.label | successor | | patterns.cs:36:9:44:9 | switch (...) {...} | patterns.cs:36:17:36:17 | access to local variable s | semmle.label | successor | | patterns.cs:36:17:36:17 | access to local variable s | patterns.cs:38:13:38:47 | case ...: | semmle.label | successor | | patterns.cs:38:13:38:47 | case ...: | patterns.cs:38:18:38:29 | MyStruct ms1 | semmle.label | successor | diff --git a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected index b2d395d4b83..0950638d830 100644 --- a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected +++ b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected @@ -1124,6 +1124,7 @@ | Splitting.cs:51:30:51:36 | { ..., ... } | Splitting.cs:51:17:51:36 | array creation of type String[] | | Splitting.cs:51:32:51:34 | "a" | Splitting.cs:51:30:51:36 | { ..., ... } | | Splitting.cs:52:9:52:9 | [post] access to local variable y | Splitting.cs:53:17:53:17 | access to local variable y | +| Splitting.cs:52:9:52:9 | access to local variable y | Splitting.cs:52:9:52:12 | access to array element | | Splitting.cs:52:9:52:9 | access to local variable y | Splitting.cs:53:17:53:17 | access to local variable y | | Splitting.cs:52:16:52:18 | "b" | Splitting.cs:52:9:52:9 | [post] access to local variable y | | Splitting.cs:52:16:52:18 | "b" | Splitting.cs:52:9:52:12 | access to array element | diff --git a/csharp/ql/test/library-tests/dataflow/nullness/MaybeNullExpr.cs b/csharp/ql/test/library-tests/dataflow/nullness/MaybeNullExpr.cs new file mode 100644 index 00000000000..6be2c54d41f --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/nullness/MaybeNullExpr.cs @@ -0,0 +1,24 @@ +using System; + +public class C +{ + string Prop { get; set; } + + void M(object o, bool b) + { + // Conditional expr might be null. + var conditionalExpr = b ? new object() : null; + + // Null-coalescing expr might be null as the right operand is null. + var nullCoalescing = o ?? null; + + // Cast might be null. + var c = o as C; + + // Conditional access might be null as the qualifier might be null. + var s1 = (o as C)?.Prop; + + // Conditional access might be null as the qualifier might be null. + var i = o?.GetHashCode(); + } +} diff --git a/csharp/ql/test/library-tests/dataflow/nullness/maybeNullExpr.expected b/csharp/ql/test/library-tests/dataflow/nullness/maybeNullExpr.expected new file mode 100644 index 00000000000..7182c0cdf95 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/nullness/maybeNullExpr.expected @@ -0,0 +1,8 @@ +| MaybeNullExpr.cs:10:31:10:53 | ... ? ... : ... | +| MaybeNullExpr.cs:10:50:10:53 | null | +| MaybeNullExpr.cs:13:30:13:38 | ... ?? ... | +| MaybeNullExpr.cs:13:35:13:38 | null | +| MaybeNullExpr.cs:16:17:16:22 | ... as ... | +| MaybeNullExpr.cs:19:18:19:31 | access to property Prop | +| MaybeNullExpr.cs:19:19:19:24 | ... as ... | +| MaybeNullExpr.cs:22:17:22:32 | call to method GetHashCode | diff --git a/csharp/ql/test/library-tests/dataflow/nullness/maybeNullExpr.ql b/csharp/ql/test/library-tests/dataflow/nullness/maybeNullExpr.ql new file mode 100644 index 00000000000..3b5531ccb3a --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/nullness/maybeNullExpr.ql @@ -0,0 +1,6 @@ +import csharp +import semmle.code.csharp.dataflow.Nullness + +from MaybeNullExpr e +where e.fromSource() +select e diff --git a/csharp/ql/test/library-tests/dataflow/nullness/options b/csharp/ql/test/library-tests/dataflow/nullness/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/nullness/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/library-tests/dataflow/signanalysis/SignAnalysis.expected b/csharp/ql/test/library-tests/dataflow/signanalysis/SignAnalysis.expected index b0d97c4d6e4..9f87bf59eeb 100644 --- a/csharp/ql/test/library-tests/dataflow/signanalysis/SignAnalysis.expected +++ b/csharp/ql/test/library-tests/dataflow/signanalysis/SignAnalysis.expected @@ -95,6 +95,7 @@ | SignAnalysis.cs:120:9:120:10 | access to field f0 | positive | | SignAnalysis.cs:120:9:120:12 | ...++ | positive | | SignAnalysis.cs:121:34:121:35 | access to field f0 | strictlyPositive | +| SignAnalysis.cs:122:9:122:10 | access to field f0 | positive | | SignAnalysis.cs:129:9:129:16 | ... = ... | strictlyNegative | | SignAnalysis.cs:129:14:129:16 | -... | strictlyNegative | | SignAnalysis.cs:129:15:129:16 | 10 | strictlyPositive | @@ -213,6 +214,7 @@ | SignAnalysis.cs:414:13:414:13 | access to local variable i | strictlyPositive | | SignAnalysis.cs:415:31:415:31 | access to local variable i | strictlyPositive | | SignAnalysis.cs:424:31:424:31 | access to local variable x | strictlyNegative | +| SignAnalysis.cs:428:19:428:19 | access to constant A | strictlyPositive | | SignAnalysis.cs:428:19:428:24 | ... = ... | strictlyPositive | | SignAnalysis.cs:428:23:428:24 | 12 | strictlyPositive | | SignAnalysis.cs:434:38:434:38 | access to local variable i | strictlyNegative | diff --git a/csharp/ql/test/library-tests/obinit/ObInit.expected b/csharp/ql/test/library-tests/obinit/ObInit.expected index 38dd8268680..3d2c7df895f 100644 --- a/csharp/ql/test/library-tests/obinit/ObInit.expected +++ b/csharp/ql/test/library-tests/obinit/ObInit.expected @@ -6,11 +6,13 @@ call | obinit.cs:9:16:9:16 | call to method | obinit.cs:2:18:2:18 | | obinit.cs:9:16:9:16 | A | | obinit.cs:15:16:15:16 | call to method | obinit.cs:14:18:14:18 | | obinit.cs:15:16:15:16 | B | cfg +| obinit.cs:2:18:2:18 | | obinit.cs:3:13:3:13 | access to field x | obinit.cs:3:13:3:17 | ... = ... | normal | 2 | | obinit.cs:2:18:2:18 | | obinit.cs:3:13:3:13 | this access | obinit.cs:3:17:3:17 | 1 | normal | 0 | -| obinit.cs:2:18:2:18 | | obinit.cs:3:13:3:17 | ... = ... | obinit.cs:5:23:5:23 | this access | normal | 2 | -| obinit.cs:2:18:2:18 | | obinit.cs:3:17:3:17 | 1 | obinit.cs:3:13:3:17 | ... = ... | normal | 1 | -| obinit.cs:2:18:2:18 | | obinit.cs:5:23:5:23 | this access | obinit.cs:5:27:5:34 | "source" | normal | 3 | -| obinit.cs:2:18:2:18 | | obinit.cs:5:27:5:34 | "source" | obinit.cs:5:23:5:34 | ... = ... | normal | 4 | +| obinit.cs:2:18:2:18 | | obinit.cs:3:13:3:17 | ... = ... | obinit.cs:5:23:5:23 | this access | normal | 3 | +| obinit.cs:2:18:2:18 | | obinit.cs:3:17:3:17 | 1 | obinit.cs:3:13:3:13 | access to field x | normal | 1 | +| obinit.cs:2:18:2:18 | | obinit.cs:5:23:5:23 | access to field s | obinit.cs:5:23:5:34 | ... = ... | normal | 6 | +| obinit.cs:2:18:2:18 | | obinit.cs:5:23:5:23 | this access | obinit.cs:5:27:5:34 | "source" | normal | 4 | +| obinit.cs:2:18:2:18 | | obinit.cs:5:27:5:34 | "source" | obinit.cs:5:23:5:23 | access to field s | normal | 5 | | obinit.cs:7:16:7:16 | A | obinit.cs:7:16:7:16 | call to constructor Object | obinit.cs:7:20:7:22 | {...} | normal | 2 | | obinit.cs:7:16:7:16 | A | obinit.cs:7:16:7:16 | call to method | obinit.cs:7:16:7:16 | call to constructor Object | normal | 1 | | obinit.cs:7:16:7:16 | A | obinit.cs:7:16:7:16 | this access | obinit.cs:7:16:7:16 | call to method | normal | 0 | diff --git a/csharp/ql/test/library-tests/standalone/controlflow/cfg.expected b/csharp/ql/test/library-tests/standalone/controlflow/cfg.expected index a42a3c662d4..d0838ceed01 100644 --- a/csharp/ql/test/library-tests/standalone/controlflow/cfg.expected +++ b/csharp/ql/test/library-tests/standalone/controlflow/cfg.expected @@ -31,10 +31,12 @@ | ControlFlow.cs:10:9:10:87 | ...; | ControlFlow.cs:10:9:10:86 | Call (unknown target) | | ControlFlow.cs:10:9:10:87 | ...; | ControlFlow.cs:10:9:10:86 | object creation of type | | ControlFlow.cs:10:35:10:86 | { ..., ... } | ControlFlow.cs:5:10:5:10 | exit F (normal) | +| ControlFlow.cs:10:37:10:47 | access to array element | ControlFlow.cs:10:37:10:62 | ... = ... | | ControlFlow.cs:10:37:10:62 | ... = ... | ControlFlow.cs:10:79:10:79 | access to local variable v | -| ControlFlow.cs:10:51:10:62 | access to field Empty | ControlFlow.cs:10:37:10:62 | ... = ... | +| ControlFlow.cs:10:51:10:62 | access to field Empty | ControlFlow.cs:10:37:10:47 | access to array element | +| ControlFlow.cs:10:65:10:75 | access to array element | ControlFlow.cs:10:65:10:84 | ... = ... | | ControlFlow.cs:10:65:10:84 | ... = ... | ControlFlow.cs:10:35:10:86 | { ..., ... } | | ControlFlow.cs:10:79:10:79 | access to local variable v | ControlFlow.cs:10:79:10:84 | Call (unknown target) | | ControlFlow.cs:10:79:10:79 | access to local variable v | ControlFlow.cs:10:79:10:84 | access to property (unknown) | -| ControlFlow.cs:10:79:10:84 | Call (unknown target) | ControlFlow.cs:10:65:10:84 | ... = ... | -| ControlFlow.cs:10:79:10:84 | access to property (unknown) | ControlFlow.cs:10:65:10:84 | ... = ... | +| ControlFlow.cs:10:79:10:84 | Call (unknown target) | ControlFlow.cs:10:65:10:75 | access to array element | +| ControlFlow.cs:10:79:10:84 | access to property (unknown) | ControlFlow.cs:10:65:10:75 | access to array element | diff --git a/csharp/ql/test/query-tests/Nullness/ConditionalAccess.cs b/csharp/ql/test/query-tests/Nullness/ConditionalAccess.cs new file mode 100644 index 00000000000..fd3fae179ed --- /dev/null +++ b/csharp/ql/test/query-tests/Nullness/ConditionalAccess.cs @@ -0,0 +1,11 @@ +using System; +using System.ComponentModel; + +class ConditionalAccessTest +{ + void M1(object o) + { + var t = o?.GetType(); + Console.WriteLine(t.FullName); // $ Alert[cs/dereferenced-value-may-be-null] + } +} diff --git a/csharp/ql/test/query-tests/Nullness/NullCheck.expected b/csharp/ql/test/query-tests/Nullness/NullCheck.expected index ada1054f02c..2b6962b51c0 100644 --- a/csharp/ql/test/query-tests/Nullness/NullCheck.expected +++ b/csharp/ql/test/query-tests/Nullness/NullCheck.expected @@ -51,6 +51,7 @@ | C.cs:229:22:229:30 | ... != ... | C.cs:229:22:229:22 | access to local variable s | | C.cs:235:24:235:32 | ... == ... | C.cs:235:24:235:24 | access to local variable s | | C.cs:235:24:235:32 | ... == ... | C.cs:235:29:235:32 | null | +| ConditionalAccess.cs:8:17:8:17 | access to parameter o | ConditionalAccess.cs:8:17:8:17 | access to parameter o | | D.cs:28:13:28:25 | ... != ... | D.cs:28:13:28:17 | access to parameter param | | D.cs:38:13:38:21 | ... == ... | D.cs:38:13:38:13 | access to parameter x | | D.cs:39:16:39:24 | ... == ... | D.cs:39:16:39:16 | access to parameter x | diff --git a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected index 6a0d8372e3e..3f5219d8c0c 100644 --- a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected +++ b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected @@ -6,6 +6,7 @@ | C.cs:203:13:203:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:185:13:185:13 | s | s | C.cs:204:13:204:20 | ... = ... | this | | C.cs:223:9:223:9 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:210:13:210:13 | s | s | C.cs:222:13:222:20 | ... = ... | this | | C.cs:242:13:242:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:228:16:228:16 | s | s | C.cs:240:24:240:31 | ... = ... | this | +| ConditionalAccess.cs:9:27:9:27 | access to local variable t | Variable $@ may be null at this access because of $@ assignment. | ConditionalAccess.cs:8:13:8:13 | t | t | ConditionalAccess.cs:8:13:8:28 | Type t = ... | this | | D.cs:23:9:23:13 | access to parameter param | Variable $@ may be null at this access because of $@ null argument. | D.cs:21:32:21:36 | param | param | D.cs:17:17:17:20 | null | this | | D.cs:32:9:32:13 | access to parameter param | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:26:32:26:36 | param | param | D.cs:28:13:28:25 | ... != ... | this | | D.cs:73:13:73:14 | access to local variable o7 | Variable $@ may be null at this access because of $@ assignment. | D.cs:68:13:68:14 | o7 | o7 | D.cs:68:13:68:34 | String o7 = ... | this | diff --git a/docs/codeql/ql-language-reference/annotations.rst b/docs/codeql/ql-language-reference/annotations.rst index b792e807c93..4f5c2fdaa7d 100644 --- a/docs/codeql/ql-language-reference/annotations.rst +++ b/docs/codeql/ql-language-reference/annotations.rst @@ -17,7 +17,7 @@ For example, to declare a module ``M`` as private, you could use: Note that some annotations act on an entity itself, whilst others act on a particular *name* for the entity: - Act on an **entity**: ``abstract``, ``bindingset``, ``cached``, ``extensible``, ``external``, ``language``, - ``override``, ``pragma``, and ``transient`` + ``overlay``, ``override``, ``pragma``, and ``transient`` - Act on a **name**: ``additional``, ``deprecated``, ``final``, ``library``, ``private``, and ``query`` For example, if you annotate an entity with ``private``, then only that particular name is @@ -502,6 +502,193 @@ The ``bindingset`` annotation takes a comma-separated list of variables. For more information, see ":ref:`predicate-binding`." - When you annotate a class, each variable must be ``this`` or a field in the class. +.. _overlay: + +Overlay annotations +=================== + +Overlay annotations control how predicates behave during **overlay evaluation**, a feature +that enables efficient incremental analysis of codebases. + +In overlay evaluation, a *base database* is created from one version of a codebase, and an +*overlay database* is created by combining the base database with changes from a newer +version (such as a pull request). The goal is to analyze the overlay database as if it +were a fully extracted database at the newer commit, while reusing as much cached data +from the base database as possible. Ideally, analysis time is proportional to the size +of the diff rather than the full codebase. + +To achieve this, predicates are divided into *local* and *global* categories, with global +being the default. Local predicates are evaluated independently on base and overlay data, +and thus typically take time proportional to the diff size; global predicates operate on +the combined data, and thus take time proportional to the full codebase. When a global +predicate calls a local predicate, results from both the base and overlay evaluations of +the local predicate are combined, with stale base results filtered out through a process +called "discarding". + +Overlay evaluation is primarily used internally by GitHub Code Scanning to speed up +pull request analysis. Most QL developers do not need to use these annotations directly, +but understanding them can help resolve compilation errors that may occur when overlay +support is enabled for a language. + +.. note:: + + Overlay annotations only affect evaluation when overlay compilation is enabled + (via ``compileForOverlayEval: true`` in ``qlpack.yml``) and the evaluator is running + in overlay mode. This setting is typically only needed in the language's library pack; + custom query packs do not need it. Outside of overlay mode, these annotations are + validated but have no effect on evaluation. + +``overlay[local]`` +------------------ + +**Available for**: |modules|, |classes|, |algebraic datatypes|, |type unions|, |characteristic predicates|, |member predicates|, |non-member predicates| + +The ``overlay[local]`` annotation declares that a predicate is local. Local predicates are +evaluated separately on base and overlay data and may only depend on other local predicates. +The compiler reports an error if a local predicate depends on a global predicate. + +.. code-block:: ql + + // All dependencies are database extensionals, so this can be local + overlay[local] + predicate stmtInFile(@stmt s, string path) { + exists(@file f, @location loc | + hasLocation(s, loc) and + locations_default(loc, f, _, _, _, _) and + files(f, path) + ) + } + +``overlay[local?]`` +------------------- + +**Available for**: |modules|, |classes|, |algebraic datatypes|, |type unions|, |characteristic predicates|, |member predicates|, |non-member predicates| + +The ``overlay[local?]`` annotation declares that a predicate should be local if all of +its dependencies are local, and global otherwise. This is particularly useful in +parameterized modules, where different instantiations may have different locality +depending on the module parameters. + +.. code-block:: ql + + // Locality depends on whether Expr.getType() and Type.getName() are local + overlay[local?] + predicate exprTypeName(Expr e, string name) { + name = e.getType().getName() + } + +``overlay[global]`` +------------------- + +**Available for**: |modules|, |classes|, |algebraic datatypes|, |type unions|, |characteristic predicates|, |member predicates|, |non-member predicates| + +The ``overlay[global]`` annotation explicitly declares that a predicate is global. This +is the default behavior, so this annotation is typically used to override an inherited +``overlay[local]`` or ``overlay[local?]`` annotation from an enclosing module or class. +See `Annotation inheritance`_ for an example. + +``overlay[caller]`` +------------------- + +**Available for**: |modules|, |classes|, |algebraic datatypes|, |type unions|, |characteristic predicates|, |member predicates|, |non-member predicates| + +The ``overlay[caller]`` annotation declares that the locality of a predicate depends on +its caller. The compiler may internally duplicate the predicate, creating separate local +and global versions. Local callers use the local version; global callers use the global +version. + +.. code-block:: ql + + overlay[caller] + predicate utilityPredicate(int x) { + x in [1..100] + } + +``overlay[caller?]`` +-------------------- + +**Available for**: |modules|, |classes|, |algebraic datatypes|, |type unions|, |characteristic predicates|, |member predicates|, |non-member predicates| + +The ``overlay[caller?]`` annotation is like ``overlay[caller]``, but only applies if none +of the predicate's dependencies are global. If any dependency is global, the predicate +becomes global regardless of its callers, and calling it from a local predicate will +result in a compilation error. Like ``overlay[local?]``, this is useful in parameterized +modules where locality may vary between instantiations. + +``overlay[discard_entity]`` +--------------------------- + +**Available for**: |non-member predicates| (unary predicates on database types only) + +The ``overlay[discard_entity]`` annotation designates an *entity discard predicate*. +These predicates identify database entities that should be filtered out from cached base +results when combining with overlay results during overlay evaluation. + +Entity discard predicates must be: + +- Unary predicates (taking exactly one argument) +- Defined on a database type (a type from the database schema, prefixed with ``@``) +- Only dependent on local predicates and other non-discarding predicates + +.. code-block:: ql + + overlay[discard_entity] + private predicate discardExpr(@expr e) { + exists(string file | discardableExpr(file, e) and overlayChangedFiles(file)) + } + + overlay[local] + private predicate discardableExpr(string file, @expr e) { + not isOverlay() and + file = getFile(e) + } + + overlay[local] + predicate isOverlay() { databaseMetadata("isOverlay", "true") } + +Annotation inheritance +---------------------- + +Overlay annotations can be applied to modules and types, in which case they are +inherited by enclosed declarations. Declarations without explicit overlay annotations +inherit from their innermost enclosing declaration that has an overlay annotation. + +.. code-block:: ql + + overlay[local?] + module M { + predicate foo(@expr x) { ... } // Inherits overlay[local?] + + class C extends @expr { + predicate bar() { ... } // Inherits overlay[local?] + + overlay[global] + predicate baz() { ... } // Explicitly global + } + } + +Resolving overlay-related errors +-------------------------------- + +When overlay support is enabled for a language, you may encounter compilation errors in +custom QL libraries or queries. Here are common errors and their solutions: + +**"Declaration is annotated overlay[local] but depends on global entity"** + +A predicate marked ``overlay[local]`` (or ``overlay[caller]``) depends on a global predicate. +Solutions: + +- Change the annotation to ``overlay[local?]`` (or ``overlay[caller?]``) if the predicate doesn't strictly need to be local +- Add appropriate overlay annotations to the dependency chain to make dependencies local +- Use the ``forceLocal`` higher-order predicate if you need to call global code from local code (advanced) + +**"Cannot apply forceLocal to relation that is annotated overlay[...]"** + +The ``forceLocal`` higher-order predicate cannot be applied to predicates that have overlay +annotations such as ``overlay[local]``, ``overlay[local?]``, ``overlay[caller]``, or +``overlay[caller?]``. The input to ``forceLocal`` must be a predicate without such annotations +(i.e., a global predicate or one with ``overlay[global]``). + .. Links to use in substitutions .. |classes| replace:: :ref:`classes ` diff --git a/docs/codeql/ql-language-reference/ql-language-specification.rst b/docs/codeql/ql-language-reference/ql-language-specification.rst index 1d84cc31c73..496b1245ff5 100644 --- a/docs/codeql/ql-language-reference/ql-language-specification.rst +++ b/docs/codeql/ql-language-reference/ql-language-specification.rst @@ -776,6 +776,7 @@ Various kinds of syntax can have *annotations* applied to them. Annotations are argsAnnotation ::= "pragma" "[" ("inline" | "inline_late" | "noinline" | "nomagic" | "noopt" | "assume_small_delta") "]" | "language" "[" "monotonicAggregates" "]" | "bindingset" "[" (variable ( "," variable)*)? "]" + | "overlay" "[" ("local" | "local?" | "global" | "caller" | "caller?" | "discard_entity") "]" Each simple annotation adds a same-named attribute to the syntactic entity it precedes. For example, if a class is preceded by the ``abstract`` annotation, then the class is said to be abstract. @@ -873,6 +874,26 @@ A predicate may have several different binding sets, which can be stated by usin The ``bindingset`` pragma is usable with type signatures and predicate signatures, but not with module signatures. +The parameterized annotation ``overlay`` controls predicate behavior during overlay evaluation, which is a feature for incremental analysis. Overlay annotations apply at the scope level, and are inherited by nested scopes. + ++---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+ +| Overlay | Classes | Characters | Member predicates | Non-member predicates | Imports | Fields | Modules | Aliases | ++=====================+=========+============+===================+=======================+=========+========+=========+=========+ +| ``local`` | yes | yes | yes | yes | | | yes | | ++---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+ +| ``local?`` | yes | yes | yes | yes | | | yes | | ++---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+ +| ``global`` | yes | yes | yes | yes | | | yes | | ++---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+ +| ``caller`` | yes | yes | yes | yes | | | yes | | ++---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+ +| ``caller?`` | yes | yes | yes | yes | | | yes | | ++---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+ +| ``discard_entity`` | | | | yes | | | | | ++---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+ + +The ``overlay[discard_entity]`` annotation is only valid on unary non-member predicates whose argument is a database type. + QLDoc ----- diff --git a/docs/codeql/qllexer.py b/docs/codeql/qllexer.py index 33c0becdfc3..55a65e84152 100644 --- a/docs/codeql/qllexer.py +++ b/docs/codeql/qllexer.py @@ -35,7 +35,7 @@ class QLLexer(RegexLexer): # Keywords (r'\b(boolean|date|float|int|string)\b', Keyword.Type), (r'\b(abstract|cached|deprecated|external|final|library|override|private|query' - r'|(pragma|language|bindingset)\[\w*(,\s*\w*)*\])\s', + r'|(pragma|language|bindingset|overlay)\[\w*\??(,\s*\w*\??)*\])\s', Keyword.Reserved), (words(( 'and', 'any', 'as', 'asc', 'avg', 'by', 'class','concat', 'count', diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index dd213e111b4..8718668249f 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.40 + +No user-facing changes. + ## 1.0.39 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.40.md b/go/ql/consistency-queries/change-notes/released/1.0.40.md new file mode 100644 index 00000000000..3f2f101b3b7 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.40.md @@ -0,0 +1,3 @@ +## 1.0.40 + +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 c310c9f1e78..326e4b5da67 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.39 +lastReleaseVersion: 1.0.40 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index afcddda3b5a..b164141b828 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.40-dev +version: 1.0.41-dev groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 53eac41e696..97391d2342a 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 6.0.0 + +### Breaking Changes + +* The query `go/unexpected-frontend-error` has been moved from the `codeql/go-queries` query to the `codeql-go-consistency-queries` query pack. + +### Minor Analysis Improvements + +* When a code-scanning configuration specifies the `paths:` and/or `paths-ignore:` settings, these are now taken into account by the Go extractor's search for `.vue` and HTML files. + ## 5.0.6 No user-facing changes. diff --git a/go/ql/lib/change-notes/2025-11-26-unexpected-frontend-errors-query-moved.md b/go/ql/lib/change-notes/2025-11-26-unexpected-frontend-errors-query-moved.md deleted file mode 100644 index cf4b724dbd9..00000000000 --- a/go/ql/lib/change-notes/2025-11-26-unexpected-frontend-errors-query-moved.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -* The query `go/unexpected-frontend-error` has been moved from the `codeql/go-queries` query to the `codeql-go-consistency-queries` query pack. diff --git a/go/ql/lib/change-notes/2026-01-06-paths-directives-ancillary-data.md b/go/ql/lib/change-notes/2026-01-06-paths-directives-ancillary-data.md deleted file mode 100644 index bf9c4553573..00000000000 --- a/go/ql/lib/change-notes/2026-01-06-paths-directives-ancillary-data.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* When a code-scanning configuration specifies the `paths:` and/or `paths-ignore:` settings, these are now taken into account by the Go extractor's search for `.vue` and HTML files. diff --git a/go/ql/lib/change-notes/released/6.0.0.md b/go/ql/lib/change-notes/released/6.0.0.md new file mode 100644 index 00000000000..1e02ee8eea0 --- /dev/null +++ b/go/ql/lib/change-notes/released/6.0.0.md @@ -0,0 +1,9 @@ +## 6.0.0 + +### Breaking Changes + +* The query `go/unexpected-frontend-error` has been moved from the `codeql/go-queries` query to the `codeql-go-consistency-queries` query pack. + +### Minor Analysis Improvements + +* When a code-scanning configuration specifies the `paths:` and/or `paths-ignore:` settings, these are now taken into account by the Go extractor's search for `.vue` and HTML files. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index cc6fded2554..f8c4fa43ccb 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.0.6 +lastReleaseVersion: 6.0.0 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 3b929e9335a..669112f115d 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 5.0.7-dev +version: 6.0.1-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 1f4ae4f3a57..8a2f1355eec 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.5.4 + +No user-facing changes. + ## 1.5.3 No user-facing changes. diff --git a/go/ql/src/change-notes/released/1.5.4.md b/go/ql/src/change-notes/released/1.5.4.md new file mode 100644 index 00000000000..5ff5ac8ebb7 --- /dev/null +++ b/go/ql/src/change-notes/released/1.5.4.md @@ -0,0 +1,3 @@ +## 1.5.4 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 232224b0e26..c216828ee1c 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.3 +lastReleaseVersion: 1.5.4 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 1545b6b7195..da64d00094f 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.5.4-dev +version: 1.5.5-dev groups: - go - queries diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 2da774f260f..c0cac724f93 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -24,6 +24,8 @@ com.azure.identity,3,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, com.caucho.burlap.io,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,, com.caucho.hessian.io,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,, com.cedarsoftware.util.io,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,, +com.couchbase.client.core.env,15,,1,,,,9,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.couchbase.client.java,10,,,,,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,, com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, com.esotericsoftware.yamlbeans,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index faddc4e4272..fc3b041d08e 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -17,7 +17,7 @@ Java framework & library support `Apache Log4j 2 `_,``org.apache.logging.log4j``,,8,359,,,,,, `Apache Struts `_,"``org.apache.struts2``, ``org.apache.struts.beanvalidation.validation.interceptor``",,3877,14,,,,,, `Apache Velocity `_,"``org.apache.velocity.app``, ``org.apache.velocity.runtime``",,,8,,,,,, - `Couchbase `_,``com.couchbase.client.*``,,,,,,,,, + `Couchbase `_,``com.couchbase.client.*``,,1,25,,,6,,, `FreeMarker `_,"``freemarker.cache``, ``freemarker.template``",,,8,,,,,, `Google Gson `_,``com.google.gson``,,52,,,,,,, `Google Guava `_,``com.google.common.*``,,730,43,9,,,,, @@ -41,5 +41,5 @@ Java framework & library support `Thymeleaf `_,``org.thymeleaf``,,2,2,,,,,, `jOOQ `_,``org.jooq``,,,1,,,1,,, Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.com.caucho.hessian.io``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.caucho.burlap.io``, ``com.caucho.hessian.io``, ``com.cedarsoftware.util.io``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.esotericsoftware.yamlbeans``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.opensymphony.xwork2``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``hudson``, ``io.jsonwebtoken``, ``io.undertow.server.handlers.resource``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.lingala.zip4j``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.fileupload``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.authc``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.codehaus.cargo.container.installer``, ``org.dom4j``, ``org.exolab.castor.xml``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.ho.yaml``, ``org.influxdb``, ``org.jabsorb``, ``org.jboss.vfs``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.lastaflute.web``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``software.amazon.awssdk.transfer.s3.model``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",108,6034,757,131,6,14,18,,185 - Totals,,363,26371,2656,404,16,128,33,1,409 + Totals,,363,26372,2681,404,16,134,33,1,409 diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 1180f563d23..cd0db2ab96f 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 7.8.4 + +### Minor Analysis Improvements + +* When a code-scanning configuration specifies the `paths:` and/or `paths-ignore:` settings, these are now taken into account by the Java extractor's search for XML and properties files. +* Additional remote flow sources from the `org.springframework.web.socket` package have been modeled. +* A sanitizer has been added to `java/ssrf` to remove alerts when a regular expression check is used to verify that the value is safe. +* URI template variables of all Spring `RestTemplate` methods are now considered as request forgery sinks. Previously only the `getForObject` method was considered. This may lead to more alerts for the query `java/ssrf`. +* Added more dataflow models of `org.apache.commons.fileupload.FileItem`, `javax/jakarta.servlet.http.Part` and `org.apache.commons.fileupload.util.Streams`. + ## 7.8.3 No user-facing changes. diff --git a/java/ql/lib/change-notes/2024-09-24-multipart.md b/java/ql/lib/change-notes/2024-09-24-multipart.md deleted file mode 100644 index e1102698065..00000000000 --- a/java/ql/lib/change-notes/2024-09-24-multipart.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added more dataflow models of `org.apache.commons.fileupload.FileItem`, `javax/jakarta.servlet.http.Part` and `org.apache.commons.fileupload.util.Streams`. \ No newline at end of file diff --git a/java/ql/lib/change-notes/2025-12-02-improve-regex-sanitizer.md b/java/ql/lib/change-notes/2025-12-02-improve-regex-sanitizer.md deleted file mode 100644 index 77ce0dc583c..00000000000 --- a/java/ql/lib/change-notes/2025-12-02-improve-regex-sanitizer.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* A sanitizer has been added to `java/ssrf` to remove alerts when a regular expression check is used to verify that the value is safe. diff --git a/java/ql/lib/change-notes/2025-12-08-spring-websocket-handler.md b/java/ql/lib/change-notes/2025-12-08-spring-websocket-handler.md deleted file mode 100644 index d3ca7f07025..00000000000 --- a/java/ql/lib/change-notes/2025-12-08-spring-websocket-handler.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Additional remote flow sources from the `org.springframework.web.socket` package have been modeled. \ No newline at end of file diff --git a/java/ql/lib/change-notes/2025-12-16-java-xml-paths.md b/java/ql/lib/change-notes/2025-12-16-java-xml-paths.md deleted file mode 100644 index 877d0e7e2ed..00000000000 --- a/java/ql/lib/change-notes/2025-12-16-java-xml-paths.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* When a code-scanning configuration specifies the `paths:` and/or `paths-ignore:` settings, these are now taken into account by the Java extractor's search for XML and properties files. diff --git a/java/ql/lib/change-notes/released/7.8.4.md b/java/ql/lib/change-notes/released/7.8.4.md new file mode 100644 index 00000000000..cfeb5048cff --- /dev/null +++ b/java/ql/lib/change-notes/released/7.8.4.md @@ -0,0 +1,9 @@ +## 7.8.4 + +### Minor Analysis Improvements + +* When a code-scanning configuration specifies the `paths:` and/or `paths-ignore:` settings, these are now taken into account by the Java extractor's search for XML and properties files. +* Additional remote flow sources from the `org.springframework.web.socket` package have been modeled. +* A sanitizer has been added to `java/ssrf` to remove alerts when a regular expression check is used to verify that the value is safe. +* URI template variables of all Spring `RestTemplate` methods are now considered as request forgery sinks. Previously only the `getForObject` method was considered. This may lead to more alerts for the query `java/ssrf`. +* Added more dataflow models of `org.apache.commons.fileupload.FileItem`, `javax/jakarta.servlet.http.Part` and `org.apache.commons.fileupload.util.Streams`. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 41a48ad0ff8..c8145c25bf6 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 7.8.3 +lastReleaseVersion: 7.8.4 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 4cf6e5e75f4..37de3eb6f72 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.8.4-dev +version: 7.8.5-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringWebClient.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringWebClient.qll index 0580415a344..64c00f830ed 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringWebClient.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringWebClient.qll @@ -31,50 +31,55 @@ class SpringWebClient extends Interface { } } -/** The method `getForObject` on `org.springframework.web.reactive.function.client.RestTemplate`. */ -class SpringRestTemplateGetForObjectMethod extends Method { - SpringRestTemplateGetForObjectMethod() { +/** + * A method on `org.springframework.web.client.RestTemplate` + * which has a parameter `uriVariables` (which can have type `Object...` or + * `Map`) which contains variables to be expanded into the URL + * template in parameter 0. + */ +private class SpringRestTemplateMethodWithUriVariablesParameter extends Method { + int pos; + + SpringRestTemplateMethodWithUriVariablesParameter() { this.getDeclaringType() instanceof SpringRestTemplate and - this.hasName("getForObject") + this.getParameter(pos).getName() = "uriVariables" } + + int getUriVariablesPosition() { result = pos } } -/** A call to the method `getForObject` on `org.springframework.web.reactive.function.client.RestTemplate`. */ -class SpringRestTemplateGetForObjectMethodCall extends MethodCall { - SpringRestTemplateGetForObjectMethodCall() { - this.getMethod() instanceof SpringRestTemplateGetForObjectMethod - } +/** Gets the first argument of `mc`, if it is a compile-time constant. */ +pragma[inline] +private CompileTimeConstantExpr getConstantUrl(MethodCall mc) { result = mc.getArgument(0) } - /** Gets the first argument, if it is a compile time constant. */ - CompileTimeConstantExpr getConstantUrl() { result = this.getArgument(0) } - - /** - * Holds if the first argument is a compile time constant and it has a - * placeholder at offset `offset`, and there are `idx` placeholders that - * appear before it. - */ - predicate urlHasPlaceholderAtOffset(int idx, int offset) { - exists( - this.getConstantUrl() - .getStringValue() - .replaceAll("\\{", " ") - .replaceAll("\\}", " ") - .regexpFind("\\{[^}]*\\}", idx, offset) - ) - } +/** + * Holds if the first argument of `mc` is a compile-time constant URL template + * which has its `idx`-th placeholder at the offset `offset`. + */ +pragma[inline] +private predicate urlHasPlaceholderAtOffset(MethodCall mc, int idx, int offset) { + exists( + getConstantUrl(mc) + .getStringValue() + .replaceAll("\\{", " ") + .replaceAll("\\}", " ") + .regexpFind("\\{[^}]*\\}", idx, offset) + ) } -private class SpringWebClientRestTemplateGetForObject extends RequestForgerySink { - SpringWebClientRestTemplateGetForObject() { - exists(SpringRestTemplateGetForObjectMethodCall mc, int i | - // Note that the first argument is modeled as a request forgery sink - // separately. This model is for arguments beyond the first two. There - // are two relevant overloads, one with third parameter type `Object...` - // and one with third parameter type `Map`. For the latter we - // cannot deal with MapValue content easily but there is a default - // implicit taint read at sinks that will catch it. +private class SpringWebClientRestTemplateUriVariable extends RequestForgerySink { + SpringWebClientRestTemplateUriVariable() { + exists(SpringRestTemplateMethodWithUriVariablesParameter m, MethodCall mc, int i | + // Note that the first argument of `m` is modeled as a request forgery + // sink separately. This model is for arguments corresponding to the + // `uriVariables` parameter. There are always two relevant overloads, one + // with parameter type `Object...` and one with parameter type + // `Map`. For the latter we cannot deal with MapValue content + // easily but there is a default implicit taint read at sinks that will + // catch it. + mc.getMethod() = m and i >= 0 and - this.asExpr() = mc.getArgument(i + 2) + this.asExpr() = mc.getArgument(m.getUriVariablesPosition() + i) | // If we can determine that part of mc.getArgument(0) is a hostname // sanitizing prefix, then we count how many placeholders occur before it @@ -83,8 +88,8 @@ private class SpringWebClientRestTemplateGetForObject extends RequestForgerySink // considering the map values as sinks if there is at least one // placeholder in the URL before the hostname sanitizing prefix. exists(int offset | - mc.urlHasPlaceholderAtOffset(i, offset) and - offset < mc.getConstantUrl().(HostnameSanitizingPrefix).getOffset() + urlHasPlaceholderAtOffset(mc, i, offset) and + offset < getConstantUrl(mc).(HostnameSanitizingPrefix).getOffset() ) or // If we cannot determine that part of mc.getArgument(0) is a hostname @@ -94,12 +99,12 @@ private class SpringWebClientRestTemplateGetForObject extends RequestForgerySink // For the `Map` overload this has the effect of only // considering the map values as sinks if there is at least one // placeholder in the URL. - not mc.getConstantUrl() instanceof HostnameSanitizingPrefix and - mc.urlHasPlaceholderAtOffset(i, _) + not getConstantUrl(mc) instanceof HostnameSanitizingPrefix and + urlHasPlaceholderAtOffset(mc, i, _) or // If we cannot determine the string value of mc.getArgument(0), then we // conservatively consider all arguments as sinks. - not exists(mc.getConstantUrl().getStringValue()) + not exists(getConstantUrl(mc).getStringValue()) ) } } diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index be5a172bb6c..113c024d14a 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 1.10.5 + +### Minor Analysis Improvements + +* Added sink models for `com.couchbase` supporting SQL Injection and Hardcoded Credentials queries. +* Java thread safety analysis now understands initialization to thread safe classes inside constructors. + ## 1.10.4 No user-facing changes. diff --git a/java/ql/src/change-notes/2025-11-25-thread-safe-initializers.md b/java/ql/src/change-notes/2025-11-25-thread-safe-initializers.md deleted file mode 100644 index f373dae839d..00000000000 --- a/java/ql/src/change-notes/2025-11-25-thread-safe-initializers.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Java thread safety analysis now understands initialization to thread safe classes inside constructors. \ No newline at end of file diff --git a/java/ql/src/change-notes/2025-12-24-couchbase-sinks.md b/java/ql/src/change-notes/2025-12-24-couchbase-sinks.md deleted file mode 100644 index 473c708dcfb..00000000000 --- a/java/ql/src/change-notes/2025-12-24-couchbase-sinks.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added sink models for `com.couchbase` supporting SQL Injection and Hardcoded Cretentials queries. diff --git a/java/ql/src/change-notes/released/1.10.5.md b/java/ql/src/change-notes/released/1.10.5.md new file mode 100644 index 00000000000..03136b7afe2 --- /dev/null +++ b/java/ql/src/change-notes/released/1.10.5.md @@ -0,0 +1,6 @@ +## 1.10.5 + +### Minor Analysis Improvements + +* Added sink models for `com.couchbase` supporting SQL Injection and Hardcoded Credentials queries. +* Java thread safety analysis now understands initialization to thread safe classes inside constructors. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 35049ec188b..2b3096747d5 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.10.4 +lastReleaseVersion: 1.10.5 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index cfff0aa4e78..54fa90952dd 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.10.5-dev +version: 1.10.6-dev groups: - java - queries diff --git a/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected b/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected index 66dc968cb23..3fdd2395fcb 100644 --- a/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected +++ b/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected @@ -253,35 +253,91 @@ | SanitizationTests.java:122:60:122:79 | new URI(...) | SanitizationTests.java:121:94:121:125 | getParameter(...) : String | SanitizationTests.java:122:60:122:79 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:121:94:121:125 | getParameter(...) | user-provided value | | SanitizationTests.java:123:25:123:33 | unsafer10 | SanitizationTests.java:121:94:121:125 | getParameter(...) : String | SanitizationTests.java:123:25:123:33 | unsafer10 | Potential server-side request forgery due to a $@. | SanitizationTests.java:121:94:121:125 | getParameter(...) | user-provided value | | SpringSSRF.java:32:39:32:59 | ... + ... | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:32:39:32:59 | ... + ... | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:33:35:33:48 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:33:35:33:48 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:34:34:34:47 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:34:34:34:47 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:35:39:35:52 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:35:39:35:52 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:36:69:36:82 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:36:69:36:82 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:37:73:37:86 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:37:73:37:86 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:40:69:40:97 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:40:69:40:97 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:42:69:42:119 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:42:69:42:119 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:44:41:44:54 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:44:41:44:54 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:45:40:45:62 | new URI(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:45:40:45:62 | new URI(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:46:42:46:55 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:46:42:46:55 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:47:40:47:53 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:47:40:47:53 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:48:30:48:43 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:48:30:48:43 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:49:33:49:46 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:49:33:49:46 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:50:41:50:54 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:50:41:50:54 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:51:42:51:55 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:51:42:51:55 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:56:44:56:46 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:56:44:56:46 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:58:35:58:37 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:58:35:58:37 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:59:35:59:37 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:59:35:59:37 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:60:38:60:40 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:60:38:60:40 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:61:39:61:41 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:61:39:61:41 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:62:37:62:39 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:62:37:62:39 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:63:36:63:38 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:63:36:63:38 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:64:44:64:46 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:64:44:64:46 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:70:49:70:51 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:70:49:70:51 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:71:58:71:60 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:71:58:71:60 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:72:57:72:59 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:72:57:72:59 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:73:66:73:68 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:73:66:73:68 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:74:57:74:59 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:74:57:74:59 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:75:66:75:68 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:75:66:75:68 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:33:69:33:82 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:33:69:33:82 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:34:73:34:86 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:34:73:34:86 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:35:87:35:100 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:35:87:35:100 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:38:69:38:97 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:38:69:38:97 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:40:69:40:119 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:40:69:40:119 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:43:35:43:48 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:43:35:43:48 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:44:91:44:104 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:44:91:44:104 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:45:95:45:108 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:45:95:45:108 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:46:109:46:122 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:46:109:46:122 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:49:91:49:119 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:49:91:49:119 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:51:91:51:141 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:51:91:51:141 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:54:34:54:47 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:54:34:54:47 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:55:79:55:92 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:55:79:55:92 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:56:83:56:96 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:56:83:56:96 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:57:97:57:110 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:57:97:57:110 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:60:79:60:107 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:60:79:60:107 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:62:79:62:129 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:62:79:62:129 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:65:39:65:52 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:65:39:65:52 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:66:69:66:82 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:66:69:66:82 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:67:73:67:86 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:67:73:67:86 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:68:87:68:100 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:68:87:68:100 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:71:69:71:97 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:71:69:71:97 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:73:69:73:119 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:73:69:73:119 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:76:41:76:54 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:76:41:76:54 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:77:93:77:106 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:77:93:77:106 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:78:97:78:110 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:78:97:78:110 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:79:111:79:124 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:79:111:79:124 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:82:93:82:121 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:82:93:82:121 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:84:93:84:143 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:84:93:84:143 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:87:40:87:62 | new URI(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:87:40:87:62 | new URI(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:88:92:88:105 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:88:92:88:105 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:89:96:89:109 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:89:96:89:109 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:90:110:90:123 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:90:110:90:123 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:93:92:93:120 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:93:92:93:120 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:95:92:95:142 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:95:92:95:142 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:98:42:98:55 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:98:42:98:55 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:99:80:99:93 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:99:80:99:93 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:100:84:100:97 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:100:84:100:97 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:101:98:101:111 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:101:98:101:111 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:104:80:104:108 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:104:80:104:108 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:106:80:106:130 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:106:80:106:130 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:109:40:109:53 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:109:40:109:53 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:110:92:110:105 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:110:92:110:105 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:111:96:111:109 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:111:96:111:109 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:112:110:112:123 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:112:110:112:123 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:115:92:115:120 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:115:92:115:120 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:117:92:117:142 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:117:92:117:142 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:120:30:120:43 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:120:30:120:43 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:121:68:121:81 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:121:68:121:81 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:122:72:122:85 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:122:72:122:85 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:123:86:123:99 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:123:86:123:99 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:126:68:126:96 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:126:68:126:96 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:128:68:128:118 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:128:68:128:118 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:131:33:131:46 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:131:33:131:46 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:132:49:132:62 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:132:49:132:62 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:133:53:133:66 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:133:53:133:66 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:134:67:134:80 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:134:67:134:80 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:137:49:137:77 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:137:49:137:77 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:139:49:139:99 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:139:49:139:99 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:142:41:142:54 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:142:41:142:54 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:143:57:143:70 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:143:57:143:70 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:144:61:144:74 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:144:61:144:74 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:145:75:145:88 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:145:75:145:88 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:148:57:148:85 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:148:57:148:85 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:150:57:150:107 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:150:57:150:107 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:153:42:153:55 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:153:42:153:55 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:154:58:154:71 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:154:58:154:71 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:155:62:155:75 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:155:62:155:75 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:156:76:156:89 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:156:76:156:89 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:159:58:159:86 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:159:58:159:86 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:161:58:161:108 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:161:58:161:108 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:168:44:168:46 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:168:44:168:46 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:170:35:170:37 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:170:35:170:37 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:171:35:171:37 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:171:35:171:37 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:172:38:172:40 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:172:38:172:40 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:173:39:173:41 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:173:39:173:41 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:174:37:174:39 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:174:37:174:39 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:175:36:175:38 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:175:36:175:38 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:176:44:176:46 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:176:44:176:46 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:182:49:182:51 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:182:49:182:51 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:183:58:183:60 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:183:58:183:60 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:184:57:184:59 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:184:57:184:59 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:185:66:185:68 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:185:66:185:68 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:186:57:186:59 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:186:57:186:59 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | +| SpringSSRF.java:187:66:187:68 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:187:66:187:68 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | | URLClassLoaderSSRF.java:18:64:18:85 | new URL[] | URLClassLoaderSSRF.java:16:26:16:52 | getParameter(...) : String | URLClassLoaderSSRF.java:18:64:18:85 | new URL[] | Potential server-side request forgery due to a $@. | URLClassLoaderSSRF.java:16:26:16:52 | getParameter(...) | user-provided value | | URLClassLoaderSSRF.java:30:64:30:85 | new URL[] | URLClassLoaderSSRF.java:28:26:28:52 | getParameter(...) : String | URLClassLoaderSSRF.java:30:64:30:85 | new URL[] | Potential server-side request forgery due to a $@. | URLClassLoaderSSRF.java:28:26:28:52 | getParameter(...) | user-provided value | | URLClassLoaderSSRF.java:44:64:44:85 | new URL[] | URLClassLoaderSSRF.java:40:26:40:52 | getParameter(...) : String | URLClassLoaderSSRF.java:44:64:44:85 | new URL[] | Potential server-side request forgery due to a $@. | URLClassLoaderSSRF.java:40:26:40:52 | getParameter(...) | user-provided value | @@ -778,45 +834,123 @@ edges | SanitizationTests.java:122:68:122:78 | unsafeUri10 : String | SanitizationTests.java:122:60:122:79 | new URI(...) : URI | provenance | Config | | SanitizationTests.java:122:68:122:78 | unsafeUri10 : String | SanitizationTests.java:122:60:122:79 | new URI(...) : URI | provenance | MaD:285 | | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:32:39:32:59 | ... + ... | provenance | Src:MaD:277 Sink:MaD:264 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:33:35:33:48 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:262 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:34:34:34:47 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:263 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:35:39:35:52 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:265 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:36:69:36:82 | fooResourceUrl | provenance | Src:MaD:277 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:37:73:37:86 | fooResourceUrl | provenance | Src:MaD:277 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:40:83:40:96 | fooResourceUrl : String | provenance | Src:MaD:277 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:42:105:42:118 | fooResourceUrl : String | provenance | Src:MaD:277 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:44:41:44:54 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:268 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | provenance | Src:MaD:277 | -| SpringSSRF.java:40:83:40:96 | fooResourceUrl : String | SpringSSRF.java:40:69:40:97 | of(...) | provenance | MaD:289 | -| SpringSSRF.java:42:105:42:118 | fooResourceUrl : String | SpringSSRF.java:42:69:42:119 | of(...) | provenance | MaD:290 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:45:40:45:62 | new URI(...) | provenance | Config Sink:MaD:269 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:45:40:45:62 | new URI(...) | provenance | MaD:285 Sink:MaD:269 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:46:42:46:55 | fooResourceUrl | provenance | Sink:MaD:270 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:47:40:47:53 | fooResourceUrl | provenance | Sink:MaD:271 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:48:30:48:43 | fooResourceUrl | provenance | Sink:MaD:272 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:49:33:49:46 | fooResourceUrl | provenance | Sink:MaD:261 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:50:41:50:54 | fooResourceUrl | provenance | Sink:MaD:266 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:51:42:51:55 | fooResourceUrl | provenance | Sink:MaD:267 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:54:35:54:48 | fooResourceUrl : String | provenance | | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:56:44:56:46 | uri | provenance | Sink:MaD:255 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:58:35:58:37 | uri | provenance | Sink:MaD:250 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:59:35:59:37 | uri | provenance | Sink:MaD:256 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:60:38:60:40 | uri | provenance | Sink:MaD:249 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:61:39:61:41 | uri | provenance | Sink:MaD:253 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:62:37:62:39 | uri | provenance | Sink:MaD:254 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:63:36:63:38 | uri | provenance | Sink:MaD:251 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:64:44:64:46 | uri | provenance | Sink:MaD:252 | -| SpringSSRF.java:54:35:54:48 | fooResourceUrl : String | SpringSSRF.java:54:27:54:49 | new URI(...) : URI | provenance | Config | -| SpringSSRF.java:54:35:54:48 | fooResourceUrl : String | SpringSSRF.java:54:27:54:49 | new URI(...) : URI | provenance | MaD:285 | -| SpringSSRF.java:54:35:54:48 | fooResourceUrl : String | SpringSSRF.java:67:35:67:48 | fooResourceUrl : String | provenance | | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | SpringSSRF.java:70:49:70:51 | uri | provenance | Sink:MaD:243 | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | SpringSSRF.java:71:58:71:60 | uri | provenance | Sink:MaD:244 | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | SpringSSRF.java:72:57:72:59 | uri | provenance | Sink:MaD:245 | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | SpringSSRF.java:73:66:73:68 | uri | provenance | Sink:MaD:247 | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | SpringSSRF.java:74:57:74:59 | uri | provenance | Sink:MaD:246 | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | SpringSSRF.java:75:66:75:68 | uri | provenance | Sink:MaD:248 | -| SpringSSRF.java:67:35:67:48 | fooResourceUrl : String | SpringSSRF.java:67:27:67:49 | new URI(...) : URI | provenance | Config | -| SpringSSRF.java:67:35:67:48 | fooResourceUrl : String | SpringSSRF.java:67:27:67:49 | new URI(...) : URI | provenance | MaD:285 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:33:69:33:82 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:34:73:34:86 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:35:87:35:100 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:38:83:38:96 | fooResourceUrl : String | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:40:105:40:118 | fooResourceUrl : String | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:43:35:43:48 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:262 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:44:91:44:104 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:45:95:45:108 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:46:109:46:122 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:49:105:49:118 | fooResourceUrl : String | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:51:127:51:140 | fooResourceUrl : String | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:54:34:54:47 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:263 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:55:79:55:92 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:56:83:56:96 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:57:97:57:110 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:60:93:60:106 | fooResourceUrl : String | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:62:115:62:128 | fooResourceUrl : String | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:65:39:65:52 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:265 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:66:69:66:82 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:67:73:67:86 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:68:87:68:100 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:71:83:71:96 | fooResourceUrl : String | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:73:105:73:118 | fooResourceUrl : String | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:76:41:76:54 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:268 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:77:93:77:106 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:78:97:78:110 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:79:111:79:124 | fooResourceUrl | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:82:107:82:120 | fooResourceUrl : String | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:84:129:84:142 | fooResourceUrl : String | provenance | Src:MaD:277 | +| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | provenance | Src:MaD:277 | +| SpringSSRF.java:38:83:38:96 | fooResourceUrl : String | SpringSSRF.java:38:69:38:97 | of(...) | provenance | MaD:289 | +| SpringSSRF.java:40:105:40:118 | fooResourceUrl : String | SpringSSRF.java:40:69:40:119 | of(...) | provenance | MaD:290 | +| SpringSSRF.java:49:105:49:118 | fooResourceUrl : String | SpringSSRF.java:49:91:49:119 | of(...) | provenance | MaD:289 | +| SpringSSRF.java:51:127:51:140 | fooResourceUrl : String | SpringSSRF.java:51:91:51:141 | of(...) | provenance | MaD:290 | +| SpringSSRF.java:60:93:60:106 | fooResourceUrl : String | SpringSSRF.java:60:79:60:107 | of(...) | provenance | MaD:289 | +| SpringSSRF.java:62:115:62:128 | fooResourceUrl : String | SpringSSRF.java:62:79:62:129 | of(...) | provenance | MaD:290 | +| SpringSSRF.java:71:83:71:96 | fooResourceUrl : String | SpringSSRF.java:71:69:71:97 | of(...) | provenance | MaD:289 | +| SpringSSRF.java:73:105:73:118 | fooResourceUrl : String | SpringSSRF.java:73:69:73:119 | of(...) | provenance | MaD:290 | +| SpringSSRF.java:82:107:82:120 | fooResourceUrl : String | SpringSSRF.java:82:93:82:121 | of(...) | provenance | MaD:289 | +| SpringSSRF.java:84:129:84:142 | fooResourceUrl : String | SpringSSRF.java:84:93:84:143 | of(...) | provenance | MaD:290 | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:87:40:87:62 | new URI(...) | provenance | Config Sink:MaD:269 | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:87:40:87:62 | new URI(...) | provenance | MaD:285 Sink:MaD:269 | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:88:92:88:105 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:89:96:89:109 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:90:110:90:123 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:93:106:93:119 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:95:128:95:141 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:98:42:98:55 | fooResourceUrl | provenance | Sink:MaD:270 | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:99:80:99:93 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:100:84:100:97 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:101:98:101:111 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:104:94:104:107 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:106:116:106:129 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:109:40:109:53 | fooResourceUrl | provenance | Sink:MaD:271 | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:110:92:110:105 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:111:96:111:109 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:112:110:112:123 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:115:106:115:119 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:117:128:117:141 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:120:30:120:43 | fooResourceUrl | provenance | Sink:MaD:272 | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:121:68:121:81 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:122:72:122:85 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:123:86:123:99 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:126:82:126:95 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:128:104:128:117 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:131:33:131:46 | fooResourceUrl | provenance | Sink:MaD:261 | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:132:49:132:62 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:133:53:133:66 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:134:67:134:80 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:137:63:137:76 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:139:85:139:98 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:142:41:142:54 | fooResourceUrl | provenance | Sink:MaD:266 | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:143:57:143:70 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:144:61:144:74 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:145:75:145:88 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:148:71:148:84 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:150:93:150:106 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:153:42:153:55 | fooResourceUrl | provenance | Sink:MaD:267 | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:154:58:154:71 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:155:62:155:75 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:156:76:156:89 | fooResourceUrl | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:159:72:159:85 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:161:94:161:107 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | SpringSSRF.java:166:35:166:48 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:93:106:93:119 | fooResourceUrl : String | SpringSSRF.java:93:92:93:120 | of(...) | provenance | MaD:289 | +| SpringSSRF.java:95:128:95:141 | fooResourceUrl : String | SpringSSRF.java:95:92:95:142 | of(...) | provenance | MaD:290 | +| SpringSSRF.java:104:94:104:107 | fooResourceUrl : String | SpringSSRF.java:104:80:104:108 | of(...) | provenance | MaD:289 | +| SpringSSRF.java:106:116:106:129 | fooResourceUrl : String | SpringSSRF.java:106:80:106:130 | of(...) | provenance | MaD:290 | +| SpringSSRF.java:115:106:115:119 | fooResourceUrl : String | SpringSSRF.java:115:92:115:120 | of(...) | provenance | MaD:289 | +| SpringSSRF.java:117:128:117:141 | fooResourceUrl : String | SpringSSRF.java:117:92:117:142 | of(...) | provenance | MaD:290 | +| SpringSSRF.java:126:82:126:95 | fooResourceUrl : String | SpringSSRF.java:126:68:126:96 | of(...) | provenance | MaD:289 | +| SpringSSRF.java:128:104:128:117 | fooResourceUrl : String | SpringSSRF.java:128:68:128:118 | of(...) | provenance | MaD:290 | +| SpringSSRF.java:137:63:137:76 | fooResourceUrl : String | SpringSSRF.java:137:49:137:77 | of(...) | provenance | MaD:289 | +| SpringSSRF.java:139:85:139:98 | fooResourceUrl : String | SpringSSRF.java:139:49:139:99 | of(...) | provenance | MaD:290 | +| SpringSSRF.java:148:71:148:84 | fooResourceUrl : String | SpringSSRF.java:148:57:148:85 | of(...) | provenance | MaD:289 | +| SpringSSRF.java:150:93:150:106 | fooResourceUrl : String | SpringSSRF.java:150:57:150:107 | of(...) | provenance | MaD:290 | +| SpringSSRF.java:159:72:159:85 | fooResourceUrl : String | SpringSSRF.java:159:58:159:86 | of(...) | provenance | MaD:289 | +| SpringSSRF.java:161:94:161:107 | fooResourceUrl : String | SpringSSRF.java:161:58:161:108 | of(...) | provenance | MaD:290 | +| SpringSSRF.java:166:27:166:49 | new URI(...) : URI | SpringSSRF.java:168:44:168:46 | uri | provenance | Sink:MaD:255 | +| SpringSSRF.java:166:27:166:49 | new URI(...) : URI | SpringSSRF.java:170:35:170:37 | uri | provenance | Sink:MaD:250 | +| SpringSSRF.java:166:27:166:49 | new URI(...) : URI | SpringSSRF.java:171:35:171:37 | uri | provenance | Sink:MaD:256 | +| SpringSSRF.java:166:27:166:49 | new URI(...) : URI | SpringSSRF.java:172:38:172:40 | uri | provenance | Sink:MaD:249 | +| SpringSSRF.java:166:27:166:49 | new URI(...) : URI | SpringSSRF.java:173:39:173:41 | uri | provenance | Sink:MaD:253 | +| SpringSSRF.java:166:27:166:49 | new URI(...) : URI | SpringSSRF.java:174:37:174:39 | uri | provenance | Sink:MaD:254 | +| SpringSSRF.java:166:27:166:49 | new URI(...) : URI | SpringSSRF.java:175:36:175:38 | uri | provenance | Sink:MaD:251 | +| SpringSSRF.java:166:27:166:49 | new URI(...) : URI | SpringSSRF.java:176:44:176:46 | uri | provenance | Sink:MaD:252 | +| SpringSSRF.java:166:35:166:48 | fooResourceUrl : String | SpringSSRF.java:166:27:166:49 | new URI(...) : URI | provenance | Config | +| SpringSSRF.java:166:35:166:48 | fooResourceUrl : String | SpringSSRF.java:166:27:166:49 | new URI(...) : URI | provenance | MaD:285 | +| SpringSSRF.java:166:35:166:48 | fooResourceUrl : String | SpringSSRF.java:179:35:179:48 | fooResourceUrl : String | provenance | | +| SpringSSRF.java:179:27:179:49 | new URI(...) : URI | SpringSSRF.java:182:49:182:51 | uri | provenance | Sink:MaD:243 | +| SpringSSRF.java:179:27:179:49 | new URI(...) : URI | SpringSSRF.java:183:58:183:60 | uri | provenance | Sink:MaD:244 | +| SpringSSRF.java:179:27:179:49 | new URI(...) : URI | SpringSSRF.java:184:57:184:59 | uri | provenance | Sink:MaD:245 | +| SpringSSRF.java:179:27:179:49 | new URI(...) : URI | SpringSSRF.java:185:66:185:68 | uri | provenance | Sink:MaD:247 | +| SpringSSRF.java:179:27:179:49 | new URI(...) : URI | SpringSSRF.java:186:57:186:59 | uri | provenance | Sink:MaD:246 | +| SpringSSRF.java:179:27:179:49 | new URI(...) : URI | SpringSSRF.java:187:66:187:68 | uri | provenance | Sink:MaD:248 | +| SpringSSRF.java:179:35:179:48 | fooResourceUrl : String | SpringSSRF.java:179:27:179:49 | new URI(...) : URI | provenance | Config | +| SpringSSRF.java:179:35:179:48 | fooResourceUrl : String | SpringSSRF.java:179:27:179:49 | new URI(...) : URI | provenance | MaD:285 | | URLClassLoaderSSRF.java:16:26:16:52 | getParameter(...) : String | URLClassLoaderSSRF.java:17:31:17:33 | url : String | provenance | Src:MaD:277 | | URLClassLoaderSSRF.java:17:23:17:34 | new URI(...) : URI | URLClassLoaderSSRF.java:18:74:18:76 | uri : URI | provenance | | | URLClassLoaderSSRF.java:17:31:17:33 | url : String | URLClassLoaderSSRF.java:17:23:17:34 | new URI(...) : URI | provenance | Config | @@ -1683,42 +1817,120 @@ nodes | SanitizationTests.java:123:25:123:33 | unsafer10 | semmle.label | unsafer10 | | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | semmle.label | getParameter(...) : String | | SpringSSRF.java:32:39:32:59 | ... + ... | semmle.label | ... + ... | -| SpringSSRF.java:33:35:33:48 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:34:34:34:47 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:35:39:35:52 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:36:69:36:82 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:37:73:37:86 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:40:69:40:97 | of(...) | semmle.label | of(...) | -| SpringSSRF.java:40:83:40:96 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | -| SpringSSRF.java:42:69:42:119 | of(...) | semmle.label | of(...) | -| SpringSSRF.java:42:105:42:118 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | -| SpringSSRF.java:44:41:44:54 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:45:40:45:62 | new URI(...) | semmle.label | new URI(...) | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | -| SpringSSRF.java:46:42:46:55 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:47:40:47:53 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:48:30:48:43 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:49:33:49:46 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:50:41:50:54 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:51:42:51:55 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SpringSSRF.java:54:35:54:48 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | -| SpringSSRF.java:56:44:56:46 | uri | semmle.label | uri | -| SpringSSRF.java:58:35:58:37 | uri | semmle.label | uri | -| SpringSSRF.java:59:35:59:37 | uri | semmle.label | uri | -| SpringSSRF.java:60:38:60:40 | uri | semmle.label | uri | -| SpringSSRF.java:61:39:61:41 | uri | semmle.label | uri | -| SpringSSRF.java:62:37:62:39 | uri | semmle.label | uri | -| SpringSSRF.java:63:36:63:38 | uri | semmle.label | uri | -| SpringSSRF.java:64:44:64:46 | uri | semmle.label | uri | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SpringSSRF.java:67:35:67:48 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | -| SpringSSRF.java:70:49:70:51 | uri | semmle.label | uri | -| SpringSSRF.java:71:58:71:60 | uri | semmle.label | uri | -| SpringSSRF.java:72:57:72:59 | uri | semmle.label | uri | -| SpringSSRF.java:73:66:73:68 | uri | semmle.label | uri | -| SpringSSRF.java:74:57:74:59 | uri | semmle.label | uri | -| SpringSSRF.java:75:66:75:68 | uri | semmle.label | uri | +| SpringSSRF.java:33:69:33:82 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:34:73:34:86 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:35:87:35:100 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:38:69:38:97 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:38:83:38:96 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:40:69:40:119 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:40:105:40:118 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:43:35:43:48 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:44:91:44:104 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:45:95:45:108 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:46:109:46:122 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:49:91:49:119 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:49:105:49:118 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:51:91:51:141 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:51:127:51:140 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:54:34:54:47 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:55:79:55:92 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:56:83:56:96 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:57:97:57:110 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:60:79:60:107 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:60:93:60:106 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:62:79:62:129 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:62:115:62:128 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:65:39:65:52 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:66:69:66:82 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:67:73:67:86 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:68:87:68:100 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:71:69:71:97 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:71:83:71:96 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:73:69:73:119 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:73:105:73:118 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:76:41:76:54 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:77:93:77:106 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:78:97:78:110 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:79:111:79:124 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:82:93:82:121 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:82:107:82:120 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:84:93:84:143 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:84:129:84:142 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:87:40:87:62 | new URI(...) | semmle.label | new URI(...) | +| SpringSSRF.java:87:48:87:61 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:88:92:88:105 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:89:96:89:109 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:90:110:90:123 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:93:92:93:120 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:93:106:93:119 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:95:92:95:142 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:95:128:95:141 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:98:42:98:55 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:99:80:99:93 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:100:84:100:97 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:101:98:101:111 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:104:80:104:108 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:104:94:104:107 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:106:80:106:130 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:106:116:106:129 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:109:40:109:53 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:110:92:110:105 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:111:96:111:109 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:112:110:112:123 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:115:92:115:120 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:115:106:115:119 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:117:92:117:142 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:117:128:117:141 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:120:30:120:43 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:121:68:121:81 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:122:72:122:85 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:123:86:123:99 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:126:68:126:96 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:126:82:126:95 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:128:68:128:118 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:128:104:128:117 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:131:33:131:46 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:132:49:132:62 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:133:53:133:66 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:134:67:134:80 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:137:49:137:77 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:137:63:137:76 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:139:49:139:99 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:139:85:139:98 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:142:41:142:54 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:143:57:143:70 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:144:61:144:74 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:145:75:145:88 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:148:57:148:85 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:148:71:148:84 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:150:57:150:107 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:150:93:150:106 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:153:42:153:55 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:154:58:154:71 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:155:62:155:75 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:156:76:156:89 | fooResourceUrl | semmle.label | fooResourceUrl | +| SpringSSRF.java:159:58:159:86 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:159:72:159:85 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:161:58:161:108 | of(...) | semmle.label | of(...) | +| SpringSSRF.java:161:94:161:107 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:166:27:166:49 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SpringSSRF.java:166:35:166:48 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:168:44:168:46 | uri | semmle.label | uri | +| SpringSSRF.java:170:35:170:37 | uri | semmle.label | uri | +| SpringSSRF.java:171:35:171:37 | uri | semmle.label | uri | +| SpringSSRF.java:172:38:172:40 | uri | semmle.label | uri | +| SpringSSRF.java:173:39:173:41 | uri | semmle.label | uri | +| SpringSSRF.java:174:37:174:39 | uri | semmle.label | uri | +| SpringSSRF.java:175:36:175:38 | uri | semmle.label | uri | +| SpringSSRF.java:176:44:176:46 | uri | semmle.label | uri | +| SpringSSRF.java:179:27:179:49 | new URI(...) : URI | semmle.label | new URI(...) : URI | +| SpringSSRF.java:179:35:179:48 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | +| SpringSSRF.java:182:49:182:51 | uri | semmle.label | uri | +| SpringSSRF.java:183:58:183:60 | uri | semmle.label | uri | +| SpringSSRF.java:184:57:184:59 | uri | semmle.label | uri | +| SpringSSRF.java:185:66:185:68 | uri | semmle.label | uri | +| SpringSSRF.java:186:57:186:59 | uri | semmle.label | uri | +| SpringSSRF.java:187:66:187:68 | uri | semmle.label | uri | | URLClassLoaderSSRF.java:16:26:16:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | | URLClassLoaderSSRF.java:17:23:17:34 | new URI(...) : URI | semmle.label | new URI(...) : URI | | URLClassLoaderSSRF.java:17:31:17:33 | url : String | semmle.label | url : String | diff --git a/java/ql/test/query-tests/security/CWE-918/SpringSSRF.java b/java/ql/test/query-tests/security/CWE-918/SpringSSRF.java index 446e774214d..dd1ffd60367 100644 --- a/java/ql/test/query-tests/security/CWE-918/SpringSSRF.java +++ b/java/ql/test/query-tests/security/CWE-918/SpringSSRF.java @@ -30,25 +30,137 @@ public class SpringSSRF extends HttpServlet { HttpEntity request = new HttpEntity<>(new String("bar")); try { restTemplate.getForEntity(fooResourceUrl + "/1", String.class); // $ Alert + restTemplate.getForEntity("http://{foo}", String.class, fooResourceUrl); // $ Alert + restTemplate.getForEntity("http://{foo}/a/b", String.class, fooResourceUrl); // $ Alert + restTemplate.getForEntity("{protocol}://{foo}/a/b", String.class, "http", fooResourceUrl); // $ Alert + restTemplate.getForEntity("http://safe.com/{foo}", String.class, fooResourceUrl); // not bad - the tainted value does not affect the host + restTemplate.getForEntity("http://{foo}", String.class, "safe.com", fooResourceUrl); // not bad - the tainted value is unused + restTemplate.getForEntity("http://{foo}", String.class, Map.of("foo", fooResourceUrl)); // $ Alert + restTemplate.getForEntity("http://safe.com/{foo}", String.class, Map.of("foo", fooResourceUrl)); // not bad - the tainted value does not affect the host + restTemplate.getForEntity("http://{foo}", String.class, Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: Alert // not bad - the key for the tainted value is unused + restTemplate.getForEntity("http://{foo}", String.class, Map.of("foo", "safe.com", fooResourceUrl, "unused")); // not bad - the tainted value is in a map key + restTemplate.exchange(fooResourceUrl, HttpMethod.POST, request, String.class); // $ Alert + restTemplate.exchange("http://{foo}", HttpMethod.POST, request, String.class, fooResourceUrl); // $ Alert + restTemplate.exchange("http://{foo}/a/b", HttpMethod.POST, request, String.class, fooResourceUrl); // $ Alert + restTemplate.exchange("{protocol}://{foo}/a/b", HttpMethod.POST, request, String.class, "http", fooResourceUrl); // $ Alert + restTemplate.exchange("http://safe.com/{foo}", HttpMethod.POST, request, String.class, fooResourceUrl); // not bad - the tainted value does not affect the host + restTemplate.exchange("http://{foo}", HttpMethod.POST, request, String.class, "safe.com", fooResourceUrl); // not bad - the tainted value is unused + restTemplate.exchange("http://{foo}", HttpMethod.POST, request, String.class, Map.of("foo", fooResourceUrl)); // $ Alert + restTemplate.exchange("http://safe.com/{foo}", HttpMethod.POST, request, String.class, Map.of("foo", fooResourceUrl)); // not bad - the tainted value does not affect the host + restTemplate.exchange("http://{foo}", HttpMethod.POST, request, String.class, Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: Alert // not bad - the key for the tainted value is unused + restTemplate.exchange("http://{foo}", HttpMethod.POST, request, String.class, Map.of("foo", "safe.com", fooResourceUrl, "unused")); // not bad - the tainted value is in a map key + restTemplate.execute(fooResourceUrl, HttpMethod.POST, null, null, "test"); // $ Alert + restTemplate.execute("http://{foo}", HttpMethod.POST, null, null, fooResourceUrl); // $ Alert + restTemplate.execute("http://{foo}/a/b", HttpMethod.POST, null, null, fooResourceUrl); // $ Alert + restTemplate.execute("{protocol}://{foo}/a/b", HttpMethod.POST, null, null, "http", fooResourceUrl); // $ Alert + restTemplate.execute("http://safe.com/{foo}", HttpMethod.POST, null, null, fooResourceUrl); // not bad - the tainted value does not affect the host + restTemplate.execute("http://{foo}", HttpMethod.POST, null, null, "safe.com", fooResourceUrl); // not bad - the tainted value is unused + restTemplate.execute("http://{foo}", HttpMethod.POST, null, null, Map.of("foo", fooResourceUrl)); // $ Alert + restTemplate.execute("http://safe.com/{foo}", HttpMethod.POST, null, null, Map.of("foo", fooResourceUrl)); // not bad - the tainted value does not affect the host + restTemplate.execute("http://{foo}", HttpMethod.POST, null, null, Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: Alert // not bad - the key for the tainted value is unused + restTemplate.execute("http://{foo}", HttpMethod.POST, null, null, Map.of("foo", "safe.com", fooResourceUrl, "unused")); // not bad - the tainted value is in a map key + restTemplate.getForObject(fooResourceUrl, String.class, "test"); // $ Alert restTemplate.getForObject("http://{foo}", String.class, fooResourceUrl); // $ Alert restTemplate.getForObject("http://{foo}/a/b", String.class, fooResourceUrl); // $ Alert + restTemplate.getForObject("{protocol}://{foo}/a/b", String.class, "http", fooResourceUrl); // $ Alert restTemplate.getForObject("http://safe.com/{foo}", String.class, fooResourceUrl); // not bad - the tainted value does not affect the host restTemplate.getForObject("http://{foo}", String.class, "safe.com", fooResourceUrl); // not bad - the tainted value is unused restTemplate.getForObject("http://{foo}", String.class, Map.of("foo", fooResourceUrl)); // $ Alert restTemplate.getForObject("http://safe.com/{foo}", String.class, Map.of("foo", fooResourceUrl)); // not bad - the tainted value does not affect the host restTemplate.getForObject("http://{foo}", String.class, Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: Alert // not bad - the key for the tainted value is unused restTemplate.getForObject("http://{foo}", String.class, Map.of("foo", "safe.com", fooResourceUrl, "unused")); // not bad - the tainted value is in a map key + restTemplate.patchForObject(fooResourceUrl, new String("object"), String.class, "hi"); // $ Alert + restTemplate.patchForObject("http://{foo}", new String("object"), String.class, fooResourceUrl); // $ Alert + restTemplate.patchForObject("http://{foo}/a/b", new String("object"), String.class, fooResourceUrl); // $ Alert + restTemplate.patchForObject("{protocol}://{foo}/a/b", new String("object"), String.class, "http", fooResourceUrl); // $ Alert + restTemplate.patchForObject("http://safe.com/{foo}", new String("object"), String.class, fooResourceUrl); // not bad - the tainted value does not affect the host + restTemplate.patchForObject("http://{foo}", new String("object"), String.class, "safe.com", fooResourceUrl); // not bad - the tainted value is unused + restTemplate.patchForObject("http://{foo}", new String("object"), String.class, Map.of("foo", fooResourceUrl)); // $ Alert + restTemplate.patchForObject("http://safe.com/{foo}", new String("object"), String.class, Map.of("foo", fooResourceUrl)); // not bad - the tainted value does not affect the host + restTemplate.patchForObject("http://{foo}", new String("object"), String.class, Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: Alert // not bad - the key for the tainted value is unused + restTemplate.patchForObject("http://{foo}", new String("object"), String.class, Map.of("foo", "safe.com", fooResourceUrl, "unused")); // not bad - the tainted value is in a map key + restTemplate.postForEntity(new URI(fooResourceUrl), new String("object"), String.class); // $ Alert + restTemplate.postForEntity("http://{foo}", new String("object"), String.class, fooResourceUrl); // $ Alert + restTemplate.postForEntity("http://{foo}/a/b", new String("object"), String.class, fooResourceUrl); // $ Alert + restTemplate.postForEntity("{protocol}://{foo}/a/b", new String("object"), String.class, "http", fooResourceUrl); // $ Alert + restTemplate.postForEntity("http://safe.com/{foo}", new String("object"), String.class, fooResourceUrl); // not bad - the tainted value does not affect the host + restTemplate.postForEntity("http://{foo}", new String("object"), String.class, "safe.com", fooResourceUrl); // not bad - the tainted value is unused + restTemplate.postForEntity("http://{foo}", new String("object"), String.class, Map.of("foo", fooResourceUrl)); // $ Alert + restTemplate.postForEntity("http://safe.com/{foo}", new String("object"), String.class, Map.of("foo", fooResourceUrl)); // not bad - the tainted value does not affect the host + restTemplate.postForEntity("http://{foo}", new String("object"), String.class, Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: Alert // not bad - the key for the tainted value is unused + restTemplate.postForEntity("http://{foo}", new String("object"), String.class, Map.of("foo", "safe.com", fooResourceUrl, "unused")); // not bad - the tainted value is in a map key + restTemplate.postForLocation(fooResourceUrl, new String("object")); // $ Alert + restTemplate.postForLocation("http://{foo}", new String("object"), fooResourceUrl); // $ Alert + restTemplate.postForLocation("http://{foo}/a/b", new String("object"), fooResourceUrl); // $ Alert + restTemplate.postForLocation("{protocol}://{foo}/a/b", new String("object"), "http", fooResourceUrl); // $ Alert + restTemplate.postForLocation("http://safe.com/{foo}", new String("object"), fooResourceUrl); // not bad - the tainted value does not affect the host + restTemplate.postForLocation("http://{foo}", new String("object"), "safe.com", fooResourceUrl); // not bad - the tainted value is unused + restTemplate.postForLocation("http://{foo}", new String("object"), Map.of("foo", fooResourceUrl)); // $ Alert + restTemplate.postForLocation("http://safe.com/{foo}", new String("object"), Map.of("foo", fooResourceUrl)); // not bad - the tainted value does not affect the host + restTemplate.postForLocation("http://{foo}", new String("object"), Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: Alert // not bad - the key for the tainted value is unused + restTemplate.postForLocation("http://{foo}", new String("object"), Map.of("foo", "safe.com", fooResourceUrl, "unused")); // not bad - the tainted value is in a map key + restTemplate.postForObject(fooResourceUrl, new String("object"), String.class); // $ Alert + restTemplate.postForObject("http://{foo}", new String("object"), String.class, fooResourceUrl); // $ Alert + restTemplate.postForObject("http://{foo}/a/b", new String("object"), String.class, fooResourceUrl); // $ Alert + restTemplate.postForObject("{protocol}://{foo}/a/b", new String("object"), String.class, "http", fooResourceUrl); // $ Alert + restTemplate.postForObject("http://safe.com/{foo}", new String("object"), String.class, fooResourceUrl); // not bad - the tainted value does not affect the host + restTemplate.postForObject("http://{foo}", new String("object"), String.class, "safe.com", fooResourceUrl); // not bad - the tainted value is unused + restTemplate.postForObject("http://{foo}", new String("object"), String.class, Map.of("foo", fooResourceUrl)); // $ Alert + restTemplate.postForObject("http://safe.com/{foo}", new String("object"), String.class, Map.of("foo", fooResourceUrl)); // not bad - the tainted value does not affect the host + restTemplate.postForObject("http://{foo}", new String("object"), String.class, Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: Alert // not bad - the key for the tainted value is unused + restTemplate.postForObject("http://{foo}", new String("object"), String.class, Map.of("foo", "safe.com", fooResourceUrl, "unused")); // not bad - the tainted value is in a map key + restTemplate.put(fooResourceUrl, new String("object")); // $ Alert + restTemplate.put("http://{foo}", new String("object"), fooResourceUrl); // $ Alert + restTemplate.put("http://{foo}/a/b", new String("object"), fooResourceUrl); // $ Alert + restTemplate.put("{protocol}://{foo}/a/b", new String("object"), "http", fooResourceUrl); // $ Alert + restTemplate.put("http://safe.com/{foo}", new String("object"), fooResourceUrl); // not bad - the tainted value does not affect the host + restTemplate.put("http://{foo}", new String("object"), "safe.com", fooResourceUrl); // not bad - the tainted value is unused + restTemplate.put("http://{foo}", new String("object"), Map.of("foo", fooResourceUrl)); // $ Alert + restTemplate.put("http://safe.com/{foo}", new String("object"), Map.of("foo", fooResourceUrl)); // not bad - the tainted value does not affect the host + restTemplate.put("http://{foo}", new String("object"), Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: Alert // not bad - the key for the tainted value is unused + restTemplate.put("http://{foo}", new String("object"), Map.of("foo", "safe.com", fooResourceUrl, "unused")); // not bad - the tainted value is in a map key + restTemplate.delete(fooResourceUrl); // $ Alert + restTemplate.delete("http://{foo}", fooResourceUrl); // $ Alert + restTemplate.delete("http://{foo}/a/b", fooResourceUrl); // $ Alert + restTemplate.delete("{protocol}://{foo}/a/b", "http", fooResourceUrl); // $ Alert + restTemplate.delete("http://safe.com/{foo}", fooResourceUrl); // not bad - the tainted value does not affect the host + restTemplate.delete("http://{foo}", "safe.com", fooResourceUrl); // not bad - the tainted value is unused + restTemplate.delete("http://{foo}", Map.of("foo", fooResourceUrl)); // $ Alert + restTemplate.delete("http://safe.com/{foo}", Map.of("foo", fooResourceUrl)); // not bad - the tainted value does not affect the host + restTemplate.delete("http://{foo}", Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: Alert // not bad - the key for the tainted value is unused + restTemplate.delete("http://{foo}", Map.of("foo", "safe.com", fooResourceUrl, "unused")); // not bad - the tainted value is in a map key + restTemplate.headForHeaders(fooResourceUrl); // $ Alert + restTemplate.headForHeaders("http://{foo}", fooResourceUrl); // $ Alert + restTemplate.headForHeaders("http://{foo}/a/b", fooResourceUrl); // $ Alert + restTemplate.headForHeaders("{protocol}://{foo}/a/b", "http", fooResourceUrl); // $ Alert + restTemplate.headForHeaders("http://safe.com/{foo}", fooResourceUrl); // not bad - the tainted value does not affect the host + restTemplate.headForHeaders("http://{foo}", "safe.com", fooResourceUrl); // not bad - the tainted value is unused + restTemplate.headForHeaders("http://{foo}", Map.of("foo", fooResourceUrl)); // $ Alert + restTemplate.headForHeaders("http://safe.com/{foo}", Map.of("foo", fooResourceUrl)); // not bad - the tainted value does not affect the host + restTemplate.headForHeaders("http://{foo}", Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: Alert // not bad - the key for the tainted value is unused + restTemplate.headForHeaders("http://{foo}", Map.of("foo", "safe.com", fooResourceUrl, "unused")); // not bad - the tainted value is in a map key + restTemplate.optionsForAllow(fooResourceUrl); // $ Alert + restTemplate.optionsForAllow("http://{foo}", fooResourceUrl); // $ Alert + restTemplate.optionsForAllow("http://{foo}/a/b", fooResourceUrl); // $ Alert + restTemplate.optionsForAllow("{protocol}://{foo}/a/b", "http", fooResourceUrl); // $ Alert + restTemplate.optionsForAllow("http://safe.com/{foo}", fooResourceUrl); // not bad - the tainted value does not affect the host + restTemplate.optionsForAllow("http://{foo}", "safe.com", fooResourceUrl); // not bad - the tainted value is unused + restTemplate.optionsForAllow("http://{foo}", Map.of("foo", fooResourceUrl)); // $ Alert + restTemplate.optionsForAllow("http://safe.com/{foo}", Map.of("foo", fooResourceUrl)); // not bad - the tainted value does not affect the host + restTemplate.optionsForAllow("http://{foo}", Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: Alert // not bad - the key for the tainted value is unused + restTemplate.optionsForAllow("http://{foo}", Map.of("foo", "safe.com", fooResourceUrl, "unused")); // not bad - the tainted value is in a map key + { String body = new String("body"); URI uri = new URI(fooResourceUrl); diff --git a/javascript/downgrades/578367e82a25a3e286aaf1238613db3717b67476/old.dbscheme b/javascript/downgrades/578367e82a25a3e286aaf1238613db3717b67476/old.dbscheme new file mode 100644 index 00000000000..578367e82a2 --- /dev/null +++ b/javascript/downgrades/578367e82a25a3e286aaf1238613db3717b67476/old.dbscheme @@ -0,0 +1,1217 @@ +/*** 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); +has_defer_keyword (int id: @import_declaration 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 -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); diff --git a/javascript/downgrades/578367e82a25a3e286aaf1238613db3717b67476/semmlecode.dbscheme b/javascript/downgrades/578367e82a25a3e286aaf1238613db3717b67476/semmlecode.dbscheme new file mode 100644 index 00000000000..80b2bc24189 --- /dev/null +++ b/javascript/downgrades/578367e82a25a3e286aaf1238613db3717b67476/semmlecode.dbscheme @@ -0,0 +1,1205 @@ +/*** 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); +has_defer_keyword (int id: @import_declaration 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/578367e82a25a3e286aaf1238613db3717b67476/upgrade.properties b/javascript/downgrades/578367e82a25a3e286aaf1238613db3717b67476/upgrade.properties new file mode 100644 index 00000000000..00fae2d3bc6 --- /dev/null +++ b/javascript/downgrades/578367e82a25a3e286aaf1238613db3717b67476/upgrade.properties @@ -0,0 +1,2 @@ +description: Sections for databaseMetadata and overlayChangedFiles +compatibility: full diff --git a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java index 416fa237e97..d8889781921 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java +++ b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java @@ -408,8 +408,10 @@ public class AutoBuild { for (String extension : fileTypes.keySet()) patterns.add("**/*" + extension); // exclude files whose name strongly suggests they are minified - patterns.add("-**/*.min.js"); - patterns.add("-**/*-min.js"); + if (!EnvironmentVariables.allowMinifiedFiles()) { + patterns.add("-**/*.min.js"); + patterns.add("-**/*-min.js"); + } // exclude `node_modules` and `bower_components` patterns.add("-**/node_modules"); @@ -1074,6 +1076,7 @@ protected DependencyInstallationResult preparePackagesAndDependencies(Set config = config.withSourceType(getSourceType()); config = config.withVirtualSourceRoot(virtualSourceRoot); if (defaultEncoding != null) config = config.withDefaultEncoding(defaultEncoding); + config = config.withAllowMinified(EnvironmentVariables.allowMinifiedFiles()); return config; } diff --git a/javascript/extractor/src/com/semmle/js/extractor/EnvironmentVariables.java b/javascript/extractor/src/com/semmle/js/extractor/EnvironmentVariables.java index f2ac4227589..9d883960256 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/EnvironmentVariables.java +++ b/javascript/extractor/src/com/semmle/js/extractor/EnvironmentVariables.java @@ -101,4 +101,12 @@ public class EnvironmentVariables { public static boolean isActionsExtractor() { return Env.systemEnv().getNonEmpty(CODEQL_EXTRACTOR_ACTIONS_WIP_DATABASE_ENV_VAR) != null; } + + public static boolean allowMinifiedFiles() { + String env = Env.systemEnv().getNonEmpty("CODEQL_EXTRACTOR_JAVASCRIPT_ALLOW_MINIFIED_FILES"); + if (env == null) { + return false; // default is to not allow minified files + } + return Boolean.parseBoolean(env); + } } diff --git a/javascript/extractor/src/com/semmle/js/extractor/ExtractorConfig.java b/javascript/extractor/src/com/semmle/js/extractor/ExtractorConfig.java index 884d0744694..538ac1a4367 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/ExtractorConfig.java +++ b/javascript/extractor/src/com/semmle/js/extractor/ExtractorConfig.java @@ -205,6 +205,9 @@ public class ExtractorConfig { /** Should parse errors be reported as violations instead of aborting extraction? */ private boolean tolerateParseErrors; + /** Should minified files be allowed? */ + private boolean allowMinified; + /** How should HTML files be extracted? */ private HtmlPopulator.Config htmlHandling; @@ -236,6 +239,7 @@ public class ExtractorConfig { this.sourceType = SourceType.AUTO; this.htmlHandling = HtmlPopulator.Config.ELEMENTS; this.tolerateParseErrors = true; + this.allowMinified = false; if (experimental) { this.mozExtensions = true; this.jscript = true; @@ -258,6 +262,7 @@ public class ExtractorConfig { this.v8Extensions = that.v8Extensions; this.e4x = that.e4x; this.tolerateParseErrors = that.tolerateParseErrors; + this.allowMinified = that.allowMinified; this.fileType = that.fileType; this.sourceType = that.sourceType; this.htmlHandling = that.htmlHandling; @@ -357,6 +362,16 @@ public class ExtractorConfig { return res; } + public boolean isAllowMinified() { + return allowMinified; + } + + public ExtractorConfig withAllowMinified(boolean allowMinified) { + ExtractorConfig res = new ExtractorConfig(this); + res.allowMinified = allowMinified; + return res; + } + public boolean hasFileType() { return fileType != null; } @@ -467,6 +482,8 @@ public class ExtractorConfig { + e4x + ", tolerateParseErrors=" + tolerateParseErrors + + ", allowMinified=" + + allowMinified + ", htmlHandling=" + htmlHandling + ", fileType=" diff --git a/javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java index 5ebd7374a77..9cf5c3b295c 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java @@ -549,10 +549,15 @@ public class FileExtractor { new TextualExtractor( trapwriter, locationManager, source, config.getExtractLines(), metrics, extractedFile); ParseResultInfo loc = extractor.extract(textualExtractor); - int numLines = textualExtractor.isSnippet() ? 0 : textualExtractor.getNumLines(); - int linesOfCode = loc.getLinesOfCode(), linesOfComments = loc.getLinesOfComments(); - trapwriter.addTuple("numlines", fileLabel, numLines, linesOfCode, linesOfComments); - trapwriter.addTuple("filetype", fileLabel, fileType.toString()); + if (loc.getSkipReason() != null) { + System.err.println("Skipping file " + extractedFile + ": " + loc.getSkipReason()); + System.err.flush(); + } else { + int numLines = textualExtractor.isSnippet() ? 0 : textualExtractor.getNumLines(); + int linesOfCode = loc.getLinesOfCode(), linesOfComments = loc.getLinesOfComments(); + trapwriter.addTuple("numlines", fileLabel, numLines, linesOfCode, linesOfComments); + trapwriter.addTuple("filetype", fileLabel, fileType.toString()); + } metrics.stopPhase(ExtractionPhase.FileExtractor_extractContents); metrics.writeTimingsToTrap(trapwriter); successful = true; diff --git a/javascript/extractor/src/com/semmle/js/extractor/ParseResultInfo.java b/javascript/extractor/src/com/semmle/js/extractor/ParseResultInfo.java index 6a1b14447ce..28b412207d4 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/ParseResultInfo.java +++ b/javascript/extractor/src/com/semmle/js/extractor/ParseResultInfo.java @@ -10,6 +10,7 @@ import java.util.List; public class ParseResultInfo { private int linesOfCode, linesOfComments; private List parseErrors; + private String skipReason; public ParseResultInfo(int linesOfCode, int linesOfComments, List parseErrors) { this.linesOfCode = linesOfCode; @@ -17,6 +18,19 @@ public class ParseResultInfo { this.parseErrors = new ArrayList<>(parseErrors); } + private ParseResultInfo() { + this.linesOfCode = 0; + this.linesOfComments = 0; + this.parseErrors = new ArrayList<>(); + this.skipReason = null; + } + + public static final ParseResultInfo skipped(String reason) { + ParseResultInfo info = new ParseResultInfo(); + info.skipReason = reason; + return info; + } + public void add(ParseResultInfo that) { this.linesOfCode += that.linesOfCode; this.linesOfComments += that.linesOfComments; @@ -41,4 +55,11 @@ public class ParseResultInfo { public List getParseErrors() { return parseErrors; } + + /** + * If extraction of this file was skipped, gets the reason for skipping it. + */ + public String getSkipReason() { + return skipReason; + } } diff --git a/javascript/extractor/src/com/semmle/js/extractor/ScriptExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/ScriptExtractor.java index 7c539d70e63..bff9ccddad6 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/ScriptExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/ScriptExtractor.java @@ -38,10 +38,34 @@ public class ScriptExtractor implements IExtractor { return extension.equals(".cjs") || (extension.equals(".js") && "commonjs".equals(packageType)); } + private boolean isMinified(String source) { + // If the average line length is over 200 characters, consider the file minified. + int numberOfLineBreaks = 0; + for (int i = 0; i < source.length(); i++) { + char c = source.charAt(i); + if (c == '\n') { + numberOfLineBreaks++; + } else if (c == '\r') { + numberOfLineBreaks++; + if (i + 1 < source.length() && source.charAt(i + 1) == '\n') { + i++; // skip the next \n in case of \r\n + } + } + } + int averageLineLength = + numberOfLineBreaks == 0 ? source.length() : source.length() / numberOfLineBreaks; + return averageLineLength > 200; + } + @Override public ParseResultInfo extract(TextualExtractor textualExtractor) { LocationManager locationManager = textualExtractor.getLocationManager(); String source = textualExtractor.getSource(); + + if (!config.isAllowMinified() && isMinified(source)) { + return ParseResultInfo.skipped("File appears to be minified."); + } + String shebangLine = null, shebangLineTerm = null; if (source.startsWith("#!")) { diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 88fd8b8ea01..08f8bb5fbb2 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,11 @@ +## 2.6.20 + +### Minor Analysis Improvements + +* Support `use cache` directives for Next.js 16. +* Added `PreCallGraphStep` flow model for React's `useRef` hook. +* Added a `DomValueSource` that uses the `current` property off the object returned by React's `useRef` hook. + ## 2.6.19 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/2025-10-21-react-precallgraph-step.md b/javascript/ql/lib/change-notes/2025-10-21-react-precallgraph-step.md deleted file mode 100644 index e28a900e8d9..00000000000 --- a/javascript/ql/lib/change-notes/2025-10-21-react-precallgraph-step.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added `PreCallGraphStep` flow model for React's `useRef` hook. -* Added a `DomValueSource` that uses the `current` property off the object returned by React's `useRef` hook. \ No newline at end of file diff --git a/javascript/ql/lib/change-notes/2025-11-30-use-cache-directives.md b/javascript/ql/lib/change-notes/2025-11-30-use-cache-directives.md deleted file mode 100644 index 6a8edce26d1..00000000000 --- a/javascript/ql/lib/change-notes/2025-11-30-use-cache-directives.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- - -- Support `use cache` directives for Next.js 16. diff --git a/javascript/ql/lib/change-notes/released/2.6.20.md b/javascript/ql/lib/change-notes/released/2.6.20.md new file mode 100644 index 00000000000..d5c89a62f51 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.6.20.md @@ -0,0 +1,7 @@ +## 2.6.20 + +### Minor Analysis Improvements + +* Support `use cache` directives for Next.js 16. +* Added `PreCallGraphStep` flow model for React's `useRef` hook. +* Added a `DomValueSource` that uses the `current` property off the object returned by React's `useRef` hook. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 679db550b20..3c7db9023cc 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.6.19 +lastReleaseVersion: 2.6.20 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 889177c61b7..b9abf987afb 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.20-dev +version: 2.6.21-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Vue.qll b/javascript/ql/lib/semmle/javascript/frameworks/Vue.qll index 1052e91d4c1..59490a2d5c6 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Vue.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Vue.qll @@ -667,6 +667,10 @@ module Vue { or result = routeConfig().getMember("beforeEnter").getParameter([0, 1]).asSource() or + result = routeConfig().getMember("props").getParameter(0).asSource() + or + result = routeConfig().getMember("props").getAMember().getParameter(0).asSource() + or exists(Component c | result = c.getABoundFunction().getAFunctionValue().getReceiver().getAPropertyRead("$route") or diff --git a/javascript/ql/lib/semmlecode.javascript.dbscheme b/javascript/ql/lib/semmlecode.javascript.dbscheme index 80b2bc24189..578367e82a2 100644 --- a/javascript/ql/lib/semmlecode.javascript.dbscheme +++ b/javascript/ql/lib/semmlecode.javascript.dbscheme @@ -1195,11 +1195,23 @@ configLocations( @configLocatable = @config | @configName | @configValue; /*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ databaseMetadata( string metadataKey: string ref, string value: string ref ); +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ overlayChangedFiles( string path: string ref ); diff --git a/javascript/ql/lib/upgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/old.dbscheme b/javascript/ql/lib/upgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/old.dbscheme new file mode 100644 index 00000000000..80b2bc24189 --- /dev/null +++ b/javascript/ql/lib/upgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/old.dbscheme @@ -0,0 +1,1205 @@ +/*** 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); +has_defer_keyword (int id: @import_declaration 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/80b2bc24189307c5fd178dc2da95b45bcdb117f7/semmlecode.javascript.dbscheme b/javascript/ql/lib/upgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/semmlecode.javascript.dbscheme new file mode 100644 index 00000000000..578367e82a2 --- /dev/null +++ b/javascript/ql/lib/upgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/semmlecode.javascript.dbscheme @@ -0,0 +1,1217 @@ +/*** 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); +has_defer_keyword (int id: @import_declaration 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 -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); diff --git a/javascript/ql/lib/upgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/upgrade.properties b/javascript/ql/lib/upgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/upgrade.properties new file mode 100644 index 00000000000..00fae2d3bc6 --- /dev/null +++ b/javascript/ql/lib/upgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/upgrade.properties @@ -0,0 +1,2 @@ +description: Sections for databaseMetadata and overlayChangedFiles +compatibility: full diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 8c7ad99925a..d3a5bfa8f82 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,20 @@ +## 2.3.0 + +### Major Analysis Improvements + +* JavaScript files with an average line length greater than 200 are now considered minified and will no longer be analyzed. + For use-cases where minified files should be analyzed, the original behavior can be restored by setting the environment variable + `CODEQL_EXTRACTOR_JAVASCRIPT_ALLOW_MINIFIED_FILES=true`. + +### Minor Analysis Improvements + +* The model of `vue-router` now properly detects taint sources in cases where + the `props` property is a callback. +* Fixed a bug in the Next.js model that would cause the analysis to miss server-side taint sources in files + named `route` or `page` appearing outside `api` and `pages` folders. +* `new Response(x)` is no longer seen as a reflected XSS sink when no `content-type` header + is set, since the content type defaults to `text/plain`. + ## 2.2.4 No user-facing changes. diff --git a/javascript/ql/src/change-notes/2025-11-26-nextjs-page-route-files.md b/javascript/ql/src/change-notes/2025-11-26-nextjs-page-route-files.md deleted file mode 100644 index b1f87b63d31..00000000000 --- a/javascript/ql/src/change-notes/2025-11-26-nextjs-page-route-files.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed a bug in the Next.js model that would cause the analysis to miss server-side taint sources in files - named `route` or `page` appearing outside `api` and `pages` folders. diff --git a/javascript/ql/src/change-notes/2025-11-26-response-default-content-type.md b/javascript/ql/src/change-notes/2025-11-26-response-default-content-type.md deleted file mode 100644 index 67ece0e5353..00000000000 --- a/javascript/ql/src/change-notes/2025-11-26-response-default-content-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* `new Response(x)` is no longer seen as a reflected XSS sink when no `content-type` header - is set, since the content type defaults to `text/plain`. diff --git a/javascript/ql/src/change-notes/released/2.3.0.md b/javascript/ql/src/change-notes/released/2.3.0.md new file mode 100644 index 00000000000..cae1b2f7503 --- /dev/null +++ b/javascript/ql/src/change-notes/released/2.3.0.md @@ -0,0 +1,16 @@ +## 2.3.0 + +### Major Analysis Improvements + +* JavaScript files with an average line length greater than 200 are now considered minified and will no longer be analyzed. + For use-cases where minified files should be analyzed, the original behavior can be restored by setting the environment variable + `CODEQL_EXTRACTOR_JAVASCRIPT_ALLOW_MINIFIED_FILES=true`. + +### Minor Analysis Improvements + +* The model of `vue-router` now properly detects taint sources in cases where + the `props` property is a callback. +* Fixed a bug in the Next.js model that would cause the analysis to miss server-side taint sources in files + named `route` or `page` appearing outside `api` and `pages` folders. +* `new Response(x)` is no longer seen as a reflected XSS sink when no `content-type` header + is set, since the content type defaults to `text/plain`. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 5d34f486fd4..5936154675a 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.2.4 +lastReleaseVersion: 2.3.0 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 3b73d75ad23..9eb734b9d11 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 2.2.5-dev +version: 2.3.1-dev groups: - javascript - queries diff --git a/javascript/ql/test/library-tests/frameworks/Vue/router.js b/javascript/ql/test/library-tests/frameworks/Vue/router.js index acbbefecc01..65dc4d13e99 100644 --- a/javascript/ql/test/library-tests/frameworks/Vue/router.js +++ b/javascript/ql/test/library-tests/frameworks/Vue/router.js @@ -16,8 +16,17 @@ export const router = new Router({ from.query.x; } } - ] - } + ], + props: route => ({ + x: route.query.x + }), + }, + { + props: { + x: route => route.query.x, + y: route => route.query.y + }, + }, ], scrollBehavior(to, from, savedPosition) { to.query.x; @@ -34,4 +43,3 @@ router.afterEach((to, from) => { to.query.x; from.query.x; }); - diff --git a/javascript/ql/test/library-tests/frameworks/Vue/tests.expected b/javascript/ql/test/library-tests/frameworks/Vue/tests.expected index 4fe66404c78..633a8f9924d 100644 --- a/javascript/ql/test/library-tests/frameworks/Vue/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/Vue/tests.expected @@ -182,12 +182,15 @@ remoteFlowSource | router.js:9:17:9:26 | from.query | | router.js:15:25:15:32 | to.query | | router.js:16:25:16:34 | from.query | -| router.js:23:9:23:16 | to.query | -| router.js:24:9:24:18 | from.query | -| router.js:29:5:29:12 | to.query | -| router.js:30:5:30:14 | from.query | -| router.js:34:5:34:12 | to.query | -| router.js:35:5:35:14 | from.query | +| router.js:21:20:21:30 | route.query | +| router.js:26:29:26:39 | route.query | +| router.js:27:29:27:39 | route.query | +| router.js:32:9:32:16 | to.query | +| router.js:33:9:33:18 | from.query | +| router.js:38:5:38:12 | to.query | +| router.js:39:5:39:14 | from.query | +| router.js:43:5:43:12 | to.query | +| router.js:44:5:44:14 | from.query | parseErrors attribute | compont-with-route.vue:2:8:2:21 | v-html=dataA | v-html | @@ -227,12 +230,15 @@ threatModelSource | router.js:9:17:9:26 | from.query | remote | | router.js:15:25:15:32 | to.query | remote | | router.js:16:25:16:34 | from.query | remote | -| router.js:23:9:23:16 | to.query | remote | -| router.js:24:9:24:18 | from.query | remote | -| router.js:29:5:29:12 | to.query | remote | -| router.js:30:5:30:14 | from.query | remote | -| router.js:34:5:34:12 | to.query | remote | -| router.js:35:5:35:14 | from.query | remote | +| router.js:21:20:21:30 | route.query | remote | +| router.js:26:29:26:39 | route.query | remote | +| router.js:27:29:27:39 | route.query | remote | +| router.js:32:9:32:16 | to.query | remote | +| router.js:33:9:33:18 | from.query | remote | +| router.js:38:5:38:12 | to.query | remote | +| router.js:39:5:39:14 | from.query | remote | +| router.js:43:5:43:12 | to.query | remote | +| router.js:44:5:44:14 | from.query | remote | | single-component-file-1.vue:7:45:7:54 | this.input | view-component-input | | single-file-component-3-script.js:5:42:5:51 | this.input | view-component-input | | single-file-component-4.vue:21:14:21:23 | this.input | view-component-input | diff --git a/javascript/ql/test/query-tests/Security/CWE-400/ReDoS/regexplib/dates.js b/javascript/ql/test/query-tests/Security/CWE-400/ReDoS/regexplib/dates.js index 14468a51565..dc172e06b18 100644 --- a/javascript/ql/test/query-tests/Security/CWE-400/ReDoS/regexplib/dates.js +++ b/javascript/ql/test/query-tests/Security/CWE-400/ReDoS/regexplib/dates.js @@ -132,3 +132,103 @@ /^(([0-9])|([0-1][0-9])|([2][0-3])):?([0-5][0-9])$/g; /^[\w-\.]+@([\w-]+\.)+[\w-]{2,3}$/g; /(((0[1-9]|[12][0-9]|3[01])([/])(0[13578]|10|12)([/])(\d{4}))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)([/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])(\d{4}))|((29)(\.|-|\/)(02)([/])([02468][048]00))|((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9][0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9][13579][26])))/g; +// +// Add some empty lines to lower the average line length so the file is not classified as minified. +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// diff --git a/javascript/ql/test/query-tests/filters/ClassifyFiles/ClassifyFiles.expected b/javascript/ql/test/query-tests/filters/ClassifyFiles/ClassifyFiles.expected index 5b896e958c5..377a0e1ad29 100644 --- a/javascript/ql/test/query-tests/filters/ClassifyFiles/ClassifyFiles.expected +++ b/javascript/ql/test/query-tests/filters/ClassifyFiles/ClassifyFiles.expected @@ -17,7 +17,6 @@ | jquery-datatables.js:0:0:0:0 | jquery-datatables.js | library | | jquery-jstree.js:0:0:0:0 | jquery-jstree.js | library | | jquery-snippet.js:0:0:0:0 | jquery-snippet.js | library | -| json-like.js:0:0:0:0 | json-like.js | generated | | jsx-old.js:0:0:0:0 | jsx-old.js | generated | | jsx.js:0:0:0:0 | jsx.js | generated | | multi-part-bundle.html:0:0:0:0 | multi-part-bundle.html | generated | diff --git a/misc/codegen/README.md b/misc/codegen/README.md index 2d45ac67ac2..c4a1ebecdcc 100644 --- a/misc/codegen/README.md +++ b/misc/codegen/README.md @@ -1,14 +1,17 @@ # Code generation suite -This directory contains the code generation suite used by the Swift extractor and the QL library. This suite will use -the abstract class specification of `schema.py` to generate: +This directory contains the code generation suite used by the Swift and Rust extractors and QL library. This suite will use +the abstract class specification of a `schema` python module to generate: * the `dbscheme` file (see [`dbschemegen.py`](generators/dbschemegen.py)) * the QL generated code and when appropriate the corresponding stubs (see [`qlgen.py`](generators/qlgen.py)) -* C++ tags and trap entries (see [`trapgen.py`](generators/trapgen.py)) -* C++ structured classes (see [`cppgen.py`](generators/cppgen.py)) +* QL language tests for testing the extractors (see [`qlgen.py`](generators/qlgen.py)) +* [Swift] C++ tags and trap entries (see [`trapgen.py`](generators/trapgen.py)) +* [Swift] C++ structured classes (see [`cppgen.py`](generators/cppgen.py)) +* [Rust] Rust structured classes (see [`rustgen.py`](generators/rustgen.py)) +* [Rust] Rust sources for extractor language tests extracted from the documentation snippets (see [`rusttestgen.py`](generators/rusttestgen.py)) -An example `schema.py` [can be found in the Swift package](../../swift/schema.py). +Schemas [can be found in the Swift package](../../swift/schema.py) or [in the Rust one](../../rust/schema). ## Usage diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 61f60bfdac2..3fa0771beca 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.40 + +No user-facing changes. + ## 1.0.39 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.40.md b/misc/suite-helpers/change-notes/released/1.0.40.md new file mode 100644 index 00000000000..3f2f101b3b7 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.40.md @@ -0,0 +1,3 @@ +## 1.0.40 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index c310c9f1e78..326e4b5da67 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.39 +lastReleaseVersion: 1.0.40 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index fd26cf0f007..b01f97237d3 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.40-dev +version: 1.0.41-dev groups: shared warnOnImplicitThis: true diff --git a/python/downgrades/279cbb08d387ecd57ac177e87c94cfd5ca62f792/old.dbscheme b/python/downgrades/279cbb08d387ecd57ac177e87c94cfd5ca62f792/old.dbscheme new file mode 100644 index 00000000000..279cbb08d38 --- /dev/null +++ b/python/downgrades/279cbb08d387ecd57ac177e87c94cfd5ca62f792/old.dbscheme @@ -0,0 +1,1289 @@ +/* + * This dbscheme is auto-generated by 'semmle/dbscheme_gen.py'. + * Run "make dbscheme" in python/extractor/ to regenerate. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py or + * by adding rules to dbscheme.template + */ + +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2020-07-02 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/*- DEPRECATED: External defects and metrics -*/ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- DEPRECATED: Snapshot date -*/ + +snapshotDate(unique date snapshotDate : date ref); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- DEPRECATED: Duplicate code -*/ + +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +@duplication_or_similarity = @duplication | @similarity + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/*- DEPRECATED: Version control data -*/ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Python dbscheme -*/ + +/* + * Line metrics + */ +py_codelines(int id : @py_scope ref, + int count : int ref); + +py_commentlines(int id : @py_scope ref, + int count : int ref); + +py_docstringlines(int id : @py_scope ref, + int count : int ref); + +py_alllines(int id : @py_scope ref, + int count : int ref); + +/**************************** + Python dbscheme +****************************/ + +@sourceline = @file | @py_Module | @xmllocatable; + +@location = @location_ast | @location_default ; + +locations_ast(unique int id: @location_ast, + int module: @py_Module ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +file_contents(unique int file: @file ref, string contents: string ref); + +py_module_path(int module: @py_Module ref, int file: @container ref); + +variable(unique int id : @py_variable, + int scope : @py_scope ref, + varchar(1) name : string ref); + +py_line_lengths(unique int id : @py_line, + int file: @py_Module ref, + int line : int ref, + int length : int ref); + +py_extracted_version(int module : @py_Module ref, + varchar(1) version : string ref); + +/* AUTO GENERATED PART STARTS HERE */ + + +/* AnnAssign.location = 0, location */ +/* AnnAssign.value = 1, expr */ +/* AnnAssign.annotation = 2, expr */ +/* AnnAssign.target = 3, expr */ + +/* Assert.location = 0, location */ +/* Assert.test = 1, expr */ +/* Assert.msg = 2, expr */ + +/* Assign.location = 0, location */ +/* Assign.value = 1, expr */ +/* Assign.targets = 2, expr_list */ + +/* AssignExpr.location = 0, location */ +/* AssignExpr.parenthesised = 1, bool */ +/* AssignExpr.value = 2, expr */ +/* AssignExpr.target = 3, expr */ + +/* Attribute.location = 0, location */ +/* Attribute.parenthesised = 1, bool */ +/* Attribute.value = 2, expr */ +/* Attribute.attr = 3, str */ +/* Attribute.ctx = 4, expr_context */ + +/* AugAssign.location = 0, location */ +/* AugAssign.operation = 1, BinOp */ + +/* Await.location = 0, location */ +/* Await.parenthesised = 1, bool */ +/* Await.value = 2, expr */ + +/* BinaryExpr.location = 0, location */ +/* BinaryExpr.parenthesised = 1, bool */ +/* BinaryExpr.left = 2, expr */ +/* BinaryExpr.op = 3, operator */ +/* BinaryExpr.right = 4, expr */ +/* BinaryExpr = AugAssign */ + +/* BoolExpr.location = 0, location */ +/* BoolExpr.parenthesised = 1, bool */ +/* BoolExpr.op = 2, boolop */ +/* BoolExpr.values = 3, expr_list */ + +/* Break.location = 0, location */ + +/* Bytes.location = 0, location */ +/* Bytes.parenthesised = 1, bool */ +/* Bytes.s = 2, bytes */ +/* Bytes.prefix = 3, bytes */ +/* Bytes.implicitly_concatenated_parts = 4, StringPart_list */ + +/* Call.location = 0, location */ +/* Call.parenthesised = 1, bool */ +/* Call.func = 2, expr */ +/* Call.positional_args = 3, expr_list */ +/* Call.named_args = 4, dict_item_list */ + +/* Case.location = 0, location */ +/* Case.pattern = 1, pattern */ +/* Case.guard = 2, expr */ +/* Case.body = 3, stmt_list */ + +/* Class.name = 0, str */ +/* Class.body = 1, stmt_list */ +/* Class = ClassExpr */ + +/* ClassExpr.location = 0, location */ +/* ClassExpr.parenthesised = 1, bool */ +/* ClassExpr.name = 2, str */ +/* ClassExpr.bases = 3, expr_list */ +/* ClassExpr.keywords = 4, dict_item_list */ +/* ClassExpr.inner_scope = 5, Class */ +/* ClassExpr.type_parameters = 6, type_parameter_list */ + +/* Compare.location = 0, location */ +/* Compare.parenthesised = 1, bool */ +/* Compare.left = 2, expr */ +/* Compare.ops = 3, cmpop_list */ +/* Compare.comparators = 4, expr_list */ + +/* Continue.location = 0, location */ + +/* Delete.location = 0, location */ +/* Delete.targets = 1, expr_list */ + +/* Dict.location = 0, location */ +/* Dict.parenthesised = 1, bool */ +/* Dict.items = 2, dict_item_list */ + +/* DictComp.location = 0, location */ +/* DictComp.parenthesised = 1, bool */ +/* DictComp.function = 2, Function */ +/* DictComp.iterable = 3, expr */ + +/* DictUnpacking.location = 0, location */ +/* DictUnpacking.value = 1, expr */ + +/* Ellipsis.location = 0, location */ +/* Ellipsis.parenthesised = 1, bool */ + +/* ExceptGroupStmt.location = 0, location */ +/* ExceptGroupStmt.type = 1, expr */ +/* ExceptGroupStmt.name = 2, expr */ +/* ExceptGroupStmt.body = 3, stmt_list */ + +/* ExceptStmt.location = 0, location */ +/* ExceptStmt.type = 1, expr */ +/* ExceptStmt.name = 2, expr */ +/* ExceptStmt.body = 3, stmt_list */ + +/* Exec.location = 0, location */ +/* Exec.body = 1, expr */ +/* Exec.globals = 2, expr */ +/* Exec.locals = 3, expr */ + +/* ExprStmt.location = 0, location */ +/* ExprStmt.value = 1, expr */ + +/* Filter.location = 0, location */ +/* Filter.parenthesised = 1, bool */ +/* Filter.value = 2, expr */ +/* Filter.filter = 3, expr */ + +/* For.location = 0, location */ +/* For.target = 1, expr */ +/* For.iter = 2, expr */ +/* For.body = 3, stmt_list */ +/* For.orelse = 4, stmt_list */ +/* For.is_async = 5, bool */ + +/* FormattedValue.location = 0, location */ +/* FormattedValue.parenthesised = 1, bool */ +/* FormattedValue.value = 2, expr */ +/* FormattedValue.conversion = 3, str */ +/* FormattedValue.format_spec = 4, JoinedStr */ + +/* Function.name = 0, str */ +/* Function.args = 1, parameter_list */ +/* Function.vararg = 2, expr */ +/* Function.kwonlyargs = 3, expr_list */ +/* Function.kwarg = 4, expr */ +/* Function.body = 5, stmt_list */ +/* Function.is_async = 6, bool */ +/* Function.type_parameters = 7, type_parameter_list */ +/* Function = FunctionParent */ + +/* FunctionExpr.location = 0, location */ +/* FunctionExpr.parenthesised = 1, bool */ +/* FunctionExpr.name = 2, str */ +/* FunctionExpr.args = 3, arguments */ +/* FunctionExpr.returns = 4, expr */ +/* FunctionExpr.inner_scope = 5, Function */ + +/* GeneratorExp.location = 0, location */ +/* GeneratorExp.parenthesised = 1, bool */ +/* GeneratorExp.function = 2, Function */ +/* GeneratorExp.iterable = 3, expr */ + +/* Global.location = 0, location */ +/* Global.names = 1, str_list */ + +/* Guard.location = 0, location */ +/* Guard.parenthesised = 1, bool */ +/* Guard.test = 2, expr */ + +/* If.location = 0, location */ +/* If.test = 1, expr */ +/* If.body = 2, stmt_list */ +/* If.orelse = 3, stmt_list */ + +/* IfExp.location = 0, location */ +/* IfExp.parenthesised = 1, bool */ +/* IfExp.test = 2, expr */ +/* IfExp.body = 3, expr */ +/* IfExp.orelse = 4, expr */ + +/* Import.location = 0, location */ +/* Import.names = 1, alias_list */ + +/* ImportExpr.location = 0, location */ +/* ImportExpr.parenthesised = 1, bool */ +/* ImportExpr.level = 2, int */ +/* ImportExpr.name = 3, str */ +/* ImportExpr.top = 4, bool */ + +/* ImportStar.location = 0, location */ +/* ImportStar.module = 1, expr */ + +/* ImportMember.location = 0, location */ +/* ImportMember.parenthesised = 1, bool */ +/* ImportMember.module = 2, expr */ +/* ImportMember.name = 3, str */ + +/* Fstring.location = 0, location */ +/* Fstring.parenthesised = 1, bool */ +/* Fstring.values = 2, expr_list */ +/* Fstring = FormattedValue */ + +/* JoinedTemplateString.location = 0, location */ +/* JoinedTemplateString.parenthesised = 1, bool */ +/* JoinedTemplateString.strings = 2, TemplateString_list */ + +/* KeyValuePair.location = 0, location */ +/* KeyValuePair.value = 1, expr */ +/* KeyValuePair.key = 2, expr */ + +/* Lambda.location = 0, location */ +/* Lambda.parenthesised = 1, bool */ +/* Lambda.args = 2, arguments */ +/* Lambda.inner_scope = 3, Function */ + +/* List.location = 0, location */ +/* List.parenthesised = 1, bool */ +/* List.elts = 2, expr_list */ +/* List.ctx = 3, expr_context */ + +/* ListComp.location = 0, location */ +/* ListComp.parenthesised = 1, bool */ +/* ListComp.function = 2, Function */ +/* ListComp.iterable = 3, expr */ +/* ListComp.generators = 4, comprehension_list */ +/* ListComp.elt = 5, expr */ + +/* MatchStmt.location = 0, location */ +/* MatchStmt.subject = 1, expr */ +/* MatchStmt.cases = 2, stmt_list */ + +/* MatchAsPattern.location = 0, location */ +/* MatchAsPattern.parenthesised = 1, bool */ +/* MatchAsPattern.pattern = 2, pattern */ +/* MatchAsPattern.alias = 3, expr */ + +/* MatchCapturePattern.location = 0, location */ +/* MatchCapturePattern.parenthesised = 1, bool */ +/* MatchCapturePattern.variable = 2, expr */ + +/* MatchClassPattern.location = 0, location */ +/* MatchClassPattern.parenthesised = 1, bool */ +/* MatchClassPattern.class = 2, expr */ +/* MatchClassPattern.class_name = 3, expr */ +/* MatchClassPattern.positional = 4, pattern_list */ +/* MatchClassPattern.keyword = 5, pattern_list */ + +/* MatchDoubleStarPattern.location = 0, location */ +/* MatchDoubleStarPattern.parenthesised = 1, bool */ +/* MatchDoubleStarPattern.target = 2, pattern */ + +/* MatchKeyValuePattern.location = 0, location */ +/* MatchKeyValuePattern.parenthesised = 1, bool */ +/* MatchKeyValuePattern.key = 2, pattern */ +/* MatchKeyValuePattern.value = 3, pattern */ + +/* MatchKeywordPattern.location = 0, location */ +/* MatchKeywordPattern.parenthesised = 1, bool */ +/* MatchKeywordPattern.attribute = 2, expr */ +/* MatchKeywordPattern.value = 3, pattern */ + +/* MatchLiteralPattern.location = 0, location */ +/* MatchLiteralPattern.parenthesised = 1, bool */ +/* MatchLiteralPattern.literal = 2, expr */ + +/* MatchMappingPattern.location = 0, location */ +/* MatchMappingPattern.parenthesised = 1, bool */ +/* MatchMappingPattern.mappings = 2, pattern_list */ + +/* MatchOrPattern.location = 0, location */ +/* MatchOrPattern.parenthesised = 1, bool */ +/* MatchOrPattern.patterns = 2, pattern_list */ + +/* MatchSequencePattern.location = 0, location */ +/* MatchSequencePattern.parenthesised = 1, bool */ +/* MatchSequencePattern.patterns = 2, pattern_list */ + +/* MatchStarPattern.location = 0, location */ +/* MatchStarPattern.parenthesised = 1, bool */ +/* MatchStarPattern.target = 2, pattern */ + +/* MatchValuePattern.location = 0, location */ +/* MatchValuePattern.parenthesised = 1, bool */ +/* MatchValuePattern.value = 2, expr */ + +/* MatchWildcardPattern.location = 0, location */ +/* MatchWildcardPattern.parenthesised = 1, bool */ + +/* Module.name = 0, str */ +/* Module.hash = 1, str */ +/* Module.body = 2, stmt_list */ +/* Module.kind = 3, str */ + +/* Name.location = 0, location */ +/* Name.parenthesised = 1, bool */ +/* Name.variable = 2, variable */ +/* Name.ctx = 3, expr_context */ +/* Name = ParameterList */ + +/* Nonlocal.location = 0, location */ +/* Nonlocal.names = 1, str_list */ + +/* Num.location = 0, location */ +/* Num.parenthesised = 1, bool */ +/* Num.n = 2, number */ +/* Num.text = 3, number */ + +/* ParamSpec.location = 0, location */ +/* ParamSpec.name = 1, expr */ +/* ParamSpec.default = 2, expr */ + +/* Pass.location = 0, location */ + +/* PlaceHolder.location = 0, location */ +/* PlaceHolder.parenthesised = 1, bool */ +/* PlaceHolder.variable = 2, variable */ +/* PlaceHolder.ctx = 3, expr_context */ + +/* Print.location = 0, location */ +/* Print.dest = 1, expr */ +/* Print.values = 2, expr_list */ +/* Print.nl = 3, bool */ + +/* Raise.location = 0, location */ +/* Raise.exc = 1, expr */ +/* Raise.cause = 2, expr */ +/* Raise.type = 3, expr */ +/* Raise.inst = 4, expr */ +/* Raise.tback = 5, expr */ + +/* Repr.location = 0, location */ +/* Repr.parenthesised = 1, bool */ +/* Repr.value = 2, expr */ + +/* Return.location = 0, location */ +/* Return.value = 1, expr */ + +/* Set.location = 0, location */ +/* Set.parenthesised = 1, bool */ +/* Set.elts = 2, expr_list */ + +/* SetComp.location = 0, location */ +/* SetComp.parenthesised = 1, bool */ +/* SetComp.function = 2, Function */ +/* SetComp.iterable = 3, expr */ + +/* Slice.location = 0, location */ +/* Slice.parenthesised = 1, bool */ +/* Slice.start = 2, expr */ +/* Slice.stop = 3, expr */ +/* Slice.step = 4, expr */ + +/* SpecialOperation.location = 0, location */ +/* SpecialOperation.parenthesised = 1, bool */ +/* SpecialOperation.name = 2, str */ +/* SpecialOperation.arguments = 3, expr_list */ + +/* Starred.location = 0, location */ +/* Starred.parenthesised = 1, bool */ +/* Starred.value = 2, expr */ +/* Starred.ctx = 3, expr_context */ + +/* Str.location = 0, location */ +/* Str.parenthesised = 1, bool */ +/* Str.s = 2, str */ +/* Str.prefix = 3, str */ +/* Str.implicitly_concatenated_parts = 4, StringPart_list */ + +/* StringPart.text = 0, str */ +/* StringPart.location = 1, location */ +/* StringPart = StringPartList */ +/* StringPartList = BytesOrStr */ + +/* Subscript.location = 0, location */ +/* Subscript.parenthesised = 1, bool */ +/* Subscript.value = 2, expr */ +/* Subscript.index = 3, expr */ +/* Subscript.ctx = 4, expr_context */ + +/* TemplateDottedNotation.location = 0, location */ +/* TemplateDottedNotation.parenthesised = 1, bool */ +/* TemplateDottedNotation.value = 2, expr */ +/* TemplateDottedNotation.attr = 3, str */ +/* TemplateDottedNotation.ctx = 4, expr_context */ + +/* TemplateString.location = 0, location */ +/* TemplateString.parenthesised = 1, bool */ +/* TemplateString.prefix = 2, str */ +/* TemplateString.values = 3, expr_list */ +/* TemplateString = TemplateStringList */ + +/* TemplateStringPart.location = 0, location */ +/* TemplateStringPart.parenthesised = 1, bool */ +/* TemplateStringPart.text = 2, str */ +/* TemplateStringList = JoinedTemplateString */ + +/* TemplateWrite.location = 0, location */ +/* TemplateWrite.value = 1, expr */ + +/* Try.location = 0, location */ +/* Try.body = 1, stmt_list */ +/* Try.orelse = 2, stmt_list */ +/* Try.handlers = 3, stmt_list */ +/* Try.finalbody = 4, stmt_list */ + +/* Tuple.location = 0, location */ +/* Tuple.parenthesised = 1, bool */ +/* Tuple.elts = 2, expr_list */ +/* Tuple.ctx = 3, expr_context */ +/* Tuple = ParameterList */ + +/* TypeAlias.location = 0, location */ +/* TypeAlias.name = 1, expr */ +/* TypeAlias.type_parameters = 2, type_parameter_list */ +/* TypeAlias.value = 3, expr */ + +/* TypeVar.location = 0, location */ +/* TypeVar.name = 1, expr */ +/* TypeVar.bound = 2, expr */ +/* TypeVar.default = 3, expr */ + +/* TypeVarTuple.location = 0, location */ +/* TypeVarTuple.name = 1, expr */ +/* TypeVarTuple.default = 2, expr */ + +/* UnaryExpr.location = 0, location */ +/* UnaryExpr.parenthesised = 1, bool */ +/* UnaryExpr.op = 2, unaryop */ +/* UnaryExpr.operand = 3, expr */ + +/* While.location = 0, location */ +/* While.test = 1, expr */ +/* While.body = 2, stmt_list */ +/* While.orelse = 3, stmt_list */ + +/* With.location = 0, location */ +/* With.context_expr = 1, expr */ +/* With.optional_vars = 2, expr */ +/* With.body = 3, stmt_list */ +/* With.is_async = 4, bool */ + +/* Yield.location = 0, location */ +/* Yield.parenthesised = 1, bool */ +/* Yield.value = 2, expr */ + +/* YieldFrom.location = 0, location */ +/* YieldFrom.parenthesised = 1, bool */ +/* YieldFrom.value = 2, expr */ + +/* Alias.value = 0, expr */ +/* Alias.asname = 1, expr */ +/* Alias = AliasList */ +/* AliasList = Import */ + +/* Arguments.kw_defaults = 0, expr_list */ +/* Arguments.defaults = 1, expr_list */ +/* Arguments.annotations = 2, expr_list */ +/* Arguments.varargannotation = 3, expr */ +/* Arguments.kwargannotation = 4, expr */ +/* Arguments.kw_annotations = 5, expr_list */ +/* Arguments = ArgumentsParent */ +/* boolean = BoolParent */ +/* Boolop = BoolExpr */ +/* string = Bytes */ +/* Cmpop = CmpopList */ +/* CmpopList = Compare */ + +/* Comprehension.location = 0, location */ +/* Comprehension.iter = 1, expr */ +/* Comprehension.target = 2, expr */ +/* Comprehension.ifs = 3, expr_list */ +/* Comprehension = ComprehensionList */ +/* ComprehensionList = ListComp */ +/* DictItem = DictItemList */ +/* DictItemList = DictItemListParent */ + +/* Expr.location = 0, location */ +/* Expr.parenthesised = 1, bool */ +/* Expr = ExprParent */ +/* ExprContext = ExprContextParent */ +/* ExprList = ExprListParent */ +/* int = ImportExpr */ + +/* Keyword.location = 0, location */ +/* Keyword.value = 1, expr */ +/* Keyword.arg = 2, str */ +/* Location = LocationParent */ +/* string = Num */ +/* Operator = BinaryExpr */ +/* ParameterList = Function */ + +/* Pattern.location = 0, location */ +/* Pattern.parenthesised = 1, bool */ +/* Pattern = PatternParent */ +/* PatternList = PatternListParent */ + +/* Stmt.location = 0, location */ +/* Stmt = StmtList */ +/* StmtList = StmtListParent */ +/* string = StrParent */ +/* StringList = StrListParent */ + +/* TypeParameter.location = 0, location */ +/* TypeParameter = TypeParameterList */ +/* TypeParameterList = TypeParameterListParent */ +/* Unaryop = UnaryExpr */ +/* Variable = VariableParent */ +py_Classes(unique int id : @py_Class, + unique int parent : @py_ClassExpr ref); + +py_Functions(unique int id : @py_Function, + unique int parent : @py_Function_parent ref); + +py_Modules(unique int id : @py_Module); + +py_StringParts(unique int id : @py_StringPart, + int parent : @py_StringPart_list ref, + int idx : int ref); + +py_StringPart_lists(unique int id : @py_StringPart_list, + unique int parent : @py_Bytes_or_Str ref); + +py_TemplateString_lists(unique int id : @py_TemplateString_list, + unique int parent : @py_JoinedTemplateString ref); + +py_aliases(unique int id : @py_alias, + int parent : @py_alias_list ref, + int idx : int ref); + +py_alias_lists(unique int id : @py_alias_list, + unique int parent : @py_Import ref); + +py_arguments(unique int id : @py_arguments, + unique int parent : @py_arguments_parent ref); + +py_bools(int parent : @py_bool_parent ref, + int idx : int ref); + +py_boolops(unique int id : @py_boolop, + int kind: int ref, + unique int parent : @py_BoolExpr ref); + +py_bytes(varchar(1) id : string ref, + int parent : @py_Bytes ref, + int idx : int ref); + +py_cmpops(unique int id : @py_cmpop, + int kind: int ref, + int parent : @py_cmpop_list ref, + int idx : int ref); + +py_cmpop_lists(unique int id : @py_cmpop_list, + unique int parent : @py_Compare ref); + +py_comprehensions(unique int id : @py_comprehension, + int parent : @py_comprehension_list ref, + int idx : int ref); + +py_comprehension_lists(unique int id : @py_comprehension_list, + unique int parent : @py_ListComp ref); + +py_dict_items(unique int id : @py_dict_item, + int kind: int ref, + int parent : @py_dict_item_list ref, + int idx : int ref); + +py_dict_item_lists(unique int id : @py_dict_item_list, + unique int parent : @py_dict_item_list_parent ref); + +py_exprs(unique int id : @py_expr, + int kind: int ref, + int parent : @py_expr_parent ref, + int idx : int ref); + +py_expr_contexts(unique int id : @py_expr_context, + int kind: int ref, + unique int parent : @py_expr_context_parent ref); + +py_expr_lists(unique int id : @py_expr_list, + int parent : @py_expr_list_parent ref, + int idx : int ref); + +py_ints(int id : int ref, + unique int parent : @py_ImportExpr ref); + +py_locations(unique int id : @location ref, + unique int parent : @py_location_parent ref); + +py_numbers(varchar(1) id : string ref, + int parent : @py_Num ref, + int idx : int ref); + +py_operators(unique int id : @py_operator, + int kind: int ref, + unique int parent : @py_BinaryExpr ref); + +py_parameter_lists(unique int id : @py_parameter_list, + unique int parent : @py_Function ref); + +py_patterns(unique int id : @py_pattern, + int kind: int ref, + int parent : @py_pattern_parent ref, + int idx : int ref); + +py_pattern_lists(unique int id : @py_pattern_list, + int parent : @py_pattern_list_parent ref, + int idx : int ref); + +py_stmts(unique int id : @py_stmt, + int kind: int ref, + int parent : @py_stmt_list ref, + int idx : int ref); + +py_stmt_lists(unique int id : @py_stmt_list, + int parent : @py_stmt_list_parent ref, + int idx : int ref); + +py_strs(varchar(1) id : string ref, + int parent : @py_str_parent ref, + int idx : int ref); + +py_str_lists(unique int id : @py_str_list, + unique int parent : @py_str_list_parent ref); + +py_type_parameters(unique int id : @py_type_parameter, + int kind: int ref, + int parent : @py_type_parameter_list ref, + int idx : int ref); + +py_type_parameter_lists(unique int id : @py_type_parameter_list, + unique int parent : @py_type_parameter_list_parent ref); + +py_unaryops(unique int id : @py_unaryop, + int kind: int ref, + unique int parent : @py_UnaryExpr ref); + +py_variables(int id : @py_variable ref, + unique int parent : @py_variable_parent ref); + +case @py_boolop.kind of + 0 = @py_And +| 1 = @py_Or; + +case @py_cmpop.kind of + 0 = @py_Eq +| 1 = @py_Gt +| 2 = @py_GtE +| 3 = @py_In +| 4 = @py_Is +| 5 = @py_IsNot +| 6 = @py_Lt +| 7 = @py_LtE +| 8 = @py_NotEq +| 9 = @py_NotIn; + +case @py_dict_item.kind of + 0 = @py_DictUnpacking +| 1 = @py_KeyValuePair +| 2 = @py_keyword; + +case @py_expr.kind of + 0 = @py_Attribute +| 1 = @py_BinaryExpr +| 2 = @py_BoolExpr +| 3 = @py_Bytes +| 4 = @py_Call +| 5 = @py_ClassExpr +| 6 = @py_Compare +| 7 = @py_Dict +| 8 = @py_DictComp +| 9 = @py_Ellipsis +| 10 = @py_FunctionExpr +| 11 = @py_GeneratorExp +| 12 = @py_IfExp +| 13 = @py_ImportExpr +| 14 = @py_ImportMember +| 15 = @py_Lambda +| 16 = @py_List +| 17 = @py_ListComp +| 18 = @py_Guard +| 19 = @py_Name +| 20 = @py_Num +| 21 = @py_Repr +| 22 = @py_Set +| 23 = @py_SetComp +| 24 = @py_Slice +| 25 = @py_Starred +| 26 = @py_Str +| 27 = @py_Subscript +| 28 = @py_Tuple +| 29 = @py_UnaryExpr +| 30 = @py_Yield +| 31 = @py_YieldFrom +| 32 = @py_TemplateDottedNotation +| 33 = @py_Filter +| 34 = @py_PlaceHolder +| 35 = @py_Await +| 36 = @py_Fstring +| 37 = @py_FormattedValue +| 38 = @py_AssignExpr +| 39 = @py_SpecialOperation +| 40 = @py_TemplateString +| 41 = @py_JoinedTemplateString +| 42 = @py_TemplateStringPart; + +case @py_expr_context.kind of + 0 = @py_AugLoad +| 1 = @py_AugStore +| 2 = @py_Del +| 3 = @py_Load +| 4 = @py_Param +| 5 = @py_Store; + +case @py_operator.kind of + 0 = @py_Add +| 1 = @py_BitAnd +| 2 = @py_BitOr +| 3 = @py_BitXor +| 4 = @py_Div +| 5 = @py_FloorDiv +| 6 = @py_LShift +| 7 = @py_Mod +| 8 = @py_Mult +| 9 = @py_Pow +| 10 = @py_RShift +| 11 = @py_Sub +| 12 = @py_MatMult; + +case @py_pattern.kind of + 0 = @py_MatchAsPattern +| 1 = @py_MatchOrPattern +| 2 = @py_MatchLiteralPattern +| 3 = @py_MatchCapturePattern +| 4 = @py_MatchWildcardPattern +| 5 = @py_MatchValuePattern +| 6 = @py_MatchSequencePattern +| 7 = @py_MatchStarPattern +| 8 = @py_MatchMappingPattern +| 9 = @py_MatchDoubleStarPattern +| 10 = @py_MatchKeyValuePattern +| 11 = @py_MatchClassPattern +| 12 = @py_MatchKeywordPattern; + +case @py_stmt.kind of + 0 = @py_Assert +| 1 = @py_Assign +| 2 = @py_AugAssign +| 3 = @py_Break +| 4 = @py_Continue +| 5 = @py_Delete +| 6 = @py_ExceptStmt +| 7 = @py_ExceptGroupStmt +| 8 = @py_Exec +| 9 = @py_Expr_stmt +| 10 = @py_For +| 11 = @py_Global +| 12 = @py_If +| 13 = @py_Import +| 14 = @py_ImportStar +| 15 = @py_MatchStmt +| 16 = @py_Case +| 17 = @py_Nonlocal +| 18 = @py_Pass +| 19 = @py_Print +| 20 = @py_Raise +| 21 = @py_Return +| 22 = @py_Try +| 23 = @py_While +| 24 = @py_With +| 25 = @py_TemplateWrite +| 26 = @py_AnnAssign +| 27 = @py_TypeAlias; + +case @py_type_parameter.kind of + 0 = @py_ParamSpec +| 1 = @py_TypeVar +| 2 = @py_TypeVarTuple; + +case @py_unaryop.kind of + 0 = @py_Invert +| 1 = @py_Not +| 2 = @py_UAdd +| 3 = @py_USub; + +@py_Bytes_or_Str = @py_Bytes | @py_Str; + +@py_Function_parent = @py_DictComp | @py_FunctionExpr | @py_GeneratorExp | @py_Lambda | @py_ListComp | @py_SetComp; + +@py_arguments_parent = @py_FunctionExpr | @py_Lambda; + +@py_ast_node = @py_Class | @py_Function | @py_Module | @py_StringPart | @py_comprehension | @py_dict_item | @py_expr | @py_pattern | @py_stmt | @py_type_parameter; + +@py_bool_parent = @py_For | @py_Function | @py_Print | @py_With | @py_expr | @py_pattern; + +@py_dict_item_list_parent = @py_Call | @py_ClassExpr | @py_Dict; + +@py_expr_context_parent = @py_Attribute | @py_List | @py_Name | @py_PlaceHolder | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_Tuple; + +@py_expr_list_parent = @py_Assign | @py_BoolExpr | @py_Call | @py_ClassExpr | @py_Compare | @py_Delete | @py_Fstring | @py_Function | @py_List | @py_Print | @py_Set | @py_SpecialOperation | @py_TemplateString | @py_Tuple | @py_arguments | @py_comprehension; + +@py_expr_or_stmt = @py_expr | @py_stmt; + +@py_expr_parent = @py_AnnAssign | @py_Assert | @py_Assign | @py_AssignExpr | @py_Attribute | @py_AugAssign | @py_Await | @py_BinaryExpr | @py_Call | @py_Case | @py_Compare | @py_DictComp | @py_DictUnpacking | @py_ExceptGroupStmt | @py_ExceptStmt | @py_Exec | @py_Expr_stmt | @py_Filter | @py_For | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_GeneratorExp | @py_Guard | @py_If | @py_IfExp | @py_ImportMember | @py_ImportStar | @py_KeyValuePair | @py_ListComp | @py_MatchAsPattern | @py_MatchCapturePattern | @py_MatchClassPattern | @py_MatchKeywordPattern | @py_MatchLiteralPattern | @py_MatchStmt | @py_MatchValuePattern | @py_ParamSpec | @py_Print | @py_Raise | @py_Repr | @py_Return | @py_SetComp | @py_Slice | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_TemplateString_list | @py_TemplateWrite | @py_TypeAlias | @py_TypeVar | @py_TypeVarTuple | @py_UnaryExpr | @py_While | @py_With | @py_Yield | @py_YieldFrom | @py_alias | @py_arguments | @py_comprehension | @py_expr_list | @py_keyword | @py_parameter_list; + +@py_location_parent = @py_DictUnpacking | @py_KeyValuePair | @py_StringPart | @py_comprehension | @py_expr | @py_keyword | @py_pattern | @py_stmt | @py_type_parameter; + +@py_parameter = @py_Name | @py_Tuple; + +@py_pattern_list_parent = @py_MatchClassPattern | @py_MatchMappingPattern | @py_MatchOrPattern | @py_MatchSequencePattern; + +@py_pattern_parent = @py_Case | @py_MatchAsPattern | @py_MatchDoubleStarPattern | @py_MatchKeyValuePattern | @py_MatchKeywordPattern | @py_MatchStarPattern | @py_pattern_list; + +@py_scope = @py_Class | @py_Function | @py_Module; + +@py_stmt_list_parent = @py_Case | @py_Class | @py_ExceptGroupStmt | @py_ExceptStmt | @py_For | @py_Function | @py_If | @py_MatchStmt | @py_Module | @py_Try | @py_While | @py_With; + +@py_str_list_parent = @py_Global | @py_Nonlocal; + +@py_str_parent = @py_Attribute | @py_Class | @py_ClassExpr | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_ImportExpr | @py_ImportMember | @py_Module | @py_SpecialOperation | @py_Str | @py_StringPart | @py_TemplateDottedNotation | @py_TemplateString | @py_TemplateStringPart | @py_keyword | @py_str_list; + +@py_type_parameter_list_parent = @py_ClassExpr | @py_Function | @py_TypeAlias; + +@py_variable_parent = @py_Name | @py_PlaceHolder; + + +/* + * End of auto-generated part + */ + + + +/* Map relative names to absolute names for imports */ +py_absolute_names(int module : @py_Module ref, + varchar(1) relname : string ref, + varchar(1) absname : string ref); + +py_exports(int id : @py_Module ref, + varchar(1) name : string ref); + +/* Successor information */ +py_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_true_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_exception_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_false_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_flow_bb_node(unique int flownode : @py_flow_node, + int realnode : @py_ast_node ref, + int basicblock : @py_flow_node ref, + int index : int ref); + +py_scope_flow(int flow : @py_flow_node ref, + int scope : @py_scope ref, + int kind : int ref); + +py_idoms(unique int node : @py_flow_node ref, + int immediate_dominator : @py_flow_node ref); + +py_ssa_phi(int phi : @py_ssa_var ref, + int arg: @py_ssa_var ref); + +py_ssa_var(unique int id : @py_ssa_var, + int var : @py_variable ref); + +py_ssa_use(int node: @py_flow_node ref, + int var : @py_ssa_var ref); + +py_ssa_defn(unique int id : @py_ssa_var ref, + int node: @py_flow_node ref); + +@py_base_var = @py_variable | @py_ssa_var; + +py_scopes(unique int node : @py_expr_or_stmt ref, + int scope : @py_scope ref); + +py_scope_location(unique int id : @location ref, + unique int scope : @py_scope ref); + +py_flags_versioned(varchar(1) name : string ref, + varchar(1) value : string ref, + varchar(1) version : string ref); + +py_syntax_error_versioned(unique int id : @location ref, + varchar(1) message : string ref, + varchar(1) version : string ref); + +py_comments(unique int id : @py_comment, + varchar(1) text : string ref, + unique int location : @location ref); + +/* Type information support */ + +py_cobjects(unique int obj : @py_cobject); + +py_cobjecttypes(unique int obj : @py_cobject ref, + int typeof : @py_cobject ref); + +py_cobjectnames(unique int obj : @py_cobject ref, + varchar(1) name : string ref); + +/* Kind should be 0 for introspection, > 0 from source, as follows: + 1 from C extension source + */ +py_cobject_sources(int obj : @py_cobject ref, + int kind : int ref); + +py_cmembers_versioned(int object : @py_cobject ref, + varchar(1) name : string ref, + int member : @py_cobject ref, + varchar(1) version : string ref); + +py_citems(int object : @py_cobject ref, + int index : int ref, + int member : @py_cobject ref); + +ext_argtype(int funcid : @py_object ref, + int arg : int ref, + int typeid : @py_object ref); + +ext_rettype(int funcid : @py_object ref, + int typeid : @py_object ref); + +ext_proptype(int propid : @py_object ref, + int typeid : @py_object ref); + +ext_argreturn(int funcid : @py_object ref, + int arg : int ref); + +py_special_objects(unique int obj : @py_cobject ref, + unique varchar(1) name : string ref); + +py_decorated_object(int object : @py_object ref, + int level: int ref); + +@py_object = @py_cobject | @py_flow_node; + +@py_source_element = @py_ast_node | @container; + +/** The union of all Python database entities */ +@top = + @py_source_element | @py_object | @py_base_var | @location | @py_line | @py_comment | + @py_expr_parent | @py_expr_context | + @py_operator | @py_boolop | @py_cmpop | @py_unaryop | + @py_cmpop_list | @py_alias_list | @py_StringPart_list | @py_comprehension_list | @py_dict_item_list | @py_pattern_list | @py_stmt_list | @py_str_list | @py_type_parameter_list | + @externalDefect | @externalMetric | @externalDataElement | @duplication_or_similarity | @svnentry | + @xmllocatable | @yaml_locatable; diff --git a/python/downgrades/279cbb08d387ecd57ac177e87c94cfd5ca62f792/semmlecode.dbscheme b/python/downgrades/279cbb08d387ecd57ac177e87c94cfd5ca62f792/semmlecode.dbscheme new file mode 100644 index 00000000000..8d257a4a9bc --- /dev/null +++ b/python/downgrades/279cbb08d387ecd57ac177e87c94cfd5ca62f792/semmlecode.dbscheme @@ -0,0 +1,1282 @@ +/* + * This dbscheme is auto-generated by 'semmle/dbscheme_gen.py'. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py or + * by adding rules to dbscheme.template + */ + +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2020-07-02 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/*- DEPRECATED: External defects and metrics -*/ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/*- DEPRECATED: Snapshot date -*/ + +snapshotDate(unique date snapshotDate : date ref); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- DEPRECATED: Duplicate code -*/ + +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +@duplication_or_similarity = @duplication | @similarity + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/*- DEPRECATED: Version control data -*/ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Python dbscheme -*/ + +/* + * Line metrics + */ +py_codelines(int id : @py_scope ref, + int count : int ref); + +py_commentlines(int id : @py_scope ref, + int count : int ref); + +py_docstringlines(int id : @py_scope ref, + int count : int ref); + +py_alllines(int id : @py_scope ref, + int count : int ref); + +/**************************** + Python dbscheme +****************************/ + +@sourceline = @file | @py_Module | @xmllocatable; + +@location = @location_ast | @location_default ; + +locations_ast(unique int id: @location_ast, + int module: @py_Module ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +file_contents(unique int file: @file ref, string contents: string ref); + +py_module_path(int module: @py_Module ref, int file: @container ref); + +variable(unique int id : @py_variable, + int scope : @py_scope ref, + varchar(1) name : string ref); + +py_line_lengths(unique int id : @py_line, + int file: @py_Module ref, + int line : int ref, + int length : int ref); + +py_extracted_version(int module : @py_Module ref, + varchar(1) version : string ref); + +/* AUTO GENERATED PART STARTS HERE */ + + +/* AnnAssign.location = 0, location */ +/* AnnAssign.value = 1, expr */ +/* AnnAssign.annotation = 2, expr */ +/* AnnAssign.target = 3, expr */ + +/* Assert.location = 0, location */ +/* Assert.test = 1, expr */ +/* Assert.msg = 2, expr */ + +/* Assign.location = 0, location */ +/* Assign.value = 1, expr */ +/* Assign.targets = 2, expr_list */ + +/* AssignExpr.location = 0, location */ +/* AssignExpr.parenthesised = 1, bool */ +/* AssignExpr.value = 2, expr */ +/* AssignExpr.target = 3, expr */ + +/* Attribute.location = 0, location */ +/* Attribute.parenthesised = 1, bool */ +/* Attribute.value = 2, expr */ +/* Attribute.attr = 3, str */ +/* Attribute.ctx = 4, expr_context */ + +/* AugAssign.location = 0, location */ +/* AugAssign.operation = 1, BinOp */ + +/* Await.location = 0, location */ +/* Await.parenthesised = 1, bool */ +/* Await.value = 2, expr */ + +/* BinaryExpr.location = 0, location */ +/* BinaryExpr.parenthesised = 1, bool */ +/* BinaryExpr.left = 2, expr */ +/* BinaryExpr.op = 3, operator */ +/* BinaryExpr.right = 4, expr */ +/* BinaryExpr = AugAssign */ + +/* BoolExpr.location = 0, location */ +/* BoolExpr.parenthesised = 1, bool */ +/* BoolExpr.op = 2, boolop */ +/* BoolExpr.values = 3, expr_list */ + +/* Break.location = 0, location */ + +/* Bytes.location = 0, location */ +/* Bytes.parenthesised = 1, bool */ +/* Bytes.s = 2, bytes */ +/* Bytes.prefix = 3, bytes */ +/* Bytes.implicitly_concatenated_parts = 4, StringPart_list */ + +/* Call.location = 0, location */ +/* Call.parenthesised = 1, bool */ +/* Call.func = 2, expr */ +/* Call.positional_args = 3, expr_list */ +/* Call.named_args = 4, dict_item_list */ + +/* Case.location = 0, location */ +/* Case.pattern = 1, pattern */ +/* Case.guard = 2, expr */ +/* Case.body = 3, stmt_list */ + +/* Class.name = 0, str */ +/* Class.body = 1, stmt_list */ +/* Class = ClassExpr */ + +/* ClassExpr.location = 0, location */ +/* ClassExpr.parenthesised = 1, bool */ +/* ClassExpr.name = 2, str */ +/* ClassExpr.bases = 3, expr_list */ +/* ClassExpr.keywords = 4, dict_item_list */ +/* ClassExpr.inner_scope = 5, Class */ +/* ClassExpr.type_parameters = 6, type_parameter_list */ + +/* Compare.location = 0, location */ +/* Compare.parenthesised = 1, bool */ +/* Compare.left = 2, expr */ +/* Compare.ops = 3, cmpop_list */ +/* Compare.comparators = 4, expr_list */ + +/* Continue.location = 0, location */ + +/* Delete.location = 0, location */ +/* Delete.targets = 1, expr_list */ + +/* Dict.location = 0, location */ +/* Dict.parenthesised = 1, bool */ +/* Dict.items = 2, dict_item_list */ + +/* DictComp.location = 0, location */ +/* DictComp.parenthesised = 1, bool */ +/* DictComp.function = 2, Function */ +/* DictComp.iterable = 3, expr */ + +/* DictUnpacking.location = 0, location */ +/* DictUnpacking.value = 1, expr */ + +/* Ellipsis.location = 0, location */ +/* Ellipsis.parenthesised = 1, bool */ + +/* ExceptGroupStmt.location = 0, location */ +/* ExceptGroupStmt.type = 1, expr */ +/* ExceptGroupStmt.name = 2, expr */ +/* ExceptGroupStmt.body = 3, stmt_list */ + +/* ExceptStmt.location = 0, location */ +/* ExceptStmt.type = 1, expr */ +/* ExceptStmt.name = 2, expr */ +/* ExceptStmt.body = 3, stmt_list */ + +/* Exec.location = 0, location */ +/* Exec.body = 1, expr */ +/* Exec.globals = 2, expr */ +/* Exec.locals = 3, expr */ + +/* ExprStmt.location = 0, location */ +/* ExprStmt.value = 1, expr */ + +/* Filter.location = 0, location */ +/* Filter.parenthesised = 1, bool */ +/* Filter.value = 2, expr */ +/* Filter.filter = 3, expr */ + +/* For.location = 0, location */ +/* For.target = 1, expr */ +/* For.iter = 2, expr */ +/* For.body = 3, stmt_list */ +/* For.orelse = 4, stmt_list */ +/* For.is_async = 5, bool */ + +/* FormattedValue.location = 0, location */ +/* FormattedValue.parenthesised = 1, bool */ +/* FormattedValue.value = 2, expr */ +/* FormattedValue.conversion = 3, str */ +/* FormattedValue.format_spec = 4, JoinedStr */ + +/* Function.name = 0, str */ +/* Function.args = 1, parameter_list */ +/* Function.vararg = 2, expr */ +/* Function.kwonlyargs = 3, expr_list */ +/* Function.kwarg = 4, expr */ +/* Function.body = 5, stmt_list */ +/* Function.is_async = 6, bool */ +/* Function.type_parameters = 7, type_parameter_list */ +/* Function = FunctionParent */ + +/* FunctionExpr.location = 0, location */ +/* FunctionExpr.parenthesised = 1, bool */ +/* FunctionExpr.name = 2, str */ +/* FunctionExpr.args = 3, arguments */ +/* FunctionExpr.returns = 4, expr */ +/* FunctionExpr.inner_scope = 5, Function */ + +/* GeneratorExp.location = 0, location */ +/* GeneratorExp.parenthesised = 1, bool */ +/* GeneratorExp.function = 2, Function */ +/* GeneratorExp.iterable = 3, expr */ + +/* Global.location = 0, location */ +/* Global.names = 1, str_list */ + +/* Guard.location = 0, location */ +/* Guard.parenthesised = 1, bool */ +/* Guard.test = 2, expr */ + +/* If.location = 0, location */ +/* If.test = 1, expr */ +/* If.body = 2, stmt_list */ +/* If.orelse = 3, stmt_list */ + +/* IfExp.location = 0, location */ +/* IfExp.parenthesised = 1, bool */ +/* IfExp.test = 2, expr */ +/* IfExp.body = 3, expr */ +/* IfExp.orelse = 4, expr */ + +/* Import.location = 0, location */ +/* Import.names = 1, alias_list */ + +/* ImportExpr.location = 0, location */ +/* ImportExpr.parenthesised = 1, bool */ +/* ImportExpr.level = 2, int */ +/* ImportExpr.name = 3, str */ +/* ImportExpr.top = 4, bool */ + +/* ImportStar.location = 0, location */ +/* ImportStar.module = 1, expr */ + +/* ImportMember.location = 0, location */ +/* ImportMember.parenthesised = 1, bool */ +/* ImportMember.module = 2, expr */ +/* ImportMember.name = 3, str */ + +/* Fstring.location = 0, location */ +/* Fstring.parenthesised = 1, bool */ +/* Fstring.values = 2, expr_list */ +/* Fstring = FormattedValue */ + +/* JoinedTemplateString.location = 0, location */ +/* JoinedTemplateString.parenthesised = 1, bool */ +/* JoinedTemplateString.strings = 2, TemplateString_list */ + +/* KeyValuePair.location = 0, location */ +/* KeyValuePair.value = 1, expr */ +/* KeyValuePair.key = 2, expr */ + +/* Lambda.location = 0, location */ +/* Lambda.parenthesised = 1, bool */ +/* Lambda.args = 2, arguments */ +/* Lambda.inner_scope = 3, Function */ + +/* List.location = 0, location */ +/* List.parenthesised = 1, bool */ +/* List.elts = 2, expr_list */ +/* List.ctx = 3, expr_context */ + +/* ListComp.location = 0, location */ +/* ListComp.parenthesised = 1, bool */ +/* ListComp.function = 2, Function */ +/* ListComp.iterable = 3, expr */ +/* ListComp.generators = 4, comprehension_list */ +/* ListComp.elt = 5, expr */ + +/* MatchStmt.location = 0, location */ +/* MatchStmt.subject = 1, expr */ +/* MatchStmt.cases = 2, stmt_list */ + +/* MatchAsPattern.location = 0, location */ +/* MatchAsPattern.parenthesised = 1, bool */ +/* MatchAsPattern.pattern = 2, pattern */ +/* MatchAsPattern.alias = 3, expr */ + +/* MatchCapturePattern.location = 0, location */ +/* MatchCapturePattern.parenthesised = 1, bool */ +/* MatchCapturePattern.variable = 2, expr */ + +/* MatchClassPattern.location = 0, location */ +/* MatchClassPattern.parenthesised = 1, bool */ +/* MatchClassPattern.class = 2, expr */ +/* MatchClassPattern.class_name = 3, expr */ +/* MatchClassPattern.positional = 4, pattern_list */ +/* MatchClassPattern.keyword = 5, pattern_list */ + +/* MatchDoubleStarPattern.location = 0, location */ +/* MatchDoubleStarPattern.parenthesised = 1, bool */ +/* MatchDoubleStarPattern.target = 2, pattern */ + +/* MatchKeyValuePattern.location = 0, location */ +/* MatchKeyValuePattern.parenthesised = 1, bool */ +/* MatchKeyValuePattern.key = 2, pattern */ +/* MatchKeyValuePattern.value = 3, pattern */ + +/* MatchKeywordPattern.location = 0, location */ +/* MatchKeywordPattern.parenthesised = 1, bool */ +/* MatchKeywordPattern.attribute = 2, expr */ +/* MatchKeywordPattern.value = 3, pattern */ + +/* MatchLiteralPattern.location = 0, location */ +/* MatchLiteralPattern.parenthesised = 1, bool */ +/* MatchLiteralPattern.literal = 2, expr */ + +/* MatchMappingPattern.location = 0, location */ +/* MatchMappingPattern.parenthesised = 1, bool */ +/* MatchMappingPattern.mappings = 2, pattern_list */ + +/* MatchOrPattern.location = 0, location */ +/* MatchOrPattern.parenthesised = 1, bool */ +/* MatchOrPattern.patterns = 2, pattern_list */ + +/* MatchSequencePattern.location = 0, location */ +/* MatchSequencePattern.parenthesised = 1, bool */ +/* MatchSequencePattern.patterns = 2, pattern_list */ + +/* MatchStarPattern.location = 0, location */ +/* MatchStarPattern.parenthesised = 1, bool */ +/* MatchStarPattern.target = 2, pattern */ + +/* MatchValuePattern.location = 0, location */ +/* MatchValuePattern.parenthesised = 1, bool */ +/* MatchValuePattern.value = 2, expr */ + +/* MatchWildcardPattern.location = 0, location */ +/* MatchWildcardPattern.parenthesised = 1, bool */ + +/* Module.name = 0, str */ +/* Module.hash = 1, str */ +/* Module.body = 2, stmt_list */ +/* Module.kind = 3, str */ + +/* Name.location = 0, location */ +/* Name.parenthesised = 1, bool */ +/* Name.variable = 2, variable */ +/* Name.ctx = 3, expr_context */ +/* Name = ParameterList */ + +/* Nonlocal.location = 0, location */ +/* Nonlocal.names = 1, str_list */ + +/* Num.location = 0, location */ +/* Num.parenthesised = 1, bool */ +/* Num.n = 2, number */ +/* Num.text = 3, number */ + +/* ParamSpec.location = 0, location */ +/* ParamSpec.name = 1, expr */ +/* ParamSpec.default = 2, expr */ + +/* Pass.location = 0, location */ + +/* PlaceHolder.location = 0, location */ +/* PlaceHolder.parenthesised = 1, bool */ +/* PlaceHolder.variable = 2, variable */ +/* PlaceHolder.ctx = 3, expr_context */ + +/* Print.location = 0, location */ +/* Print.dest = 1, expr */ +/* Print.values = 2, expr_list */ +/* Print.nl = 3, bool */ + +/* Raise.location = 0, location */ +/* Raise.exc = 1, expr */ +/* Raise.cause = 2, expr */ +/* Raise.type = 3, expr */ +/* Raise.inst = 4, expr */ +/* Raise.tback = 5, expr */ + +/* Repr.location = 0, location */ +/* Repr.parenthesised = 1, bool */ +/* Repr.value = 2, expr */ + +/* Return.location = 0, location */ +/* Return.value = 1, expr */ + +/* Set.location = 0, location */ +/* Set.parenthesised = 1, bool */ +/* Set.elts = 2, expr_list */ + +/* SetComp.location = 0, location */ +/* SetComp.parenthesised = 1, bool */ +/* SetComp.function = 2, Function */ +/* SetComp.iterable = 3, expr */ + +/* Slice.location = 0, location */ +/* Slice.parenthesised = 1, bool */ +/* Slice.start = 2, expr */ +/* Slice.stop = 3, expr */ +/* Slice.step = 4, expr */ + +/* SpecialOperation.location = 0, location */ +/* SpecialOperation.parenthesised = 1, bool */ +/* SpecialOperation.name = 2, str */ +/* SpecialOperation.arguments = 3, expr_list */ + +/* Starred.location = 0, location */ +/* Starred.parenthesised = 1, bool */ +/* Starred.value = 2, expr */ +/* Starred.ctx = 3, expr_context */ + +/* Str.location = 0, location */ +/* Str.parenthesised = 1, bool */ +/* Str.s = 2, str */ +/* Str.prefix = 3, str */ +/* Str.implicitly_concatenated_parts = 4, StringPart_list */ + +/* StringPart.text = 0, str */ +/* StringPart.location = 1, location */ +/* StringPart = StringPartList */ +/* StringPartList = BytesOrStr */ + +/* Subscript.location = 0, location */ +/* Subscript.parenthesised = 1, bool */ +/* Subscript.value = 2, expr */ +/* Subscript.index = 3, expr */ +/* Subscript.ctx = 4, expr_context */ + +/* TemplateDottedNotation.location = 0, location */ +/* TemplateDottedNotation.parenthesised = 1, bool */ +/* TemplateDottedNotation.value = 2, expr */ +/* TemplateDottedNotation.attr = 3, str */ +/* TemplateDottedNotation.ctx = 4, expr_context */ + +/* TemplateString.location = 0, location */ +/* TemplateString.parenthesised = 1, bool */ +/* TemplateString.prefix = 2, str */ +/* TemplateString.values = 3, expr_list */ +/* TemplateString = TemplateStringList */ + +/* TemplateStringPart.location = 0, location */ +/* TemplateStringPart.parenthesised = 1, bool */ +/* TemplateStringPart.text = 2, str */ +/* TemplateStringList = JoinedTemplateString */ + +/* TemplateWrite.location = 0, location */ +/* TemplateWrite.value = 1, expr */ + +/* Try.location = 0, location */ +/* Try.body = 1, stmt_list */ +/* Try.orelse = 2, stmt_list */ +/* Try.handlers = 3, stmt_list */ +/* Try.finalbody = 4, stmt_list */ + +/* Tuple.location = 0, location */ +/* Tuple.parenthesised = 1, bool */ +/* Tuple.elts = 2, expr_list */ +/* Tuple.ctx = 3, expr_context */ +/* Tuple = ParameterList */ + +/* TypeAlias.location = 0, location */ +/* TypeAlias.name = 1, expr */ +/* TypeAlias.type_parameters = 2, type_parameter_list */ +/* TypeAlias.value = 3, expr */ + +/* TypeVar.location = 0, location */ +/* TypeVar.name = 1, expr */ +/* TypeVar.bound = 2, expr */ +/* TypeVar.default = 3, expr */ + +/* TypeVarTuple.location = 0, location */ +/* TypeVarTuple.name = 1, expr */ +/* TypeVarTuple.default = 2, expr */ + +/* UnaryExpr.location = 0, location */ +/* UnaryExpr.parenthesised = 1, bool */ +/* UnaryExpr.op = 2, unaryop */ +/* UnaryExpr.operand = 3, expr */ + +/* While.location = 0, location */ +/* While.test = 1, expr */ +/* While.body = 2, stmt_list */ +/* While.orelse = 3, stmt_list */ + +/* With.location = 0, location */ +/* With.context_expr = 1, expr */ +/* With.optional_vars = 2, expr */ +/* With.body = 3, stmt_list */ +/* With.is_async = 4, bool */ + +/* Yield.location = 0, location */ +/* Yield.parenthesised = 1, bool */ +/* Yield.value = 2, expr */ + +/* YieldFrom.location = 0, location */ +/* YieldFrom.parenthesised = 1, bool */ +/* YieldFrom.value = 2, expr */ + +/* Alias.value = 0, expr */ +/* Alias.asname = 1, expr */ +/* Alias = AliasList */ +/* AliasList = Import */ + +/* Arguments.kw_defaults = 0, expr_list */ +/* Arguments.defaults = 1, expr_list */ +/* Arguments.annotations = 2, expr_list */ +/* Arguments.varargannotation = 3, expr */ +/* Arguments.kwargannotation = 4, expr */ +/* Arguments.kw_annotations = 5, expr_list */ +/* Arguments = ArgumentsParent */ +/* boolean = BoolParent */ +/* Boolop = BoolExpr */ +/* string = Bytes */ +/* Cmpop = CmpopList */ +/* CmpopList = Compare */ + +/* Comprehension.location = 0, location */ +/* Comprehension.iter = 1, expr */ +/* Comprehension.target = 2, expr */ +/* Comprehension.ifs = 3, expr_list */ +/* Comprehension = ComprehensionList */ +/* ComprehensionList = ListComp */ +/* DictItem = DictItemList */ +/* DictItemList = DictItemListParent */ + +/* Expr.location = 0, location */ +/* Expr.parenthesised = 1, bool */ +/* Expr = ExprParent */ +/* ExprContext = ExprContextParent */ +/* ExprList = ExprListParent */ +/* int = ImportExpr */ + +/* Keyword.location = 0, location */ +/* Keyword.value = 1, expr */ +/* Keyword.arg = 2, str */ +/* Location = LocationParent */ +/* string = Num */ +/* Operator = BinaryExpr */ +/* ParameterList = Function */ + +/* Pattern.location = 0, location */ +/* Pattern.parenthesised = 1, bool */ +/* Pattern = PatternParent */ +/* PatternList = PatternListParent */ + +/* Stmt.location = 0, location */ +/* Stmt = StmtList */ +/* StmtList = StmtListParent */ +/* string = StrParent */ +/* StringList = StrListParent */ + +/* TypeParameter.location = 0, location */ +/* TypeParameter = TypeParameterList */ +/* TypeParameterList = TypeParameterListParent */ +/* Unaryop = UnaryExpr */ +/* Variable = VariableParent */ +py_Classes(unique int id : @py_Class, + unique int parent : @py_ClassExpr ref); + +py_Functions(unique int id : @py_Function, + unique int parent : @py_Function_parent ref); + +py_Modules(unique int id : @py_Module); + +py_StringParts(unique int id : @py_StringPart, + int parent : @py_StringPart_list ref, + int idx : int ref); + +py_StringPart_lists(unique int id : @py_StringPart_list, + unique int parent : @py_Bytes_or_Str ref); + +py_TemplateString_lists(unique int id : @py_TemplateString_list, + unique int parent : @py_JoinedTemplateString ref); + +py_aliases(unique int id : @py_alias, + int parent : @py_alias_list ref, + int idx : int ref); + +py_alias_lists(unique int id : @py_alias_list, + unique int parent : @py_Import ref); + +py_arguments(unique int id : @py_arguments, + unique int parent : @py_arguments_parent ref); + +py_bools(int parent : @py_bool_parent ref, + int idx : int ref); + +py_boolops(unique int id : @py_boolop, + int kind: int ref, + unique int parent : @py_BoolExpr ref); + +py_bytes(varchar(1) id : string ref, + int parent : @py_Bytes ref, + int idx : int ref); + +py_cmpops(unique int id : @py_cmpop, + int kind: int ref, + int parent : @py_cmpop_list ref, + int idx : int ref); + +py_cmpop_lists(unique int id : @py_cmpop_list, + unique int parent : @py_Compare ref); + +py_comprehensions(unique int id : @py_comprehension, + int parent : @py_comprehension_list ref, + int idx : int ref); + +py_comprehension_lists(unique int id : @py_comprehension_list, + unique int parent : @py_ListComp ref); + +py_dict_items(unique int id : @py_dict_item, + int kind: int ref, + int parent : @py_dict_item_list ref, + int idx : int ref); + +py_dict_item_lists(unique int id : @py_dict_item_list, + unique int parent : @py_dict_item_list_parent ref); + +py_exprs(unique int id : @py_expr, + int kind: int ref, + int parent : @py_expr_parent ref, + int idx : int ref); + +py_expr_contexts(unique int id : @py_expr_context, + int kind: int ref, + unique int parent : @py_expr_context_parent ref); + +py_expr_lists(unique int id : @py_expr_list, + int parent : @py_expr_list_parent ref, + int idx : int ref); + +py_ints(int id : int ref, + unique int parent : @py_ImportExpr ref); + +py_locations(unique int id : @location ref, + unique int parent : @py_location_parent ref); + +py_numbers(varchar(1) id : string ref, + int parent : @py_Num ref, + int idx : int ref); + +py_operators(unique int id : @py_operator, + int kind: int ref, + unique int parent : @py_BinaryExpr ref); + +py_parameter_lists(unique int id : @py_parameter_list, + unique int parent : @py_Function ref); + +py_patterns(unique int id : @py_pattern, + int kind: int ref, + int parent : @py_pattern_parent ref, + int idx : int ref); + +py_pattern_lists(unique int id : @py_pattern_list, + int parent : @py_pattern_list_parent ref, + int idx : int ref); + +py_stmts(unique int id : @py_stmt, + int kind: int ref, + int parent : @py_stmt_list ref, + int idx : int ref); + +py_stmt_lists(unique int id : @py_stmt_list, + int parent : @py_stmt_list_parent ref, + int idx : int ref); + +py_strs(varchar(1) id : string ref, + int parent : @py_str_parent ref, + int idx : int ref); + +py_str_lists(unique int id : @py_str_list, + unique int parent : @py_str_list_parent ref); + +py_type_parameters(unique int id : @py_type_parameter, + int kind: int ref, + int parent : @py_type_parameter_list ref, + int idx : int ref); + +py_type_parameter_lists(unique int id : @py_type_parameter_list, + unique int parent : @py_type_parameter_list_parent ref); + +py_unaryops(unique int id : @py_unaryop, + int kind: int ref, + unique int parent : @py_UnaryExpr ref); + +py_variables(int id : @py_variable ref, + unique int parent : @py_variable_parent ref); + +case @py_boolop.kind of + 0 = @py_And +| 1 = @py_Or; + +case @py_cmpop.kind of + 0 = @py_Eq +| 1 = @py_Gt +| 2 = @py_GtE +| 3 = @py_In +| 4 = @py_Is +| 5 = @py_IsNot +| 6 = @py_Lt +| 7 = @py_LtE +| 8 = @py_NotEq +| 9 = @py_NotIn; + +case @py_dict_item.kind of + 0 = @py_DictUnpacking +| 1 = @py_KeyValuePair +| 2 = @py_keyword; + +case @py_expr.kind of + 0 = @py_Attribute +| 1 = @py_BinaryExpr +| 2 = @py_BoolExpr +| 3 = @py_Bytes +| 4 = @py_Call +| 5 = @py_ClassExpr +| 6 = @py_Compare +| 7 = @py_Dict +| 8 = @py_DictComp +| 9 = @py_Ellipsis +| 10 = @py_FunctionExpr +| 11 = @py_GeneratorExp +| 12 = @py_IfExp +| 13 = @py_ImportExpr +| 14 = @py_ImportMember +| 15 = @py_Lambda +| 16 = @py_List +| 17 = @py_ListComp +| 18 = @py_Guard +| 19 = @py_Name +| 20 = @py_Num +| 21 = @py_Repr +| 22 = @py_Set +| 23 = @py_SetComp +| 24 = @py_Slice +| 25 = @py_Starred +| 26 = @py_Str +| 27 = @py_Subscript +| 28 = @py_Tuple +| 29 = @py_UnaryExpr +| 30 = @py_Yield +| 31 = @py_YieldFrom +| 32 = @py_TemplateDottedNotation +| 33 = @py_Filter +| 34 = @py_PlaceHolder +| 35 = @py_Await +| 36 = @py_Fstring +| 37 = @py_FormattedValue +| 38 = @py_AssignExpr +| 39 = @py_SpecialOperation +| 40 = @py_TemplateString +| 41 = @py_JoinedTemplateString +| 42 = @py_TemplateStringPart; + +case @py_expr_context.kind of + 0 = @py_AugLoad +| 1 = @py_AugStore +| 2 = @py_Del +| 3 = @py_Load +| 4 = @py_Param +| 5 = @py_Store; + +case @py_operator.kind of + 0 = @py_Add +| 1 = @py_BitAnd +| 2 = @py_BitOr +| 3 = @py_BitXor +| 4 = @py_Div +| 5 = @py_FloorDiv +| 6 = @py_LShift +| 7 = @py_Mod +| 8 = @py_Mult +| 9 = @py_Pow +| 10 = @py_RShift +| 11 = @py_Sub +| 12 = @py_MatMult; + +case @py_pattern.kind of + 0 = @py_MatchAsPattern +| 1 = @py_MatchOrPattern +| 2 = @py_MatchLiteralPattern +| 3 = @py_MatchCapturePattern +| 4 = @py_MatchWildcardPattern +| 5 = @py_MatchValuePattern +| 6 = @py_MatchSequencePattern +| 7 = @py_MatchStarPattern +| 8 = @py_MatchMappingPattern +| 9 = @py_MatchDoubleStarPattern +| 10 = @py_MatchKeyValuePattern +| 11 = @py_MatchClassPattern +| 12 = @py_MatchKeywordPattern; + +case @py_stmt.kind of + 0 = @py_Assert +| 1 = @py_Assign +| 2 = @py_AugAssign +| 3 = @py_Break +| 4 = @py_Continue +| 5 = @py_Delete +| 6 = @py_ExceptStmt +| 7 = @py_ExceptGroupStmt +| 8 = @py_Exec +| 9 = @py_Expr_stmt +| 10 = @py_For +| 11 = @py_Global +| 12 = @py_If +| 13 = @py_Import +| 14 = @py_ImportStar +| 15 = @py_MatchStmt +| 16 = @py_Case +| 17 = @py_Nonlocal +| 18 = @py_Pass +| 19 = @py_Print +| 20 = @py_Raise +| 21 = @py_Return +| 22 = @py_Try +| 23 = @py_While +| 24 = @py_With +| 25 = @py_TemplateWrite +| 26 = @py_AnnAssign +| 27 = @py_TypeAlias; + +case @py_type_parameter.kind of + 0 = @py_ParamSpec +| 1 = @py_TypeVar +| 2 = @py_TypeVarTuple; + +case @py_unaryop.kind of + 0 = @py_Invert +| 1 = @py_Not +| 2 = @py_UAdd +| 3 = @py_USub; + +@py_Bytes_or_Str = @py_Bytes | @py_Str; + +@py_Function_parent = @py_DictComp | @py_FunctionExpr | @py_GeneratorExp | @py_Lambda | @py_ListComp | @py_SetComp; + +@py_arguments_parent = @py_FunctionExpr | @py_Lambda; + +@py_ast_node = @py_Class | @py_Function | @py_Module | @py_StringPart | @py_comprehension | @py_dict_item | @py_expr | @py_pattern | @py_stmt | @py_type_parameter; + +@py_bool_parent = @py_For | @py_Function | @py_Print | @py_With | @py_expr | @py_pattern; + +@py_dict_item_list_parent = @py_Call | @py_ClassExpr | @py_Dict; + +@py_expr_context_parent = @py_Attribute | @py_List | @py_Name | @py_PlaceHolder | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_Tuple; + +@py_expr_list_parent = @py_Assign | @py_BoolExpr | @py_Call | @py_ClassExpr | @py_Compare | @py_Delete | @py_Fstring | @py_Function | @py_List | @py_Print | @py_Set | @py_SpecialOperation | @py_TemplateString | @py_Tuple | @py_arguments | @py_comprehension; + +@py_expr_or_stmt = @py_expr | @py_stmt; + +@py_expr_parent = @py_AnnAssign | @py_Assert | @py_Assign | @py_AssignExpr | @py_Attribute | @py_AugAssign | @py_Await | @py_BinaryExpr | @py_Call | @py_Case | @py_Compare | @py_DictComp | @py_DictUnpacking | @py_ExceptGroupStmt | @py_ExceptStmt | @py_Exec | @py_Expr_stmt | @py_Filter | @py_For | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_GeneratorExp | @py_Guard | @py_If | @py_IfExp | @py_ImportMember | @py_ImportStar | @py_KeyValuePair | @py_ListComp | @py_MatchAsPattern | @py_MatchCapturePattern | @py_MatchClassPattern | @py_MatchKeywordPattern | @py_MatchLiteralPattern | @py_MatchStmt | @py_MatchValuePattern | @py_ParamSpec | @py_Print | @py_Raise | @py_Repr | @py_Return | @py_SetComp | @py_Slice | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_TemplateString_list | @py_TemplateWrite | @py_TypeAlias | @py_TypeVar | @py_TypeVarTuple | @py_UnaryExpr | @py_While | @py_With | @py_Yield | @py_YieldFrom | @py_alias | @py_arguments | @py_comprehension | @py_expr_list | @py_keyword | @py_parameter_list; + +@py_location_parent = @py_DictUnpacking | @py_KeyValuePair | @py_StringPart | @py_comprehension | @py_expr | @py_keyword | @py_pattern | @py_stmt | @py_type_parameter; + +@py_parameter = @py_Name | @py_Tuple; + +@py_pattern_list_parent = @py_MatchClassPattern | @py_MatchMappingPattern | @py_MatchOrPattern | @py_MatchSequencePattern; + +@py_pattern_parent = @py_Case | @py_MatchAsPattern | @py_MatchDoubleStarPattern | @py_MatchKeyValuePattern | @py_MatchKeywordPattern | @py_MatchStarPattern | @py_pattern_list; + +@py_scope = @py_Class | @py_Function | @py_Module; + +@py_stmt_list_parent = @py_Case | @py_Class | @py_ExceptGroupStmt | @py_ExceptStmt | @py_For | @py_Function | @py_If | @py_MatchStmt | @py_Module | @py_Try | @py_While | @py_With; + +@py_str_list_parent = @py_Global | @py_Nonlocal; + +@py_str_parent = @py_Attribute | @py_Class | @py_ClassExpr | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_ImportExpr | @py_ImportMember | @py_Module | @py_SpecialOperation | @py_Str | @py_StringPart | @py_TemplateDottedNotation | @py_TemplateString | @py_TemplateStringPart | @py_keyword | @py_str_list; + +@py_type_parameter_list_parent = @py_ClassExpr | @py_Function | @py_TypeAlias; + +@py_variable_parent = @py_Name | @py_PlaceHolder; + + +/* + * End of auto-generated part + */ + + + +/* Map relative names to absolute names for imports */ +py_absolute_names(int module : @py_Module ref, + varchar(1) relname : string ref, + varchar(1) absname : string ref); + +py_exports(int id : @py_Module ref, + varchar(1) name : string ref); + +/* Successor information */ +py_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_true_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_exception_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_false_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_flow_bb_node(unique int flownode : @py_flow_node, + int realnode : @py_ast_node ref, + int basicblock : @py_flow_node ref, + int index : int ref); + +py_scope_flow(int flow : @py_flow_node ref, + int scope : @py_scope ref, + int kind : int ref); + +py_idoms(unique int node : @py_flow_node ref, + int immediate_dominator : @py_flow_node ref); + +py_ssa_phi(int phi : @py_ssa_var ref, + int arg: @py_ssa_var ref); + +py_ssa_var(unique int id : @py_ssa_var, + int var : @py_variable ref); + +py_ssa_use(int node: @py_flow_node ref, + int var : @py_ssa_var ref); + +py_ssa_defn(unique int id : @py_ssa_var ref, + int node: @py_flow_node ref); + +@py_base_var = @py_variable | @py_ssa_var; + +py_scopes(unique int node : @py_expr_or_stmt ref, + int scope : @py_scope ref); + +py_scope_location(unique int id : @location ref, + unique int scope : @py_scope ref); + +py_flags_versioned(varchar(1) name : string ref, + varchar(1) value : string ref, + varchar(1) version : string ref); + +py_syntax_error_versioned(unique int id : @location ref, + varchar(1) message : string ref, + varchar(1) version : string ref); + +py_comments(unique int id : @py_comment, + varchar(1) text : string ref, + unique int location : @location ref); + +/* Type information support */ + +py_cobjects(unique int obj : @py_cobject); + +py_cobjecttypes(unique int obj : @py_cobject ref, + int typeof : @py_cobject ref); + +py_cobjectnames(unique int obj : @py_cobject ref, + varchar(1) name : string ref); + +/* Kind should be 0 for introspection, > 0 from source, as follows: + 1 from C extension source + */ +py_cobject_sources(int obj : @py_cobject ref, + int kind : int ref); + +py_cmembers_versioned(int object : @py_cobject ref, + varchar(1) name : string ref, + int member : @py_cobject ref, + varchar(1) version : string ref); + +py_citems(int object : @py_cobject ref, + int index : int ref, + int member : @py_cobject ref); + +ext_argtype(int funcid : @py_object ref, + int arg : int ref, + int typeid : @py_object ref); + +ext_rettype(int funcid : @py_object ref, + int typeid : @py_object ref); + +ext_proptype(int propid : @py_object ref, + int typeid : @py_object ref); + +ext_argreturn(int funcid : @py_object ref, + int arg : int ref); + +py_special_objects(unique int obj : @py_cobject ref, + unique varchar(1) name : string ref); + +py_decorated_object(int object : @py_object ref, + int level: int ref); + +@py_object = @py_cobject | @py_flow_node; + +@py_source_element = @py_ast_node | @container; + +/** The union of all Python database entities */ +@top = + @py_source_element | @py_object | @py_base_var | @location | @py_line | @py_comment | + @py_expr_parent | @py_expr_context | + @py_operator | @py_boolop | @py_cmpop | @py_unaryop | + @py_cmpop_list | @py_alias_list | @py_StringPart_list | @py_comprehension_list | @py_dict_item_list | @py_pattern_list | @py_stmt_list | @py_str_list | @py_type_parameter_list | + @externalDefect | @externalMetric | @externalDataElement | @duplication_or_similarity | @svnentry | + @xmllocatable | @yaml_locatable; diff --git a/python/downgrades/279cbb08d387ecd57ac177e87c94cfd5ca62f792/upgrade.properties b/python/downgrades/279cbb08d387ecd57ac177e87c94cfd5ca62f792/upgrade.properties new file mode 100644 index 00000000000..00fae2d3bc6 --- /dev/null +++ b/python/downgrades/279cbb08d387ecd57ac177e87c94cfd5ca62f792/upgrade.properties @@ -0,0 +1,2 @@ +description: Sections for databaseMetadata and overlayChangedFiles +compatibility: full diff --git a/python/extractor/semmle/dbscheme.template b/python/extractor/semmle/dbscheme.template index 6b320aafab6..8c6b16d444d 100644 --- a/python/extractor/semmle/dbscheme.template +++ b/python/extractor/semmle/dbscheme.template @@ -40,20 +40,26 @@ externalData( string value : string ref ); +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + /*- Overlay support -*/ /** - * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, - * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, - * when building an overlay database, and these can be used by the discard predicates. + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. */ -databaseMetadata( - string metadataKey : string ref, - string value : string ref -); - overlayChangedFiles( - string path : string ref + string path: string ref ); /*- DEPRECATED: Snapshot date -*/ diff --git a/python/extractor/semmle/dbscheme_gen.py b/python/extractor/semmle/dbscheme_gen.py index 7c3a79fc371..cab51b9741e 100644 --- a/python/extractor/semmle/dbscheme_gen.py +++ b/python/extractor/semmle/dbscheme_gen.py @@ -62,6 +62,7 @@ def write(nodes, out): HEADER = '''/* * This dbscheme is auto-generated by '%s'. + * Run "make dbscheme" in python/extractor/ to regenerate. * WARNING: Any modifications to this file will be lost. * Relations can be changed by modifying master.py or * by adding rules to dbscheme.template diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index c18a0cc83d1..c1cb74c2e31 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,24 @@ +## 6.0.0 + +### Breaking Changes + +* All modules that depend on the points-to analysis have now been removed from the top level `python.qll` module. To access the points-to functionality, import the new `LegacyPointsTo` module. This also means that some predicates have been removed from various classes, for instance `Function.getFunctionObject()`. To access these predicates, import the `LegacyPointsTo` module and use the `FunctionWithPointsTo` class instead. Most cases follow this pattern, but there are a few exceptions: + * The `getLiteralObject` method on `ImmutableLiteral` subclasses has been replaced with a predicate `getLiteralObject(ImmutableLiteral l)` in the `LegacyPointsTo` module. + * The `getMetrics` method on `Function`, `Class`, and `Module` has been removed. To access metrics, import `LegacyPointsTo` and use the classes `FunctionMetrics`, etc. instead. + +### New Features + +* The extractor now supports the new, relaxed syntax `except A, B, C: ...` (which would previously have to be written as `except (A, B, C): ...`) as defined in [PEP-758](https://peps.python.org/pep-0758/). This may cause changes in results for code that uses Python 2-style exception binding (`except Foo, e: ...`). The more modern format, `except Foo as e: ...` (available since Python 2.6) is unaffected. +* The Python extractor now supports template strings as defined in [PEP-750](https://peps.python.org/pep-0750/), through the classes `TemplateString` and `JoinedTemplateString`. + +### Minor Analysis Improvements + +* When a code-scanning configuration specifies the `paths:` and/or `paths-ignore:` settings, these are now taken into account by the Python extractor's search for YAML files. +* The `compression.zstd` library (added in Python 3.14) is now supported by the `py/decompression-bomb` query. +* Added taint flow model and type model for `urllib.parseurl`. +* Remote flow sources for the `python-socketio` package have been modeled. +* Additional models for remote flow sources for `tornado.websocket.WebSocketHandler` have been added. + ## 5.0.4 No user-facing changes. diff --git a/python/ql/lib/change-notes/2025-11-22-tornado-websockets.md b/python/ql/lib/change-notes/2025-11-22-tornado-websockets.md deleted file mode 100644 index 8ba2ef549ee..00000000000 --- a/python/ql/lib/change-notes/2025-11-22-tornado-websockets.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Additional models for remote flow sources for `tornado.websocket.WebSocketHandler` have been added. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2025-11-26-model-ParseResult.md b/python/ql/lib/change-notes/2025-11-26-model-ParseResult.md deleted file mode 100644 index 9d461643613..00000000000 --- a/python/ql/lib/change-notes/2025-11-26-model-ParseResult.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added taint flow model and type model for `urllib.parseurl`. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2025-11-26-remove-top-level-points-to-import.md b/python/ql/lib/change-notes/2025-11-26-remove-top-level-points-to-import.md deleted file mode 100644 index 7122c217c41..00000000000 --- a/python/ql/lib/change-notes/2025-11-26-remove-top-level-points-to-import.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -category: breaking ---- - -* All modules that depend on the points-to analysis have now been removed from the top level `python.qll` module. To access the points-to functionality, import the new `LegacyPointsTo` module. This also means that some predicates have been removed from various classes, for instance `Function.getFunctionObject()`. To access these predicates, import the `LegacyPointsTo` module and use the `FunctionWithPointsTo` class instead. Most cases follow this pattern, but there are a few exceptions: - * The `getLiteralObject` method on `ImmutableLiteral` subclasses has been replaced with a predicate `getLiteralObject(ImmutableLiteral l)` in the `LegacyPointsTo` module. - * The `getMetrics` method on `Function`, `Class`, and `Module` has been removed. To access metrics, import `LegacyPointsTo` and use the classes `FunctionMetrics`, etc. instead. diff --git a/python/ql/lib/change-notes/2025-11-26-socketio.md b/python/ql/lib/change-notes/2025-11-26-socketio.md deleted file mode 100644 index e58bec0bbc1..00000000000 --- a/python/ql/lib/change-notes/2025-11-26-socketio.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Remote flow sources for the `python-socketio` package have been modeled. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2025-12-04-support-template-string-literals.md b/python/ql/lib/change-notes/2025-12-04-support-template-string-literals.md deleted file mode 100644 index 1c4fc58c09b..00000000000 --- a/python/ql/lib/change-notes/2025-12-04-support-template-string-literals.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* The Python extractor now supports template strings as defined in [PEP-750](https://peps.python.org/pep-0750/), through the classes `TemplateString` and `JoinedTemplateString`. diff --git a/python/ql/lib/change-notes/2025-12-09-add-modelling-of-zstd-compression.md b/python/ql/lib/change-notes/2025-12-09-add-modelling-of-zstd-compression.md deleted file mode 100644 index 8ec42ca0db2..00000000000 --- a/python/ql/lib/change-notes/2025-12-09-add-modelling-of-zstd-compression.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `compression.zstd` library (added in Python 3.14) is now supported by the `py/decompression-bomb` query. diff --git a/python/ql/lib/change-notes/2025-12-09-python-support-relaxed-except-syntax.md b/python/ql/lib/change-notes/2025-12-09-python-support-relaxed-except-syntax.md deleted file mode 100644 index 6187bc8136c..00000000000 --- a/python/ql/lib/change-notes/2025-12-09-python-support-relaxed-except-syntax.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* The extractor now supports the new, relaxed syntax `except A, B, C: ...` (which would previously have to be written as `except (A, B, C): ...`) as defined in [PEP-758](https://peps.python.org/pep-0758/). This may cause changes in results for code that uses Python 2-style exception binding (`except Foo, e: ...`). The more modern format, `except Foo as e: ...` (available since Python 2.6) is unaffected. diff --git a/python/ql/lib/change-notes/2026-01-06-paths-directives-ancillary-data.md b/python/ql/lib/change-notes/2026-01-06-paths-directives-ancillary-data.md deleted file mode 100644 index ed16f8b6565..00000000000 --- a/python/ql/lib/change-notes/2026-01-06-paths-directives-ancillary-data.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* When a code-scanning configuration specifies the `paths:` and/or `paths-ignore:` settings, these are now taken into account by the Python extractor's search for YAML files. diff --git a/python/ql/lib/change-notes/2026-01-20-support-ListElement-in-python-MaD.md b/python/ql/lib/change-notes/2026-01-20-support-ListElement-in-python-MaD.md new file mode 100644 index 00000000000..cf51193efe9 --- /dev/null +++ b/python/ql/lib/change-notes/2026-01-20-support-ListElement-in-python-MaD.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* It is now possible to refer to list elements in the Python models-as-data language, via the `ListElement` path. diff --git a/python/ql/lib/change-notes/released/6.0.0.md b/python/ql/lib/change-notes/released/6.0.0.md new file mode 100644 index 00000000000..57de62fb258 --- /dev/null +++ b/python/ql/lib/change-notes/released/6.0.0.md @@ -0,0 +1,20 @@ +## 6.0.0 + +### Breaking Changes + +* All modules that depend on the points-to analysis have now been removed from the top level `python.qll` module. To access the points-to functionality, import the new `LegacyPointsTo` module. This also means that some predicates have been removed from various classes, for instance `Function.getFunctionObject()`. To access these predicates, import the `LegacyPointsTo` module and use the `FunctionWithPointsTo` class instead. Most cases follow this pattern, but there are a few exceptions: + * The `getLiteralObject` method on `ImmutableLiteral` subclasses has been replaced with a predicate `getLiteralObject(ImmutableLiteral l)` in the `LegacyPointsTo` module. + * The `getMetrics` method on `Function`, `Class`, and `Module` has been removed. To access metrics, import `LegacyPointsTo` and use the classes `FunctionMetrics`, etc. instead. + +### New Features + +* The extractor now supports the new, relaxed syntax `except A, B, C: ...` (which would previously have to be written as `except (A, B, C): ...`) as defined in [PEP-758](https://peps.python.org/pep-0758/). This may cause changes in results for code that uses Python 2-style exception binding (`except Foo, e: ...`). The more modern format, `except Foo as e: ...` (available since Python 2.6) is unaffected. +* The Python extractor now supports template strings as defined in [PEP-750](https://peps.python.org/pep-0750/), through the classes `TemplateString` and `JoinedTemplateString`. + +### Minor Analysis Improvements + +* When a code-scanning configuration specifies the `paths:` and/or `paths-ignore:` settings, these are now taken into account by the Python extractor's search for YAML files. +* The `compression.zstd` library (added in Python 3.14) is now supported by the `py/decompression-bomb` query. +* Added taint flow model and type model for `urllib.parseurl`. +* Remote flow sources for the `python-socketio` package have been modeled. +* Additional models for remote flow sources for `tornado.websocket.WebSocketHandler` have been added. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 8cb0167caf0..f8c4fa43ccb 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.0.4 +lastReleaseVersion: 6.0.0 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 359cd85edc2..ff6a730a2ea 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 5.0.5-dev +version: 6.0.1-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsSpecific.qll b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsSpecific.qll index 1b22e8740bc..7adc24bab14 100644 --- a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -142,15 +142,13 @@ API::Node getExtraSuccessorFromNode(API::Node node, AccessPathTokenBase token) { // `DataFlow::DictionaryElementContent` just from seeing a subscript read, so we would // need to add that. (also need to handle things like `DictionaryElementAny` which // doesn't have any value for .getAnArgument()) - ( - token.getName() = "DictionaryElement" and - result = node.getSubscript(token.getAnArgument()) - or - token.getName() = "DictionaryElementAny" and - result = node.getASubscript() and - not exists(token.getAnArgument()) - // TODO: ListElement/SetElement/TupleElement - ) + token.getName() = "DictionaryElement" and + result = node.getSubscript(token.getAnArgument()) + or + token.getName() in ["DictionaryElementAny", "ListElement"] and + result = node.getASubscript() and + not exists(token.getAnArgument()) + // TODO: SetElement/TupleElement // Some features don't have MaD tokens yet, they would need to be added to API-graphs first. // - decorators ("DecoratedClass", "DecoratedMember", "DecoratedParameter") } @@ -261,7 +259,7 @@ predicate isExtraValidTokenNameInIdentifyingAccessPath(string name) { name = [ "Member", "Instance", "Awaited", "Call", "Method", "Subclass", "DictionaryElement", - "DictionaryElementAny" + "DictionaryElementAny", "ListElement" ] } @@ -270,7 +268,7 @@ predicate isExtraValidTokenNameInIdentifyingAccessPath(string name) { * in an identifying access path. */ predicate isExtraValidNoArgumentTokenInIdentifyingAccessPath(string name) { - name = ["Instance", "Awaited", "Call", "Subclass", "DictionaryElementAny"] + name = ["Instance", "Awaited", "Call", "Subclass", "DictionaryElementAny", "ListElement"] } /** diff --git a/python/ql/lib/semmlecode.python.dbscheme b/python/ql/lib/semmlecode.python.dbscheme index 8d257a4a9bc..279cbb08d38 100644 --- a/python/ql/lib/semmlecode.python.dbscheme +++ b/python/ql/lib/semmlecode.python.dbscheme @@ -1,5 +1,6 @@ /* * This dbscheme is auto-generated by 'semmle/dbscheme_gen.py'. + * Run "make dbscheme" in python/extractor/ to regenerate. * WARNING: Any modifications to this file will be lost. * Relations can be changed by modifying master.py or * by adding rules to dbscheme.template @@ -47,20 +48,26 @@ externalData( string value : string ref ); +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + /*- Overlay support -*/ /** - * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, - * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, - * when building an overlay database, and these can be used by the discard predicates. + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. */ -databaseMetadata( - string metadataKey : string ref, - string value : string ref -); - overlayChangedFiles( - string path : string ref + string path: string ref ); /*- DEPRECATED: Snapshot date -*/ diff --git a/python/ql/lib/upgrades/8d257a4a9bc78e39856d6cd33499389fc5148d4f/old.dbscheme b/python/ql/lib/upgrades/8d257a4a9bc78e39856d6cd33499389fc5148d4f/old.dbscheme new file mode 100644 index 00000000000..8d257a4a9bc --- /dev/null +++ b/python/ql/lib/upgrades/8d257a4a9bc78e39856d6cd33499389fc5148d4f/old.dbscheme @@ -0,0 +1,1282 @@ +/* + * This dbscheme is auto-generated by 'semmle/dbscheme_gen.py'. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py or + * by adding rules to dbscheme.template + */ + +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2020-07-02 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/*- DEPRECATED: External defects and metrics -*/ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/*- DEPRECATED: Snapshot date -*/ + +snapshotDate(unique date snapshotDate : date ref); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- DEPRECATED: Duplicate code -*/ + +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +@duplication_or_similarity = @duplication | @similarity + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/*- DEPRECATED: Version control data -*/ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Python dbscheme -*/ + +/* + * Line metrics + */ +py_codelines(int id : @py_scope ref, + int count : int ref); + +py_commentlines(int id : @py_scope ref, + int count : int ref); + +py_docstringlines(int id : @py_scope ref, + int count : int ref); + +py_alllines(int id : @py_scope ref, + int count : int ref); + +/**************************** + Python dbscheme +****************************/ + +@sourceline = @file | @py_Module | @xmllocatable; + +@location = @location_ast | @location_default ; + +locations_ast(unique int id: @location_ast, + int module: @py_Module ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +file_contents(unique int file: @file ref, string contents: string ref); + +py_module_path(int module: @py_Module ref, int file: @container ref); + +variable(unique int id : @py_variable, + int scope : @py_scope ref, + varchar(1) name : string ref); + +py_line_lengths(unique int id : @py_line, + int file: @py_Module ref, + int line : int ref, + int length : int ref); + +py_extracted_version(int module : @py_Module ref, + varchar(1) version : string ref); + +/* AUTO GENERATED PART STARTS HERE */ + + +/* AnnAssign.location = 0, location */ +/* AnnAssign.value = 1, expr */ +/* AnnAssign.annotation = 2, expr */ +/* AnnAssign.target = 3, expr */ + +/* Assert.location = 0, location */ +/* Assert.test = 1, expr */ +/* Assert.msg = 2, expr */ + +/* Assign.location = 0, location */ +/* Assign.value = 1, expr */ +/* Assign.targets = 2, expr_list */ + +/* AssignExpr.location = 0, location */ +/* AssignExpr.parenthesised = 1, bool */ +/* AssignExpr.value = 2, expr */ +/* AssignExpr.target = 3, expr */ + +/* Attribute.location = 0, location */ +/* Attribute.parenthesised = 1, bool */ +/* Attribute.value = 2, expr */ +/* Attribute.attr = 3, str */ +/* Attribute.ctx = 4, expr_context */ + +/* AugAssign.location = 0, location */ +/* AugAssign.operation = 1, BinOp */ + +/* Await.location = 0, location */ +/* Await.parenthesised = 1, bool */ +/* Await.value = 2, expr */ + +/* BinaryExpr.location = 0, location */ +/* BinaryExpr.parenthesised = 1, bool */ +/* BinaryExpr.left = 2, expr */ +/* BinaryExpr.op = 3, operator */ +/* BinaryExpr.right = 4, expr */ +/* BinaryExpr = AugAssign */ + +/* BoolExpr.location = 0, location */ +/* BoolExpr.parenthesised = 1, bool */ +/* BoolExpr.op = 2, boolop */ +/* BoolExpr.values = 3, expr_list */ + +/* Break.location = 0, location */ + +/* Bytes.location = 0, location */ +/* Bytes.parenthesised = 1, bool */ +/* Bytes.s = 2, bytes */ +/* Bytes.prefix = 3, bytes */ +/* Bytes.implicitly_concatenated_parts = 4, StringPart_list */ + +/* Call.location = 0, location */ +/* Call.parenthesised = 1, bool */ +/* Call.func = 2, expr */ +/* Call.positional_args = 3, expr_list */ +/* Call.named_args = 4, dict_item_list */ + +/* Case.location = 0, location */ +/* Case.pattern = 1, pattern */ +/* Case.guard = 2, expr */ +/* Case.body = 3, stmt_list */ + +/* Class.name = 0, str */ +/* Class.body = 1, stmt_list */ +/* Class = ClassExpr */ + +/* ClassExpr.location = 0, location */ +/* ClassExpr.parenthesised = 1, bool */ +/* ClassExpr.name = 2, str */ +/* ClassExpr.bases = 3, expr_list */ +/* ClassExpr.keywords = 4, dict_item_list */ +/* ClassExpr.inner_scope = 5, Class */ +/* ClassExpr.type_parameters = 6, type_parameter_list */ + +/* Compare.location = 0, location */ +/* Compare.parenthesised = 1, bool */ +/* Compare.left = 2, expr */ +/* Compare.ops = 3, cmpop_list */ +/* Compare.comparators = 4, expr_list */ + +/* Continue.location = 0, location */ + +/* Delete.location = 0, location */ +/* Delete.targets = 1, expr_list */ + +/* Dict.location = 0, location */ +/* Dict.parenthesised = 1, bool */ +/* Dict.items = 2, dict_item_list */ + +/* DictComp.location = 0, location */ +/* DictComp.parenthesised = 1, bool */ +/* DictComp.function = 2, Function */ +/* DictComp.iterable = 3, expr */ + +/* DictUnpacking.location = 0, location */ +/* DictUnpacking.value = 1, expr */ + +/* Ellipsis.location = 0, location */ +/* Ellipsis.parenthesised = 1, bool */ + +/* ExceptGroupStmt.location = 0, location */ +/* ExceptGroupStmt.type = 1, expr */ +/* ExceptGroupStmt.name = 2, expr */ +/* ExceptGroupStmt.body = 3, stmt_list */ + +/* ExceptStmt.location = 0, location */ +/* ExceptStmt.type = 1, expr */ +/* ExceptStmt.name = 2, expr */ +/* ExceptStmt.body = 3, stmt_list */ + +/* Exec.location = 0, location */ +/* Exec.body = 1, expr */ +/* Exec.globals = 2, expr */ +/* Exec.locals = 3, expr */ + +/* ExprStmt.location = 0, location */ +/* ExprStmt.value = 1, expr */ + +/* Filter.location = 0, location */ +/* Filter.parenthesised = 1, bool */ +/* Filter.value = 2, expr */ +/* Filter.filter = 3, expr */ + +/* For.location = 0, location */ +/* For.target = 1, expr */ +/* For.iter = 2, expr */ +/* For.body = 3, stmt_list */ +/* For.orelse = 4, stmt_list */ +/* For.is_async = 5, bool */ + +/* FormattedValue.location = 0, location */ +/* FormattedValue.parenthesised = 1, bool */ +/* FormattedValue.value = 2, expr */ +/* FormattedValue.conversion = 3, str */ +/* FormattedValue.format_spec = 4, JoinedStr */ + +/* Function.name = 0, str */ +/* Function.args = 1, parameter_list */ +/* Function.vararg = 2, expr */ +/* Function.kwonlyargs = 3, expr_list */ +/* Function.kwarg = 4, expr */ +/* Function.body = 5, stmt_list */ +/* Function.is_async = 6, bool */ +/* Function.type_parameters = 7, type_parameter_list */ +/* Function = FunctionParent */ + +/* FunctionExpr.location = 0, location */ +/* FunctionExpr.parenthesised = 1, bool */ +/* FunctionExpr.name = 2, str */ +/* FunctionExpr.args = 3, arguments */ +/* FunctionExpr.returns = 4, expr */ +/* FunctionExpr.inner_scope = 5, Function */ + +/* GeneratorExp.location = 0, location */ +/* GeneratorExp.parenthesised = 1, bool */ +/* GeneratorExp.function = 2, Function */ +/* GeneratorExp.iterable = 3, expr */ + +/* Global.location = 0, location */ +/* Global.names = 1, str_list */ + +/* Guard.location = 0, location */ +/* Guard.parenthesised = 1, bool */ +/* Guard.test = 2, expr */ + +/* If.location = 0, location */ +/* If.test = 1, expr */ +/* If.body = 2, stmt_list */ +/* If.orelse = 3, stmt_list */ + +/* IfExp.location = 0, location */ +/* IfExp.parenthesised = 1, bool */ +/* IfExp.test = 2, expr */ +/* IfExp.body = 3, expr */ +/* IfExp.orelse = 4, expr */ + +/* Import.location = 0, location */ +/* Import.names = 1, alias_list */ + +/* ImportExpr.location = 0, location */ +/* ImportExpr.parenthesised = 1, bool */ +/* ImportExpr.level = 2, int */ +/* ImportExpr.name = 3, str */ +/* ImportExpr.top = 4, bool */ + +/* ImportStar.location = 0, location */ +/* ImportStar.module = 1, expr */ + +/* ImportMember.location = 0, location */ +/* ImportMember.parenthesised = 1, bool */ +/* ImportMember.module = 2, expr */ +/* ImportMember.name = 3, str */ + +/* Fstring.location = 0, location */ +/* Fstring.parenthesised = 1, bool */ +/* Fstring.values = 2, expr_list */ +/* Fstring = FormattedValue */ + +/* JoinedTemplateString.location = 0, location */ +/* JoinedTemplateString.parenthesised = 1, bool */ +/* JoinedTemplateString.strings = 2, TemplateString_list */ + +/* KeyValuePair.location = 0, location */ +/* KeyValuePair.value = 1, expr */ +/* KeyValuePair.key = 2, expr */ + +/* Lambda.location = 0, location */ +/* Lambda.parenthesised = 1, bool */ +/* Lambda.args = 2, arguments */ +/* Lambda.inner_scope = 3, Function */ + +/* List.location = 0, location */ +/* List.parenthesised = 1, bool */ +/* List.elts = 2, expr_list */ +/* List.ctx = 3, expr_context */ + +/* ListComp.location = 0, location */ +/* ListComp.parenthesised = 1, bool */ +/* ListComp.function = 2, Function */ +/* ListComp.iterable = 3, expr */ +/* ListComp.generators = 4, comprehension_list */ +/* ListComp.elt = 5, expr */ + +/* MatchStmt.location = 0, location */ +/* MatchStmt.subject = 1, expr */ +/* MatchStmt.cases = 2, stmt_list */ + +/* MatchAsPattern.location = 0, location */ +/* MatchAsPattern.parenthesised = 1, bool */ +/* MatchAsPattern.pattern = 2, pattern */ +/* MatchAsPattern.alias = 3, expr */ + +/* MatchCapturePattern.location = 0, location */ +/* MatchCapturePattern.parenthesised = 1, bool */ +/* MatchCapturePattern.variable = 2, expr */ + +/* MatchClassPattern.location = 0, location */ +/* MatchClassPattern.parenthesised = 1, bool */ +/* MatchClassPattern.class = 2, expr */ +/* MatchClassPattern.class_name = 3, expr */ +/* MatchClassPattern.positional = 4, pattern_list */ +/* MatchClassPattern.keyword = 5, pattern_list */ + +/* MatchDoubleStarPattern.location = 0, location */ +/* MatchDoubleStarPattern.parenthesised = 1, bool */ +/* MatchDoubleStarPattern.target = 2, pattern */ + +/* MatchKeyValuePattern.location = 0, location */ +/* MatchKeyValuePattern.parenthesised = 1, bool */ +/* MatchKeyValuePattern.key = 2, pattern */ +/* MatchKeyValuePattern.value = 3, pattern */ + +/* MatchKeywordPattern.location = 0, location */ +/* MatchKeywordPattern.parenthesised = 1, bool */ +/* MatchKeywordPattern.attribute = 2, expr */ +/* MatchKeywordPattern.value = 3, pattern */ + +/* MatchLiteralPattern.location = 0, location */ +/* MatchLiteralPattern.parenthesised = 1, bool */ +/* MatchLiteralPattern.literal = 2, expr */ + +/* MatchMappingPattern.location = 0, location */ +/* MatchMappingPattern.parenthesised = 1, bool */ +/* MatchMappingPattern.mappings = 2, pattern_list */ + +/* MatchOrPattern.location = 0, location */ +/* MatchOrPattern.parenthesised = 1, bool */ +/* MatchOrPattern.patterns = 2, pattern_list */ + +/* MatchSequencePattern.location = 0, location */ +/* MatchSequencePattern.parenthesised = 1, bool */ +/* MatchSequencePattern.patterns = 2, pattern_list */ + +/* MatchStarPattern.location = 0, location */ +/* MatchStarPattern.parenthesised = 1, bool */ +/* MatchStarPattern.target = 2, pattern */ + +/* MatchValuePattern.location = 0, location */ +/* MatchValuePattern.parenthesised = 1, bool */ +/* MatchValuePattern.value = 2, expr */ + +/* MatchWildcardPattern.location = 0, location */ +/* MatchWildcardPattern.parenthesised = 1, bool */ + +/* Module.name = 0, str */ +/* Module.hash = 1, str */ +/* Module.body = 2, stmt_list */ +/* Module.kind = 3, str */ + +/* Name.location = 0, location */ +/* Name.parenthesised = 1, bool */ +/* Name.variable = 2, variable */ +/* Name.ctx = 3, expr_context */ +/* Name = ParameterList */ + +/* Nonlocal.location = 0, location */ +/* Nonlocal.names = 1, str_list */ + +/* Num.location = 0, location */ +/* Num.parenthesised = 1, bool */ +/* Num.n = 2, number */ +/* Num.text = 3, number */ + +/* ParamSpec.location = 0, location */ +/* ParamSpec.name = 1, expr */ +/* ParamSpec.default = 2, expr */ + +/* Pass.location = 0, location */ + +/* PlaceHolder.location = 0, location */ +/* PlaceHolder.parenthesised = 1, bool */ +/* PlaceHolder.variable = 2, variable */ +/* PlaceHolder.ctx = 3, expr_context */ + +/* Print.location = 0, location */ +/* Print.dest = 1, expr */ +/* Print.values = 2, expr_list */ +/* Print.nl = 3, bool */ + +/* Raise.location = 0, location */ +/* Raise.exc = 1, expr */ +/* Raise.cause = 2, expr */ +/* Raise.type = 3, expr */ +/* Raise.inst = 4, expr */ +/* Raise.tback = 5, expr */ + +/* Repr.location = 0, location */ +/* Repr.parenthesised = 1, bool */ +/* Repr.value = 2, expr */ + +/* Return.location = 0, location */ +/* Return.value = 1, expr */ + +/* Set.location = 0, location */ +/* Set.parenthesised = 1, bool */ +/* Set.elts = 2, expr_list */ + +/* SetComp.location = 0, location */ +/* SetComp.parenthesised = 1, bool */ +/* SetComp.function = 2, Function */ +/* SetComp.iterable = 3, expr */ + +/* Slice.location = 0, location */ +/* Slice.parenthesised = 1, bool */ +/* Slice.start = 2, expr */ +/* Slice.stop = 3, expr */ +/* Slice.step = 4, expr */ + +/* SpecialOperation.location = 0, location */ +/* SpecialOperation.parenthesised = 1, bool */ +/* SpecialOperation.name = 2, str */ +/* SpecialOperation.arguments = 3, expr_list */ + +/* Starred.location = 0, location */ +/* Starred.parenthesised = 1, bool */ +/* Starred.value = 2, expr */ +/* Starred.ctx = 3, expr_context */ + +/* Str.location = 0, location */ +/* Str.parenthesised = 1, bool */ +/* Str.s = 2, str */ +/* Str.prefix = 3, str */ +/* Str.implicitly_concatenated_parts = 4, StringPart_list */ + +/* StringPart.text = 0, str */ +/* StringPart.location = 1, location */ +/* StringPart = StringPartList */ +/* StringPartList = BytesOrStr */ + +/* Subscript.location = 0, location */ +/* Subscript.parenthesised = 1, bool */ +/* Subscript.value = 2, expr */ +/* Subscript.index = 3, expr */ +/* Subscript.ctx = 4, expr_context */ + +/* TemplateDottedNotation.location = 0, location */ +/* TemplateDottedNotation.parenthesised = 1, bool */ +/* TemplateDottedNotation.value = 2, expr */ +/* TemplateDottedNotation.attr = 3, str */ +/* TemplateDottedNotation.ctx = 4, expr_context */ + +/* TemplateString.location = 0, location */ +/* TemplateString.parenthesised = 1, bool */ +/* TemplateString.prefix = 2, str */ +/* TemplateString.values = 3, expr_list */ +/* TemplateString = TemplateStringList */ + +/* TemplateStringPart.location = 0, location */ +/* TemplateStringPart.parenthesised = 1, bool */ +/* TemplateStringPart.text = 2, str */ +/* TemplateStringList = JoinedTemplateString */ + +/* TemplateWrite.location = 0, location */ +/* TemplateWrite.value = 1, expr */ + +/* Try.location = 0, location */ +/* Try.body = 1, stmt_list */ +/* Try.orelse = 2, stmt_list */ +/* Try.handlers = 3, stmt_list */ +/* Try.finalbody = 4, stmt_list */ + +/* Tuple.location = 0, location */ +/* Tuple.parenthesised = 1, bool */ +/* Tuple.elts = 2, expr_list */ +/* Tuple.ctx = 3, expr_context */ +/* Tuple = ParameterList */ + +/* TypeAlias.location = 0, location */ +/* TypeAlias.name = 1, expr */ +/* TypeAlias.type_parameters = 2, type_parameter_list */ +/* TypeAlias.value = 3, expr */ + +/* TypeVar.location = 0, location */ +/* TypeVar.name = 1, expr */ +/* TypeVar.bound = 2, expr */ +/* TypeVar.default = 3, expr */ + +/* TypeVarTuple.location = 0, location */ +/* TypeVarTuple.name = 1, expr */ +/* TypeVarTuple.default = 2, expr */ + +/* UnaryExpr.location = 0, location */ +/* UnaryExpr.parenthesised = 1, bool */ +/* UnaryExpr.op = 2, unaryop */ +/* UnaryExpr.operand = 3, expr */ + +/* While.location = 0, location */ +/* While.test = 1, expr */ +/* While.body = 2, stmt_list */ +/* While.orelse = 3, stmt_list */ + +/* With.location = 0, location */ +/* With.context_expr = 1, expr */ +/* With.optional_vars = 2, expr */ +/* With.body = 3, stmt_list */ +/* With.is_async = 4, bool */ + +/* Yield.location = 0, location */ +/* Yield.parenthesised = 1, bool */ +/* Yield.value = 2, expr */ + +/* YieldFrom.location = 0, location */ +/* YieldFrom.parenthesised = 1, bool */ +/* YieldFrom.value = 2, expr */ + +/* Alias.value = 0, expr */ +/* Alias.asname = 1, expr */ +/* Alias = AliasList */ +/* AliasList = Import */ + +/* Arguments.kw_defaults = 0, expr_list */ +/* Arguments.defaults = 1, expr_list */ +/* Arguments.annotations = 2, expr_list */ +/* Arguments.varargannotation = 3, expr */ +/* Arguments.kwargannotation = 4, expr */ +/* Arguments.kw_annotations = 5, expr_list */ +/* Arguments = ArgumentsParent */ +/* boolean = BoolParent */ +/* Boolop = BoolExpr */ +/* string = Bytes */ +/* Cmpop = CmpopList */ +/* CmpopList = Compare */ + +/* Comprehension.location = 0, location */ +/* Comprehension.iter = 1, expr */ +/* Comprehension.target = 2, expr */ +/* Comprehension.ifs = 3, expr_list */ +/* Comprehension = ComprehensionList */ +/* ComprehensionList = ListComp */ +/* DictItem = DictItemList */ +/* DictItemList = DictItemListParent */ + +/* Expr.location = 0, location */ +/* Expr.parenthesised = 1, bool */ +/* Expr = ExprParent */ +/* ExprContext = ExprContextParent */ +/* ExprList = ExprListParent */ +/* int = ImportExpr */ + +/* Keyword.location = 0, location */ +/* Keyword.value = 1, expr */ +/* Keyword.arg = 2, str */ +/* Location = LocationParent */ +/* string = Num */ +/* Operator = BinaryExpr */ +/* ParameterList = Function */ + +/* Pattern.location = 0, location */ +/* Pattern.parenthesised = 1, bool */ +/* Pattern = PatternParent */ +/* PatternList = PatternListParent */ + +/* Stmt.location = 0, location */ +/* Stmt = StmtList */ +/* StmtList = StmtListParent */ +/* string = StrParent */ +/* StringList = StrListParent */ + +/* TypeParameter.location = 0, location */ +/* TypeParameter = TypeParameterList */ +/* TypeParameterList = TypeParameterListParent */ +/* Unaryop = UnaryExpr */ +/* Variable = VariableParent */ +py_Classes(unique int id : @py_Class, + unique int parent : @py_ClassExpr ref); + +py_Functions(unique int id : @py_Function, + unique int parent : @py_Function_parent ref); + +py_Modules(unique int id : @py_Module); + +py_StringParts(unique int id : @py_StringPart, + int parent : @py_StringPart_list ref, + int idx : int ref); + +py_StringPart_lists(unique int id : @py_StringPart_list, + unique int parent : @py_Bytes_or_Str ref); + +py_TemplateString_lists(unique int id : @py_TemplateString_list, + unique int parent : @py_JoinedTemplateString ref); + +py_aliases(unique int id : @py_alias, + int parent : @py_alias_list ref, + int idx : int ref); + +py_alias_lists(unique int id : @py_alias_list, + unique int parent : @py_Import ref); + +py_arguments(unique int id : @py_arguments, + unique int parent : @py_arguments_parent ref); + +py_bools(int parent : @py_bool_parent ref, + int idx : int ref); + +py_boolops(unique int id : @py_boolop, + int kind: int ref, + unique int parent : @py_BoolExpr ref); + +py_bytes(varchar(1) id : string ref, + int parent : @py_Bytes ref, + int idx : int ref); + +py_cmpops(unique int id : @py_cmpop, + int kind: int ref, + int parent : @py_cmpop_list ref, + int idx : int ref); + +py_cmpop_lists(unique int id : @py_cmpop_list, + unique int parent : @py_Compare ref); + +py_comprehensions(unique int id : @py_comprehension, + int parent : @py_comprehension_list ref, + int idx : int ref); + +py_comprehension_lists(unique int id : @py_comprehension_list, + unique int parent : @py_ListComp ref); + +py_dict_items(unique int id : @py_dict_item, + int kind: int ref, + int parent : @py_dict_item_list ref, + int idx : int ref); + +py_dict_item_lists(unique int id : @py_dict_item_list, + unique int parent : @py_dict_item_list_parent ref); + +py_exprs(unique int id : @py_expr, + int kind: int ref, + int parent : @py_expr_parent ref, + int idx : int ref); + +py_expr_contexts(unique int id : @py_expr_context, + int kind: int ref, + unique int parent : @py_expr_context_parent ref); + +py_expr_lists(unique int id : @py_expr_list, + int parent : @py_expr_list_parent ref, + int idx : int ref); + +py_ints(int id : int ref, + unique int parent : @py_ImportExpr ref); + +py_locations(unique int id : @location ref, + unique int parent : @py_location_parent ref); + +py_numbers(varchar(1) id : string ref, + int parent : @py_Num ref, + int idx : int ref); + +py_operators(unique int id : @py_operator, + int kind: int ref, + unique int parent : @py_BinaryExpr ref); + +py_parameter_lists(unique int id : @py_parameter_list, + unique int parent : @py_Function ref); + +py_patterns(unique int id : @py_pattern, + int kind: int ref, + int parent : @py_pattern_parent ref, + int idx : int ref); + +py_pattern_lists(unique int id : @py_pattern_list, + int parent : @py_pattern_list_parent ref, + int idx : int ref); + +py_stmts(unique int id : @py_stmt, + int kind: int ref, + int parent : @py_stmt_list ref, + int idx : int ref); + +py_stmt_lists(unique int id : @py_stmt_list, + int parent : @py_stmt_list_parent ref, + int idx : int ref); + +py_strs(varchar(1) id : string ref, + int parent : @py_str_parent ref, + int idx : int ref); + +py_str_lists(unique int id : @py_str_list, + unique int parent : @py_str_list_parent ref); + +py_type_parameters(unique int id : @py_type_parameter, + int kind: int ref, + int parent : @py_type_parameter_list ref, + int idx : int ref); + +py_type_parameter_lists(unique int id : @py_type_parameter_list, + unique int parent : @py_type_parameter_list_parent ref); + +py_unaryops(unique int id : @py_unaryop, + int kind: int ref, + unique int parent : @py_UnaryExpr ref); + +py_variables(int id : @py_variable ref, + unique int parent : @py_variable_parent ref); + +case @py_boolop.kind of + 0 = @py_And +| 1 = @py_Or; + +case @py_cmpop.kind of + 0 = @py_Eq +| 1 = @py_Gt +| 2 = @py_GtE +| 3 = @py_In +| 4 = @py_Is +| 5 = @py_IsNot +| 6 = @py_Lt +| 7 = @py_LtE +| 8 = @py_NotEq +| 9 = @py_NotIn; + +case @py_dict_item.kind of + 0 = @py_DictUnpacking +| 1 = @py_KeyValuePair +| 2 = @py_keyword; + +case @py_expr.kind of + 0 = @py_Attribute +| 1 = @py_BinaryExpr +| 2 = @py_BoolExpr +| 3 = @py_Bytes +| 4 = @py_Call +| 5 = @py_ClassExpr +| 6 = @py_Compare +| 7 = @py_Dict +| 8 = @py_DictComp +| 9 = @py_Ellipsis +| 10 = @py_FunctionExpr +| 11 = @py_GeneratorExp +| 12 = @py_IfExp +| 13 = @py_ImportExpr +| 14 = @py_ImportMember +| 15 = @py_Lambda +| 16 = @py_List +| 17 = @py_ListComp +| 18 = @py_Guard +| 19 = @py_Name +| 20 = @py_Num +| 21 = @py_Repr +| 22 = @py_Set +| 23 = @py_SetComp +| 24 = @py_Slice +| 25 = @py_Starred +| 26 = @py_Str +| 27 = @py_Subscript +| 28 = @py_Tuple +| 29 = @py_UnaryExpr +| 30 = @py_Yield +| 31 = @py_YieldFrom +| 32 = @py_TemplateDottedNotation +| 33 = @py_Filter +| 34 = @py_PlaceHolder +| 35 = @py_Await +| 36 = @py_Fstring +| 37 = @py_FormattedValue +| 38 = @py_AssignExpr +| 39 = @py_SpecialOperation +| 40 = @py_TemplateString +| 41 = @py_JoinedTemplateString +| 42 = @py_TemplateStringPart; + +case @py_expr_context.kind of + 0 = @py_AugLoad +| 1 = @py_AugStore +| 2 = @py_Del +| 3 = @py_Load +| 4 = @py_Param +| 5 = @py_Store; + +case @py_operator.kind of + 0 = @py_Add +| 1 = @py_BitAnd +| 2 = @py_BitOr +| 3 = @py_BitXor +| 4 = @py_Div +| 5 = @py_FloorDiv +| 6 = @py_LShift +| 7 = @py_Mod +| 8 = @py_Mult +| 9 = @py_Pow +| 10 = @py_RShift +| 11 = @py_Sub +| 12 = @py_MatMult; + +case @py_pattern.kind of + 0 = @py_MatchAsPattern +| 1 = @py_MatchOrPattern +| 2 = @py_MatchLiteralPattern +| 3 = @py_MatchCapturePattern +| 4 = @py_MatchWildcardPattern +| 5 = @py_MatchValuePattern +| 6 = @py_MatchSequencePattern +| 7 = @py_MatchStarPattern +| 8 = @py_MatchMappingPattern +| 9 = @py_MatchDoubleStarPattern +| 10 = @py_MatchKeyValuePattern +| 11 = @py_MatchClassPattern +| 12 = @py_MatchKeywordPattern; + +case @py_stmt.kind of + 0 = @py_Assert +| 1 = @py_Assign +| 2 = @py_AugAssign +| 3 = @py_Break +| 4 = @py_Continue +| 5 = @py_Delete +| 6 = @py_ExceptStmt +| 7 = @py_ExceptGroupStmt +| 8 = @py_Exec +| 9 = @py_Expr_stmt +| 10 = @py_For +| 11 = @py_Global +| 12 = @py_If +| 13 = @py_Import +| 14 = @py_ImportStar +| 15 = @py_MatchStmt +| 16 = @py_Case +| 17 = @py_Nonlocal +| 18 = @py_Pass +| 19 = @py_Print +| 20 = @py_Raise +| 21 = @py_Return +| 22 = @py_Try +| 23 = @py_While +| 24 = @py_With +| 25 = @py_TemplateWrite +| 26 = @py_AnnAssign +| 27 = @py_TypeAlias; + +case @py_type_parameter.kind of + 0 = @py_ParamSpec +| 1 = @py_TypeVar +| 2 = @py_TypeVarTuple; + +case @py_unaryop.kind of + 0 = @py_Invert +| 1 = @py_Not +| 2 = @py_UAdd +| 3 = @py_USub; + +@py_Bytes_or_Str = @py_Bytes | @py_Str; + +@py_Function_parent = @py_DictComp | @py_FunctionExpr | @py_GeneratorExp | @py_Lambda | @py_ListComp | @py_SetComp; + +@py_arguments_parent = @py_FunctionExpr | @py_Lambda; + +@py_ast_node = @py_Class | @py_Function | @py_Module | @py_StringPart | @py_comprehension | @py_dict_item | @py_expr | @py_pattern | @py_stmt | @py_type_parameter; + +@py_bool_parent = @py_For | @py_Function | @py_Print | @py_With | @py_expr | @py_pattern; + +@py_dict_item_list_parent = @py_Call | @py_ClassExpr | @py_Dict; + +@py_expr_context_parent = @py_Attribute | @py_List | @py_Name | @py_PlaceHolder | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_Tuple; + +@py_expr_list_parent = @py_Assign | @py_BoolExpr | @py_Call | @py_ClassExpr | @py_Compare | @py_Delete | @py_Fstring | @py_Function | @py_List | @py_Print | @py_Set | @py_SpecialOperation | @py_TemplateString | @py_Tuple | @py_arguments | @py_comprehension; + +@py_expr_or_stmt = @py_expr | @py_stmt; + +@py_expr_parent = @py_AnnAssign | @py_Assert | @py_Assign | @py_AssignExpr | @py_Attribute | @py_AugAssign | @py_Await | @py_BinaryExpr | @py_Call | @py_Case | @py_Compare | @py_DictComp | @py_DictUnpacking | @py_ExceptGroupStmt | @py_ExceptStmt | @py_Exec | @py_Expr_stmt | @py_Filter | @py_For | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_GeneratorExp | @py_Guard | @py_If | @py_IfExp | @py_ImportMember | @py_ImportStar | @py_KeyValuePair | @py_ListComp | @py_MatchAsPattern | @py_MatchCapturePattern | @py_MatchClassPattern | @py_MatchKeywordPattern | @py_MatchLiteralPattern | @py_MatchStmt | @py_MatchValuePattern | @py_ParamSpec | @py_Print | @py_Raise | @py_Repr | @py_Return | @py_SetComp | @py_Slice | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_TemplateString_list | @py_TemplateWrite | @py_TypeAlias | @py_TypeVar | @py_TypeVarTuple | @py_UnaryExpr | @py_While | @py_With | @py_Yield | @py_YieldFrom | @py_alias | @py_arguments | @py_comprehension | @py_expr_list | @py_keyword | @py_parameter_list; + +@py_location_parent = @py_DictUnpacking | @py_KeyValuePair | @py_StringPart | @py_comprehension | @py_expr | @py_keyword | @py_pattern | @py_stmt | @py_type_parameter; + +@py_parameter = @py_Name | @py_Tuple; + +@py_pattern_list_parent = @py_MatchClassPattern | @py_MatchMappingPattern | @py_MatchOrPattern | @py_MatchSequencePattern; + +@py_pattern_parent = @py_Case | @py_MatchAsPattern | @py_MatchDoubleStarPattern | @py_MatchKeyValuePattern | @py_MatchKeywordPattern | @py_MatchStarPattern | @py_pattern_list; + +@py_scope = @py_Class | @py_Function | @py_Module; + +@py_stmt_list_parent = @py_Case | @py_Class | @py_ExceptGroupStmt | @py_ExceptStmt | @py_For | @py_Function | @py_If | @py_MatchStmt | @py_Module | @py_Try | @py_While | @py_With; + +@py_str_list_parent = @py_Global | @py_Nonlocal; + +@py_str_parent = @py_Attribute | @py_Class | @py_ClassExpr | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_ImportExpr | @py_ImportMember | @py_Module | @py_SpecialOperation | @py_Str | @py_StringPart | @py_TemplateDottedNotation | @py_TemplateString | @py_TemplateStringPart | @py_keyword | @py_str_list; + +@py_type_parameter_list_parent = @py_ClassExpr | @py_Function | @py_TypeAlias; + +@py_variable_parent = @py_Name | @py_PlaceHolder; + + +/* + * End of auto-generated part + */ + + + +/* Map relative names to absolute names for imports */ +py_absolute_names(int module : @py_Module ref, + varchar(1) relname : string ref, + varchar(1) absname : string ref); + +py_exports(int id : @py_Module ref, + varchar(1) name : string ref); + +/* Successor information */ +py_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_true_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_exception_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_false_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_flow_bb_node(unique int flownode : @py_flow_node, + int realnode : @py_ast_node ref, + int basicblock : @py_flow_node ref, + int index : int ref); + +py_scope_flow(int flow : @py_flow_node ref, + int scope : @py_scope ref, + int kind : int ref); + +py_idoms(unique int node : @py_flow_node ref, + int immediate_dominator : @py_flow_node ref); + +py_ssa_phi(int phi : @py_ssa_var ref, + int arg: @py_ssa_var ref); + +py_ssa_var(unique int id : @py_ssa_var, + int var : @py_variable ref); + +py_ssa_use(int node: @py_flow_node ref, + int var : @py_ssa_var ref); + +py_ssa_defn(unique int id : @py_ssa_var ref, + int node: @py_flow_node ref); + +@py_base_var = @py_variable | @py_ssa_var; + +py_scopes(unique int node : @py_expr_or_stmt ref, + int scope : @py_scope ref); + +py_scope_location(unique int id : @location ref, + unique int scope : @py_scope ref); + +py_flags_versioned(varchar(1) name : string ref, + varchar(1) value : string ref, + varchar(1) version : string ref); + +py_syntax_error_versioned(unique int id : @location ref, + varchar(1) message : string ref, + varchar(1) version : string ref); + +py_comments(unique int id : @py_comment, + varchar(1) text : string ref, + unique int location : @location ref); + +/* Type information support */ + +py_cobjects(unique int obj : @py_cobject); + +py_cobjecttypes(unique int obj : @py_cobject ref, + int typeof : @py_cobject ref); + +py_cobjectnames(unique int obj : @py_cobject ref, + varchar(1) name : string ref); + +/* Kind should be 0 for introspection, > 0 from source, as follows: + 1 from C extension source + */ +py_cobject_sources(int obj : @py_cobject ref, + int kind : int ref); + +py_cmembers_versioned(int object : @py_cobject ref, + varchar(1) name : string ref, + int member : @py_cobject ref, + varchar(1) version : string ref); + +py_citems(int object : @py_cobject ref, + int index : int ref, + int member : @py_cobject ref); + +ext_argtype(int funcid : @py_object ref, + int arg : int ref, + int typeid : @py_object ref); + +ext_rettype(int funcid : @py_object ref, + int typeid : @py_object ref); + +ext_proptype(int propid : @py_object ref, + int typeid : @py_object ref); + +ext_argreturn(int funcid : @py_object ref, + int arg : int ref); + +py_special_objects(unique int obj : @py_cobject ref, + unique varchar(1) name : string ref); + +py_decorated_object(int object : @py_object ref, + int level: int ref); + +@py_object = @py_cobject | @py_flow_node; + +@py_source_element = @py_ast_node | @container; + +/** The union of all Python database entities */ +@top = + @py_source_element | @py_object | @py_base_var | @location | @py_line | @py_comment | + @py_expr_parent | @py_expr_context | + @py_operator | @py_boolop | @py_cmpop | @py_unaryop | + @py_cmpop_list | @py_alias_list | @py_StringPart_list | @py_comprehension_list | @py_dict_item_list | @py_pattern_list | @py_stmt_list | @py_str_list | @py_type_parameter_list | + @externalDefect | @externalMetric | @externalDataElement | @duplication_or_similarity | @svnentry | + @xmllocatable | @yaml_locatable; diff --git a/python/ql/lib/upgrades/8d257a4a9bc78e39856d6cd33499389fc5148d4f/semmlecode.python.dbscheme b/python/ql/lib/upgrades/8d257a4a9bc78e39856d6cd33499389fc5148d4f/semmlecode.python.dbscheme new file mode 100644 index 00000000000..279cbb08d38 --- /dev/null +++ b/python/ql/lib/upgrades/8d257a4a9bc78e39856d6cd33499389fc5148d4f/semmlecode.python.dbscheme @@ -0,0 +1,1289 @@ +/* + * This dbscheme is auto-generated by 'semmle/dbscheme_gen.py'. + * Run "make dbscheme" in python/extractor/ to regenerate. + * WARNING: Any modifications to this file will be lost. + * Relations can be changed by modifying master.py or + * by adding rules to dbscheme.template + */ + +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2020-07-02 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/*- DEPRECATED: External defects and metrics -*/ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- DEPRECATED: Snapshot date -*/ + +snapshotDate(unique date snapshotDate : date ref); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- DEPRECATED: Duplicate code -*/ + +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +@duplication_or_similarity = @duplication | @similarity + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref +); + +/*- DEPRECATED: Version control data -*/ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Python dbscheme -*/ + +/* + * Line metrics + */ +py_codelines(int id : @py_scope ref, + int count : int ref); + +py_commentlines(int id : @py_scope ref, + int count : int ref); + +py_docstringlines(int id : @py_scope ref, + int count : int ref); + +py_alllines(int id : @py_scope ref, + int count : int ref); + +/**************************** + Python dbscheme +****************************/ + +@sourceline = @file | @py_Module | @xmllocatable; + +@location = @location_ast | @location_default ; + +locations_ast(unique int id: @location_ast, + int module: @py_Module ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +file_contents(unique int file: @file ref, string contents: string ref); + +py_module_path(int module: @py_Module ref, int file: @container ref); + +variable(unique int id : @py_variable, + int scope : @py_scope ref, + varchar(1) name : string ref); + +py_line_lengths(unique int id : @py_line, + int file: @py_Module ref, + int line : int ref, + int length : int ref); + +py_extracted_version(int module : @py_Module ref, + varchar(1) version : string ref); + +/* AUTO GENERATED PART STARTS HERE */ + + +/* AnnAssign.location = 0, location */ +/* AnnAssign.value = 1, expr */ +/* AnnAssign.annotation = 2, expr */ +/* AnnAssign.target = 3, expr */ + +/* Assert.location = 0, location */ +/* Assert.test = 1, expr */ +/* Assert.msg = 2, expr */ + +/* Assign.location = 0, location */ +/* Assign.value = 1, expr */ +/* Assign.targets = 2, expr_list */ + +/* AssignExpr.location = 0, location */ +/* AssignExpr.parenthesised = 1, bool */ +/* AssignExpr.value = 2, expr */ +/* AssignExpr.target = 3, expr */ + +/* Attribute.location = 0, location */ +/* Attribute.parenthesised = 1, bool */ +/* Attribute.value = 2, expr */ +/* Attribute.attr = 3, str */ +/* Attribute.ctx = 4, expr_context */ + +/* AugAssign.location = 0, location */ +/* AugAssign.operation = 1, BinOp */ + +/* Await.location = 0, location */ +/* Await.parenthesised = 1, bool */ +/* Await.value = 2, expr */ + +/* BinaryExpr.location = 0, location */ +/* BinaryExpr.parenthesised = 1, bool */ +/* BinaryExpr.left = 2, expr */ +/* BinaryExpr.op = 3, operator */ +/* BinaryExpr.right = 4, expr */ +/* BinaryExpr = AugAssign */ + +/* BoolExpr.location = 0, location */ +/* BoolExpr.parenthesised = 1, bool */ +/* BoolExpr.op = 2, boolop */ +/* BoolExpr.values = 3, expr_list */ + +/* Break.location = 0, location */ + +/* Bytes.location = 0, location */ +/* Bytes.parenthesised = 1, bool */ +/* Bytes.s = 2, bytes */ +/* Bytes.prefix = 3, bytes */ +/* Bytes.implicitly_concatenated_parts = 4, StringPart_list */ + +/* Call.location = 0, location */ +/* Call.parenthesised = 1, bool */ +/* Call.func = 2, expr */ +/* Call.positional_args = 3, expr_list */ +/* Call.named_args = 4, dict_item_list */ + +/* Case.location = 0, location */ +/* Case.pattern = 1, pattern */ +/* Case.guard = 2, expr */ +/* Case.body = 3, stmt_list */ + +/* Class.name = 0, str */ +/* Class.body = 1, stmt_list */ +/* Class = ClassExpr */ + +/* ClassExpr.location = 0, location */ +/* ClassExpr.parenthesised = 1, bool */ +/* ClassExpr.name = 2, str */ +/* ClassExpr.bases = 3, expr_list */ +/* ClassExpr.keywords = 4, dict_item_list */ +/* ClassExpr.inner_scope = 5, Class */ +/* ClassExpr.type_parameters = 6, type_parameter_list */ + +/* Compare.location = 0, location */ +/* Compare.parenthesised = 1, bool */ +/* Compare.left = 2, expr */ +/* Compare.ops = 3, cmpop_list */ +/* Compare.comparators = 4, expr_list */ + +/* Continue.location = 0, location */ + +/* Delete.location = 0, location */ +/* Delete.targets = 1, expr_list */ + +/* Dict.location = 0, location */ +/* Dict.parenthesised = 1, bool */ +/* Dict.items = 2, dict_item_list */ + +/* DictComp.location = 0, location */ +/* DictComp.parenthesised = 1, bool */ +/* DictComp.function = 2, Function */ +/* DictComp.iterable = 3, expr */ + +/* DictUnpacking.location = 0, location */ +/* DictUnpacking.value = 1, expr */ + +/* Ellipsis.location = 0, location */ +/* Ellipsis.parenthesised = 1, bool */ + +/* ExceptGroupStmt.location = 0, location */ +/* ExceptGroupStmt.type = 1, expr */ +/* ExceptGroupStmt.name = 2, expr */ +/* ExceptGroupStmt.body = 3, stmt_list */ + +/* ExceptStmt.location = 0, location */ +/* ExceptStmt.type = 1, expr */ +/* ExceptStmt.name = 2, expr */ +/* ExceptStmt.body = 3, stmt_list */ + +/* Exec.location = 0, location */ +/* Exec.body = 1, expr */ +/* Exec.globals = 2, expr */ +/* Exec.locals = 3, expr */ + +/* ExprStmt.location = 0, location */ +/* ExprStmt.value = 1, expr */ + +/* Filter.location = 0, location */ +/* Filter.parenthesised = 1, bool */ +/* Filter.value = 2, expr */ +/* Filter.filter = 3, expr */ + +/* For.location = 0, location */ +/* For.target = 1, expr */ +/* For.iter = 2, expr */ +/* For.body = 3, stmt_list */ +/* For.orelse = 4, stmt_list */ +/* For.is_async = 5, bool */ + +/* FormattedValue.location = 0, location */ +/* FormattedValue.parenthesised = 1, bool */ +/* FormattedValue.value = 2, expr */ +/* FormattedValue.conversion = 3, str */ +/* FormattedValue.format_spec = 4, JoinedStr */ + +/* Function.name = 0, str */ +/* Function.args = 1, parameter_list */ +/* Function.vararg = 2, expr */ +/* Function.kwonlyargs = 3, expr_list */ +/* Function.kwarg = 4, expr */ +/* Function.body = 5, stmt_list */ +/* Function.is_async = 6, bool */ +/* Function.type_parameters = 7, type_parameter_list */ +/* Function = FunctionParent */ + +/* FunctionExpr.location = 0, location */ +/* FunctionExpr.parenthesised = 1, bool */ +/* FunctionExpr.name = 2, str */ +/* FunctionExpr.args = 3, arguments */ +/* FunctionExpr.returns = 4, expr */ +/* FunctionExpr.inner_scope = 5, Function */ + +/* GeneratorExp.location = 0, location */ +/* GeneratorExp.parenthesised = 1, bool */ +/* GeneratorExp.function = 2, Function */ +/* GeneratorExp.iterable = 3, expr */ + +/* Global.location = 0, location */ +/* Global.names = 1, str_list */ + +/* Guard.location = 0, location */ +/* Guard.parenthesised = 1, bool */ +/* Guard.test = 2, expr */ + +/* If.location = 0, location */ +/* If.test = 1, expr */ +/* If.body = 2, stmt_list */ +/* If.orelse = 3, stmt_list */ + +/* IfExp.location = 0, location */ +/* IfExp.parenthesised = 1, bool */ +/* IfExp.test = 2, expr */ +/* IfExp.body = 3, expr */ +/* IfExp.orelse = 4, expr */ + +/* Import.location = 0, location */ +/* Import.names = 1, alias_list */ + +/* ImportExpr.location = 0, location */ +/* ImportExpr.parenthesised = 1, bool */ +/* ImportExpr.level = 2, int */ +/* ImportExpr.name = 3, str */ +/* ImportExpr.top = 4, bool */ + +/* ImportStar.location = 0, location */ +/* ImportStar.module = 1, expr */ + +/* ImportMember.location = 0, location */ +/* ImportMember.parenthesised = 1, bool */ +/* ImportMember.module = 2, expr */ +/* ImportMember.name = 3, str */ + +/* Fstring.location = 0, location */ +/* Fstring.parenthesised = 1, bool */ +/* Fstring.values = 2, expr_list */ +/* Fstring = FormattedValue */ + +/* JoinedTemplateString.location = 0, location */ +/* JoinedTemplateString.parenthesised = 1, bool */ +/* JoinedTemplateString.strings = 2, TemplateString_list */ + +/* KeyValuePair.location = 0, location */ +/* KeyValuePair.value = 1, expr */ +/* KeyValuePair.key = 2, expr */ + +/* Lambda.location = 0, location */ +/* Lambda.parenthesised = 1, bool */ +/* Lambda.args = 2, arguments */ +/* Lambda.inner_scope = 3, Function */ + +/* List.location = 0, location */ +/* List.parenthesised = 1, bool */ +/* List.elts = 2, expr_list */ +/* List.ctx = 3, expr_context */ + +/* ListComp.location = 0, location */ +/* ListComp.parenthesised = 1, bool */ +/* ListComp.function = 2, Function */ +/* ListComp.iterable = 3, expr */ +/* ListComp.generators = 4, comprehension_list */ +/* ListComp.elt = 5, expr */ + +/* MatchStmt.location = 0, location */ +/* MatchStmt.subject = 1, expr */ +/* MatchStmt.cases = 2, stmt_list */ + +/* MatchAsPattern.location = 0, location */ +/* MatchAsPattern.parenthesised = 1, bool */ +/* MatchAsPattern.pattern = 2, pattern */ +/* MatchAsPattern.alias = 3, expr */ + +/* MatchCapturePattern.location = 0, location */ +/* MatchCapturePattern.parenthesised = 1, bool */ +/* MatchCapturePattern.variable = 2, expr */ + +/* MatchClassPattern.location = 0, location */ +/* MatchClassPattern.parenthesised = 1, bool */ +/* MatchClassPattern.class = 2, expr */ +/* MatchClassPattern.class_name = 3, expr */ +/* MatchClassPattern.positional = 4, pattern_list */ +/* MatchClassPattern.keyword = 5, pattern_list */ + +/* MatchDoubleStarPattern.location = 0, location */ +/* MatchDoubleStarPattern.parenthesised = 1, bool */ +/* MatchDoubleStarPattern.target = 2, pattern */ + +/* MatchKeyValuePattern.location = 0, location */ +/* MatchKeyValuePattern.parenthesised = 1, bool */ +/* MatchKeyValuePattern.key = 2, pattern */ +/* MatchKeyValuePattern.value = 3, pattern */ + +/* MatchKeywordPattern.location = 0, location */ +/* MatchKeywordPattern.parenthesised = 1, bool */ +/* MatchKeywordPattern.attribute = 2, expr */ +/* MatchKeywordPattern.value = 3, pattern */ + +/* MatchLiteralPattern.location = 0, location */ +/* MatchLiteralPattern.parenthesised = 1, bool */ +/* MatchLiteralPattern.literal = 2, expr */ + +/* MatchMappingPattern.location = 0, location */ +/* MatchMappingPattern.parenthesised = 1, bool */ +/* MatchMappingPattern.mappings = 2, pattern_list */ + +/* MatchOrPattern.location = 0, location */ +/* MatchOrPattern.parenthesised = 1, bool */ +/* MatchOrPattern.patterns = 2, pattern_list */ + +/* MatchSequencePattern.location = 0, location */ +/* MatchSequencePattern.parenthesised = 1, bool */ +/* MatchSequencePattern.patterns = 2, pattern_list */ + +/* MatchStarPattern.location = 0, location */ +/* MatchStarPattern.parenthesised = 1, bool */ +/* MatchStarPattern.target = 2, pattern */ + +/* MatchValuePattern.location = 0, location */ +/* MatchValuePattern.parenthesised = 1, bool */ +/* MatchValuePattern.value = 2, expr */ + +/* MatchWildcardPattern.location = 0, location */ +/* MatchWildcardPattern.parenthesised = 1, bool */ + +/* Module.name = 0, str */ +/* Module.hash = 1, str */ +/* Module.body = 2, stmt_list */ +/* Module.kind = 3, str */ + +/* Name.location = 0, location */ +/* Name.parenthesised = 1, bool */ +/* Name.variable = 2, variable */ +/* Name.ctx = 3, expr_context */ +/* Name = ParameterList */ + +/* Nonlocal.location = 0, location */ +/* Nonlocal.names = 1, str_list */ + +/* Num.location = 0, location */ +/* Num.parenthesised = 1, bool */ +/* Num.n = 2, number */ +/* Num.text = 3, number */ + +/* ParamSpec.location = 0, location */ +/* ParamSpec.name = 1, expr */ +/* ParamSpec.default = 2, expr */ + +/* Pass.location = 0, location */ + +/* PlaceHolder.location = 0, location */ +/* PlaceHolder.parenthesised = 1, bool */ +/* PlaceHolder.variable = 2, variable */ +/* PlaceHolder.ctx = 3, expr_context */ + +/* Print.location = 0, location */ +/* Print.dest = 1, expr */ +/* Print.values = 2, expr_list */ +/* Print.nl = 3, bool */ + +/* Raise.location = 0, location */ +/* Raise.exc = 1, expr */ +/* Raise.cause = 2, expr */ +/* Raise.type = 3, expr */ +/* Raise.inst = 4, expr */ +/* Raise.tback = 5, expr */ + +/* Repr.location = 0, location */ +/* Repr.parenthesised = 1, bool */ +/* Repr.value = 2, expr */ + +/* Return.location = 0, location */ +/* Return.value = 1, expr */ + +/* Set.location = 0, location */ +/* Set.parenthesised = 1, bool */ +/* Set.elts = 2, expr_list */ + +/* SetComp.location = 0, location */ +/* SetComp.parenthesised = 1, bool */ +/* SetComp.function = 2, Function */ +/* SetComp.iterable = 3, expr */ + +/* Slice.location = 0, location */ +/* Slice.parenthesised = 1, bool */ +/* Slice.start = 2, expr */ +/* Slice.stop = 3, expr */ +/* Slice.step = 4, expr */ + +/* SpecialOperation.location = 0, location */ +/* SpecialOperation.parenthesised = 1, bool */ +/* SpecialOperation.name = 2, str */ +/* SpecialOperation.arguments = 3, expr_list */ + +/* Starred.location = 0, location */ +/* Starred.parenthesised = 1, bool */ +/* Starred.value = 2, expr */ +/* Starred.ctx = 3, expr_context */ + +/* Str.location = 0, location */ +/* Str.parenthesised = 1, bool */ +/* Str.s = 2, str */ +/* Str.prefix = 3, str */ +/* Str.implicitly_concatenated_parts = 4, StringPart_list */ + +/* StringPart.text = 0, str */ +/* StringPart.location = 1, location */ +/* StringPart = StringPartList */ +/* StringPartList = BytesOrStr */ + +/* Subscript.location = 0, location */ +/* Subscript.parenthesised = 1, bool */ +/* Subscript.value = 2, expr */ +/* Subscript.index = 3, expr */ +/* Subscript.ctx = 4, expr_context */ + +/* TemplateDottedNotation.location = 0, location */ +/* TemplateDottedNotation.parenthesised = 1, bool */ +/* TemplateDottedNotation.value = 2, expr */ +/* TemplateDottedNotation.attr = 3, str */ +/* TemplateDottedNotation.ctx = 4, expr_context */ + +/* TemplateString.location = 0, location */ +/* TemplateString.parenthesised = 1, bool */ +/* TemplateString.prefix = 2, str */ +/* TemplateString.values = 3, expr_list */ +/* TemplateString = TemplateStringList */ + +/* TemplateStringPart.location = 0, location */ +/* TemplateStringPart.parenthesised = 1, bool */ +/* TemplateStringPart.text = 2, str */ +/* TemplateStringList = JoinedTemplateString */ + +/* TemplateWrite.location = 0, location */ +/* TemplateWrite.value = 1, expr */ + +/* Try.location = 0, location */ +/* Try.body = 1, stmt_list */ +/* Try.orelse = 2, stmt_list */ +/* Try.handlers = 3, stmt_list */ +/* Try.finalbody = 4, stmt_list */ + +/* Tuple.location = 0, location */ +/* Tuple.parenthesised = 1, bool */ +/* Tuple.elts = 2, expr_list */ +/* Tuple.ctx = 3, expr_context */ +/* Tuple = ParameterList */ + +/* TypeAlias.location = 0, location */ +/* TypeAlias.name = 1, expr */ +/* TypeAlias.type_parameters = 2, type_parameter_list */ +/* TypeAlias.value = 3, expr */ + +/* TypeVar.location = 0, location */ +/* TypeVar.name = 1, expr */ +/* TypeVar.bound = 2, expr */ +/* TypeVar.default = 3, expr */ + +/* TypeVarTuple.location = 0, location */ +/* TypeVarTuple.name = 1, expr */ +/* TypeVarTuple.default = 2, expr */ + +/* UnaryExpr.location = 0, location */ +/* UnaryExpr.parenthesised = 1, bool */ +/* UnaryExpr.op = 2, unaryop */ +/* UnaryExpr.operand = 3, expr */ + +/* While.location = 0, location */ +/* While.test = 1, expr */ +/* While.body = 2, stmt_list */ +/* While.orelse = 3, stmt_list */ + +/* With.location = 0, location */ +/* With.context_expr = 1, expr */ +/* With.optional_vars = 2, expr */ +/* With.body = 3, stmt_list */ +/* With.is_async = 4, bool */ + +/* Yield.location = 0, location */ +/* Yield.parenthesised = 1, bool */ +/* Yield.value = 2, expr */ + +/* YieldFrom.location = 0, location */ +/* YieldFrom.parenthesised = 1, bool */ +/* YieldFrom.value = 2, expr */ + +/* Alias.value = 0, expr */ +/* Alias.asname = 1, expr */ +/* Alias = AliasList */ +/* AliasList = Import */ + +/* Arguments.kw_defaults = 0, expr_list */ +/* Arguments.defaults = 1, expr_list */ +/* Arguments.annotations = 2, expr_list */ +/* Arguments.varargannotation = 3, expr */ +/* Arguments.kwargannotation = 4, expr */ +/* Arguments.kw_annotations = 5, expr_list */ +/* Arguments = ArgumentsParent */ +/* boolean = BoolParent */ +/* Boolop = BoolExpr */ +/* string = Bytes */ +/* Cmpop = CmpopList */ +/* CmpopList = Compare */ + +/* Comprehension.location = 0, location */ +/* Comprehension.iter = 1, expr */ +/* Comprehension.target = 2, expr */ +/* Comprehension.ifs = 3, expr_list */ +/* Comprehension = ComprehensionList */ +/* ComprehensionList = ListComp */ +/* DictItem = DictItemList */ +/* DictItemList = DictItemListParent */ + +/* Expr.location = 0, location */ +/* Expr.parenthesised = 1, bool */ +/* Expr = ExprParent */ +/* ExprContext = ExprContextParent */ +/* ExprList = ExprListParent */ +/* int = ImportExpr */ + +/* Keyword.location = 0, location */ +/* Keyword.value = 1, expr */ +/* Keyword.arg = 2, str */ +/* Location = LocationParent */ +/* string = Num */ +/* Operator = BinaryExpr */ +/* ParameterList = Function */ + +/* Pattern.location = 0, location */ +/* Pattern.parenthesised = 1, bool */ +/* Pattern = PatternParent */ +/* PatternList = PatternListParent */ + +/* Stmt.location = 0, location */ +/* Stmt = StmtList */ +/* StmtList = StmtListParent */ +/* string = StrParent */ +/* StringList = StrListParent */ + +/* TypeParameter.location = 0, location */ +/* TypeParameter = TypeParameterList */ +/* TypeParameterList = TypeParameterListParent */ +/* Unaryop = UnaryExpr */ +/* Variable = VariableParent */ +py_Classes(unique int id : @py_Class, + unique int parent : @py_ClassExpr ref); + +py_Functions(unique int id : @py_Function, + unique int parent : @py_Function_parent ref); + +py_Modules(unique int id : @py_Module); + +py_StringParts(unique int id : @py_StringPart, + int parent : @py_StringPart_list ref, + int idx : int ref); + +py_StringPart_lists(unique int id : @py_StringPart_list, + unique int parent : @py_Bytes_or_Str ref); + +py_TemplateString_lists(unique int id : @py_TemplateString_list, + unique int parent : @py_JoinedTemplateString ref); + +py_aliases(unique int id : @py_alias, + int parent : @py_alias_list ref, + int idx : int ref); + +py_alias_lists(unique int id : @py_alias_list, + unique int parent : @py_Import ref); + +py_arguments(unique int id : @py_arguments, + unique int parent : @py_arguments_parent ref); + +py_bools(int parent : @py_bool_parent ref, + int idx : int ref); + +py_boolops(unique int id : @py_boolop, + int kind: int ref, + unique int parent : @py_BoolExpr ref); + +py_bytes(varchar(1) id : string ref, + int parent : @py_Bytes ref, + int idx : int ref); + +py_cmpops(unique int id : @py_cmpop, + int kind: int ref, + int parent : @py_cmpop_list ref, + int idx : int ref); + +py_cmpop_lists(unique int id : @py_cmpop_list, + unique int parent : @py_Compare ref); + +py_comprehensions(unique int id : @py_comprehension, + int parent : @py_comprehension_list ref, + int idx : int ref); + +py_comprehension_lists(unique int id : @py_comprehension_list, + unique int parent : @py_ListComp ref); + +py_dict_items(unique int id : @py_dict_item, + int kind: int ref, + int parent : @py_dict_item_list ref, + int idx : int ref); + +py_dict_item_lists(unique int id : @py_dict_item_list, + unique int parent : @py_dict_item_list_parent ref); + +py_exprs(unique int id : @py_expr, + int kind: int ref, + int parent : @py_expr_parent ref, + int idx : int ref); + +py_expr_contexts(unique int id : @py_expr_context, + int kind: int ref, + unique int parent : @py_expr_context_parent ref); + +py_expr_lists(unique int id : @py_expr_list, + int parent : @py_expr_list_parent ref, + int idx : int ref); + +py_ints(int id : int ref, + unique int parent : @py_ImportExpr ref); + +py_locations(unique int id : @location ref, + unique int parent : @py_location_parent ref); + +py_numbers(varchar(1) id : string ref, + int parent : @py_Num ref, + int idx : int ref); + +py_operators(unique int id : @py_operator, + int kind: int ref, + unique int parent : @py_BinaryExpr ref); + +py_parameter_lists(unique int id : @py_parameter_list, + unique int parent : @py_Function ref); + +py_patterns(unique int id : @py_pattern, + int kind: int ref, + int parent : @py_pattern_parent ref, + int idx : int ref); + +py_pattern_lists(unique int id : @py_pattern_list, + int parent : @py_pattern_list_parent ref, + int idx : int ref); + +py_stmts(unique int id : @py_stmt, + int kind: int ref, + int parent : @py_stmt_list ref, + int idx : int ref); + +py_stmt_lists(unique int id : @py_stmt_list, + int parent : @py_stmt_list_parent ref, + int idx : int ref); + +py_strs(varchar(1) id : string ref, + int parent : @py_str_parent ref, + int idx : int ref); + +py_str_lists(unique int id : @py_str_list, + unique int parent : @py_str_list_parent ref); + +py_type_parameters(unique int id : @py_type_parameter, + int kind: int ref, + int parent : @py_type_parameter_list ref, + int idx : int ref); + +py_type_parameter_lists(unique int id : @py_type_parameter_list, + unique int parent : @py_type_parameter_list_parent ref); + +py_unaryops(unique int id : @py_unaryop, + int kind: int ref, + unique int parent : @py_UnaryExpr ref); + +py_variables(int id : @py_variable ref, + unique int parent : @py_variable_parent ref); + +case @py_boolop.kind of + 0 = @py_And +| 1 = @py_Or; + +case @py_cmpop.kind of + 0 = @py_Eq +| 1 = @py_Gt +| 2 = @py_GtE +| 3 = @py_In +| 4 = @py_Is +| 5 = @py_IsNot +| 6 = @py_Lt +| 7 = @py_LtE +| 8 = @py_NotEq +| 9 = @py_NotIn; + +case @py_dict_item.kind of + 0 = @py_DictUnpacking +| 1 = @py_KeyValuePair +| 2 = @py_keyword; + +case @py_expr.kind of + 0 = @py_Attribute +| 1 = @py_BinaryExpr +| 2 = @py_BoolExpr +| 3 = @py_Bytes +| 4 = @py_Call +| 5 = @py_ClassExpr +| 6 = @py_Compare +| 7 = @py_Dict +| 8 = @py_DictComp +| 9 = @py_Ellipsis +| 10 = @py_FunctionExpr +| 11 = @py_GeneratorExp +| 12 = @py_IfExp +| 13 = @py_ImportExpr +| 14 = @py_ImportMember +| 15 = @py_Lambda +| 16 = @py_List +| 17 = @py_ListComp +| 18 = @py_Guard +| 19 = @py_Name +| 20 = @py_Num +| 21 = @py_Repr +| 22 = @py_Set +| 23 = @py_SetComp +| 24 = @py_Slice +| 25 = @py_Starred +| 26 = @py_Str +| 27 = @py_Subscript +| 28 = @py_Tuple +| 29 = @py_UnaryExpr +| 30 = @py_Yield +| 31 = @py_YieldFrom +| 32 = @py_TemplateDottedNotation +| 33 = @py_Filter +| 34 = @py_PlaceHolder +| 35 = @py_Await +| 36 = @py_Fstring +| 37 = @py_FormattedValue +| 38 = @py_AssignExpr +| 39 = @py_SpecialOperation +| 40 = @py_TemplateString +| 41 = @py_JoinedTemplateString +| 42 = @py_TemplateStringPart; + +case @py_expr_context.kind of + 0 = @py_AugLoad +| 1 = @py_AugStore +| 2 = @py_Del +| 3 = @py_Load +| 4 = @py_Param +| 5 = @py_Store; + +case @py_operator.kind of + 0 = @py_Add +| 1 = @py_BitAnd +| 2 = @py_BitOr +| 3 = @py_BitXor +| 4 = @py_Div +| 5 = @py_FloorDiv +| 6 = @py_LShift +| 7 = @py_Mod +| 8 = @py_Mult +| 9 = @py_Pow +| 10 = @py_RShift +| 11 = @py_Sub +| 12 = @py_MatMult; + +case @py_pattern.kind of + 0 = @py_MatchAsPattern +| 1 = @py_MatchOrPattern +| 2 = @py_MatchLiteralPattern +| 3 = @py_MatchCapturePattern +| 4 = @py_MatchWildcardPattern +| 5 = @py_MatchValuePattern +| 6 = @py_MatchSequencePattern +| 7 = @py_MatchStarPattern +| 8 = @py_MatchMappingPattern +| 9 = @py_MatchDoubleStarPattern +| 10 = @py_MatchKeyValuePattern +| 11 = @py_MatchClassPattern +| 12 = @py_MatchKeywordPattern; + +case @py_stmt.kind of + 0 = @py_Assert +| 1 = @py_Assign +| 2 = @py_AugAssign +| 3 = @py_Break +| 4 = @py_Continue +| 5 = @py_Delete +| 6 = @py_ExceptStmt +| 7 = @py_ExceptGroupStmt +| 8 = @py_Exec +| 9 = @py_Expr_stmt +| 10 = @py_For +| 11 = @py_Global +| 12 = @py_If +| 13 = @py_Import +| 14 = @py_ImportStar +| 15 = @py_MatchStmt +| 16 = @py_Case +| 17 = @py_Nonlocal +| 18 = @py_Pass +| 19 = @py_Print +| 20 = @py_Raise +| 21 = @py_Return +| 22 = @py_Try +| 23 = @py_While +| 24 = @py_With +| 25 = @py_TemplateWrite +| 26 = @py_AnnAssign +| 27 = @py_TypeAlias; + +case @py_type_parameter.kind of + 0 = @py_ParamSpec +| 1 = @py_TypeVar +| 2 = @py_TypeVarTuple; + +case @py_unaryop.kind of + 0 = @py_Invert +| 1 = @py_Not +| 2 = @py_UAdd +| 3 = @py_USub; + +@py_Bytes_or_Str = @py_Bytes | @py_Str; + +@py_Function_parent = @py_DictComp | @py_FunctionExpr | @py_GeneratorExp | @py_Lambda | @py_ListComp | @py_SetComp; + +@py_arguments_parent = @py_FunctionExpr | @py_Lambda; + +@py_ast_node = @py_Class | @py_Function | @py_Module | @py_StringPart | @py_comprehension | @py_dict_item | @py_expr | @py_pattern | @py_stmt | @py_type_parameter; + +@py_bool_parent = @py_For | @py_Function | @py_Print | @py_With | @py_expr | @py_pattern; + +@py_dict_item_list_parent = @py_Call | @py_ClassExpr | @py_Dict; + +@py_expr_context_parent = @py_Attribute | @py_List | @py_Name | @py_PlaceHolder | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_Tuple; + +@py_expr_list_parent = @py_Assign | @py_BoolExpr | @py_Call | @py_ClassExpr | @py_Compare | @py_Delete | @py_Fstring | @py_Function | @py_List | @py_Print | @py_Set | @py_SpecialOperation | @py_TemplateString | @py_Tuple | @py_arguments | @py_comprehension; + +@py_expr_or_stmt = @py_expr | @py_stmt; + +@py_expr_parent = @py_AnnAssign | @py_Assert | @py_Assign | @py_AssignExpr | @py_Attribute | @py_AugAssign | @py_Await | @py_BinaryExpr | @py_Call | @py_Case | @py_Compare | @py_DictComp | @py_DictUnpacking | @py_ExceptGroupStmt | @py_ExceptStmt | @py_Exec | @py_Expr_stmt | @py_Filter | @py_For | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_GeneratorExp | @py_Guard | @py_If | @py_IfExp | @py_ImportMember | @py_ImportStar | @py_KeyValuePair | @py_ListComp | @py_MatchAsPattern | @py_MatchCapturePattern | @py_MatchClassPattern | @py_MatchKeywordPattern | @py_MatchLiteralPattern | @py_MatchStmt | @py_MatchValuePattern | @py_ParamSpec | @py_Print | @py_Raise | @py_Repr | @py_Return | @py_SetComp | @py_Slice | @py_Starred | @py_Subscript | @py_TemplateDottedNotation | @py_TemplateString_list | @py_TemplateWrite | @py_TypeAlias | @py_TypeVar | @py_TypeVarTuple | @py_UnaryExpr | @py_While | @py_With | @py_Yield | @py_YieldFrom | @py_alias | @py_arguments | @py_comprehension | @py_expr_list | @py_keyword | @py_parameter_list; + +@py_location_parent = @py_DictUnpacking | @py_KeyValuePair | @py_StringPart | @py_comprehension | @py_expr | @py_keyword | @py_pattern | @py_stmt | @py_type_parameter; + +@py_parameter = @py_Name | @py_Tuple; + +@py_pattern_list_parent = @py_MatchClassPattern | @py_MatchMappingPattern | @py_MatchOrPattern | @py_MatchSequencePattern; + +@py_pattern_parent = @py_Case | @py_MatchAsPattern | @py_MatchDoubleStarPattern | @py_MatchKeyValuePattern | @py_MatchKeywordPattern | @py_MatchStarPattern | @py_pattern_list; + +@py_scope = @py_Class | @py_Function | @py_Module; + +@py_stmt_list_parent = @py_Case | @py_Class | @py_ExceptGroupStmt | @py_ExceptStmt | @py_For | @py_Function | @py_If | @py_MatchStmt | @py_Module | @py_Try | @py_While | @py_With; + +@py_str_list_parent = @py_Global | @py_Nonlocal; + +@py_str_parent = @py_Attribute | @py_Class | @py_ClassExpr | @py_FormattedValue | @py_Function | @py_FunctionExpr | @py_ImportExpr | @py_ImportMember | @py_Module | @py_SpecialOperation | @py_Str | @py_StringPart | @py_TemplateDottedNotation | @py_TemplateString | @py_TemplateStringPart | @py_keyword | @py_str_list; + +@py_type_parameter_list_parent = @py_ClassExpr | @py_Function | @py_TypeAlias; + +@py_variable_parent = @py_Name | @py_PlaceHolder; + + +/* + * End of auto-generated part + */ + + + +/* Map relative names to absolute names for imports */ +py_absolute_names(int module : @py_Module ref, + varchar(1) relname : string ref, + varchar(1) absname : string ref); + +py_exports(int id : @py_Module ref, + varchar(1) name : string ref); + +/* Successor information */ +py_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_true_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_exception_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_false_successors(int predecessor : @py_flow_node ref, + int successor : @py_flow_node ref); + +py_flow_bb_node(unique int flownode : @py_flow_node, + int realnode : @py_ast_node ref, + int basicblock : @py_flow_node ref, + int index : int ref); + +py_scope_flow(int flow : @py_flow_node ref, + int scope : @py_scope ref, + int kind : int ref); + +py_idoms(unique int node : @py_flow_node ref, + int immediate_dominator : @py_flow_node ref); + +py_ssa_phi(int phi : @py_ssa_var ref, + int arg: @py_ssa_var ref); + +py_ssa_var(unique int id : @py_ssa_var, + int var : @py_variable ref); + +py_ssa_use(int node: @py_flow_node ref, + int var : @py_ssa_var ref); + +py_ssa_defn(unique int id : @py_ssa_var ref, + int node: @py_flow_node ref); + +@py_base_var = @py_variable | @py_ssa_var; + +py_scopes(unique int node : @py_expr_or_stmt ref, + int scope : @py_scope ref); + +py_scope_location(unique int id : @location ref, + unique int scope : @py_scope ref); + +py_flags_versioned(varchar(1) name : string ref, + varchar(1) value : string ref, + varchar(1) version : string ref); + +py_syntax_error_versioned(unique int id : @location ref, + varchar(1) message : string ref, + varchar(1) version : string ref); + +py_comments(unique int id : @py_comment, + varchar(1) text : string ref, + unique int location : @location ref); + +/* Type information support */ + +py_cobjects(unique int obj : @py_cobject); + +py_cobjecttypes(unique int obj : @py_cobject ref, + int typeof : @py_cobject ref); + +py_cobjectnames(unique int obj : @py_cobject ref, + varchar(1) name : string ref); + +/* Kind should be 0 for introspection, > 0 from source, as follows: + 1 from C extension source + */ +py_cobject_sources(int obj : @py_cobject ref, + int kind : int ref); + +py_cmembers_versioned(int object : @py_cobject ref, + varchar(1) name : string ref, + int member : @py_cobject ref, + varchar(1) version : string ref); + +py_citems(int object : @py_cobject ref, + int index : int ref, + int member : @py_cobject ref); + +ext_argtype(int funcid : @py_object ref, + int arg : int ref, + int typeid : @py_object ref); + +ext_rettype(int funcid : @py_object ref, + int typeid : @py_object ref); + +ext_proptype(int propid : @py_object ref, + int typeid : @py_object ref); + +ext_argreturn(int funcid : @py_object ref, + int arg : int ref); + +py_special_objects(unique int obj : @py_cobject ref, + unique varchar(1) name : string ref); + +py_decorated_object(int object : @py_object ref, + int level: int ref); + +@py_object = @py_cobject | @py_flow_node; + +@py_source_element = @py_ast_node | @container; + +/** The union of all Python database entities */ +@top = + @py_source_element | @py_object | @py_base_var | @location | @py_line | @py_comment | + @py_expr_parent | @py_expr_context | + @py_operator | @py_boolop | @py_cmpop | @py_unaryop | + @py_cmpop_list | @py_alias_list | @py_StringPart_list | @py_comprehension_list | @py_dict_item_list | @py_pattern_list | @py_stmt_list | @py_str_list | @py_type_parameter_list | + @externalDefect | @externalMetric | @externalDataElement | @duplication_or_similarity | @svnentry | + @xmllocatable | @yaml_locatable; diff --git a/python/ql/lib/upgrades/8d257a4a9bc78e39856d6cd33499389fc5148d4f/upgrade.properties b/python/ql/lib/upgrades/8d257a4a9bc78e39856d6cd33499389fc5148d4f/upgrade.properties new file mode 100644 index 00000000000..00fae2d3bc6 --- /dev/null +++ b/python/ql/lib/upgrades/8d257a4a9bc78e39856d6cd33499389fc5148d4f/upgrade.properties @@ -0,0 +1,2 @@ +description: Sections for databaseMetadata and overlayChangedFiles +compatibility: full diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 5293d4c00a4..9b09127c0ae 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.5 + +No user-facing changes. + ## 1.7.4 No user-facing changes. diff --git a/python/ql/src/change-notes/released/1.7.5.md b/python/ql/src/change-notes/released/1.7.5.md new file mode 100644 index 00000000000..f17d9279e0d --- /dev/null +++ b/python/ql/src/change-notes/released/1.7.5.md @@ -0,0 +1,3 @@ +## 1.7.5 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index f4f3a4d5120..83aebd7c12a 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.4 +lastReleaseVersion: 1.7.5 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 235fe00a9bc..8b797e76e6a 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.7.5-dev +version: 1.7.6-dev groups: - python - queries diff --git a/python/ql/test/library-tests/frameworks/data/test.expected b/python/ql/test/library-tests/frameworks/data/test.expected index 1e229a28039..84cc34585ca 100644 --- a/python/ql/test/library-tests/frameworks/data/test.expected +++ b/python/ql/test/library-tests/frameworks/data/test.expected @@ -108,6 +108,7 @@ isSource | test.py:119:20:119:30 | ControlFlowNode for getSource() | test-source | | test.py:124:1:124:33 | ControlFlowNode for Attribute() | test-source | | test.py:126:11:126:43 | ControlFlowNode for Attribute() | test-source | +| test.py:129:11:129:39 | ControlFlowNode for Attribute() | test-source | syntaxErrors | Member[foo | | Member[foo] .Member[bar] | diff --git a/python/ql/test/library-tests/frameworks/data/test.ext.yml b/python/ql/test/library-tests/frameworks/data/test.ext.yml index 26fe6012d0e..487276eedf6 100644 --- a/python/ql/test/library-tests/frameworks/data/test.ext.yml +++ b/python/ql/test/library-tests/frameworks/data/test.ext.yml @@ -27,7 +27,7 @@ extensions: - ["testlib", "Member[source_dict].DictionaryElement[key].Member[func].ReturnValue", "test-source"] - ["testlib", "Member[source_dict_any].DictionaryElementAny.Member[func].ReturnValue", "test-source"] # TODO: Add support for list/tuples - # - ["testlib", "Member[source_list].ListElement.Member[func].ReturnValue", "test-source"] + - ["testlib", "Member[source_list].ListElement.Member[func].ReturnValue", "test-source"] # - ["testlib", "Member[source_tuple].TupleElement[0].Member[func].ReturnValue", "test-source"] - addsTo: diff --git a/ql/extractor/src/generator.rs b/ql/extractor/src/generator.rs index 1dca6969f34..650e11c138b 100644 --- a/ql/extractor/src/generator.rs +++ b/ql/extractor/src/generator.rs @@ -36,5 +36,10 @@ pub fn run(options: Options) -> std::io::Result<()> { }, ]; - generate(languages, options.dbscheme, options.library) + generate( + languages, + options.dbscheme, + options.library, + "run 'scripts/create-extractor-pack.sh' in ql/", + ) } diff --git a/ql/ql/src/ql.dbscheme b/ql/ql/src/ql.dbscheme index 98faa40569e..87c1125b41a 100644 --- a/ql/ql/src/ql.dbscheme +++ b/ql/ql/src/ql.dbscheme @@ -1,5 +1,6 @@ // CodeQL database schema for QL // Automatically generated from the tree-sitter grammar; do not edit +// To regenerate, run 'scripts/create-extractor-pack.sh' in ql/ /*- Files and folders -*/ @@ -109,11 +110,23 @@ yaml_locations(unique int locatable: @yaml_locatable ref, @yaml_locatable = @yaml_node | @yaml_error; /*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ databaseMetadata( string metadataKey: string ref, string value: string ref ); +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ overlayChangedFiles( string path: string ref ); diff --git a/ruby/Makefile b/ruby/Makefile index ddaca6534fb..34ae7802350 100644 --- a/ruby/Makefile +++ b/ruby/Makefile @@ -42,6 +42,7 @@ tools: $(BIN_FILES) ../target/release/%$(EXE): cd extractor && cargo build --release +.PHONY: dbscheme dbscheme: cd extractor && cargo build --release ../target/release/codeql-extractor-ruby generate --dbscheme ql/lib/ruby.dbscheme --library ql/lib/codeql/ruby/ast/internal/TreeSitter.qll diff --git a/ruby/downgrades/29b7b6fc1982422368cb0a4644fd0c81f993c618/old.dbscheme b/ruby/downgrades/29b7b6fc1982422368cb0a4644fd0c81f993c618/old.dbscheme new file mode 100644 index 00000000000..29b7b6fc198 --- /dev/null +++ b/ruby/downgrades/29b7b6fc1982422368cb0a4644fd0c81f993c618/old.dbscheme @@ -0,0 +1,1549 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit +// To regenerate, run 'make dbscheme' in ql/ruby/ + +/*- 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 -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- Ruby dbscheme -*/ +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_body( + unique int ruby_block: @ruby_block ref, + unique int body: @ruby_block_body ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block_body, index] +ruby_block_body_child( + int ruby_block_body: @ruby_block_body ref, + int index: int ref, + unique int child: @ruby_block_body_child_type ref +); + +ruby_block_body_def( + unique int id: @ruby_block_body +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_body_statement, index] +ruby_body_statement_child( + int ruby_body_statement: @ruby_body_statement ref, + int index: int ref, + unique int child: @ruby_body_statement_child_type ref +); + +ruby_body_statement_def( + unique int id: @ruby_body_statement +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +ruby_class_body( + unique int ruby_class: @ruby_class ref, + unique int body: @ruby_body_statement ref +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_body( + unique int ruby_do_block: @ruby_do_block ref, + unique int body: @ruby_body_statement ref +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_block_type = @ruby_block | @ruby_do_block + +ruby_element_reference_block( + unique int ruby_element_reference: @ruby_element_reference ref, + unique int block: @ruby_element_reference_block_type ref +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_child( + unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_match_pattern_def( + unique int id: @ruby_match_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_method_body( + unique int ruby_method: @ruby_method ref, + unique int body: @ruby_method_body_type ref +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +ruby_module_body( + unique int ruby_module: @ruby_module ref, + unique int body: @ruby_body_statement ref +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +ruby_singleton_class_body( + unique int ruby_singleton_class: @ruby_singleton_class ref, + unique int body: @ruby_body_statement ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_singleton_method_body( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int body: @ruby_singleton_method_body_type ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_child( + unique int ruby_splat_argument: @ruby_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +ruby_test_pattern_def( + unique int id: @ruby_test_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +ruby_ast_node_location( + unique int node: @ruby_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +ruby_ast_node_parent( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node ref, + int parent_index: int ref +); + +/*- Erb dbscheme -*/ +erb_comment_directive_child( + unique int erb_comment_directive: @erb_comment_directive ref, + unique int child: @erb_token_comment ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive +); + +erb_directive_child( + unique int erb_directive: @erb_directive ref, + unique int child: @erb_token_code ref +); + +erb_directive_def( + unique int id: @erb_directive +); + +erb_graphql_directive_child( + unique int erb_graphql_directive: @erb_graphql_directive ref, + unique int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive +); + +erb_output_directive_child( + unique int erb_output_directive: @erb_output_directive ref, + unique int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +erb_ast_node_location( + unique int node: @erb_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +erb_ast_node_parent( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node ref, + int parent_index: int ref +); + diff --git a/ruby/downgrades/29b7b6fc1982422368cb0a4644fd0c81f993c618/semmlecode.dbscheme b/ruby/downgrades/29b7b6fc1982422368cb0a4644fd0c81f993c618/semmlecode.dbscheme new file mode 100644 index 00000000000..eae6926f500 --- /dev/null +++ b/ruby/downgrades/29b7b6fc1982422368cb0a4644fd0c81f993c618/semmlecode.dbscheme @@ -0,0 +1,1536 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Empty location -*/ + +empty_location( + int location: @location_default ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); + +/*- Ruby dbscheme -*/ +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_body( + unique int ruby_block: @ruby_block ref, + unique int body: @ruby_block_body ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block_body, index] +ruby_block_body_child( + int ruby_block_body: @ruby_block_body ref, + int index: int ref, + unique int child: @ruby_block_body_child_type ref +); + +ruby_block_body_def( + unique int id: @ruby_block_body +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_body_statement, index] +ruby_body_statement_child( + int ruby_body_statement: @ruby_body_statement ref, + int index: int ref, + unique int child: @ruby_body_statement_child_type ref +); + +ruby_body_statement_def( + unique int id: @ruby_body_statement +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +ruby_class_body( + unique int ruby_class: @ruby_class ref, + unique int body: @ruby_body_statement ref +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_body( + unique int ruby_do_block: @ruby_do_block ref, + unique int body: @ruby_body_statement ref +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_block_type = @ruby_block | @ruby_do_block + +ruby_element_reference_block( + unique int ruby_element_reference: @ruby_element_reference ref, + unique int block: @ruby_element_reference_block_type ref +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_child( + unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_match_pattern_def( + unique int id: @ruby_match_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_method_body( + unique int ruby_method: @ruby_method ref, + unique int body: @ruby_method_body_type ref +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +ruby_module_body( + unique int ruby_module: @ruby_module ref, + unique int body: @ruby_body_statement ref +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +ruby_singleton_class_body( + unique int ruby_singleton_class: @ruby_singleton_class ref, + unique int body: @ruby_body_statement ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_singleton_method_body( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int body: @ruby_singleton_method_body_type ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_child( + unique int ruby_splat_argument: @ruby_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +ruby_test_pattern_def( + unique int id: @ruby_test_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +ruby_ast_node_location( + unique int node: @ruby_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +ruby_ast_node_parent( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node ref, + int parent_index: int ref +); + +/*- Erb dbscheme -*/ +erb_comment_directive_child( + unique int erb_comment_directive: @erb_comment_directive ref, + unique int child: @erb_token_comment ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive +); + +erb_directive_child( + unique int erb_directive: @erb_directive ref, + unique int child: @erb_token_code ref +); + +erb_directive_def( + unique int id: @erb_directive +); + +erb_graphql_directive_child( + unique int erb_graphql_directive: @erb_graphql_directive ref, + unique int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive +); + +erb_output_directive_child( + unique int erb_output_directive: @erb_output_directive ref, + unique int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +erb_ast_node_location( + unique int node: @erb_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +erb_ast_node_parent( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node ref, + int parent_index: int ref +); + diff --git a/ruby/downgrades/29b7b6fc1982422368cb0a4644fd0c81f993c618/upgrade.properties b/ruby/downgrades/29b7b6fc1982422368cb0a4644fd0c81f993c618/upgrade.properties new file mode 100644 index 00000000000..00fae2d3bc6 --- /dev/null +++ b/ruby/downgrades/29b7b6fc1982422368cb0a4644fd0c81f993c618/upgrade.properties @@ -0,0 +1,2 @@ +description: Sections for databaseMetadata and overlayChangedFiles +compatibility: full diff --git a/ruby/extractor/src/generator.rs b/ruby/extractor/src/generator.rs index 00d878243ae..de1d0dbfd7e 100644 --- a/ruby/extractor/src/generator.rs +++ b/ruby/extractor/src/generator.rs @@ -28,5 +28,10 @@ pub fn run(options: Options) -> std::io::Result<()> { }, ]; - generate(languages, options.dbscheme, options.library) + generate( + languages, + options.dbscheme, + options.library, + "run 'make dbscheme' in ql/ruby/", + ) } diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 5a83b32807a..e6150ac44bc 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.1.8 + +No user-facing changes. + ## 5.1.7 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/released/5.1.8.md b/ruby/ql/lib/change-notes/released/5.1.8.md new file mode 100644 index 00000000000..9e1ff36f31f --- /dev/null +++ b/ruby/ql/lib/change-notes/released/5.1.8.md @@ -0,0 +1,3 @@ +## 5.1.8 + +No user-facing changes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index f26524e1fd9..8ffbb79d224 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.1.7 +lastReleaseVersion: 5.1.8 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 8418f9186bb..1a0515cc776 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 5.1.8-dev +version: 5.1.9-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/lib/ruby.dbscheme b/ruby/ql/lib/ruby.dbscheme index eae6926f500..29b7b6fc198 100644 --- a/ruby/ql/lib/ruby.dbscheme +++ b/ruby/ql/lib/ruby.dbscheme @@ -1,5 +1,6 @@ // CodeQL database schema for Ruby // Automatically generated from the tree-sitter grammar; do not edit +// To regenerate, run 'make dbscheme' in ql/ruby/ /*- Files and folders -*/ @@ -109,11 +110,23 @@ yaml_locations(unique int locatable: @yaml_locatable ref, @yaml_locatable = @yaml_node | @yaml_error; /*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ databaseMetadata( string metadataKey: string ref, string value: string ref ); +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ overlayChangedFiles( string path: string ref ); diff --git a/ruby/ql/lib/upgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/old.dbscheme b/ruby/ql/lib/upgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/old.dbscheme new file mode 100644 index 00000000000..eae6926f500 --- /dev/null +++ b/ruby/ql/lib/upgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/old.dbscheme @@ -0,0 +1,1536 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Empty location -*/ + +empty_location( + int location: @location_default ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); + +/*- Ruby dbscheme -*/ +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_body( + unique int ruby_block: @ruby_block ref, + unique int body: @ruby_block_body ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block_body, index] +ruby_block_body_child( + int ruby_block_body: @ruby_block_body ref, + int index: int ref, + unique int child: @ruby_block_body_child_type ref +); + +ruby_block_body_def( + unique int id: @ruby_block_body +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_body_statement, index] +ruby_body_statement_child( + int ruby_body_statement: @ruby_body_statement ref, + int index: int ref, + unique int child: @ruby_body_statement_child_type ref +); + +ruby_body_statement_def( + unique int id: @ruby_body_statement +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +ruby_class_body( + unique int ruby_class: @ruby_class ref, + unique int body: @ruby_body_statement ref +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_body( + unique int ruby_do_block: @ruby_do_block ref, + unique int body: @ruby_body_statement ref +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_block_type = @ruby_block | @ruby_do_block + +ruby_element_reference_block( + unique int ruby_element_reference: @ruby_element_reference ref, + unique int block: @ruby_element_reference_block_type ref +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_child( + unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_match_pattern_def( + unique int id: @ruby_match_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_method_body( + unique int ruby_method: @ruby_method ref, + unique int body: @ruby_method_body_type ref +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +ruby_module_body( + unique int ruby_module: @ruby_module ref, + unique int body: @ruby_body_statement ref +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +ruby_singleton_class_body( + unique int ruby_singleton_class: @ruby_singleton_class ref, + unique int body: @ruby_body_statement ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_singleton_method_body( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int body: @ruby_singleton_method_body_type ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_child( + unique int ruby_splat_argument: @ruby_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +ruby_test_pattern_def( + unique int id: @ruby_test_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +ruby_ast_node_location( + unique int node: @ruby_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +ruby_ast_node_parent( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node ref, + int parent_index: int ref +); + +/*- Erb dbscheme -*/ +erb_comment_directive_child( + unique int erb_comment_directive: @erb_comment_directive ref, + unique int child: @erb_token_comment ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive +); + +erb_directive_child( + unique int erb_directive: @erb_directive ref, + unique int child: @erb_token_code ref +); + +erb_directive_def( + unique int id: @erb_directive +); + +erb_graphql_directive_child( + unique int erb_graphql_directive: @erb_graphql_directive ref, + unique int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive +); + +erb_output_directive_child( + unique int erb_output_directive: @erb_output_directive ref, + unique int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +erb_ast_node_location( + unique int node: @erb_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +erb_ast_node_parent( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node ref, + int parent_index: int ref +); + diff --git a/ruby/ql/lib/upgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/ruby.dbscheme b/ruby/ql/lib/upgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/ruby.dbscheme new file mode 100644 index 00000000000..29b7b6fc198 --- /dev/null +++ b/ruby/ql/lib/upgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/ruby.dbscheme @@ -0,0 +1,1549 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit +// To regenerate, run 'make dbscheme' in ql/ruby/ + +/*- 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 -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + +/*- Ruby dbscheme -*/ +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_body( + unique int ruby_block: @ruby_block ref, + unique int body: @ruby_block_body ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block_body, index] +ruby_block_body_child( + int ruby_block_body: @ruby_block_body ref, + int index: int ref, + unique int child: @ruby_block_body_child_type ref +); + +ruby_block_body_def( + unique int id: @ruby_block_body +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_body_statement, index] +ruby_body_statement_child( + int ruby_body_statement: @ruby_body_statement ref, + int index: int ref, + unique int child: @ruby_body_statement_child_type ref +); + +ruby_body_statement_def( + unique int id: @ruby_body_statement +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +ruby_class_body( + unique int ruby_class: @ruby_class ref, + unique int body: @ruby_body_statement ref +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_body( + unique int ruby_do_block: @ruby_do_block ref, + unique int body: @ruby_body_statement ref +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_block_type = @ruby_block | @ruby_do_block + +ruby_element_reference_block( + unique int ruby_element_reference: @ruby_element_reference ref, + unique int block: @ruby_element_reference_block_type ref +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_child( + unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_match_pattern_def( + unique int id: @ruby_match_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_method_body( + unique int ruby_method: @ruby_method ref, + unique int body: @ruby_method_body_type ref +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +ruby_module_body( + unique int ruby_module: @ruby_module ref, + unique int body: @ruby_body_statement ref +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +ruby_singleton_class_body( + unique int ruby_singleton_class: @ruby_singleton_class ref, + unique int body: @ruby_body_statement ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg + +ruby_singleton_method_body( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int body: @ruby_singleton_method_body_type ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_child( + unique int ruby_splat_argument: @ruby_splat_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +ruby_test_pattern_def( + unique int id: @ruby_test_pattern, + int pattern: @ruby_underscore_pattern_top_expr_body ref, + int value: @ruby_underscore_arg ref +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +ruby_ast_node_location( + unique int node: @ruby_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +ruby_ast_node_parent( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node ref, + int parent_index: int ref +); + +/*- Erb dbscheme -*/ +erb_comment_directive_child( + unique int erb_comment_directive: @erb_comment_directive ref, + unique int child: @erb_token_comment ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive +); + +erb_directive_child( + unique int erb_directive: @erb_directive ref, + unique int child: @erb_token_code ref +); + +erb_directive_def( + unique int id: @erb_directive +); + +erb_graphql_directive_child( + unique int erb_graphql_directive: @erb_graphql_directive ref, + unique int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive +); + +erb_output_directive_child( + unique int erb_output_directive: @erb_output_directive ref, + unique int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +erb_ast_node_location( + unique int node: @erb_ast_node ref, + int loc: @location_default ref +); + +#keyset[parent, parent_index] +erb_ast_node_parent( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node ref, + int parent_index: int ref +); + diff --git a/ruby/ql/lib/upgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/upgrade.properties b/ruby/ql/lib/upgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/upgrade.properties new file mode 100644 index 00000000000..00fae2d3bc6 --- /dev/null +++ b/ruby/ql/lib/upgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/upgrade.properties @@ -0,0 +1,2 @@ +description: Sections for databaseMetadata and overlayChangedFiles +compatibility: full diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 3968418c40b..43e207937df 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.5.5 + +No user-facing changes. + ## 1.5.4 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/1.5.5.md b/ruby/ql/src/change-notes/released/1.5.5.md new file mode 100644 index 00000000000..76d0ac89489 --- /dev/null +++ b/ruby/ql/src/change-notes/released/1.5.5.md @@ -0,0 +1,3 @@ +## 1.5.5 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index c216828ee1c..1c73e9d9ce9 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.4 +lastReleaseVersion: 1.5.5 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 00834e12152..8534baf2482 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.5.5-dev +version: 1.5.6-dev groups: - ruby - queries diff --git a/rust/downgrades/66a489863649185f4a9770f894505803059a1312/old.dbscheme b/rust/downgrades/66a489863649185f4a9770f894505803059a1312/old.dbscheme new file mode 100644 index 00000000000..66a48986364 --- /dev/null +++ b/rust/downgrades/66a489863649185f4a9770f894505803059a1312/old.dbscheme @@ -0,0 +1,3556 @@ +// 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 -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +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 +| @cast_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_expr +| @match_expr +| @method_call_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_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_arg_lists( + int id: @call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_attrs( + int id: @call_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr 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_closure_bodies( + int id: @closure_expr ref, + int closure_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 = + @asm_expr +| @assoc_item +| @extern_block +| @extern_crate +| @extern_item +| @impl +| @macro_def +| @macro_rules +| @module +| @trait +| @trait_alias +| @type_item +| @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_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 +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_arg_lists( + int id: @method_call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +method_call_expr_attrs( + int id: @method_call_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +method_call_expr_generic_arg_lists( + int id: @method_call_expr ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +method_call_expr_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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +@type_item = + @enum +| @struct +| @union +; + +#keyset[id, index] +type_item_derive_macro_expansions( + int id: @type_item ref, + int index: int ref, + int derive_macro_expansion: @macro_items ref +); + +#keyset[id, index] +type_item_attrs( + int id: @type_item ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_item_generic_param_lists( + int id: @type_item ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_item_names( + int id: @type_item ref, + int name: @name ref +); + +#keyset[id] +type_item_visibilities( + int id: @type_item ref, + int visibility: @visibility ref +); + +#keyset[id] +type_item_where_clauses( + int id: @type_item 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] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list 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_function_bodies( + int id: @function ref, + int function_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] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list 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] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list 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/66a489863649185f4a9770f894505803059a1312/semmlecode.dbscheme b/rust/downgrades/66a489863649185f4a9770f894505803059a1312/semmlecode.dbscheme new file mode 100644 index 00000000000..90861289dd4 --- /dev/null +++ b/rust/downgrades/66a489863649185f4a9770f894505803059a1312/semmlecode.dbscheme @@ -0,0 +1,3544 @@ +// 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 +| @cast_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_expr +| @match_expr +| @method_call_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_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_arg_lists( + int id: @call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_attrs( + int id: @call_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr 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_closure_bodies( + int id: @closure_expr ref, + int closure_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 = + @asm_expr +| @assoc_item +| @extern_block +| @extern_crate +| @extern_item +| @impl +| @macro_def +| @macro_rules +| @module +| @trait +| @trait_alias +| @type_item +| @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_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 +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_arg_lists( + int id: @method_call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +method_call_expr_attrs( + int id: @method_call_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +method_call_expr_generic_arg_lists( + int id: @method_call_expr ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +method_call_expr_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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +@type_item = + @enum +| @struct +| @union +; + +#keyset[id, index] +type_item_derive_macro_expansions( + int id: @type_item ref, + int index: int ref, + int derive_macro_expansion: @macro_items ref +); + +#keyset[id, index] +type_item_attrs( + int id: @type_item ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_item_generic_param_lists( + int id: @type_item ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_item_names( + int id: @type_item ref, + int name: @name ref +); + +#keyset[id] +type_item_visibilities( + int id: @type_item ref, + int visibility: @visibility ref +); + +#keyset[id] +type_item_where_clauses( + int id: @type_item 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] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list 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_function_bodies( + int id: @function ref, + int function_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] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list 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] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list 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/66a489863649185f4a9770f894505803059a1312/upgrade.properties b/rust/downgrades/66a489863649185f4a9770f894505803059a1312/upgrade.properties new file mode 100644 index 00000000000..00fae2d3bc6 --- /dev/null +++ b/rust/downgrades/66a489863649185f4a9770f894505803059a1312/upgrade.properties @@ -0,0 +1,2 @@ +description: Sections for databaseMetadata and overlayChangedFiles +compatibility: full diff --git a/rust/ql/lib/CHANGELOG.md b/rust/ql/lib/CHANGELOG.md index 6dd2293abeb..c06726370df 100644 --- a/rust/ql/lib/CHANGELOG.md +++ b/rust/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.2.4 + +### Minor Analysis Improvements + +* The `Deref` trait is now considered during method resolution. This means that method calls on receivers implementing the `Deref` trait will correctly resolve to methods defined on the target type. This may result in additional query results, especially for data flow queries. +* Renamed the `Adt` class to `TypeItem` and moved common predicates from `Struct`, `Enum`, and `Union` to `TypeItem`. +* Added models for the Axum web application framework. +* Reading content of a value now carries taint if the value itself is tainted. For instance, if `s` is tainted then `s.field` is also tainted. This generally improves taint flow. +* The call graph is now more precise for calls that target a trait function with a default implemention. This reduces the number of false positives for data flow queries. +* Improved type inference for raw pointers (`*const` and `*mut`). This includes type inference for the raw borrow operators (`&raw const` and `&raw mut`) and dereferencing of raw pointers. + ## 0.2.3 No user-facing changes. diff --git a/rust/ql/lib/change-notes/2025-12-03-type-inference-raw-pointers.md b/rust/ql/lib/change-notes/2025-12-03-type-inference-raw-pointers.md deleted file mode 100644 index a24f86ad897..00000000000 --- a/rust/ql/lib/change-notes/2025-12-03-type-inference-raw-pointers.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Improved type inference for raw pointers (`*const` and `*mut`). This includes type inference for the raw borrow operators (`&raw const` and `&raw mut`) and dereferencing of raw pointers. \ No newline at end of file diff --git a/rust/ql/lib/change-notes/2025-12-05-trait-function-dispatch.md b/rust/ql/lib/change-notes/2025-12-05-trait-function-dispatch.md deleted file mode 100644 index 5a6f0991161..00000000000 --- a/rust/ql/lib/change-notes/2025-12-05-trait-function-dispatch.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The call graph is now more precise for calls that target a trait function with a default implemention. This reduces the number of false positives for data flow queries. \ No newline at end of file diff --git a/rust/ql/lib/change-notes/2025-12-11-read-as-taint.md b/rust/ql/lib/change-notes/2025-12-11-read-as-taint.md deleted file mode 100644 index 3e1cabd75f7..00000000000 --- a/rust/ql/lib/change-notes/2025-12-11-read-as-taint.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Reading content of a value now carries taint if the value itself is tainted. For instance, if `s` is tainted then `s.field` is also tainted. This generally improves taint flow. \ No newline at end of file diff --git a/rust/ql/lib/change-notes/2025-12-16-axum-models.md b/rust/ql/lib/change-notes/2025-12-16-axum-models.md deleted file mode 100644 index baa5910d799..00000000000 --- a/rust/ql/lib/change-notes/2025-12-16-axum-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added models for the Axum web application framework. \ No newline at end of file diff --git a/rust/ql/lib/change-notes/2025-12-17-adt-rename.md b/rust/ql/lib/change-notes/2025-12-17-adt-rename.md deleted file mode 100644 index 0b66b4664a1..00000000000 --- a/rust/ql/lib/change-notes/2025-12-17-adt-rename.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Renamed the `Adt` class to `TypeItem` and moved common predicates from `Struct`, `Enum`, and `Union` to `TypeItem`. \ No newline at end of file diff --git a/rust/ql/lib/change-notes/2026-01-07-method-resolution-deref-trait.md b/rust/ql/lib/change-notes/2026-01-07-method-resolution-deref-trait.md deleted file mode 100644 index 2ed9cf750cb..00000000000 --- a/rust/ql/lib/change-notes/2026-01-07-method-resolution-deref-trait.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `Deref` trait is now considered during method resolution. This means that method calls on receivers implementing the `Deref` trait will correctly resolve to methods defined on the target type. This may result in additional query results, especially for data flow queries. \ No newline at end of file diff --git a/rust/ql/lib/change-notes/2026-01-16-type-inference-closures.md b/rust/ql/lib/change-notes/2026-01-16-type-inference-closures.md new file mode 100644 index 00000000000..1e093b74dbe --- /dev/null +++ b/rust/ql/lib/change-notes/2026-01-16-type-inference-closures.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added type inference support for the `FnMut(..) -> ..` and `Fn(..) -> ..` traits. They now work in type parameter bounds and are implemented by closures. \ No newline at end of file diff --git a/rust/ql/lib/change-notes/released/0.2.4.md b/rust/ql/lib/change-notes/released/0.2.4.md new file mode 100644 index 00000000000..3920a308044 --- /dev/null +++ b/rust/ql/lib/change-notes/released/0.2.4.md @@ -0,0 +1,10 @@ +## 0.2.4 + +### Minor Analysis Improvements + +* The `Deref` trait is now considered during method resolution. This means that method calls on receivers implementing the `Deref` trait will correctly resolve to methods defined on the target type. This may result in additional query results, especially for data flow queries. +* Renamed the `Adt` class to `TypeItem` and moved common predicates from `Struct`, `Enum`, and `Union` to `TypeItem`. +* Added models for the Axum web application framework. +* Reading content of a value now carries taint if the value itself is tainted. For instance, if `s` is tainted then `s.field` is also tainted. This generally improves taint flow. +* The call graph is now more precise for calls that target a trait function with a default implemention. This reduces the number of false positives for data flow queries. +* Improved type inference for raw pointers (`*const` and `*mut`). This includes type inference for the raw borrow operators (`&raw const` and `&raw mut`) and dereferencing of raw pointers. diff --git a/rust/ql/lib/codeql-pack.release.yml b/rust/ql/lib/codeql-pack.release.yml index 0b605901b42..7f1e3841dcd 100644 --- a/rust/ql/lib/codeql-pack.release.yml +++ b/rust/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.3 +lastReleaseVersion: 0.2.4 diff --git a/rust/ql/lib/codeql/rust/elements/internal/ElementImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ElementImpl.qll index df586df6424..277e77d8eab 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ElementImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ElementImpl.qll @@ -99,10 +99,11 @@ module Impl { */ cached predicate isFromMacroExpansion(AstNode n) { - exists(AstNode macro | + exists(AstNode macro, Location l | macro = getImmediatelyEnclosingMacroInvocation(n) and not n = getATokenTreeNode(macro) and - not isAttributeMacroExpansionSourceLocation(macro, n.getLocation()) + l = n.getLocation() and + not isAttributeMacroExpansionSourceLocation(macro, l) ) or isFromMacroExpansion(pragma[only_bind_into](getImmediatelyEnclosingMacroInvocation(n))) diff --git a/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll index 83ba43020d7..bb9ffa83244 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll @@ -5,6 +5,7 @@ */ private import codeql.rust.elements.internal.generated.Trait +private import codeql.rust.internal.PathResolution as PathResolution /** * INTERNAL: This module contains the customizable definition of `Trait` and should not @@ -67,5 +68,11 @@ module Impl { * `where` clauses for `Self`. */ TypeBound getATypeBound() { result = this.getTypeBound(_) } + + /** Gets a direct supertrait of this trait, if any. */ + Trait getSupertrait() { + result = + PathResolution::resolvePath(this.getATypeBound().getTypeRepr().(PathTypeRepr).getPath()) + } } } diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll index 114c283bbdb..cc07beb2b71 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll @@ -5,7 +5,10 @@ private import rust private import codeql.rust.Concepts private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowSummary private import codeql.rust.internal.PathResolution +private import codeql.rust.internal.typeinference.Type +private import codeql.rust.internal.typeinference.TypeMention /** * A call to the `starts_with` method on a `Path`. @@ -19,6 +22,34 @@ private class StartswithCall extends Path::SafeAccessCheck::Range, MethodCall { } } +/** + * A flow summary for the [reflexive implementation of the `From` trait][1]. + * + * Blanket implementations currently don't have a canonical path, so we cannot + * use models-as-data for this model. + * + * [1]: https://doc.rust-lang.org/std/convert/trait.From.html#impl-From%3CT%3E-for-T + */ +private class ReflexiveFrom extends SummarizedCallable::Range { + ReflexiveFrom() { + exists(ImplItemNode impl | + impl.resolveTraitTy().(Trait).getCanonicalPath() = "core::convert::From" and + this = impl.getAssocItem("from") and + resolvePath(this.getParam(0).getTypeRepr().(PathTypeRepr).getPath()) = + impl.getBlanketImplementationTypeParam() + ) + } + + override predicate propagatesFlow( + string input, string output, boolean preservesValue, string model + ) { + input = "Argument[0]" and + output = "ReturnValue" and + preservesValue = true and + model = "ReflexiveFrom" + } +} + /** * The [`Option` enum][1]. * @@ -143,23 +174,48 @@ class FutureTrait extends Trait { TypeAlias getOutputType() { result = this.(TraitItemNode).getAssocItem("Output") } } +/** A function trait `FnOnce`, `FnMut`, or `Fn`. */ +abstract private class AnyFnTraitImpl extends Trait { + /** Gets the `Args` type parameter of this trait. */ + TypeParam getTypeParam() { result = this.getGenericParamList().getGenericParam(0) } +} + +final class AnyFnTrait = AnyFnTraitImpl; + /** * The [`FnOnce` trait][1]. * * [1]: https://doc.rust-lang.org/std/ops/trait.FnOnce.html */ -class FnOnceTrait extends Trait { +class FnOnceTrait extends AnyFnTraitImpl { pragma[nomagic] FnOnceTrait() { this.getCanonicalPath() = "core::ops::function::FnOnce" } - /** Gets the type parameter of this trait. */ - TypeParam getTypeParam() { result = this.getGenericParamList().getGenericParam(0) } - /** Gets the `Output` associated type. */ pragma[nomagic] TypeAlias getOutputType() { result = this.(TraitItemNode).getAssocItem("Output") } } +/** + * The [`FnMut` trait][1]. + * + * [1]: https://doc.rust-lang.org/std/ops/trait.FnMut.html + */ +class FnMutTrait extends AnyFnTraitImpl { + pragma[nomagic] + FnMutTrait() { this.getCanonicalPath() = "core::ops::function::FnMut" } +} + +/** + * The [`Fn` trait][1]. + * + * [1]: https://doc.rust-lang.org/std/ops/trait.Fn.html + */ +class FnTrait extends AnyFnTraitImpl { + pragma[nomagic] + FnTrait() { this.getCanonicalPath() = "core::ops::function::Fn" } +} + /** * The [`Iterator` trait][1]. * diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll b/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll index 1d2eda61ddb..8526e119942 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll @@ -117,8 +117,6 @@ module SatisfiesBlanketConstraint< predicate relevantConstraint(ArgumentTypeAndBlanketOffset ato, Type constraint) { relevantConstraint(ato, _, constraint.(TraitType).getTrait()) } - - predicate useUniversalConditions() { none() } } private module SatisfiesBlanketConstraint = @@ -126,7 +124,7 @@ module SatisfiesBlanketConstraint< /** * Holds if the argument type `at` satisfies the first non-trivial blanket - * constraint of `impl`. + * constraint of `impl`, or if there are no non-trivial constraints of `impl`. */ pragma[nomagic] predicate satisfiesBlanketConstraint(ArgumentType at, ImplItemNode impl) { @@ -135,6 +133,11 @@ module SatisfiesBlanketConstraint< SatisfiesBlanketConstraintInput::relevantConstraint(ato, impl, traitBound) and SatisfiesBlanketConstraint::satisfiesConstraintType(ato, TTrait(traitBound), _, _) ) + or + exists(TypeParam blanketTypeParam | + hasBlanketCandidate(at, impl, _, blanketTypeParam) and + not hasFirstNonTrivialTraitBound(blanketTypeParam, _) + ) } /** diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll index e67fb05485f..0e4bc272905 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll @@ -8,6 +8,7 @@ private import rust private import codeql.rust.internal.PathResolution private import Type +private import TypeAbstraction private import TypeMention private import TypeInference private import FunctionType @@ -34,6 +35,12 @@ private predicate implSiblingCandidate( rootType = selfTy.resolveType() } +pragma[nomagic] +private predicate blanketImplSiblingCandidate(ImplItemNode impl, Trait trait) { + impl.isBlanketImplementation() and + trait = impl.resolveTraitTy() +} + /** * Holds if `impl1` and `impl2` are a sibling implementations of `trait`. We * consider implementations to be siblings if they implement the same trait for @@ -43,17 +50,22 @@ private predicate implSiblingCandidate( */ pragma[inline] private predicate implSiblings(TraitItemNode trait, Impl impl1, Impl impl2) { - exists(Type rootType, TypeMention selfTy1, TypeMention selfTy2 | - impl1 != impl2 and - implSiblingCandidate(impl1, trait, rootType, selfTy1) and - implSiblingCandidate(impl2, trait, rootType, selfTy2) and - // In principle the second conjunct below should be superflous, but we still - // have ill-formed type mentions for types that we don't understand. For - // those checking both directions restricts further. Note also that we check - // syntactic equality, whereas equality up to renaming would be more - // correct. - typeMentionEqual(selfTy1, selfTy2) and - typeMentionEqual(selfTy2, selfTy1) + impl1 != impl2 and + ( + exists(Type rootType, TypeMention selfTy1, TypeMention selfTy2 | + implSiblingCandidate(impl1, trait, rootType, selfTy1) and + implSiblingCandidate(impl2, trait, rootType, selfTy2) and + // In principle the second conjunct below should be superflous, but we still + // have ill-formed type mentions for types that we don't understand. For + // those checking both directions restricts further. Note also that we check + // syntactic equality, whereas equality up to renaming would be more + // correct. + typeMentionEqual(selfTy1, selfTy2) and + typeMentionEqual(selfTy2, selfTy1) + ) + or + blanketImplSiblingCandidate(impl1, trait) and + blanketImplSiblingCandidate(impl2, trait) ) } @@ -62,7 +74,7 @@ private predicate implSiblings(TraitItemNode trait, Impl impl1, Impl impl2) { * exists for the same type. */ pragma[nomagic] -private predicate implHasSibling(Impl impl, Trait trait) { implSiblings(trait, impl, _) } +private predicate implHasSibling(ImplItemNode impl, Trait trait) { implSiblings(trait, impl, _) } /** * Holds if type parameter `tp` of `trait` occurs in the function `f` with the name diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll index 8a72c967867..d375ddfc984 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll @@ -1,8 +1,9 @@ private import rust private import codeql.rust.internal.PathResolution -private import TypeInference private import Type +private import TypeAbstraction private import TypeMention +private import TypeInference private newtype TFunctionPosition = TArgumentFunctionPosition(ArgumentPosition pos) or @@ -355,7 +356,7 @@ module ArgsAreInstantiationsOf { string toString() { result = call.toString() + " [arg " + pos + "]" } } - private module ArgIsInstantiationOfInput implements + private module ArgIsInstantiationOfToIndexInput implements IsInstantiationOfInputSig { pragma[nomagic] @@ -388,7 +389,7 @@ module ArgsAreInstantiationsOf { } private module ArgIsInstantiationOfToIndex = - ArgIsInstantiationOf; + ArgIsInstantiationOf; pragma[nomagic] private predicate argsAreInstantiationsOfToIndex( @@ -412,4 +413,24 @@ module ArgsAreInstantiationsOf { rnk = max(int r | toCheckRanked(i, f, _, r)) ) } + + pragma[nomagic] + private predicate argsAreNotInstantiationsOf0( + Input::Call call, FunctionPosition pos, ImplOrTraitItemNode i + ) { + ArgIsInstantiationOfToIndex::argIsNotInstantiationOf(MkCallAndPos(call, pos), i, _, _) + } + + /** + * Holds if _some_ argument of `call` has a type that is not an instantiation of the + * type of the corresponding parameter of `f` inside `i`. + */ + pragma[nomagic] + predicate argsAreNotInstantiationsOf(Input::Call call, ImplOrTraitItemNode i, Function f) { + exists(FunctionPosition pos | + argsAreNotInstantiationsOf0(call, pos, i) and + call.hasTargetCand(i, f) and + Input::toCheck(i, f, pos, _) + ) + } } diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll b/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll index df08d84edd0..bf25d96cfa4 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll @@ -9,10 +9,17 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.frameworks.stdlib.Stdlib private import codeql.rust.frameworks.stdlib.Builtins as Builtins +/** Gets a type alias of `trait` or of a supertrait of `trait`. */ +private TypeAlias getTraitTypeAlias(Trait trait) { + result = trait.getSupertrait*().getAssocItemList().getAnAssocItem() +} + /** - * Holds if a dyn trait type should have a type parameter associated with `n`. A - * dyn trait type inherits the type parameters of the trait it implements. That - * includes the type parameters corresponding to associated types. + * Holds if a dyn trait type for the trait `trait` should have a type parameter + * associated with `n`. + * + * A dyn trait type inherits the type parameters of the trait it implements. + * That includes the type parameters corresponding to associated types. * * For instance in * ```rust @@ -24,10 +31,7 @@ private import codeql.rust.frameworks.stdlib.Builtins as Builtins */ private predicate dynTraitTypeParameter(Trait trait, AstNode n) { trait = any(DynTraitTypeRepr dt).getTrait() and - ( - n = trait.getGenericParamList().getATypeParam() or - n = trait.(TraitItemNode).getAnAssocItem().(TypeAlias) - ) + n = [trait.getGenericParamList().getATypeParam().(AstNode), getTraitTypeAlias(trait)] } cached @@ -39,8 +43,10 @@ newtype TType = TNeverType() or TUnknownType() or TTypeParamTypeParameter(TypeParam t) or - TAssociatedTypeTypeParameter(TypeAlias t) { any(TraitItemNode trait).getAnAssocItem() = t } or - TDynTraitTypeParameter(AstNode n) { dynTraitTypeParameter(_, n) } or + TAssociatedTypeTypeParameter(Trait trait, TypeAlias typeAlias) { + getTraitTypeAlias(trait) = typeAlias + } or + TDynTraitTypeParameter(Trait trait, AstNode n) { dynTraitTypeParameter(trait, n) } or TImplTraitTypeParameter(ImplTraitTypeRepr implTrait, TypeParam tp) { implTraitTypeParam(implTrait, _, tp) } or @@ -90,6 +96,7 @@ abstract class Type extends TType { class TupleType extends StructType { private int arity; + pragma[nomagic] TupleType() { arity = this.getTypeItem().(Builtins::TupleType).getArity() } /** Gets the arity of this tuple type. */ @@ -197,6 +204,7 @@ class TraitType extends Type, TTrait { * Array types like `[i64; 5]` are modeled as normal generic types. */ class ArrayType extends StructType { + pragma[nomagic] ArrayType() { this.getTypeItem() instanceof Builtins::ArrayType } override string toString() { result = "[;]" } @@ -210,12 +218,14 @@ TypeParamTypeParameter getArrayTypeParameter() { abstract class RefType extends StructType { } class RefMutType extends RefType { + pragma[nomagic] RefMutType() { this.getTypeItem() instanceof Builtins::RefMutType } override string toString() { result = "&mut" } } class RefSharedType extends RefType { + pragma[nomagic] RefSharedType() { this.getTypeItem() instanceof Builtins::RefSharedType } override string toString() { result = "&" } @@ -270,17 +280,10 @@ class DynTraitType extends Type, TDynTraitType { DynTraitType() { this = TDynTraitType(trait) } override DynTraitTypeParameter getPositionalTypeParameter(int i) { - result = TDynTraitTypeParameter(trait.getGenericParamList().getTypeParam(i)) + result.getTypeParam() = trait.getGenericParamList().getTypeParam(i) } - override TypeParameter getATypeParameter() { - result = super.getATypeParameter() - or - exists(AstNode n | - dynTraitTypeParameter(trait, n) and - result = TDynTraitTypeParameter(n) - ) - } + override DynTraitTypeParameter getATypeParameter() { result.getTrait() = trait } Trait getTrait() { result = trait } @@ -313,6 +316,7 @@ class ImplTraitReturnType extends ImplTraitType { * with a single type argument. */ class SliceType extends StructType { + pragma[nomagic] SliceType() { this.getTypeItem() instanceof Builtins::SliceType } override string toString() { result = "[]" } @@ -339,12 +343,14 @@ TypeParamTypeParameter getPtrTypeParameter() { } class PtrMutType extends PtrType { + pragma[nomagic] PtrMutType() { this.getTypeItem() instanceof Builtins::PtrMutType } override string toString() { result = "*mut" } } class PtrConstType extends PtrType { + pragma[nomagic] PtrConstType() { this.getTypeItem() instanceof Builtins::PtrConstType } override string toString() { result = "*const" } @@ -427,30 +433,54 @@ class TypeParamTypeParameter extends TypeParameter, TTypeParamTypeParameter { * // ... * } * ``` + * Furthermore, associated types of a supertrait induce a corresponding type + * parameter in any subtraits. E.g., if we have a trait `SubTrait: ATrait` then + * `SubTrait` also has a type parameter for the associated type + * `AssociatedType`. */ class AssociatedTypeTypeParameter extends TypeParameter, TAssociatedTypeTypeParameter { + private Trait trait; private TypeAlias typeAlias; - AssociatedTypeTypeParameter() { this = TAssociatedTypeTypeParameter(typeAlias) } + AssociatedTypeTypeParameter() { this = TAssociatedTypeTypeParameter(trait, typeAlias) } TypeAlias getTypeAlias() { result = typeAlias } /** Gets the trait that contains this associated type declaration. */ - TraitItemNode getTrait() { result.getAnAssocItem() = typeAlias } + TraitItemNode getTrait() { result = trait } - override ItemNode getDeclaringItem() { result = this.getTrait() } + /** + * Holds if this associated type type parameter corresponds directly its + * trait, that is, it is not inherited from a supertrait. + */ + predicate isDirect() { trait.(TraitItemNode).getAnAssocItem() = typeAlias } - override string toString() { result = typeAlias.getName().getText() } + override ItemNode getDeclaringItem() { result = trait } + + override string toString() { + result = typeAlias.getName().getText() + "[" + trait.getName().toString() + "]" + } override Location getLocation() { result = typeAlias.getLocation() } } +/** Gets the associated type type-parameter corresponding directly to `typeAlias`. */ +AssociatedTypeTypeParameter getAssociatedTypeTypeParameter(TypeAlias typeAlias) { + result.isDirect() and result.getTypeAlias() = typeAlias +} + +/** Gets the dyn type type-parameter corresponding directly to `typeAlias`. */ +DynTraitTypeParameter getDynTraitTypeParameter(TypeAlias typeAlias) { + result.getTraitTypeParameter() = getAssociatedTypeTypeParameter(typeAlias) +} + class DynTraitTypeParameter extends TypeParameter, TDynTraitTypeParameter { + private Trait trait; private AstNode n; - DynTraitTypeParameter() { this = TDynTraitTypeParameter(n) } + DynTraitTypeParameter() { this = TDynTraitTypeParameter(trait, n) } - Trait getTrait() { dynTraitTypeParameter(result, n) } + Trait getTrait() { result = trait } /** Gets the dyn trait type that this type parameter belongs to. */ DynTraitType getDynTraitType() { result.getTrait() = this.getTrait() } @@ -465,7 +495,7 @@ class DynTraitTypeParameter extends TypeParameter, TDynTraitTypeParameter { TypeParameter getTraitTypeParameter() { result.(TypeParamTypeParameter).getTypeParam() = n or - result.(AssociatedTypeTypeParameter).getTypeAlias() = n + result = TAssociatedTypeTypeParameter(trait, n) } private string toStringInner() { @@ -546,58 +576,6 @@ class ImplTraitTypeTypeParameter extends ImplTraitType, TypeParameter { override TypeParameter getPositionalTypeParameter(int i) { none() } } -/** - * A type abstraction. I.e., a place in the program where type variables are - * introduced. - * - * Example: - * ```rust - * impl Foo { } - * // ^^^^^^ a type abstraction - * ``` - */ -abstract class TypeAbstraction extends AstNode { - abstract TypeParameter getATypeParameter(); -} - -final class ImplTypeAbstraction extends TypeAbstraction, Impl { - override TypeParamTypeParameter getATypeParameter() { - result.getTypeParam() = this.getGenericParamList().getATypeParam() - } -} - -final class DynTypeAbstraction extends TypeAbstraction, DynTraitTypeRepr { - override TypeParameter getATypeParameter() { - result = any(DynTraitTypeParameter tp | tp.getTrait() = this.getTrait()).getTraitTypeParameter() - } -} - -final class TraitTypeAbstraction extends TypeAbstraction, Trait { - override TypeParameter getATypeParameter() { - result.(TypeParamTypeParameter).getTypeParam() = this.getGenericParamList().getATypeParam() - or - result.(AssociatedTypeTypeParameter).getTrait() = this - or - result.(SelfTypeParameter).getTrait() = this - } -} - -final class TypeBoundTypeAbstraction extends TypeAbstraction, TypeBound { - override TypeParameter getATypeParameter() { none() } -} - -final class SelfTypeBoundTypeAbstraction extends TypeAbstraction, Name { - SelfTypeBoundTypeAbstraction() { any(TraitTypeAbstraction trait).getName() = this } - - override TypeParameter getATypeParameter() { none() } -} - -final class ImplTraitTypeReprAbstraction extends TypeAbstraction, ImplTraitTypeRepr { - override TypeParameter getATypeParameter() { - implTraitTypeParam(this, _, result.(TypeParamTypeParameter).getTypeParam()) - } -} - /** * Holds if `t` is a valid complex [`self` root type][1]. * diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeAbstraction.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeAbstraction.qll new file mode 100644 index 00000000000..d5163be1b6e --- /dev/null +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeAbstraction.qll @@ -0,0 +1,79 @@ +private import rust +private import codeql.rust.elements.internal.generated.Raw +private import codeql.rust.elements.internal.generated.Synth +private import Type + +/** + * A type abstraction. I.e., a place in the program where type variables are + * introduced. + * + * Example: + * ```rust + * impl Foo { } + * // ^^^^^^ a type abstraction + * ``` + */ +abstract class TypeAbstraction extends AstNode { + abstract TypeParameter getATypeParameter(); +} + +final class ImplTypeAbstraction extends TypeAbstraction, Impl { + override TypeParamTypeParameter getATypeParameter() { + result.getTypeParam() = this.getGenericParamList().getATypeParam() + } +} + +private predicate idDynTraitTypeRepr(Raw::DynTraitTypeRepr x, Raw::DynTraitTypeRepr y) { x = y } + +private predicate idOfDynTraitTypeRepr(Raw::DynTraitTypeRepr x, int y) = + equivalenceRelation(idDynTraitTypeRepr/2)(x, y) + +private int idOfDynTraitTypeRepr(DynTraitTypeRepr node) { + idOfDynTraitTypeRepr(Synth::convertAstNodeToRaw(node), result) +} + +/** Holds if `dt` is the (arbitrarily chosen) canonical dyn trait type abstraction for `trait`. */ +private predicate canonicalDynTraitTypeAbstraction(DynTraitTypeRepr dt) { + exists(Trait trait | + dt = min(DynTraitTypeRepr d | d.getTrait() = trait | d order by idOfDynTraitTypeRepr(d)) + ) +} + +final class DynTypeAbstraction extends TypeAbstraction, DynTraitTypeRepr { + DynTypeAbstraction() { + // We pick a "canonical" `dyn Trait` in order to avoid including multiple + // entries in `conditionSatisfiesConstraint` with the exact same effect when + // `dyn Trait` occurs multiple times for the same trait. + canonicalDynTraitTypeAbstraction(this) + } + + override TypeParameter getATypeParameter() { + result = any(DynTraitTypeParameter tp | tp.getTrait() = this.getTrait()).getTraitTypeParameter() + } +} + +final class TraitTypeAbstraction extends TypeAbstraction, Trait { + override TypeParameter getATypeParameter() { + result.(TypeParamTypeParameter).getTypeParam() = this.getGenericParamList().getATypeParam() + or + result.(AssociatedTypeTypeParameter).getTrait() = this + or + result.(SelfTypeParameter).getTrait() = this + } +} + +final class TypeBoundTypeAbstraction extends TypeAbstraction, TypeBound { + override TypeParameter getATypeParameter() { none() } +} + +final class SelfTypeBoundTypeAbstraction extends TypeAbstraction, Name { + SelfTypeBoundTypeAbstraction() { any(TraitTypeAbstraction trait).getName() = this } + + override TypeParameter getATypeParameter() { none() } +} + +final class ImplTraitTypeReprAbstraction extends TypeAbstraction, ImplTraitTypeRepr { + override TypeParamTypeParameter getATypeParameter() { + exists(TImplTraitTypeParameter(this, result.getTypeParam())) + } +} diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index 46454ec88b0..10df835cc08 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -5,6 +5,8 @@ private import codeql.util.Option private import rust private import codeql.rust.internal.PathResolution private import Type +private import TypeAbstraction +private import TypeAbstraction as TA private import Type as T private import TypeMention private import codeql.rust.internal.typeinference.DerefChain @@ -37,7 +39,7 @@ private module Input1 implements InputSig1 { class TypeParameter = T::TypeParameter; - class TypeAbstraction = T::TypeAbstraction; + class TypeAbstraction = TA::TypeAbstraction; class TypeArgumentPosition extends TTypeArgumentPosition { int asMethodTypeArgumentPosition() { this = TMethodTypeArgumentPosition(result) } @@ -90,7 +92,7 @@ private module Input1 implements InputSig1 { tp = rank[result](TypeParameter tp0, int kind, int id1, int id2 | kind = 1 and - id1 = 0 and + id1 = idOfTypeParameterAstNode(tp0.(DynTraitTypeParameter).getTrait()) and id2 = idOfTypeParameterAstNode([ tp0.(DynTraitTypeParameter).getTypeParam().(AstNode), @@ -102,10 +104,13 @@ private module Input1 implements InputSig1 { id2 = idOfTypeParameterAstNode(tp0.(ImplTraitTypeParameter).getTypeParam()) or kind = 3 and + id1 = idOfTypeParameterAstNode(tp0.(AssociatedTypeTypeParameter).getTrait()) and + id2 = idOfTypeParameterAstNode(tp0.(AssociatedTypeTypeParameter).getTypeAlias()) + or + kind = 4 and id1 = 0 and exists(AstNode node | id2 = idOfTypeParameterAstNode(node) | node = tp0.(TypeParamTypeParameter).getTypeParam() or - node = tp0.(AssociatedTypeTypeParameter).getTypeAlias() or node = tp0.(SelfTypeParameter).getTrait() or node = tp0.(ImplTraitTypeTypeParameter).getImplTraitTypeRepr() ) @@ -1284,6 +1289,13 @@ private class BorrowKind extends TBorrowKind { } } +// for now, we do not handle ambiguous targets when one of the types is itself +// a constrained type parameter; we should be checking the constraints in this case +private predicate typeCanBeUsedForDisambiguation(Type t) { + not t instanceof TypeParameter or + t.(TypeParamTypeParameter).getTypeParam() = any(TypeParam tp | not tp.hasTypeBound()) +} + /** * Provides logic for resolving calls to methods. * @@ -2188,8 +2200,6 @@ private module MethodResolution { exists(mc) and constraint.(TraitType).getTrait() instanceof DerefTrait } - - predicate useUniversalConditions() { none() } } private module MethodCallSatisfiesDerefConstraint = @@ -2229,7 +2239,8 @@ private module MethodResolution { methodCallBlanketLikeCandidate(mc, _, impl, _, blanketPath, blanketTypeParam) and // Only apply blanket implementations when no other implementations are possible; // this is to account for codebases that use the (unstable) specialization feature - // (https://rust-lang.github.io/rfcs/1210-impl-specialization.html) + // (https://rust-lang.github.io/rfcs/1210-impl-specialization.html), as well as + // cases where our blanket implementation filtering is not precise enough. (mcc.hasNoCompatibleNonBlanketTarget() or not impl.isBlanketImplementation()) | borrow.isNoBorrow() @@ -2379,10 +2390,7 @@ private module MethodResolution { exists(TypePath path, Type t0 | FunctionOverloading::functionResolutionDependsOnArgument(i, f, pos, path, t0) and t.appliesTo(f, i, pos) and - // for now, we do not handle ambiguous targets when one of the types it iself - // a type parameter; we should be checking the constraints on that type parameter - // in this case - not t0 instanceof TypeParameter + typeCanBeUsedForDisambiguation(t0) ) } @@ -2741,7 +2749,7 @@ private module NonMethodResolution { * Gets the blanket function that this call may resolve to, if any. */ pragma[nomagic] - private NonMethodFunction resolveCallTargetBlanketCand(ImplItemNode impl) { + NonMethodFunction resolveCallTargetBlanketCand(ImplItemNode impl) { exists(string name | this.hasNameAndArity(pragma[only_bind_into](name), _) and ArgIsInstantiationOfBlanketParam::argIsInstantiationOf(MkCallAndBlanketPos(this, _), impl, _) and @@ -2756,12 +2764,11 @@ private module NonMethodResolution { predicate hasTrait() { exists(this.getTrait()) } pragma[nomagic] - NonMethodFunction resolveAssocCallTargetCand(ImplItemNode i) { + NonMethodFunction resolveCallTargetNonBlanketCand(ImplItemNode i) { not this.hasTrait() and result = this.getPathResolutionResolved() and - result = i.getASuccessor(_) - or - result = this.resolveCallTargetBlanketCand(i) + result = i.getASuccessor(_) and + FunctionOverloading::functionResolutionDependsOnArgument(_, result, _, _, _) } AstNode getNodeAt(FunctionPosition pos) { @@ -2793,6 +2800,21 @@ private module NonMethodResolution { trait = this.getTrait() } + /** + * Holds if this call has no compatible non-blanket target, and it has some + * candidate blanket target. + */ + pragma[nomagic] + predicate hasNoCompatibleNonBlanketTarget() { + this.resolveCallTargetBlanketLikeCandidate(_, _, _, _) and + not exists(this.resolveCallTargetViaPathResolution()) and + forall(ImplOrTraitItemNode i, Function f | + this.(NonMethodArgsAreInstantiationsOfNonBlanketInput::Call).hasTargetCand(i, f) + | + NonMethodArgsAreInstantiationsOfNonBlanket::argsAreNotInstantiationsOf(this, i, f) + ) + } + /** * Gets the target of this call, which can be resolved using only path resolution. */ @@ -2811,7 +2833,9 @@ private module NonMethodResolution { result = this.resolveCallTargetBlanketCand(i) and not FunctionOverloading::functionResolutionDependsOnArgument(_, result, _, _, _) or - NonMethodArgsAreInstantiationsOf::argsAreInstantiationsOf(this, i, result) + NonMethodArgsAreInstantiationsOfBlanket::argsAreInstantiationsOf(this, i, result) + or + NonMethodArgsAreInstantiationsOfNonBlanket::argsAreInstantiationsOf(this, i, result) } pragma[nomagic] @@ -2850,7 +2874,12 @@ private module NonMethodResolution { ) { exists(NonMethodCall fc, FunctionPosition pos | fcp = MkCallAndBlanketPos(fc, pos) and - fc.resolveCallTargetBlanketLikeCandidate(impl, pos, blanketPath, blanketTypeParam) + fc.resolveCallTargetBlanketLikeCandidate(impl, pos, blanketPath, blanketTypeParam) and + // Only apply blanket implementations when no other implementations are possible; + // this is to account for codebases that use the (unstable) specialization feature + // (https://rust-lang.github.io/rfcs/1210-impl-specialization.html), as well as + // cases where our blanket implementation filtering is not precise enough. + (fc.hasNoCompatibleNonBlanketTarget() or not impl.isBlanketImplementation()) ) } } @@ -2885,37 +2914,24 @@ private module NonMethodResolution { private module ArgIsInstantiationOfBlanketParam = ArgIsInstantiationOf; - private module NonMethodArgsAreInstantiationsOfInput implements ArgsAreInstantiationsOfInputSig { + private module NonMethodArgsAreInstantiationsOfBlanketInput implements + ArgsAreInstantiationsOfInputSig + { predicate toCheck(ImplOrTraitItemNode i, Function f, FunctionPosition pos, AssocFunctionType t) { t.appliesTo(f, i, pos) and - ( - exists(Type t0 | - // for now, we do not handle ambiguous targets when one of the types it iself - // a type parameter; we should be checking the constraints on that type parameter - // in this case - not t0 instanceof TypeParameter - | - FunctionOverloading::functionResolutionDependsOnArgument(i, f, pos, _, t0) - or - traitFunctionDependsOnPos(_, _, pos, t0, i, f) - ) + exists(Type t0 | typeCanBeUsedForDisambiguation(t0) | + FunctionOverloading::functionResolutionDependsOnArgument(i, f, pos, _, t0) or - // match against the trait function itself - exists(Trait trait | - FunctionOverloading::traitTypeParameterOccurrence(trait, f, _, pos, _, - TSelfTypeParameter(trait)) - ) + traitFunctionDependsOnPos(_, _, pos, t0, i, f) ) } - class Call extends NonMethodCall { + final class Call extends NonMethodCall { Type getArgType(FunctionPosition pos, TypePath path) { result = inferType(this.getNodeAt(pos), path) } - predicate hasTargetCand(ImplOrTraitItemNode i, Function f) { - f = this.resolveAssocCallTargetCand(i) - or + predicate hasTraitResolvedCand(ImplOrTraitItemNode i, Function f) { exists(TraitItemNode trait, NonMethodFunction resolved, ImplItemNode i1, Function f1 | this.hasTraitResolved(trait, resolved) and traitFunctionDependsOnPos(trait, resolved, _, _, i1, f1) @@ -2927,11 +2943,45 @@ private module NonMethodResolution { i = trait ) } + + predicate hasTargetCand(ImplOrTraitItemNode i, Function f) { + f = this.resolveCallTargetBlanketCand(i) + or + this.hasTraitResolvedCand(i, f) and + BlanketImplementation::isBlanketLike(i, _, _) + } } } - private module NonMethodArgsAreInstantiationsOf = - ArgsAreInstantiationsOf; + private module NonMethodArgsAreInstantiationsOfBlanket = + ArgsAreInstantiationsOf; + + private module NonMethodArgsAreInstantiationsOfNonBlanketInput implements + ArgsAreInstantiationsOfInputSig + { + predicate toCheck(ImplOrTraitItemNode i, Function f, FunctionPosition pos, AssocFunctionType t) { + NonMethodArgsAreInstantiationsOfBlanketInput::toCheck(i, f, pos, t) + or + // match against the trait function itself + t.appliesTo(f, i, pos) and + exists(Trait trait | + FunctionOverloading::traitTypeParameterOccurrence(trait, f, _, pos, _, + TSelfTypeParameter(trait)) + ) + } + + class Call extends NonMethodArgsAreInstantiationsOfBlanketInput::Call { + predicate hasTargetCand(ImplOrTraitItemNode i, Function f) { + f = this.resolveCallTargetNonBlanketCand(i) + or + this.hasTraitResolvedCand(i, f) and + not BlanketImplementation::isBlanketLike(i, _, _) + } + } + } + + private module NonMethodArgsAreInstantiationsOfNonBlanket = + ArgsAreInstantiationsOf; } abstract private class TupleLikeConstructor extends Addressable { @@ -3507,12 +3557,12 @@ private DynTraitType getFutureTraitType() { result.getTrait() instanceof FutureT pragma[nomagic] private AssociatedTypeTypeParameter getFutureOutputTypeParameter() { - result.getTypeAlias() = any(FutureTrait ft).getOutputType() + result = getAssociatedTypeTypeParameter(any(FutureTrait ft).getOutputType()) } pragma[nomagic] private DynTraitTypeParameter getDynFutureOutputTypeParameter() { - result = TDynTraitTypeParameter(any(FutureTrait ft).getOutputType()) + result.getTraitTypeParameter() = getFutureOutputTypeParameter() } pragma[nomagic] @@ -3561,8 +3611,6 @@ private module AwaitSatisfiesConstraintInput implements SatisfiesConstraintInput exists(term) and constraint.(TraitType).getTrait() instanceof FutureTrait } - - predicate useUniversalConditions() { none() } } pragma[nomagic] @@ -3759,18 +3807,16 @@ private module ForIterableSatisfiesConstraintInput implements t instanceof IntoIteratorTrait ) } - - predicate useUniversalConditions() { none() } } pragma[nomagic] private AssociatedTypeTypeParameter getIteratorItemTypeParameter() { - result.getTypeAlias() = any(IteratorTrait t).getItemType() + result = getAssociatedTypeTypeParameter(any(IteratorTrait t).getItemType()) } pragma[nomagic] private AssociatedTypeTypeParameter getIntoIteratorItemTypeParameter() { - result.getTypeAlias() = any(IntoIteratorTrait t).getItemType() + result = getAssociatedTypeTypeParameter(any(IntoIteratorTrait t).getItemType()) } pragma[nomagic] @@ -3812,8 +3858,6 @@ private module InvokedClosureSatisfiesConstraintInput implements exists(term) and constraint.(TraitType).getTrait() instanceof FnOnceTrait } - - predicate useUniversalConditions() { none() } } /** Gets the type of `ce` when viewed as an implementation of `FnOnce`. */ @@ -3822,22 +3866,35 @@ private Type invokedClosureFnTypeAt(InvokedClosureExpr ce, TypePath path) { _, path, result) } -/** Gets the path to a closure's return type. */ -private TypePath closureReturnPath() { - result = TypePath::singleton(TDynTraitTypeParameter(any(FnOnceTrait t).getOutputType())) +/** + * Gets the root type of a closure. + * + * We model closures as `dyn Fn` trait object types. A closure might implement + * only `Fn`, `FnMut`, or `FnOnce`. But since `Fn` is a subtrait of the others, + * giving closures the type `dyn Fn` works well in practice -- even if not + * entirely accurate. + */ +private DynTraitType closureRootType() { + result = TDynTraitType(any(FnTrait t)) // always exists because of the mention in `builtins/mentions.rs` } -/** Gets the path to a closure with arity `arity`s `index`th parameter type. */ +/** Gets the path to a closure's return type. */ +private TypePath closureReturnPath() { + result = + TypePath::singleton(TDynTraitTypeParameter(any(FnTrait t), any(FnOnceTrait t).getOutputType())) +} + +/** Gets the path to a closure with arity `arity`'s `index`th parameter type. */ pragma[nomagic] private TypePath closureParameterPath(int arity, int index) { result = - TypePath::cons(TDynTraitTypeParameter(any(FnOnceTrait t).getTypeParam()), + TypePath::cons(TDynTraitTypeParameter(_, any(FnTrait t).getTypeParam()), TypePath::singleton(getTupleTypeParameter(arity, index))) } /** Gets the path to the return type of the `FnOnce` trait. */ private TypePath fnReturnPath() { - result = TypePath::singleton(TAssociatedTypeTypeParameter(any(FnOnceTrait t).getOutputType())) + result = TypePath::singleton(getAssociatedTypeTypeParameter(any(FnOnceTrait t).getOutputType())) } /** @@ -3869,9 +3926,7 @@ private Type inferDynamicCallExprType(Expr n, TypePath path) { or // _If_ the invoked expression has the type of a closure, then we propagate // the surrounding types into the closure. - exists(int arity, TypePath path0 | - ce.getTypeAt(TypePath::nil()).(DynTraitType).getTrait() instanceof FnOnceTrait - | + exists(int arity, TypePath path0 | ce.getTypeAt(TypePath::nil()) = closureRootType() | // Propagate the type of arguments to the parameter types of closure exists(int index, ArgList args | n = ce and @@ -3895,10 +3950,10 @@ private Type inferClosureExprType(AstNode n, TypePath path) { exists(ClosureExpr ce | n = ce and path.isEmpty() and - result = TDynTraitType(any(FnOnceTrait t)) // always exists because of the mention in `builtins/mentions.rs` + result = closureRootType() or n = ce and - path = TypePath::singleton(TDynTraitTypeParameter(any(FnOnceTrait t).getTypeParam())) and + path = TypePath::singleton(TDynTraitTypeParameter(_, any(FnTrait t).getTypeParam())) and result.(TupleType).getArity() = ce.getNumberOfParams() or // Propagate return type annotation to body diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInferenceConsistency.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInferenceConsistency.qll index 11ad9bef2a2..cde873f3685 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInferenceConsistency.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInferenceConsistency.qll @@ -18,6 +18,8 @@ query predicate illFormedTypeMention(TypeMention tm) { any(PathTypeMention ptm | exists(ptm.resolvePathTypeAt(TypePath::nil())) and not exists(ptm.resolveType()) + or + ptm.(NonAliasPathTypeMention).getResolved() instanceof TypeAlias ) and // Only include inconsistencies in the source, as we otherwise get // inconsistencies from library code in every project. diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll index 41146e22c1b..063e9beffd3 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll @@ -4,6 +4,7 @@ private import rust private import codeql.rust.internal.PathResolution private import codeql.rust.frameworks.stdlib.Stdlib private import Type +private import TypeAbstraction private import TypeInference /** An AST node that may mention a type. */ @@ -148,30 +149,11 @@ class NonAliasPathTypeMention extends PathTypeMention { TypeItemNode getResolved() { result = resolved } - /** - * Gets a type alias with the name `name` of the trait that this path resolves - * to, if any. - */ pragma[nomagic] - private TypeAlias getResolvedTraitAlias(string name) { - result = resolved.(TraitItemNode).getAnAssocItem() and - name = result.getName().getText() - } - - pragma[nomagic] - private TypeRepr getAssocTypeArg(string name) { + private TypeMention getAssocTypeArg(string name) { result = this.getSegment().getGenericArgList().getAssocTypeArg(name) } - /** Gets the type argument for the associated type `alias`, if any. */ - pragma[nomagic] - private TypeRepr getAnAssocTypeArgument(TypeAlias alias) { - exists(string name | - alias = this.getResolvedTraitAlias(name) and - result = this.getAssocTypeArg(name) - ) - } - /** * Gets the type mention that instantiates the implicit `Self` type parameter * for this path, if it occurs in the position of a trait bound. @@ -231,7 +213,7 @@ class NonAliasPathTypeMention extends PathTypeMention { // associated types of `Fn` and `FnMut` yet. // // [1]: https://doc.rust-lang.org/reference/paths.html#grammar-TypePathFn - exists(FnOnceTrait t, PathSegment s | + exists(AnyFnTrait t, PathSegment s | t = resolved and s = this.getSegment() and s.hasParenthesizedArgList() @@ -239,7 +221,7 @@ class NonAliasPathTypeMention extends PathTypeMention { tp = TTypeParamTypeParameter(t.getTypeParam()) and result = s.getParenthesizedArgList().(TypeMention).resolveTypeAt(path) or - tp = TAssociatedTypeTypeParameter(t.getOutputType()) and + tp = TAssociatedTypeTypeParameter(t, any(FnOnceTrait tr).getOutputType()) and ( result = s.getRetType().getTypeRepr().(TypeMention).resolveTypeAt(path) or @@ -249,19 +231,47 @@ class NonAliasPathTypeMention extends PathTypeMention { path.isEmpty() ) ) + or + // If `path` is the supertrait of a trait block then any associated types + // of the supertrait should be instantiated with the subtrait's + // corresponding copies. + // + // As an example, for + // ```rust + // trait Sub: Super { + // // ^^^^^ this + // ``` + // we do something to the effect of: + // ```rust + // trait Sub: Super + // ``` + // Where `Assoc` is an associated type of `Super` and `Assoc[Sub]` denotes + // the copy of the type parameter inherited by `Sub`. + exists(Trait subtrait, TypeAlias alias | + subtrait.getATypeBound().getTypeRepr().(PathTypeRepr).getPath() = this and + result = TAssociatedTypeTypeParameter(subtrait, alias) and + tp = TAssociatedTypeTypeParameter(resolved, alias) and + path.isEmpty() + ) } - pragma[nomagic] + bindingset[name] private TypeAlias getResolvedAlias(string name) { result = resolved.(TraitItemNode).getAssocItem(name) } + bindingset[name] + private TypeAlias getResolvedTraitAssocType(string name) { + result = resolved.(TraitItemNode).getASuccessor(name) + } + /** Gets the type mention in this path for the type parameter `tp`, if any. */ pragma[nomagic] private TypeMention getTypeMentionForTypeParameter(TypeParameter tp) { - exists(TypeAlias alias | - result = this.getAnAssocTypeArgument(alias) and - tp = TAssociatedTypeTypeParameter(alias) + exists(TypeAlias alias, string name | + result = this.getAssocTypeArg(name) and + tp = TAssociatedTypeTypeParameter(resolved, alias) and + alias = this.getResolvedTraitAssocType(name) ) or // If `path` is the trait of an `impl` block then any associated types @@ -279,9 +289,9 @@ class NonAliasPathTypeMention extends PathTypeMention { // the rhs. of the type alias is a type argument to the trait. exists(ImplItemNode impl, TypeAlias alias, string name | this = impl.getTraitPath() and - alias = impl.getASuccessor(pragma[only_bind_into](name)) and + alias = impl.getASuccessor(name) and result = alias.getTypeRepr() and - tp = TAssociatedTypeTypeParameter(this.getResolvedAlias(pragma[only_bind_into](name))) + tp = TAssociatedTypeTypeParameter(resolved, this.getResolvedAlias(name)) ) } @@ -299,7 +309,7 @@ class NonAliasPathTypeMention extends PathTypeMention { or result = TTypeParamTypeParameter(resolved) or - result = TAssociatedTypeTypeParameter(resolved) + result = TAssociatedTypeTypeParameter(resolvePath(this.getQualifier()), resolved) } override Type resolvePathTypeAt(TypePath typePath) { @@ -384,9 +394,8 @@ class TraitMention extends TypeMention instanceof TraitItemNode { result = TSelfTypeParameter(this) or exists(TypeAlias alias | - alias = super.getAnAssocItem() and typePath = TypePath::singleton(result) and - result = TAssociatedTypeTypeParameter(alias) + result = TAssociatedTypeTypeParameter(this, alias) ) or exists(TypeParam tp | @@ -540,7 +549,7 @@ class DynTraitTypeReprMention extends TypeMention instanceof DynTraitTypeRepr { // impl Trait for (dyn Trait) // ``` // To achieve this: -// - `DynTypeAbstraction` is an abstraction over type parameters of the trait. +// - `DynTypeAbstraction` is an abstraction over the type parameters of the trait. // - `DynTypeBoundListMention` (this class) is a type mention which has `dyn // Trait` at the root and which for every type parameter of `dyn Trait` has the // corresponding type parameter of the trait. @@ -555,7 +564,14 @@ class DynTypeBoundListMention extends TypeMention instanceof TypeBoundList { private Trait trait; DynTypeBoundListMention() { - exists(DynTraitTypeRepr dyn | this = dyn.getTypeBoundList() and trait = dyn.getTrait()) + exists(DynTraitTypeRepr dyn | + // We only need this type mention when the `dyn Trait` is a type + // abstraction, that is, when it's "canonical" and used in + // `conditionSatisfiesConstraint`. + dyn instanceof DynTypeAbstraction and + this = dyn.getTypeBoundList() and + trait = dyn.getTrait() + ) } override Type resolveTypeAt(TypePath path) { diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index 568418c1332..c976e05b9b9 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.2.4-dev +version: 0.2.5-dev groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 90861289dd4..66a48986364 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -109,11 +109,23 @@ yaml_locations(unique int locatable: @yaml_locatable ref, @yaml_locatable = @yaml_node | @yaml_error; /*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ databaseMetadata( string metadataKey: string ref, string value: string ref ); +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ overlayChangedFiles( string path: string ref ); diff --git a/rust/ql/lib/upgrades/90861289dd4c4d9fc029ed0fc249c1e11c5aab01/old.dbscheme b/rust/ql/lib/upgrades/90861289dd4c4d9fc029ed0fc249c1e11c5aab01/old.dbscheme new file mode 100644 index 00000000000..90861289dd4 --- /dev/null +++ b/rust/ql/lib/upgrades/90861289dd4c4d9fc029ed0fc249c1e11c5aab01/old.dbscheme @@ -0,0 +1,3544 @@ +// 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 +| @cast_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_expr +| @match_expr +| @method_call_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_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_arg_lists( + int id: @call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_attrs( + int id: @call_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr 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_closure_bodies( + int id: @closure_expr ref, + int closure_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 = + @asm_expr +| @assoc_item +| @extern_block +| @extern_crate +| @extern_item +| @impl +| @macro_def +| @macro_rules +| @module +| @trait +| @trait_alias +| @type_item +| @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_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 +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_arg_lists( + int id: @method_call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +method_call_expr_attrs( + int id: @method_call_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +method_call_expr_generic_arg_lists( + int id: @method_call_expr ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +method_call_expr_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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +@type_item = + @enum +| @struct +| @union +; + +#keyset[id, index] +type_item_derive_macro_expansions( + int id: @type_item ref, + int index: int ref, + int derive_macro_expansion: @macro_items ref +); + +#keyset[id, index] +type_item_attrs( + int id: @type_item ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_item_generic_param_lists( + int id: @type_item ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_item_names( + int id: @type_item ref, + int name: @name ref +); + +#keyset[id] +type_item_visibilities( + int id: @type_item ref, + int visibility: @visibility ref +); + +#keyset[id] +type_item_where_clauses( + int id: @type_item 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] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list 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_function_bodies( + int id: @function ref, + int function_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] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list 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] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list 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/90861289dd4c4d9fc029ed0fc249c1e11c5aab01/rust.dbscheme b/rust/ql/lib/upgrades/90861289dd4c4d9fc029ed0fc249c1e11c5aab01/rust.dbscheme new file mode 100644 index 00000000000..66a48986364 --- /dev/null +++ b/rust/ql/lib/upgrades/90861289dd4c4d9fc029ed0fc249c1e11c5aab01/rust.dbscheme @@ -0,0 +1,3556 @@ +// 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 -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +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 +| @cast_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_expr +| @match_expr +| @method_call_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_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_arg_lists( + int id: @call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_attrs( + int id: @call_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr 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_closure_bodies( + int id: @closure_expr ref, + int closure_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 = + @asm_expr +| @assoc_item +| @extern_block +| @extern_crate +| @extern_item +| @impl +| @macro_def +| @macro_rules +| @module +| @trait +| @trait_alias +| @type_item +| @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_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 +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_arg_lists( + int id: @method_call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +method_call_expr_attrs( + int id: @method_call_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +method_call_expr_generic_arg_lists( + int id: @method_call_expr ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +method_call_expr_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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +@type_item = + @enum +| @struct +| @union +; + +#keyset[id, index] +type_item_derive_macro_expansions( + int id: @type_item ref, + int index: int ref, + int derive_macro_expansion: @macro_items ref +); + +#keyset[id, index] +type_item_attrs( + int id: @type_item ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_item_generic_param_lists( + int id: @type_item ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_item_names( + int id: @type_item ref, + int name: @name ref +); + +#keyset[id] +type_item_visibilities( + int id: @type_item ref, + int visibility: @visibility ref +); + +#keyset[id] +type_item_where_clauses( + int id: @type_item 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] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list 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_function_bodies( + int id: @function ref, + int function_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] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list 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] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list 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/90861289dd4c4d9fc029ed0fc249c1e11c5aab01/upgrade.properties b/rust/ql/lib/upgrades/90861289dd4c4d9fc029ed0fc249c1e11c5aab01/upgrade.properties new file mode 100644 index 00000000000..00fae2d3bc6 --- /dev/null +++ b/rust/ql/lib/upgrades/90861289dd4c4d9fc029ed0fc249c1e11c5aab01/upgrade.properties @@ -0,0 +1,2 @@ +description: Sections for databaseMetadata and overlayChangedFiles +compatibility: full diff --git a/rust/ql/src/CHANGELOG.md b/rust/ql/src/CHANGELOG.md index 36aec92674d..6f17ba91133 100644 --- a/rust/ql/src/CHANGELOG.md +++ b/rust/ql/src/CHANGELOG.md @@ -1,3 +1,12 @@ +## 0.1.25 + +### Minor Analysis Improvements + +* Fixed common false positives for the `rust/unused-variable` and `rust/unused-value` queries. +* Fixed false positives from the `rust/access-invalid-pointer` query, by only considering dereferences of raw pointers as sinks. +* Fixed false positives from the `rust/access-after-lifetime-ended` query, involving calls to trait methods. +* The `rust/hard-coded-cryptographic-value` query has been extended with new heuristic sinks identifying passwords, initialization vectors, nonces and salts. + ## 0.1.24 No user-facing changes. diff --git a/rust/ql/src/change-notes/2025-12-01-hard-coded-cryptographic-value.md b/rust/ql/src/change-notes/2025-12-01-hard-coded-cryptographic-value.md deleted file mode 100644 index f211982df62..00000000000 --- a/rust/ql/src/change-notes/2025-12-01-hard-coded-cryptographic-value.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `rust/hard-coded-cryptographic-value` query has been extended with new heuristic sinks identifying passwords, initialization vectors, nonces and salts. diff --git a/rust/ql/src/change-notes/2025-12-04-access-after-lifetime-ended.md b/rust/ql/src/change-notes/2025-12-04-access-after-lifetime-ended.md deleted file mode 100644 index 1e9200eec8f..00000000000 --- a/rust/ql/src/change-notes/2025-12-04-access-after-lifetime-ended.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed false positives from the `rust/access-after-lifetime-ended` query, involving calls to trait methods. diff --git a/rust/ql/src/change-notes/2025-12-05-exclude-dereference-sinks.md b/rust/ql/src/change-notes/2025-12-05-exclude-dereference-sinks.md deleted file mode 100644 index c0ccd758e8d..00000000000 --- a/rust/ql/src/change-notes/2025-12-05-exclude-dereference-sinks.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed false positives from the `rust/access-invalid-pointer` query, by only considering dereferences of raw pointers as sinks. diff --git a/rust/ql/src/change-notes/2025-12-10-unused-variable.md b/rust/ql/src/change-notes/2025-12-10-unused-variable.md deleted file mode 100644 index 7391255e608..00000000000 --- a/rust/ql/src/change-notes/2025-12-10-unused-variable.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed common false positives for the `rust/unused-variable` and `rust/unused-value` queries. diff --git a/rust/ql/src/change-notes/released/0.1.25.md b/rust/ql/src/change-notes/released/0.1.25.md new file mode 100644 index 00000000000..36eda5e0851 --- /dev/null +++ b/rust/ql/src/change-notes/released/0.1.25.md @@ -0,0 +1,8 @@ +## 0.1.25 + +### Minor Analysis Improvements + +* Fixed common false positives for the `rust/unused-variable` and `rust/unused-value` queries. +* Fixed false positives from the `rust/access-invalid-pointer` query, by only considering dereferences of raw pointers as sinks. +* Fixed false positives from the `rust/access-after-lifetime-ended` query, involving calls to trait methods. +* The `rust/hard-coded-cryptographic-value` query has been extended with new heuristic sinks identifying passwords, initialization vectors, nonces and salts. diff --git a/rust/ql/src/codeql-pack.release.yml b/rust/ql/src/codeql-pack.release.yml index 561fd0bfe38..44eb1ee2438 100644 --- a/rust/ql/src/codeql-pack.release.yml +++ b/rust/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.24 +lastReleaseVersion: 0.1.25 diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index 6a834256d50..e8873e00339 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.25-dev +version: 0.1.26-dev groups: - rust - queries diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index 27a4192867f..0a130b8a288 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -2,22 +2,24 @@ models | 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | | 2 | Summary: <_ as alloc::string::ToString>::to_string; Argument[self].Reference; ReturnValue; taint | | 3 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint | -| 4 | Summary: <_ as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue.Reference; taint | -| 5 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | -| 6 | Summary: ::deref; Argument[self].Reference.Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value | -| 7 | Summary: ::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value | -| 8 | Summary: ::deref; Argument[self]; ReturnValue; value | -| 9 | Summary: ::from; Argument[0]; ReturnValue; taint | -| 10 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 11 | Summary: ::unwrap_or; Argument[0]; ReturnValue; value | -| 12 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 13 | Summary: ::unwrap_or_else; Argument[0].ReturnValue; ReturnValue; value | -| 14 | Summary: ::unwrap_or_else; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 15 | Summary: ::err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 16 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 17 | Summary: ::expect_err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue; value | -| 18 | Summary: ::ok; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 19 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 4 | Summary: <_ as core::convert::Into>::into; Argument[self].Element; ReturnValue.Element; taint | +| 5 | Summary: <_ as core::convert::Into>::into; Argument[self].Reference.Element; ReturnValue.Element; taint | +| 6 | Summary: <_ as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue.Reference; taint | +| 7 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 8 | Summary: ::deref; Argument[self].Reference.Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value | +| 9 | Summary: ::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value | +| 10 | Summary: ::deref; Argument[self]; ReturnValue; value | +| 11 | Summary: ::from; Argument[0]; ReturnValue; taint | +| 12 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 13 | Summary: ::unwrap_or; Argument[0]; ReturnValue; value | +| 14 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 15 | Summary: ::unwrap_or_else; Argument[0].ReturnValue; ReturnValue; value | +| 16 | Summary: ::unwrap_or_else; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 17 | Summary: ::err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 18 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 19 | Summary: ::expect_err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue; value | +| 20 | Summary: ::ok; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 21 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | edges | main.rs:23:9:23:9 | s | main.rs:24:10:24:10 | s | provenance | | | main.rs:23:9:23:9 | s | main.rs:26:12:26:12 | x | provenance | | @@ -45,8 +47,8 @@ edges | main.rs:82:5:82:5 | l | main.rs:83:10:83:10 | l | provenance | | | main.rs:115:9:115:9 | i [Box(0)] | main.rs:116:11:116:11 | i [Box(0)] | provenance | | | main.rs:115:13:115:31 | ...::new(...) [Box(0)] | main.rs:115:9:115:9 | i [Box(0)] | provenance | | -| main.rs:115:22:115:30 | source(...) | main.rs:115:13:115:31 | ...::new(...) [Box(0)] | provenance | MaD:7 | -| main.rs:116:11:116:11 | i [Box(0)] | main.rs:116:10:116:11 | * ... | provenance | MaD:6 | +| main.rs:115:22:115:30 | source(...) | main.rs:115:13:115:31 | ...::new(...) [Box(0)] | provenance | MaD:9 | +| main.rs:116:11:116:11 | i [Box(0)] | main.rs:116:10:116:11 | * ... | provenance | MaD:8 | | main.rs:123:9:123:9 | a [tuple.0] | main.rs:124:10:124:10 | a [tuple.0] | provenance | | | main.rs:123:13:123:26 | TupleExpr [tuple.0] | main.rs:123:9:123:9 | a [tuple.0] | provenance | | | main.rs:123:14:123:22 | source(...) | main.rs:123:13:123:26 | TupleExpr [tuple.0] | provenance | | @@ -129,17 +131,17 @@ edges | main.rs:278:9:278:10 | s1 [Some] | main.rs:279:10:279:11 | s1 [Some] | provenance | | | main.rs:278:14:278:29 | Some(...) [Some] | main.rs:278:9:278:10 | s1 [Some] | provenance | | | main.rs:278:19:278:28 | source(...) | main.rs:278:14:278:29 | Some(...) [Some] | provenance | | -| main.rs:279:10:279:11 | s1 [Some] | main.rs:279:10:279:20 | s1.unwrap() | provenance | MaD:10 | +| main.rs:279:10:279:11 | s1 [Some] | main.rs:279:10:279:20 | s1.unwrap() | provenance | MaD:12 | | main.rs:283:9:283:10 | s1 [Some] | main.rs:284:10:284:11 | s1 [Some] | provenance | | | main.rs:283:14:283:29 | Some(...) [Some] | main.rs:283:9:283:10 | s1 [Some] | provenance | | | main.rs:283:19:283:28 | source(...) | main.rs:283:14:283:29 | Some(...) [Some] | provenance | | -| main.rs:284:10:284:11 | s1 [Some] | main.rs:284:10:284:24 | s1.unwrap_or(...) | provenance | MaD:12 | -| main.rs:287:23:287:32 | source(...) | main.rs:287:10:287:33 | s2.unwrap_or(...) | provenance | MaD:11 | +| main.rs:284:10:284:11 | s1 [Some] | main.rs:284:10:284:24 | s1.unwrap_or(...) | provenance | MaD:14 | +| main.rs:287:23:287:32 | source(...) | main.rs:287:10:287:33 | s2.unwrap_or(...) | provenance | MaD:13 | | main.rs:291:9:291:10 | s1 [Some] | main.rs:292:10:292:11 | s1 [Some] | provenance | | | main.rs:291:14:291:29 | Some(...) [Some] | main.rs:291:9:291:10 | s1 [Some] | provenance | | | main.rs:291:19:291:28 | source(...) | main.rs:291:14:291:29 | Some(...) [Some] | provenance | | -| main.rs:292:10:292:11 | s1 [Some] | main.rs:292:10:292:32 | s1.unwrap_or_else(...) | provenance | MaD:14 | -| main.rs:295:31:295:40 | source(...) | main.rs:295:10:295:41 | s2.unwrap_or_else(...) | provenance | MaD:13 | +| main.rs:292:10:292:11 | s1 [Some] | main.rs:292:10:292:32 | s1.unwrap_or_else(...) | provenance | MaD:16 | +| main.rs:295:31:295:40 | source(...) | main.rs:295:10:295:41 | s2.unwrap_or_else(...) | provenance | MaD:15 | | main.rs:299:9:299:10 | s1 [Some] | main.rs:301:14:301:15 | s1 [Some] | provenance | | | main.rs:299:14:299:29 | Some(...) [Some] | main.rs:299:9:299:10 | s1 [Some] | provenance | | | main.rs:299:19:299:28 | source(...) | main.rs:299:14:299:29 | Some(...) [Some] | provenance | | @@ -150,16 +152,16 @@ edges | main.rs:308:32:308:45 | Ok(...) [Ok] | main.rs:308:9:308:10 | r1 [Ok] | provenance | | | main.rs:308:35:308:44 | source(...) | main.rs:308:32:308:45 | Ok(...) [Ok] | provenance | | | main.rs:309:9:309:11 | o1a [Some] | main.rs:311:10:311:12 | o1a [Some] | provenance | | -| main.rs:309:28:309:29 | r1 [Ok] | main.rs:309:28:309:34 | r1.ok() [Some] | provenance | MaD:18 | +| main.rs:309:28:309:29 | r1 [Ok] | main.rs:309:28:309:34 | r1.ok() [Some] | provenance | MaD:20 | | main.rs:309:28:309:34 | r1.ok() [Some] | main.rs:309:9:309:11 | o1a [Some] | provenance | | -| main.rs:311:10:311:12 | o1a [Some] | main.rs:311:10:311:21 | o1a.unwrap() | provenance | MaD:10 | +| main.rs:311:10:311:12 | o1a [Some] | main.rs:311:10:311:21 | o1a.unwrap() | provenance | MaD:12 | | main.rs:314:9:314:10 | r2 [Err] | main.rs:316:28:316:29 | r2 [Err] | provenance | | | main.rs:314:32:314:46 | Err(...) [Err] | main.rs:314:9:314:10 | r2 [Err] | provenance | | | main.rs:314:36:314:45 | source(...) | main.rs:314:32:314:46 | Err(...) [Err] | provenance | | | main.rs:316:9:316:11 | o2b [Some] | main.rs:318:10:318:12 | o2b [Some] | provenance | | -| main.rs:316:28:316:29 | r2 [Err] | main.rs:316:28:316:35 | r2.err() [Some] | provenance | MaD:15 | +| main.rs:316:28:316:29 | r2 [Err] | main.rs:316:28:316:35 | r2.err() [Some] | provenance | MaD:17 | | main.rs:316:28:316:35 | r2.err() [Some] | main.rs:316:9:316:11 | o2b [Some] | provenance | | -| main.rs:318:10:318:12 | o2b [Some] | main.rs:318:10:318:21 | o2b.unwrap() | provenance | MaD:10 | +| main.rs:318:10:318:12 | o2b [Some] | main.rs:318:10:318:21 | o2b.unwrap() | provenance | MaD:12 | | main.rs:322:9:322:10 | s1 [Ok] | main.rs:325:14:325:15 | s1 [Ok] | provenance | | | main.rs:322:32:322:45 | Ok(...) [Ok] | main.rs:322:9:322:10 | s1 [Ok] | provenance | | | main.rs:322:35:322:44 | source(...) | main.rs:322:32:322:45 | Ok(...) [Ok] | provenance | | @@ -169,11 +171,11 @@ edges | main.rs:335:9:335:10 | s1 [Ok] | main.rs:336:10:336:11 | s1 [Ok] | provenance | | | main.rs:335:32:335:45 | Ok(...) [Ok] | main.rs:335:9:335:10 | s1 [Ok] | provenance | | | main.rs:335:35:335:44 | source(...) | main.rs:335:32:335:45 | Ok(...) [Ok] | provenance | | -| main.rs:336:10:336:11 | s1 [Ok] | main.rs:336:10:336:22 | s1.expect(...) | provenance | MaD:16 | +| main.rs:336:10:336:11 | s1 [Ok] | main.rs:336:10:336:22 | s1.expect(...) | provenance | MaD:18 | | main.rs:339:9:339:10 | s2 [Err] | main.rs:341:10:341:11 | s2 [Err] | provenance | | | main.rs:339:32:339:46 | Err(...) [Err] | main.rs:339:9:339:10 | s2 [Err] | provenance | | | main.rs:339:36:339:45 | source(...) | main.rs:339:32:339:46 | Err(...) [Err] | provenance | | -| main.rs:341:10:341:11 | s2 [Err] | main.rs:341:10:341:26 | s2.expect_err(...) | provenance | MaD:17 | +| main.rs:341:10:341:11 | s2 [Err] | main.rs:341:10:341:26 | s2.expect_err(...) | provenance | MaD:19 | | main.rs:350:9:350:10 | s1 [A] | main.rs:352:11:352:12 | s1 [A] | provenance | | | main.rs:350:14:350:39 | ...::A(...) [A] | main.rs:350:9:350:10 | s1 [A] | provenance | | | main.rs:350:29:350:38 | source(...) | main.rs:350:14:350:39 | ...::A(...) [A] | provenance | | @@ -222,13 +224,13 @@ edges | main.rs:430:16:430:33 | [...] [element] | main.rs:430:9:430:12 | arr1 [element] | provenance | | | main.rs:430:23:430:32 | source(...) | main.rs:430:16:430:33 | [...] [element] | provenance | | | main.rs:431:9:431:10 | n1 | main.rs:432:10:432:11 | n1 | provenance | | -| main.rs:431:14:431:17 | arr1 [element] | main.rs:431:14:431:20 | arr1[2] | provenance | MaD:5 | +| main.rs:431:14:431:17 | arr1 [element] | main.rs:431:14:431:20 | arr1[2] | provenance | MaD:7 | | main.rs:431:14:431:20 | arr1[2] | main.rs:431:9:431:10 | n1 | provenance | | | main.rs:434:9:434:12 | arr2 [element] | main.rs:435:14:435:17 | arr2 [element] | provenance | | | main.rs:434:16:434:31 | [...; 10] [element] | main.rs:434:9:434:12 | arr2 [element] | provenance | | | main.rs:434:17:434:26 | source(...) | main.rs:434:16:434:31 | [...; 10] [element] | provenance | | | main.rs:435:9:435:10 | n2 | main.rs:436:10:436:11 | n2 | provenance | | -| main.rs:435:14:435:17 | arr2 [element] | main.rs:435:14:435:20 | arr2[4] | provenance | MaD:5 | +| main.rs:435:14:435:17 | arr2 [element] | main.rs:435:14:435:20 | arr2[4] | provenance | MaD:7 | | main.rs:435:14:435:20 | arr2[4] | main.rs:435:9:435:10 | n2 | provenance | | | main.rs:444:9:444:12 | arr1 [element] | main.rs:445:15:445:18 | arr1 [element] | provenance | | | main.rs:444:16:444:33 | [...] [element] | main.rs:444:9:444:12 | arr1 [element] | provenance | | @@ -249,9 +251,9 @@ edges | main.rs:470:5:470:11 | [post] mut_arr [element] | main.rs:473:10:473:16 | mut_arr [element] | provenance | | | main.rs:470:18:470:27 | source(...) | main.rs:470:5:470:11 | [post] mut_arr [element] | provenance | | | main.rs:471:9:471:9 | d | main.rs:472:10:472:10 | d | provenance | | -| main.rs:471:13:471:19 | mut_arr [element] | main.rs:471:13:471:22 | mut_arr[1] | provenance | MaD:5 | +| main.rs:471:13:471:19 | mut_arr [element] | main.rs:471:13:471:22 | mut_arr[1] | provenance | MaD:7 | | main.rs:471:13:471:22 | mut_arr[1] | main.rs:471:9:471:9 | d | provenance | | -| main.rs:473:10:473:16 | mut_arr [element] | main.rs:473:10:473:19 | mut_arr[0] | provenance | MaD:5 | +| main.rs:473:10:473:16 | mut_arr [element] | main.rs:473:10:473:19 | mut_arr[0] | provenance | MaD:7 | | main.rs:496:9:496:9 | s | main.rs:497:10:497:10 | s | provenance | | | main.rs:496:25:496:26 | source(...) | main.rs:496:9:496:9 | s | provenance | | | main.rs:505:9:505:9 | a | main.rs:506:13:506:13 | a | provenance | | @@ -263,26 +265,26 @@ edges | main.rs:506:13:506:13 | a | main.rs:506:13:506:25 | a.to_string() | provenance | MaD:2 | | main.rs:506:13:506:25 | a.to_string() | main.rs:506:9:506:9 | b | provenance | | | main.rs:507:9:507:9 | c | main.rs:512:10:512:10 | c | provenance | | -| main.rs:507:13:507:13 | b | main.rs:507:13:507:28 | b.parse() [Ok] | provenance | MaD:4 | -| main.rs:507:13:507:13 | b | main.rs:507:13:507:28 | b.parse() [Ok] | provenance | MaD:8 | -| main.rs:507:13:507:28 | b.parse() [Ok] | main.rs:507:13:507:37 | ... .unwrap() | provenance | MaD:19 | +| main.rs:507:13:507:13 | b | main.rs:507:13:507:28 | b.parse() [Ok] | provenance | MaD:6 | +| main.rs:507:13:507:13 | b | main.rs:507:13:507:28 | b.parse() [Ok] | provenance | MaD:10 | +| main.rs:507:13:507:28 | b.parse() [Ok] | main.rs:507:13:507:37 | ... .unwrap() | provenance | MaD:21 | | main.rs:507:13:507:37 | ... .unwrap() | main.rs:507:9:507:9 | c | provenance | | | main.rs:508:9:508:9 | d | main.rs:513:10:513:10 | d | provenance | | -| main.rs:508:18:508:18 | b | main.rs:508:18:508:26 | b.parse() [Ok] | provenance | MaD:4 | -| main.rs:508:18:508:18 | b | main.rs:508:18:508:26 | b.parse() [Ok] | provenance | MaD:8 | -| main.rs:508:18:508:26 | b.parse() [Ok] | main.rs:508:18:508:35 | ... .unwrap() | provenance | MaD:19 | +| main.rs:508:18:508:18 | b | main.rs:508:18:508:26 | b.parse() [Ok] | provenance | MaD:6 | +| main.rs:508:18:508:18 | b | main.rs:508:18:508:26 | b.parse() [Ok] | provenance | MaD:10 | +| main.rs:508:18:508:26 | b.parse() [Ok] | main.rs:508:18:508:35 | ... .unwrap() | provenance | MaD:21 | | main.rs:508:18:508:35 | ... .unwrap() | main.rs:508:9:508:9 | d | provenance | | | main.rs:517:9:517:10 | vs [element] | main.rs:519:10:519:11 | vs [element] | provenance | | | main.rs:517:9:517:10 | vs [element] | main.rs:523:14:523:15 | vs [element] | provenance | | | main.rs:517:14:517:34 | [...] [element] | main.rs:517:9:517:10 | vs [element] | provenance | | | main.rs:517:15:517:24 | source(...) | main.rs:517:14:517:34 | [...] [element] | provenance | | -| main.rs:519:10:519:11 | vs [element] | main.rs:519:10:519:14 | vs[0] | provenance | MaD:5 | +| main.rs:519:10:519:11 | vs [element] | main.rs:519:10:519:14 | vs[0] | provenance | MaD:7 | | main.rs:523:9:523:9 | v | main.rs:524:14:524:14 | v | provenance | | | main.rs:523:14:523:15 | vs [element] | main.rs:523:9:523:9 | v | provenance | | | main.rs:542:9:542:18 | mut vs_mut [element] | main.rs:544:10:544:15 | vs_mut [element] | provenance | | | main.rs:542:22:542:42 | [...] [element] | main.rs:542:9:542:18 | mut vs_mut [element] | provenance | | | main.rs:542:23:542:32 | source(...) | main.rs:542:22:542:42 | [...] [element] | provenance | | -| main.rs:544:10:544:15 | vs_mut [element] | main.rs:544:10:544:18 | vs_mut[0] | provenance | MaD:5 | +| main.rs:544:10:544:15 | vs_mut [element] | main.rs:544:10:544:18 | vs_mut[0] | provenance | MaD:7 | | main.rs:554:9:554:9 | a | main.rs:559:10:559:10 | a | provenance | | | main.rs:554:13:554:22 | source(...) | main.rs:554:9:554:9 | a | provenance | | | main.rs:555:9:555:9 | b | main.rs:560:15:560:15 | b | provenance | | @@ -296,12 +298,20 @@ edges | main.rs:560:15:560:15 | b | main.rs:560:14:560:15 | &b | provenance | | | main.rs:562:11:562:15 | c_ref [&ref] | main.rs:562:10:562:15 | * ... | provenance | MaD:1 | | main.rs:566:9:566:9 | a | main.rs:568:10:568:17 | a as i64 | provenance | | +| main.rs:566:9:566:9 | a | main.rs:569:10:569:10 | a | provenance | | +| main.rs:566:9:566:9 | a | main.rs:570:20:570:20 | a | provenance | | | main.rs:566:18:566:27 | source(...) | main.rs:566:9:566:9 | a | provenance | | +| main.rs:569:10:569:10 | a | main.rs:569:10:569:17 | a.into() | provenance | MaD:4 | +| main.rs:569:10:569:10 | a | main.rs:569:10:569:17 | a.into() | provenance | MaD:5 | +| main.rs:570:20:570:20 | a | main.rs:570:10:570:21 | ...::from(...) | provenance | ReflexiveFrom | | main.rs:572:9:572:9 | b | main.rs:574:10:574:17 | b as i64 | provenance | | +| main.rs:572:9:572:9 | b | main.rs:575:10:575:10 | b | provenance | | | main.rs:572:9:572:9 | b | main.rs:576:20:576:20 | b | provenance | | | main.rs:572:18:572:27 | source(...) | main.rs:572:9:572:9 | b | provenance | | +| main.rs:575:10:575:10 | b | main.rs:575:10:575:17 | b.into() | provenance | MaD:4 | +| main.rs:575:10:575:10 | b | main.rs:575:10:575:17 | b.into() | provenance | MaD:5 | | main.rs:576:20:576:20 | b | main.rs:576:10:576:21 | ...::from(...) | provenance | MaD:3 | -| main.rs:576:20:576:20 | b | main.rs:576:10:576:21 | ...::from(...) | provenance | MaD:9 | +| main.rs:576:20:576:20 | b | main.rs:576:10:576:21 | ...::from(...) | provenance | MaD:11 | nodes | main.rs:19:10:19:18 | source(...) | semmle.label | source(...) | | main.rs:23:9:23:9 | s | semmle.label | s | @@ -630,9 +640,15 @@ nodes | main.rs:566:9:566:9 | a | semmle.label | a | | main.rs:566:18:566:27 | source(...) | semmle.label | source(...) | | main.rs:568:10:568:17 | a as i64 | semmle.label | a as i64 | +| main.rs:569:10:569:10 | a | semmle.label | a | +| main.rs:569:10:569:17 | a.into() | semmle.label | a.into() | +| main.rs:570:10:570:21 | ...::from(...) | semmle.label | ...::from(...) | +| main.rs:570:20:570:20 | a | semmle.label | a | | main.rs:572:9:572:9 | b | semmle.label | b | | main.rs:572:18:572:27 | source(...) | semmle.label | source(...) | | main.rs:574:10:574:17 | b as i64 | semmle.label | b as i64 | +| main.rs:575:10:575:10 | b | semmle.label | b | +| main.rs:575:10:575:17 | b.into() | semmle.label | b.into() | | main.rs:576:10:576:21 | ...::from(...) | semmle.label | ...::from(...) | | main.rs:576:20:576:20 | b | semmle.label | b | subpaths @@ -707,5 +723,8 @@ testFailures | main.rs:561:14:561:18 | c_ref | main.rs:556:13:556:22 | source(...) | main.rs:561:14:561:18 | c_ref | $@ | main.rs:556:13:556:22 | source(...) | source(...) | | main.rs:562:10:562:15 | * ... | main.rs:556:13:556:22 | source(...) | main.rs:562:10:562:15 | * ... | $@ | main.rs:556:13:556:22 | source(...) | source(...) | | main.rs:568:10:568:17 | a as i64 | main.rs:566:18:566:27 | source(...) | main.rs:568:10:568:17 | a as i64 | $@ | main.rs:566:18:566:27 | source(...) | source(...) | +| main.rs:569:10:569:17 | a.into() | main.rs:566:18:566:27 | source(...) | main.rs:569:10:569:17 | a.into() | $@ | main.rs:566:18:566:27 | source(...) | source(...) | +| main.rs:570:10:570:21 | ...::from(...) | main.rs:566:18:566:27 | source(...) | main.rs:570:10:570:21 | ...::from(...) | $@ | main.rs:566:18:566:27 | source(...) | source(...) | | main.rs:574:10:574:17 | b as i64 | main.rs:572:18:572:27 | source(...) | main.rs:574:10:574:17 | b as i64 | $@ | main.rs:572:18:572:27 | source(...) | source(...) | +| main.rs:575:10:575:17 | b.into() | main.rs:572:18:572:27 | source(...) | main.rs:575:10:575:17 | b.into() | $@ | main.rs:572:18:572:27 | source(...) | source(...) | | main.rs:576:10:576:21 | ...::from(...) | main.rs:572:18:572:27 | source(...) | main.rs:576:10:576:21 | ...::from(...) | $@ | main.rs:572:18:572:27 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/local/main.rs b/rust/ql/test/library-tests/dataflow/local/main.rs index b3c40bd4513..41f34da6122 100644 --- a/rust/ql/test/library-tests/dataflow/local/main.rs +++ b/rust/ql/test/library-tests/dataflow/local/main.rs @@ -566,13 +566,13 @@ fn conversions() { let a: i64 = source(50); sink(a as i64); // $ hasTaintFlow=50 - sink(a.into()); // $ MISSING: hasValueFlow=50 - sink(i64::from(a)); // $ MISSING: hasTaintFlow=50 -- we cannot resolve the `impl From for T` implementation + sink(a.into()); // $ SPURIOUS: hasTaintFlow=50 $ MISSING: hasValueFlow=50 -- it is not possible to define a value-preserving summary for `into` since it depends on which `from` function is called + sink(i64::from(a)); // $ hasValueFlow=50 let b: i32 = source(51) as i32; sink(b as i64); // $ hasTaintFlow=51 - sink(b.into()); // $ MISSING: hasTaintFlow=51 + sink(b.into()); // $ hasTaintFlow=51 sink(i64::from(b)); // $ hasTaintFlow=51 } 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 28242d86a7b..8dba0e3cf27 100644 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -1,2 +1,2 @@ multipleResolvedTargets -| main.rs:3087:13:3087:17 | x.f() | +| main.rs:2860:13:2860:17 | x.f() | diff --git a/rust/ql/test/library-tests/type-inference/associated_types.rs b/rust/ql/test/library-tests/type-inference/associated_types.rs new file mode 100644 index 00000000000..b08be0264a0 --- /dev/null +++ b/rust/ql/test/library-tests/type-inference/associated_types.rs @@ -0,0 +1,364 @@ +#[derive(Debug, Default, Copy, Clone)] +struct Wrapper(A); + +impl Wrapper { + fn unwrap(self) -> A { + self.0 // $ fieldof=Wrapper + } +} + +#[derive(Debug, Default)] +struct S; + +#[derive(Debug, Default)] +struct S2; + +#[derive(Debug, Default)] +struct S3; + +trait GetSet { + type Output; + + // GetSet::get + fn get(&self) -> Self::Output; + + // GetSet::set + fn set(&self, _a: Self::Output) {} +} + +fn get + ?Sized>(item: &T) -> O { + item.get() // $ target=GetSet::get +} + +trait AnotherGet: GetSet { + type AnotherOutput; + + // AnotherGet::get_another + fn get_another(&self) -> Self::AnotherOutput; +} + +impl GetSet for S { + type Output = S3; + + // S::get + fn get(&self) -> Self::Output { + S3 + } +} + +impl GetSet for Wrapper { + type Output = T; + + // Wrapper::get + fn get(&self) -> Self::Output { + self.0 // $ fieldof=Wrapper + } +} + +mod default_method_using_associated_type { + use super::*; + + trait MyTrait { + type AssociatedType; + + // MyTrait::m1 + fn m1(self) -> Self::AssociatedType; + + fn m2(self) -> Self::AssociatedType + where + Self::AssociatedType: Default, + Self: Sized, + { + self.m1(); // $ target=MyTrait::m1 type=self.m1():AssociatedType[MyTrait] + let _default = Self::AssociatedType::default(); // $ MISSING: target=default _default:AssociatedType + Self::AssociatedType::default() // $ MISSING: target=default + } + } + + impl MyTrait for S { + type AssociatedType = S3; + + // S::m1 + fn m1(self) -> Self::AssociatedType { + S3 + } + } + + impl MyTrait for S2 { + // Associated type definition with a type argument + type AssociatedType = Wrapper; + + fn m1(self) -> Self::AssociatedType { + Wrapper(self) + } + } + + pub fn test() { + let x1 = S; + // Call to method in `impl` block + println!("{:?}", x1.m1()); // $ target=S::m1 type=x1.m1():S3 + + let x2 = S; + // Call to default method in `trait` block + let y = x2.m2(); // $ target=m2 type=y:S3 + println!("{:?}", y); + + let x5 = S2; + println!("{:?}", x5.m1()); // $ target=m1 type=x5.m1():A.S2 + let x6 = S2; + println!("{:?}", x6.m2()); // $ target=m2 type=x6.m2():A.S2 + } +} + +// Tests for signatures that access associated types from type parameters +mod type_param_access_associated_type { + use super::*; + + fn tp_with_as(thing: T) -> ::Output { + thing.get() // $ target=GetSet::get + } + + fn tp_without_as(thing: T) -> T::Output { + thing.get() // $ target=GetSet::get + } + + pub fn test() { + let _o1 = tp_with_as(S); // $ target=tp_with_as MISSING: type=_o1:S3 + let _o2 = tp_without_as(S); // $ target=tp_without_as MISSING: type=_o2:S3 + } +} + +// Tests for specifying associated types using equalities, e.g., `Trait` +mod equality_on_associated_type { + use super::*; + + fn _in_same_trait(x: T) + where + T: GetSet, + { + let _a = x.get(); // $ target=GetSet::get type=_a:char + } + + // Here we specify `Output` from `GetSet` through the subtrait `AnotherGet`. + fn _in_subtrait(x: T) + where + T: AnotherGet, + { + let _a1 = x.get(); // $ target=GetSet::get type=_a1:i32 + let _a2 = get(&x); // $ target=get type=_a2:i32 + let _b = x.get_another(); // $ type=_b:bool target=AnotherGet::get_another + } + + // Here we specify the associated types as two separate trait bounds + fn _two_bounds(x: T) + where + T: AnotherGet, + T: GetSet, + { + let _a1 = x.get(); // $ target=GetSet::get type=_a1:i32 + let _a2 = get(&x); // $ target=get type=_a2:i32 + let _b = x.get_another(); // $ type=_b:bool target=AnotherGet::get_another + } + + trait AssocNameClash: GetSet { + type Output; // This name clashes with GetSet::Output + + // AssocNameClash::get2 + fn get2(&self) -> ::Output; + } + + fn _two_bounds_name_clash(x: T) + where + T: AssocNameClash, + T: GetSet, + { + let _a = x.get(); // $ type=_a:i32 target=GetSet::get + let _b = x.get2(); // $ target=AssocNameClash::get2 MISSING: type=_b:char + } +} + +mod generic_associated_type { + use super::*; + + trait MyTraitAssoc2 { + type GenericAssociatedType; + + // MyTraitAssoc2::put + fn put(&self, a: A) -> Self::GenericAssociatedType; + + // MyTraitAssoc2::put_two + fn put_two(&self, a: A, b: A) -> Self::GenericAssociatedType { + self.put(a); // $ target=MyTraitAssoc2::put + self.put(b) // $ target=MyTraitAssoc2::put + } + } + + impl MyTraitAssoc2 for S { + // Associated type with a type parameter + type GenericAssociatedType = Wrapper; + + // S::put + fn put(&self, a: A) -> Wrapper { + Wrapper(a) + } + } + + pub fn test() { + let s = S; + // Call to the method in `impl` block + let _g1 = s.put(1i32); // $ target=S::put type=_g1:A.i32 + + // Call to default implementation in `trait` block + let _g2 = s.put_two(true, false); // $ target=MyTraitAssoc2::put_two MISSING: type=_g2:A.bool + } +} + +mod multiple_associated_types { + use super::*; + + // A generic trait with multiple associated types. + trait TraitMultipleAssoc { + type Assoc1; + type Assoc2; + + fn get_zero(&self) -> TrG; + + fn get_one(&self) -> Self::Assoc1; + + fn get_two(&self) -> Self::Assoc2; + } + + impl TraitMultipleAssoc for S3 { + type Assoc1 = S; + type Assoc2 = S2; + + fn get_zero(&self) -> S3 { + S3 + } + + fn get_one(&self) -> Self::Assoc1 { + S + } + + fn get_two(&self) -> Self::Assoc2 { + S2 + } + } + + pub fn test() { + let _assoc_zero = S3.get_zero(); // $ target=get_zero type=_assoc_zero:S3 + let _assoc_one = S3.get_one(); // $ target=get_one type=_assoc_one:S + let _assoc_two = S3.get_two(); // $ target=get_two type=_assoc_two:S2 + } +} + +mod associated_type_in_supertrait { + use super::*; + + trait Subtrait: GetSet { + // Subtrait::get_content + fn get_content(&self) -> Self::Output; + } + + // A subtrait declared using a `where` clause. + trait Subtrait2 + where + Self: GetSet, + { + // Subtrait2::insert_two + fn insert_two(&self, c1: Self::Output, c2: Self::Output) { + self.set(c1); // $ target=GetSet::set + self.set(c2); // $ target=GetSet::set + } + } + + struct MyType(T); + + impl GetSet for MyType { + type Output = T; + + fn get(&self) -> Self::Output { + self.0 // $ fieldof=MyType + } + + fn set(&self, _content: Self::Output) { + println!("Inserting content: "); + } + } + + impl Subtrait for MyType { + // MyType::get_content + fn get_content(&self) -> Self::Output { + (*self).0 // $ fieldof=MyType target=deref + } + } + + fn get_content(item: &T) -> T::Output { + item.get_content() // $ target=Subtrait::get_content + } + + fn insert_three(item: &T, c1: T::Output, c2: T::Output, c3: T::Output) { + item.set(c1); // $ target=GetSet::set + item.insert_two(c2, c3); // $ target=Subtrait2::insert_two + } + + pub fn test() { + let item1 = MyType(42i64); + let _content1 = item1.get_content(); // $ target=MyType::get_content MISSING: type=_content1:i64 + + let item2 = MyType(true); + let _content2 = get_content(&item2); // $ target=get_content MISSING: type=_content2:bool + } +} + +mod generic_associated_type_name_clash { + use super::*; + + struct ST(T); + + impl GetSet for ST { + // This is not a recursive type, the `Output` on the right-hand side + // refers to the type parameter of the impl block just above. + type Output = Result; + + fn get(&self) -> Self::Output { + Ok(self.0) // $ fieldof=ST type=Ok(...):Result type=Ok(...):T.Output type=Ok(...):E.Output + } + } + + pub fn test() { + let _y = ST(true).get(); // $ type=_y:Result type=_y:T.bool type=_y:E.bool target=get + } +} + +// Tests for associated types in `dyn` trait objects +mod dyn_trait { + use super::*; + + fn _assoc_type_from_trait(t: &dyn GetSet) { + // Explicit deref + let _a1 = (*t).get(); // $ target=deref target=GetSet::get type=_a1:i32 + + // Auto-deref + let _a2 = t.get(); // $ target=GetSet::get type=_a2:i32 + + let _a3 = get(t); // $ target=get type=_a3:i32 + } + + fn _assoc_type_from_supertrait(t: &dyn AnotherGet) { + let _a1 = (*t).get(); // $ target=deref target=GetSet::get type=_a1:i32 + let _a2 = t.get(); // $ target=GetSet::get type=_a2:i32 + let _a3 = get(t); // $ target=get type=_a3:i32 + let _b1 = (*t).get_another(); // $ target=deref target=AnotherGet::get_another type=_b1:bool + let _b2 = t.get_another(); // $ target=AnotherGet::get_another type=_b2:bool + } +} + +pub fn test() { + default_method_using_associated_type::test(); // $ target=test + type_param_access_associated_type::test(); // $ target=test + generic_associated_type::test(); // $ target=test + multiple_associated_types::test(); // $ target=test + associated_type_in_supertrait::test(); // $ target=test + generic_associated_type_name_clash::test(); // $ target=test +} diff --git a/rust/ql/test/library-tests/type-inference/closure.rs b/rust/ql/test/library-tests/type-inference/closure.rs index e5a9c83aa07..cc756a6b267 100644 --- a/rust/ql/test/library-tests/type-inference/closure.rs +++ b/rust/ql/test/library-tests/type-inference/closure.rs @@ -68,6 +68,80 @@ mod fn_once_trait { } } +mod fn_mut_trait { + fn return_type i64>(mut f: F) { + let _return = f(true); // $ type=_return:i64 + } + + fn return_type_omitted(mut f: F) { + let _return = f(true); // $ type=_return:() + } + + fn argument_type i64>(mut f: F) { + let arg = Default::default(); // $ target=default type=arg:bool + f(arg); + } + + fn apply B>(mut f: F, a: A) -> B { + f(a) + } + + fn apply_two(mut f: impl FnMut(i64) -> i64) -> i64 { + f(2) + } + + fn test() { + let f = |x: bool| -> i64 { + if x { + 1 + } else { + 0 + } + }; + 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 certainType=_r2:i64 + } +} + +mod fn_trait { + fn return_type i64>(f: F) { + let _return = f(true); // $ type=_return:i64 + } + + fn return_type_omitted(f: F) { + let _return = f(true); // $ type=_return:() + } + + fn argument_type i64>(f: F) { + let arg = Default::default(); // $ target=default type=arg:bool + f(arg); + } + + fn apply B>(f: F, a: A) -> B { + f(a) + } + + fn apply_two(f: impl Fn(i64) -> i64) -> i64 { + f(2) + } + + fn test() { + let f = |x: bool| -> i64 { + if x { + 1 + } else { + 0 + } + }; + 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 certainType=_r2:i64 + } +} + mod dyn_fn_once { fn apply_boxed B + ?Sized>(f: Box, arg: A) -> B { f(arg) diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 840e17b52ef..9fda37285da 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -438,7 +438,7 @@ mod method_non_parametric_trait_impl { let thing = MyThing { a: S1 }; let i = thing.convert_to(); // $ type=i:S1 target=T::convert_to - let j = convert_to(thing); // $ type=j:S1 target=convert_to + let j = convert_to(thing); // $ target=convert_to $ MISSING: type=j:S1 -- the blanket implementation `impl> ConvertTo for T` is currently not included in the constraint analysis } } @@ -903,214 +903,6 @@ mod function_trait_bounds { } } -mod associated_type_in_trait { - #[derive(Debug)] - struct Wrapper { - field: A, - } - - impl Wrapper { - fn unwrap(self) -> A { - self.field // $ fieldof=Wrapper - } - } - - trait MyTrait { - type AssociatedType; - - // MyTrait::m1 - fn m1(self) -> Self::AssociatedType; - - fn m2(self) -> Self::AssociatedType - where - Self::AssociatedType: Default, - Self: Sized, - { - self.m1(); // $ target=MyTrait::m1 type=self.m1():AssociatedType - Self::AssociatedType::default() - } - } - - trait MyTraitAssoc2 { - type GenericAssociatedType; - - // MyTrait::put - fn put(&self, a: A) -> Self::GenericAssociatedType; - - fn putTwo(&self, a: A, b: A) -> Self::GenericAssociatedType { - self.put(a); // $ target=MyTrait::put - self.put(b) // $ target=MyTrait::put - } - } - - // A generic trait with multiple associated types. - trait TraitMultipleAssoc { - type Assoc1; - type Assoc2; - - fn get_zero(&self) -> TrG; - - fn get_one(&self) -> Self::Assoc1; - - fn get_two(&self) -> Self::Assoc2; - } - - #[derive(Debug, Default)] - struct S; - - #[derive(Debug, Default)] - struct S2; - - #[derive(Debug, Default)] - struct AT; - - impl MyTrait for S { - type AssociatedType = AT; - - // S::m1 - fn m1(self) -> Self::AssociatedType { - AT - } - } - - impl MyTraitAssoc2 for S { - // Associated type with a type parameter - type GenericAssociatedType = Wrapper; - - // S::put - fn put(&self, a: A) -> Wrapper { - Wrapper { field: a } - } - } - - impl MyTrait for S2 { - // Associated type definition with a type argument - type AssociatedType = Wrapper; - - fn m1(self) -> Self::AssociatedType { - Wrapper { field: self } - } - } - - // NOTE: This implementation is just to make it possible to call `m2` on `S2.` - impl Default for Wrapper { - fn default() -> Self { - Wrapper { field: S2 } - } - } - - // Function that returns an associated type from a trait bound - - fn g(thing: T) -> ::AssociatedType { - thing.m1() // $ target=MyTrait::m1 - } - - impl TraitMultipleAssoc for AT { - type Assoc1 = S; - type Assoc2 = S2; - - fn get_zero(&self) -> AT { - AT - } - - fn get_one(&self) -> Self::Assoc1 { - S - } - - fn get_two(&self) -> Self::Assoc2 { - S2 - } - } - - pub fn f() { - let x1 = S; - // Call to method in `impl` block - println!("{:?}", x1.m1()); // $ target=S::m1 type=x1.m1():AT - - let x2 = S; - // Call to default method in `trait` block - let y = x2.m2(); // $ target=m2 type=y:AT - println!("{:?}", y); - - let x3 = S; - // Call to the method in `impl` block - println!("{:?}", x3.put(1).unwrap()); // $ target=S::put target=unwrap - - // Call to default implementation in `trait` block - println!("{:?}", x3.putTwo(2, 3).unwrap()); // $ target=putTwo target=unwrap - - let x4 = g(S); // $ target=g $ MISSING: type=x4:AT - println!("{:?}", x4); - - let x5 = S2; - println!("{:?}", x5.m1()); // $ target=m1 type=x5.m1():A.S2 - let x6 = S2; - println!("{:?}", x6.m2()); // $ target=m2 type=x6.m2():A.S2 - - let assoc_zero = AT.get_zero(); // $ target=get_zero type=assoc_zero:AT - let assoc_one = AT.get_one(); // $ target=get_one type=assoc_one:S - let assoc_two = AT.get_two(); // $ target=get_two type=assoc_two:S2 - } -} - -mod associated_type_in_supertrait { - trait Supertrait { - type Content; - // Supertrait::insert - fn insert(&self, content: Self::Content); - } - - trait Subtrait: Supertrait { - // Subtrait::get_content - fn get_content(&self) -> Self::Content; - } - - // A subtrait declared using a `where` clause. - trait Subtrait2 - where - Self: Supertrait, - { - // Subtrait2::insert_two - fn insert_two(&self, c1: Self::Content, c2: Self::Content) { - self.insert(c1); // $ target=Supertrait::insert - self.insert(c2); // $ target=Supertrait::insert - } - } - - struct MyType(T); - - impl Supertrait for MyType { - type Content = T; - fn insert(&self, _content: Self::Content) { - println!("Inserting content: "); - } - } - - impl Subtrait for MyType { - // MyType::get_content - fn get_content(&self) -> Self::Content { - (*self).0.clone() // $ fieldof=MyType target=clone target=deref - } - } - - fn get_content(item: &T) -> T::Content { - item.get_content() // $ target=Subtrait::get_content - } - - fn insert_three(item: &T, c1: T::Content, c2: T::Content, c3: T::Content) { - item.insert(c1); // $ target=Supertrait::insert - item.insert_two(c2, c3); // $ target=Subtrait2::insert_two - } - - fn test() { - let item1 = MyType(42i64); - let _content1 = item1.get_content(); // $ target=MyType::get_content MISSING: type=_content1:i64 - - let item2 = MyType(true); - let _content2 = get_content(&item2); // $ target=get_content MISSING: type=_content2:bool - } -} - mod generic_enum { #[derive(Debug)] enum MyEnum { @@ -1350,23 +1142,6 @@ mod type_aliases { type S7 = Result, S1>; - struct GenS(GenT); - - trait TraitWithAssocType { - type Output; - fn get_input(self) -> Self::Output; - } - - impl TraitWithAssocType for GenS { - // This is not a recursive type, the `Output` on the right-hand side - // refers to the type parameter of the impl block just above. - type Output = Result; - - fn get_input(self) -> Self::Output { - Ok(self.0) // $ fieldof=GenS type=Ok(...):Result type=Ok(...):T.Output type=Ok(...):E.Output - } - } - pub fn f() { // Type can be inferred from the constructor let p1: MyPair = PairOption::PairBoth(S1, S2); @@ -1387,8 +1162,6 @@ mod type_aliases { g(PairOption::PairSnd(PairOption::PairSnd(S3))); // $ target=g 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 } } @@ -2822,7 +2595,7 @@ mod tuples { let i: i64 = pair.0; // $ fieldof=Tuple2 let j: bool = pair.1; // $ fieldof=Tuple2 - let pair = [1, 1].into(); // $ type=pair:(T_2) type=pair:T0.i32 type=pair:T1.i32 MISSING: target=into + let pair = [1, 1].into(); // $ type=pair:(T_2) type=pair:T0.i32 type=pair:T1.i32 target=into match pair { (0, 0) => print!("unexpected"), _ => print!("expected"), @@ -3099,6 +2872,7 @@ mod literal_overlap { } } +mod associated_types; mod blanket_impl; mod closure; mod dereference; @@ -3112,7 +2886,6 @@ fn main() { method_non_parametric_trait_impl::f(); // $ target=f trait_default_self_type_parameter::test(); // $ target=test function_trait_bounds::f(); // $ target=f - associated_type_in_trait::f(); // $ target=f generic_enum::f(); // $ target=f method_supertraits::f(); // $ target=f function_trait_bounds_2::f(); // $ target=f @@ -3133,6 +2906,7 @@ fn main() { method_determined_by_argument_type::f(); // $ target=f tuples::f(); // $ target=f path_buf::f(); // $ target=f + associated_types::test(); // $ target=test dereference::test(); // $ target=test pattern_matching::test_all_patterns(); // $ target=test_all_patterns pattern_matching_experimental::box_patterns(); // $ target=box_patterns 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 a7b856a7517..c5f797efd2f 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -1,4 +1,231 @@ inferCertainType +| associated_types.rs:5:15:5:18 | SelfParam | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:5:15:5:18 | SelfParam | A | associated_types.rs:4:6:4:6 | A | +| associated_types.rs:5:26:7:5 | { ... } | | associated_types.rs:4:6:4:6 | A | +| associated_types.rs:6:9:6:12 | self | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:6:9:6:12 | self | A | associated_types.rs:4:6:4:6 | A | +| associated_types.rs:23:12:23:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:23:12:23:16 | SelfParam | TRef | associated_types.rs:19:1:27:1 | Self [trait GetSet] | +| associated_types.rs:26:12:26:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:26:12:26:16 | SelfParam | TRef | associated_types.rs:19:1:27:1 | Self [trait GetSet] | +| associated_types.rs:26:19:26:20 | _a | | associated_types.rs:20:5:20:16 | Output[GetSet] | +| associated_types.rs:26:37:26:38 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:29:43:29:46 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:29:43:29:46 | item | TRef | associated_types.rs:29:11:29:40 | T | +| associated_types.rs:29:58:31:1 | { ... } | | associated_types.rs:29:8:29:8 | O | +| associated_types.rs:30:5:30:8 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:30:5:30:8 | item | TRef | associated_types.rs:29:11:29:40 | T | +| associated_types.rs:37:20:37:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:37:20:37:24 | SelfParam | TRef | associated_types.rs:33:1:38:1 | Self [trait AnotherGet] | +| associated_types.rs:44:12:44:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:44:12:44:16 | SelfParam | TRef | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:44:35:46:5 | { ... } | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:53:12:53:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:53:12:53:16 | SelfParam | TRef | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:53:12:53:16 | SelfParam | TRef.A | associated_types.rs:49:6:49:12 | T | +| associated_types.rs:53:35:55:5 | { ... } | | associated_types.rs:49:6:49:12 | T | +| associated_types.rs:54:9:54:12 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:54:9:54:12 | self | TRef | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:54:9:54:12 | self | TRef.A | associated_types.rs:49:6:49:12 | T | +| associated_types.rs:65:15:65:18 | SelfParam | | associated_types.rs:61:5:76:5 | Self [trait MyTrait] | +| associated_types.rs:67:15:67:18 | SelfParam | | associated_types.rs:61:5:76:5 | Self [trait MyTrait] | +| associated_types.rs:71:9:75:9 | { ... } | | associated_types.rs:62:9:62:28 | AssociatedType[MyTrait] | +| associated_types.rs:72:13:72:16 | self | | associated_types.rs:61:5:76:5 | Self [trait MyTrait] | +| associated_types.rs:82:15:82:18 | SelfParam | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:82:45:84:9 | { ... } | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:91:15:91:18 | SelfParam | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:91:45:93:9 | { ... } | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:91:45:93:9 | { ... } | A | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:92:21:92:24 | self | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:96:19:110:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:99:18:99:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| associated_types.rs:99:18:99:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| associated_types.rs:99:18:99:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:99:18:99:32 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:104:18:104:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| associated_types.rs:104:18:104:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| associated_types.rs:104:18:104:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:104:18:104:26 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:107:18:107:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| associated_types.rs:107:18:107:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| associated_types.rs:107:18:107:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:107:18:107:32 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:109:18:109:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| associated_types.rs:109:18:109:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| associated_types.rs:109:18:109:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:109:18:109:32 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:117:30:117:34 | thing | | associated_types.rs:117:19:117:27 | T | +| associated_types.rs:118:9:118:13 | thing | | associated_types.rs:117:19:117:27 | T | +| associated_types.rs:121:33:121:37 | thing | | associated_types.rs:121:22:121:30 | T | +| associated_types.rs:122:9:122:13 | thing | | associated_types.rs:121:22:121:30 | T | +| associated_types.rs:125:19:128:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:135:26:135:26 | x | | associated_types.rs:135:23:135:23 | T | +| associated_types.rs:138:5:140:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:139:18:139:18 | x | | associated_types.rs:135:23:135:23 | T | +| associated_types.rs:143:24:143:24 | x | | associated_types.rs:143:21:143:21 | T | +| associated_types.rs:146:5:150:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:147:19:147:19 | x | | associated_types.rs:143:21:143:21 | T | +| associated_types.rs:148:23:148:24 | &x | | {EXTERNAL LOCATION} | & | +| associated_types.rs:148:24:148:24 | x | | associated_types.rs:143:21:143:21 | T | +| associated_types.rs:149:18:149:18 | x | | associated_types.rs:143:21:143:21 | T | +| associated_types.rs:153:23:153:23 | x | | associated_types.rs:153:20:153:20 | T | +| associated_types.rs:157:5:161:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:158:19:158:19 | x | | associated_types.rs:153:20:153:20 | T | +| associated_types.rs:159:23:159:24 | &x | | {EXTERNAL LOCATION} | & | +| associated_types.rs:159:24:159:24 | x | | associated_types.rs:153:20:153:20 | T | +| associated_types.rs:160:18:160:18 | x | | associated_types.rs:153:20:153:20 | T | +| associated_types.rs:167:17:167:21 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:167:17:167:21 | SelfParam | TRef | associated_types.rs:163:5:168:5 | Self [trait AssocNameClash] | +| associated_types.rs:170:34:170:34 | x | | associated_types.rs:170:31:170:31 | T | +| associated_types.rs:174:5:177:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:175:18:175:18 | x | | associated_types.rs:170:31:170:31 | T | +| associated_types.rs:176:18:176:18 | x | | associated_types.rs:170:31:170:31 | T | +| associated_types.rs:187:19:187:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:187:19:187:23 | SelfParam | TRef | associated_types.rs:183:5:194:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:187:26:187:26 | a | | associated_types.rs:187:16:187:16 | A | +| associated_types.rs:190:23:190:27 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:190:23:190:27 | SelfParam | TRef | associated_types.rs:183:5:194:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:190:30:190:30 | a | | associated_types.rs:190:20:190:20 | A | +| associated_types.rs:190:36:190:36 | b | | associated_types.rs:190:20:190:20 | A | +| associated_types.rs:190:76:193:9 | { ... } | | associated_types.rs:184:9:184:52 | GenericAssociatedType[MyTraitAssoc2] | +| associated_types.rs:191:13:191:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:191:13:191:16 | self | TRef | associated_types.rs:183:5:194:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:191:22:191:22 | a | | associated_types.rs:190:20:190:20 | A | +| associated_types.rs:192:13:192:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:192:13:192:16 | self | TRef | associated_types.rs:183:5:194:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:192:22:192:22 | b | | associated_types.rs:190:20:190:20 | A | +| associated_types.rs:201:19:201:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:201:19:201:23 | SelfParam | TRef | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:201:26:201:26 | a | | associated_types.rs:201:16:201:16 | A | +| associated_types.rs:201:46:203:9 | { ... } | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:201:46:203:9 | { ... } | A | associated_types.rs:201:16:201:16 | A | +| associated_types.rs:202:21:202:21 | a | | associated_types.rs:201:16:201:16 | A | +| associated_types.rs:206:19:213:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:209:25:209:28 | 1i32 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:212:29:212:32 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:212:35:212:39 | false | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:224:21:224:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:224:21:224:25 | SelfParam | TRef | associated_types.rs:219:5:229:5 | Self [trait TraitMultipleAssoc] | +| associated_types.rs:226:20:226:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:226:20:226:24 | SelfParam | TRef | associated_types.rs:219:5:229:5 | Self [trait TraitMultipleAssoc] | +| associated_types.rs:228:20:228:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:228:20:228:24 | SelfParam | TRef | associated_types.rs:219:5:229:5 | Self [trait TraitMultipleAssoc] | +| associated_types.rs:235:21:235:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:235:21:235:25 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:235:34:237:9 | { ... } | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:239:20:239:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:239:20:239:24 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:239:43:241:9 | { ... } | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:243:20:243:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:243:20:243:24 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:243:43:245:9 | { ... } | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:248:19:252:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:260:24:260:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:260:24:260:28 | SelfParam | TRef | associated_types.rs:258:5:261:5 | Self [trait Subtrait] | +| associated_types.rs:269:23:269:27 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:269:23:269:27 | SelfParam | TRef | associated_types.rs:263:5:273:5 | Self [trait Subtrait2] | +| associated_types.rs:269:30:269:31 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:269:48:269:49 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:269:66:272:9 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:270:13:270:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:270:13:270:16 | self | TRef | associated_types.rs:263:5:273:5 | Self [trait Subtrait2] | +| associated_types.rs:270:22:270:23 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:271:13:271:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:271:13:271:16 | self | TRef | associated_types.rs:263:5:273:5 | Self [trait Subtrait2] | +| associated_types.rs:271:22:271:23 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:280:16:280:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:280:16:280:20 | SelfParam | TRef | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:280:16:280:20 | SelfParam | TRef.T | associated_types.rs:277:10:277:16 | T | +| associated_types.rs:280:39:282:9 | { ... } | | associated_types.rs:277:10:277:16 | T | +| associated_types.rs:281:13:281:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:281:13:281:16 | self | TRef | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:281:13:281:16 | self | TRef.T | associated_types.rs:277:10:277:16 | T | +| associated_types.rs:284:16:284:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:284:16:284:20 | SelfParam | TRef | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:284:16:284:20 | SelfParam | TRef.T | associated_types.rs:277:10:277:16 | T | +| associated_types.rs:284:23:284:30 | _content | | associated_types.rs:277:10:277:16 | T | +| associated_types.rs:284:47:286:9 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:285:22:285:42 | "Inserting content: \\n" | | {EXTERNAL LOCATION} | & | +| associated_types.rs:285:22:285:42 | "Inserting content: \\n" | TRef | {EXTERNAL LOCATION} | str | +| associated_types.rs:285:22:285:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:285:22:285:42 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:291:24:291:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:291:24:291:28 | SelfParam | TRef | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:291:24:291:28 | SelfParam | TRef.T | associated_types.rs:289:10:289:16 | T | +| associated_types.rs:292:15:292:18 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:292:15:292:18 | self | TRef | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:292:15:292:18 | self | TRef.T | associated_types.rs:289:10:289:16 | T | +| associated_types.rs:296:33:296:36 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:296:33:296:36 | item | TRef | associated_types.rs:296:20:296:30 | T | +| associated_types.rs:297:9:297:12 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:297:9:297:12 | item | TRef | associated_types.rs:296:20:296:30 | T | +| associated_types.rs:300:35:300:38 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:300:35:300:38 | item | TRef | associated_types.rs:300:21:300:32 | T | +| associated_types.rs:300:90:303:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:301:9:301:12 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:301:9:301:12 | item | TRef | associated_types.rs:300:21:300:32 | T | +| associated_types.rs:302:9:302:12 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:302:9:302:12 | item | TRef | associated_types.rs:300:21:300:32 | T | +| associated_types.rs:305:19:311:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:306:28:306:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| associated_types.rs:309:28:309:31 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:310:37:310:42 | &item2 | | {EXTERNAL LOCATION} | & | +| associated_types.rs:324:16:324:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:324:16:324:20 | SelfParam | TRef | associated_types.rs:317:5:317:20 | ST | +| associated_types.rs:324:16:324:20 | SelfParam | TRef.T | associated_types.rs:319:10:319:21 | Output | +| associated_types.rs:324:39:326:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| associated_types.rs:324:39:326:9 | { ... } | E | associated_types.rs:319:10:319:21 | Output | +| associated_types.rs:324:39:326:9 | { ... } | T | associated_types.rs:319:10:319:21 | Output | +| associated_types.rs:325:16:325:19 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:325:16:325:19 | self | TRef | associated_types.rs:317:5:317:20 | ST | +| associated_types.rs:325:16:325:19 | self | TRef.T | associated_types.rs:319:10:319:21 | Output | +| associated_types.rs:329:19:331:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:330:21:330:24 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:338:31:338:31 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:338:31:338:31 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:338:31:338:31 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:338:61:346:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:340:21:340:21 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:340:21:340:21 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:340:21:340:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:343:19:343:19 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:343:19:343:19 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:343:19:343:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:345:23:345:23 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:345:23:345:23 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:345:23:345:23 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:348:36:348:36 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:348:36:348:36 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:348:36:348:36 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:348:36:348:36 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:348:92:354:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:349:21:349:21 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:349:21:349:21 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:349:21:349:21 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:349:21:349:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:350:19:350:19 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:350:19:350:19 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:350:19:350:19 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:350:19:350:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:351:23:351:23 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:351:23:351:23 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:351:23:351:23 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:351:23:351:23 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:352:21:352:21 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:352:21:352:21 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:352:21:352:21 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:352:21:352:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:353:19:353:19 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:353:19:353:19 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:353:19:353:19 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:353:19:353:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:357:15:364:1 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:358:5:358:48 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:359:5:359:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:360:5:360:35 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:361:5:361:37 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:362:5:362:41 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:363:5:363:46 | ...::test(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:15:18:15:22 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:15:18:15:22 | SelfParam | TRef | blanket_impl.rs:9:5:10:14 | S2 | | blanket_impl.rs:15:42:17:9 | { ... } | | {EXTERNAL LOCATION} | & | @@ -251,34 +478,84 @@ inferCertainType | closure.rs:64:27:64:30 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:67:13:67:15 | _r2 | | {EXTERNAL LOCATION} | i64 | | closure.rs:67:19:67:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | -| closure.rs:72:54:72:54 | f | | {EXTERNAL LOCATION} | Box | -| closure.rs:72:54:72:54 | f | A | {EXTERNAL LOCATION} | Global | -| closure.rs:72:54:72:54 | f | T | closure.rs:72:26:72:51 | F | -| closure.rs:72:65:72:67 | arg | | closure.rs:72:20:72:20 | A | -| closure.rs:72:78:74:5 | { ... } | | closure.rs:72:23:72:23 | B | -| closure.rs:73:9:73:9 | f | | {EXTERNAL LOCATION} | Box | -| closure.rs:73:9:73:9 | f | A | {EXTERNAL LOCATION} | Global | -| closure.rs:73:9:73:9 | f | T | closure.rs:72:26:72:51 | F | -| closure.rs:73:11:73:13 | arg | | closure.rs:72:20:72:20 | A | -| closure.rs:76:30:76:30 | f | | {EXTERNAL LOCATION} | Box | -| closure.rs:76:30:76:30 | f | A | {EXTERNAL LOCATION} | Global | -| closure.rs:76:30:76:30 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:76:30:76:30 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:76:30:76:30 | f | T.dyn(Args).T0 | closure.rs:76:24:76:24 | A | -| closure.rs:76:30:76:30 | f | T.dyn(Output) | closure.rs:76:27:76:27 | B | -| closure.rs:76:58:76:60 | arg | | closure.rs:76:24:76:24 | A | -| closure.rs:76:66:79:5 | { ... } | | {EXTERNAL LOCATION} | () | -| closure.rs:77:31:77:31 | f | | {EXTERNAL LOCATION} | Box | -| closure.rs:77:31:77:31 | f | A | {EXTERNAL LOCATION} | Global | -| closure.rs:77:31:77:31 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:77:31:77:31 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:77:31:77:31 | f | T.dyn(Args).T0 | closure.rs:76:24:76:24 | A | -| closure.rs:77:31:77:31 | f | T.dyn(Output) | closure.rs:76:27:76:27 | B | -| closure.rs:77:34:77:36 | arg | | closure.rs:76:24:76:24 | A | -| closure.rs:78:31:78:53 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| closure.rs:78:31:78:53 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| closure.rs:78:41:78:41 | _ | | {EXTERNAL LOCATION} | i64 | -| closure.rs:78:49:78:52 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:72:47:72:47 | f | | closure.rs:72:20:72:40 | F | +| closure.rs:72:53:74:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:73:23:73:23 | f | | closure.rs:72:20:72:40 | F | +| closure.rs:73:25:73:28 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:76:48:76:48 | f | | closure.rs:76:28:76:41 | F | +| closure.rs:76:54:78:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:77:23:77:23 | f | | closure.rs:76:28:76:41 | F | +| closure.rs:77:25:77:28 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:80:49:80:49 | f | | closure.rs:80:22:80:42 | F | +| closure.rs:80:55:83:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:82:9:82:9 | f | | closure.rs:80:22:80:42 | F | +| closure.rs:85:42:85:42 | f | | closure.rs:85:20:85:35 | F | +| closure.rs:85:48:85:48 | a | | closure.rs:85:14:85:14 | A | +| closure.rs:85:59:87:5 | { ... } | | closure.rs:85:17:85:17 | B | +| closure.rs:86:9:86:9 | f | | closure.rs:85:20:85:35 | F | +| closure.rs:86:11:86:11 | a | | closure.rs:85:14:85:14 | A | +| closure.rs:89:22:89:22 | f | | closure.rs:89:25:89:46 | impl ... | +| closure.rs:89:56:91:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:90:9:90:9 | f | | closure.rs:89:25:89:46 | impl ... | +| closure.rs:93:15:105:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:94:18:94:18 | x | | {EXTERNAL LOCATION} | bool | +| closure.rs:95:16:95:16 | x | | {EXTERNAL LOCATION} | bool | +| closure.rs:101:27:101:30 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:104:13:104:15 | _r2 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:104:19:104:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:109:40:109:40 | f | | closure.rs:109:20:109:37 | F | +| closure.rs:109:46:111:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:110:23:110:23 | f | | closure.rs:109:20:109:37 | F | +| closure.rs:110:25:110:28 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:113:41:113:41 | f | | closure.rs:113:28:113:38 | F | +| closure.rs:113:47:115:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:114:23:114:23 | f | | closure.rs:113:28:113:38 | F | +| closure.rs:114:25:114:28 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:117:42:117:42 | f | | closure.rs:117:22:117:39 | F | +| closure.rs:117:48:120:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:119:9:119:9 | f | | closure.rs:117:22:117:39 | F | +| closure.rs:122:35:122:35 | f | | closure.rs:122:20:122:32 | F | +| closure.rs:122:41:122:41 | a | | closure.rs:122:14:122:14 | A | +| closure.rs:122:52:124:5 | { ... } | | closure.rs:122:17:122:17 | B | +| closure.rs:123:9:123:9 | f | | closure.rs:122:20:122:32 | F | +| closure.rs:123:11:123:11 | a | | closure.rs:122:14:122:14 | A | +| closure.rs:126:18:126:18 | f | | closure.rs:126:21:126:39 | impl ... | +| closure.rs:126:49:128:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:127:9:127:9 | f | | closure.rs:126:21:126:39 | impl ... | +| closure.rs:130:15:142:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:131:18:131:18 | x | | {EXTERNAL LOCATION} | bool | +| closure.rs:132:16:132:16 | x | | {EXTERNAL LOCATION} | bool | +| closure.rs:138:27:138:30 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:141:13:141:15 | _r2 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:141:19:141:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:146:54:146:54 | f | | {EXTERNAL LOCATION} | Box | +| closure.rs:146:54:146:54 | f | A | {EXTERNAL LOCATION} | Global | +| closure.rs:146:54:146:54 | f | T | closure.rs:146:26:146:51 | F | +| closure.rs:146:65:146:67 | arg | | closure.rs:146:20:146:20 | A | +| closure.rs:146:78:148:5 | { ... } | | closure.rs:146:23:146:23 | B | +| closure.rs:147:9:147:9 | f | | {EXTERNAL LOCATION} | Box | +| closure.rs:147:9:147:9 | f | A | {EXTERNAL LOCATION} | Global | +| closure.rs:147:9:147:9 | f | T | closure.rs:146:26:146:51 | F | +| closure.rs:147:11:147:13 | arg | | closure.rs:146:20:146:20 | A | +| closure.rs:150:30:150:30 | f | | {EXTERNAL LOCATION} | Box | +| closure.rs:150:30:150:30 | f | A | {EXTERNAL LOCATION} | Global | +| closure.rs:150:30:150:30 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:150:30:150:30 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:150:30:150:30 | f | T.dyn(Args).T0 | closure.rs:150:24:150:24 | A | +| closure.rs:150:30:150:30 | f | T.dyn(Output) | closure.rs:150:27:150:27 | B | +| closure.rs:150:58:150:60 | arg | | closure.rs:150:24:150:24 | A | +| closure.rs:150:66:153:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:151:31:151:31 | f | | {EXTERNAL LOCATION} | Box | +| closure.rs:151:31:151:31 | f | A | {EXTERNAL LOCATION} | Global | +| closure.rs:151:31:151:31 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:151:31:151:31 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:151:31:151:31 | f | T.dyn(Args).T0 | closure.rs:150:24:150:24 | A | +| closure.rs:151:31:151:31 | f | T.dyn(Output) | closure.rs:150:27:150:27 | B | +| closure.rs:151:34:151:36 | arg | | closure.rs:150:24:150:24 | A | +| closure.rs:152:31:152:53 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| closure.rs:152:31:152:53 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| closure.rs:152:41:152:41 | _ | | {EXTERNAL LOCATION} | i64 | +| closure.rs:152:49:152:52 | true | | {EXTERNAL LOCATION} | bool | | dereference.rs:13:14:13:18 | SelfParam | | {EXTERNAL LOCATION} | & | | dereference.rs:13:14:13:18 | SelfParam | TRef | dereference.rs:5:1:7:1 | MyIntPointer | | dereference.rs:13:29:15:5 | { ... } | | {EXTERNAL LOCATION} | & | @@ -1474,2160 +1751,2023 @@ inferCertainType | main.rs:900:18:900:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:900:18:900:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:902:13:902:13 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:913:19:913:22 | SelfParam | | main.rs:907:5:910:5 | Wrapper | -| main.rs:913:19:913:22 | SelfParam | A | main.rs:912:10:912:10 | A | -| main.rs:913:30:915:9 | { ... } | | main.rs:912:10:912:10 | A | -| main.rs:914:13:914:16 | self | | main.rs:907:5:910:5 | Wrapper | -| main.rs:914:13:914:16 | self | A | main.rs:912:10:912:10 | A | -| main.rs:922:15:922:18 | SelfParam | | main.rs:918:5:932:5 | Self [trait MyTrait] | -| main.rs:924:15:924:18 | SelfParam | | main.rs:918:5:932:5 | Self [trait MyTrait] | -| main.rs:928:9:931:9 | { ... } | | main.rs:919:9:919:28 | AssociatedType | -| main.rs:929:13:929:16 | self | | main.rs:918:5:932:5 | Self [trait MyTrait] | -| main.rs:938:19:938:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:938:19:938:23 | SelfParam | TRef | main.rs:934:5:944:5 | Self [trait MyTraitAssoc2] | -| main.rs:938:26:938:26 | a | | main.rs:938:16:938:16 | A | -| main.rs:940:22:940:26 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:940:22:940:26 | SelfParam | TRef | main.rs:934:5:944:5 | Self [trait MyTraitAssoc2] | -| main.rs:940:29:940:29 | a | | main.rs:940:19:940:19 | A | -| main.rs:940:35:940:35 | b | | main.rs:940:19:940:19 | A | -| main.rs:940:75:943:9 | { ... } | | main.rs:935:9:935:52 | GenericAssociatedType | -| main.rs:941:13:941:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:941:13:941:16 | self | TRef | main.rs:934:5:944:5 | Self [trait MyTraitAssoc2] | -| main.rs:941:22:941:22 | a | | main.rs:940:19:940:19 | A | -| main.rs:942:13:942:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:942:13:942:16 | self | TRef | main.rs:934:5:944:5 | Self [trait MyTraitAssoc2] | -| main.rs:942:22:942:22 | b | | main.rs:940:19:940:19 | A | -| main.rs:951:21:951:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:951:21:951:25 | SelfParam | TRef | main.rs:946:5:956:5 | Self [trait TraitMultipleAssoc] | -| main.rs:953:20:953:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:953:20:953:24 | SelfParam | TRef | main.rs:946:5:956:5 | Self [trait TraitMultipleAssoc] | -| main.rs:955:20:955:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:955:20:955:24 | SelfParam | TRef | main.rs:946:5:956:5 | Self [trait TraitMultipleAssoc] | -| main.rs:971:15:971:18 | SelfParam | | main.rs:958:5:959:13 | S | -| main.rs:971:45:973:9 | { ... } | | main.rs:964:5:965:14 | AT | -| main.rs:981:19:981:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:981:19:981:23 | SelfParam | TRef | main.rs:958:5:959:13 | S | -| main.rs:981:26:981:26 | a | | main.rs:981:16:981:16 | A | -| main.rs:981:46:983:9 | { ... } | | main.rs:907:5:910:5 | Wrapper | -| main.rs:981:46:983:9 | { ... } | A | main.rs:981:16:981:16 | A | -| main.rs:982:13:982:32 | Wrapper {...} | | main.rs:907:5:910:5 | Wrapper | -| main.rs:982:30:982:30 | a | | main.rs:981:16:981:16 | A | -| main.rs:990:15:990:18 | SelfParam | | main.rs:961:5:962:14 | S2 | -| main.rs:990:45:992:9 | { ... } | | main.rs:907:5:910:5 | Wrapper | -| main.rs:990:45:992:9 | { ... } | A | main.rs:961:5:962:14 | S2 | -| main.rs:991:13:991:35 | Wrapper {...} | | main.rs:907:5:910:5 | Wrapper | -| main.rs:991:30:991:33 | self | | main.rs:961:5:962:14 | S2 | -| main.rs:997:30:999:9 | { ... } | | main.rs:907:5:910:5 | Wrapper | -| main.rs:997:30:999:9 | { ... } | A | main.rs:961:5:962:14 | S2 | -| main.rs:998:13:998:33 | Wrapper {...} | | main.rs:907:5:910:5 | Wrapper | -| main.rs:1004:22:1004:26 | thing | | main.rs:1004:10:1004:19 | T | -| main.rs:1005:9:1005:13 | thing | | main.rs:1004:10:1004:19 | T | -| main.rs:1012:21:1012:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1012:21:1012:25 | SelfParam | TRef | main.rs:964:5:965:14 | AT | -| main.rs:1012:34:1014:9 | { ... } | | main.rs:964:5:965:14 | AT | -| main.rs:1016:20:1016:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1016:20:1016:24 | SelfParam | TRef | main.rs:964:5:965:14 | AT | -| main.rs:1016:43:1018:9 | { ... } | | main.rs:958:5:959:13 | S | -| main.rs:1020:20:1020:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1020:20:1020:24 | SelfParam | TRef | main.rs:964:5:965:14 | AT | -| main.rs:1020:43:1022:9 | { ... } | | main.rs:961:5:962:14 | S2 | -| main.rs:1025:16:1053:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1028:18:1028:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1028:18:1028:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1028:18:1028:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1028:18:1028:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1033:18:1033:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1033:18:1033:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1033:18:1033:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1033:18:1033:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1037:18:1037:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1037:18:1037:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1037:18:1037:43 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1037:18:1037:43 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1040:18:1040:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1040:18:1040:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1040:18:1040:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1040:18:1040:49 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1043:18:1043:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1043:18:1043:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1043:18:1043:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1043:18:1043:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1046:18:1046:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1046:18:1046:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1046:18:1046:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1046:18:1046:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1048:18:1048:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1048:18:1048:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1048:18:1048:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1048:18:1048:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1060:19:1060:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1060:19:1060:23 | SelfParam | TRef | main.rs:1057:5:1061:5 | Self [trait Supertrait] | -| main.rs:1060:26:1060:32 | content | | main.rs:1058:9:1058:21 | Content | -| main.rs:1065:24:1065:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1065:24:1065:28 | SelfParam | TRef | main.rs:1063:5:1066:5 | Self [trait Subtrait] | -| main.rs:1074:23:1074:27 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1074:23:1074:27 | SelfParam | TRef | main.rs:1068:5:1078:5 | Self [trait Subtrait2] | -| main.rs:1074:68:1077:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1075:13:1075:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1075:13:1075:16 | self | TRef | main.rs:1068:5:1078:5 | Self [trait Subtrait2] | -| main.rs:1076:13:1076:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1076:13:1076:16 | self | TRef | main.rs:1068:5:1078:5 | Self [trait Subtrait2] | -| main.rs:1084:19:1084:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1084:19:1084:23 | SelfParam | TRef | main.rs:1080:5:1080:24 | MyType | -| main.rs:1084:19:1084:23 | SelfParam | TRef.T | main.rs:1082:10:1082:10 | T | -| main.rs:1084:26:1084:33 | _content | | main.rs:1082:10:1082:10 | T | -| main.rs:1084:51:1086:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1085:22:1085:42 | "Inserting content: \\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1085:22:1085:42 | "Inserting content: \\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1085:22:1085:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1085:22:1085:42 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1091:24:1091:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1091:24:1091:28 | SelfParam | TRef | main.rs:1080:5:1080:24 | MyType | -| main.rs:1091:24:1091:28 | SelfParam | TRef.T | main.rs:1089:10:1089:17 | T | -| main.rs:1092:15:1092:18 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1092:15:1092:18 | self | TRef | main.rs:1080:5:1080:24 | MyType | -| main.rs:1092:15:1092:18 | self | TRef.T | main.rs:1089:10:1089:17 | T | -| main.rs:1096:33:1096:36 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1096:33:1096:36 | item | TRef | main.rs:1096:20:1096:30 | T | -| main.rs:1097:9:1097:12 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1097:9:1097:12 | item | TRef | main.rs:1096:20:1096:30 | T | -| main.rs:1100:35:1100:38 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1100:35:1100:38 | item | TRef | main.rs:1100:21:1100:32 | T | -| main.rs:1100:93:1103:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1101:9:1101:12 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1101:9:1101:12 | item | TRef | main.rs:1100:21:1100:32 | T | -| main.rs:1102:9:1102:12 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1102:9:1102:12 | item | TRef | main.rs:1100:21:1100:32 | T | -| main.rs:1105:15:1111:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1106:28:1106:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1109:28:1109:31 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1110:37:1110:42 | &item2 | | {EXTERNAL LOCATION} | & | -| main.rs:1127:15:1127:18 | SelfParam | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1127:15:1127:18 | SelfParam | A | main.rs:1126:10:1126:10 | T | -| main.rs:1127:26:1132:9 | { ... } | | main.rs:1126:10:1126:10 | T | -| main.rs:1128:19:1128:22 | self | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1128:19:1128:22 | self | A | main.rs:1126:10:1126:10 | T | -| main.rs:1130:17:1130:32 | ...::C2 {...} | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1135:16:1141:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1137:13:1137:13 | y | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1137:17:1137:36 | ...::C2 {...} | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1139:18:1139:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1139:18:1139:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1139:18:1139:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1139:18:1139:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1140:18:1140:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1140:18:1140:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1140:18:1140:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1140:18:1140:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1140:26:1140:26 | y | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1162:15:1162:18 | SelfParam | | main.rs:1160:5:1163:5 | Self [trait MyTrait1] | -| main.rs:1167:15:1167:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1167:15:1167:19 | SelfParam | TRef | main.rs:1165:5:1177:5 | Self [trait MyTrait2] | -| main.rs:1170:9:1176:9 | { ... } | | main.rs:1165:20:1165:22 | Tr2 | -| main.rs:1172:17:1172:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1172:17:1172:20 | self | TRef | main.rs:1165:5:1177:5 | Self [trait MyTrait2] | -| main.rs:1174:27:1174:30 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1174:27:1174:30 | self | TRef | main.rs:1165:5:1177:5 | Self [trait MyTrait2] | -| main.rs:1181:15:1181:18 | SelfParam | | main.rs:1179:5:1191:5 | Self [trait MyTrait3] | -| main.rs:1184:9:1190:9 | { ... } | | main.rs:1179:20:1179:22 | Tr3 | -| main.rs:1186:17:1186:20 | self | | main.rs:1179:5:1191:5 | Self [trait MyTrait3] | -| main.rs:1188:26:1188:30 | &self | | {EXTERNAL LOCATION} | & | -| main.rs:1188:27:1188:30 | self | | main.rs:1179:5:1191:5 | Self [trait MyTrait3] | -| main.rs:1195:15:1195:18 | SelfParam | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1195:15:1195:18 | SelfParam | A | main.rs:1193:10:1193:10 | T | -| main.rs:1195:26:1197:9 | { ... } | | main.rs:1193:10:1193:10 | T | -| main.rs:1196:13:1196:16 | self | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1196:13:1196:16 | self | A | main.rs:1193:10:1193:10 | T | -| main.rs:1204:15:1204:18 | SelfParam | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1204:15:1204:18 | SelfParam | A | main.rs:1202:10:1202:10 | T | -| main.rs:1204:35:1206:9 | { ... } | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1204:35:1206:9 | { ... } | A | main.rs:1202:10:1202:10 | T | -| main.rs:1205:13:1205:33 | MyThing {...} | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1205:26:1205:29 | self | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1205:26:1205:29 | self | A | main.rs:1202:10:1202:10 | T | -| main.rs:1213:44:1213:44 | x | | main.rs:1213:26:1213:41 | T2 | -| main.rs:1213:57:1215:5 | { ... } | | main.rs:1213:22:1213:23 | T1 | -| main.rs:1214:9:1214:9 | x | | main.rs:1213:26:1213:41 | T2 | -| main.rs:1217:56:1217:56 | x | | main.rs:1217:39:1217:53 | T | -| main.rs:1217:62:1221:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1219:17:1219:17 | x | | main.rs:1217:39:1217:53 | T | -| main.rs:1220:18:1220:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1220:18:1220:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1220:18:1220:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1220:18:1220:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1223:16:1247:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1224:13:1224:13 | x | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1224:17:1224:33 | MyThing {...} | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1225:13:1225:13 | y | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1225:17:1225:33 | MyThing {...} | | main.rs:1145:5:1148:5 | MyThing | +| main.rs:919:15:919:18 | SelfParam | | main.rs:907:5:911:5 | MyEnum | +| main.rs:919:15:919:18 | SelfParam | A | main.rs:918:10:918:10 | T | +| main.rs:919:26:924:9 | { ... } | | main.rs:918:10:918:10 | T | +| main.rs:920:19:920:22 | self | | main.rs:907:5:911:5 | MyEnum | +| main.rs:920:19:920:22 | self | A | main.rs:918:10:918:10 | T | +| main.rs:922:17:922:32 | ...::C2 {...} | | main.rs:907:5:911:5 | MyEnum | +| main.rs:927:16:933:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:929:13:929:13 | y | | main.rs:907:5:911:5 | MyEnum | +| main.rs:929:17:929:36 | ...::C2 {...} | | main.rs:907:5:911:5 | MyEnum | +| main.rs:931:18:931:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:931:18:931:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:931:18:931:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:931:18:931:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:932:18:932:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:932:18:932:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:932:18:932:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:932:18:932:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:932:26:932:26 | y | | main.rs:907:5:911:5 | MyEnum | +| main.rs:954:15:954:18 | SelfParam | | main.rs:952:5:955:5 | Self [trait MyTrait1] | +| main.rs:959:15:959:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:959:15:959:19 | SelfParam | TRef | main.rs:957:5:969:5 | Self [trait MyTrait2] | +| main.rs:962:9:968:9 | { ... } | | main.rs:957:20:957:22 | Tr2 | +| main.rs:964:17:964:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:964:17:964:20 | self | TRef | main.rs:957:5:969:5 | Self [trait MyTrait2] | +| main.rs:966:27:966:30 | self | | {EXTERNAL LOCATION} | & | +| main.rs:966:27:966:30 | self | TRef | main.rs:957:5:969:5 | Self [trait MyTrait2] | +| main.rs:973:15:973:18 | SelfParam | | main.rs:971:5:983:5 | Self [trait MyTrait3] | +| main.rs:976:9:982:9 | { ... } | | main.rs:971:20:971:22 | Tr3 | +| main.rs:978:17:978:20 | self | | main.rs:971:5:983:5 | Self [trait MyTrait3] | +| main.rs:980:26:980:30 | &self | | {EXTERNAL LOCATION} | & | +| main.rs:980:27:980:30 | self | | main.rs:971:5:983:5 | Self [trait MyTrait3] | +| main.rs:987:15:987:18 | SelfParam | | main.rs:937:5:940:5 | MyThing | +| main.rs:987:15:987:18 | SelfParam | A | main.rs:985:10:985:10 | T | +| main.rs:987:26:989:9 | { ... } | | main.rs:985:10:985:10 | T | +| main.rs:988:13:988:16 | self | | main.rs:937:5:940:5 | MyThing | +| main.rs:988:13:988:16 | self | A | main.rs:985:10:985:10 | T | +| main.rs:996:15:996:18 | SelfParam | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:996:15:996:18 | SelfParam | A | main.rs:994:10:994:10 | T | +| main.rs:996:35:998:9 | { ... } | | main.rs:937:5:940:5 | MyThing | +| main.rs:996:35:998:9 | { ... } | A | main.rs:994:10:994:10 | T | +| main.rs:997:13:997:33 | MyThing {...} | | main.rs:937:5:940:5 | MyThing | +| main.rs:997:26:997:29 | self | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:997:26:997:29 | self | A | main.rs:994:10:994:10 | T | +| main.rs:1005:44:1005:44 | x | | main.rs:1005:26:1005:41 | T2 | +| main.rs:1005:57:1007:5 | { ... } | | main.rs:1005:22:1005:23 | T1 | +| main.rs:1006:9:1006:9 | x | | main.rs:1005:26:1005:41 | T2 | +| main.rs:1009:56:1009:56 | x | | main.rs:1009:39:1009:53 | T | +| main.rs:1009:62:1013:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1011:17:1011:17 | x | | main.rs:1009:39:1009:53 | T | +| main.rs:1012:18:1012:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1012:18:1012:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1012:18:1012:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1012:18:1012:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1015:16:1039:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1016:13:1016:13 | x | | main.rs:937:5:940:5 | MyThing | +| main.rs:1016:17:1016:33 | MyThing {...} | | main.rs:937:5:940:5 | MyThing | +| main.rs:1017:13:1017:13 | y | | main.rs:937:5:940:5 | MyThing | +| main.rs:1017:17:1017:33 | MyThing {...} | | main.rs:937:5:940:5 | MyThing | +| main.rs:1019:18:1019:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1019:18:1019:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1019:18:1019:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1019:18:1019:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1019:26:1019:26 | x | | main.rs:937:5:940:5 | MyThing | +| main.rs:1020:18:1020:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1020:18:1020:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1020:18:1020:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1020:18:1020:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1020:26:1020:26 | y | | main.rs:937:5:940:5 | MyThing | +| main.rs:1022:13:1022:13 | x | | main.rs:937:5:940:5 | MyThing | +| main.rs:1022:17:1022:33 | MyThing {...} | | main.rs:937:5:940:5 | MyThing | +| main.rs:1023:13:1023:13 | y | | main.rs:937:5:940:5 | MyThing | +| main.rs:1023:17:1023:33 | MyThing {...} | | main.rs:937:5:940:5 | MyThing | +| main.rs:1025:18:1025:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1025:18:1025:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1025:18:1025:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1025:18:1025:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1025:26:1025:26 | x | | main.rs:937:5:940:5 | MyThing | +| main.rs:1026:18:1026:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1026:18:1026:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1026:18:1026:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1026:18:1026:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1026:26:1026:26 | y | | main.rs:937:5:940:5 | MyThing | +| main.rs:1028:13:1028:13 | x | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1028:17:1028:34 | MyThing2 {...} | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1029:13:1029:13 | y | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1029:17:1029:34 | MyThing2 {...} | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1031:18:1031:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1031:18:1031:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1031:18:1031:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1031:18:1031:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1031:26:1031:26 | x | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1032:18:1032:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1032:18:1032:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1032:18:1032:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1032:18:1032:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1032:26:1032:26 | y | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1034:13:1034:13 | x | | main.rs:937:5:940:5 | MyThing | +| main.rs:1034:17:1034:33 | MyThing {...} | | main.rs:937:5:940:5 | MyThing | +| main.rs:1035:31:1035:31 | x | | main.rs:937:5:940:5 | MyThing | +| main.rs:1037:13:1037:13 | x | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1037:17:1037:34 | MyThing2 {...} | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1038:31:1038:31 | x | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1055:22:1055:22 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1055:22:1055:22 | x | TRef | main.rs:1055:11:1055:19 | T | +| main.rs:1055:35:1057:5 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1055:35:1057:5 | { ... } | TRef | main.rs:1055:11:1055:19 | T | +| main.rs:1056:9:1056:9 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1056:9:1056:9 | x | TRef | main.rs:1055:11:1055:19 | T | +| main.rs:1060:17:1060:20 | SelfParam | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1060:29:1062:9 | { ... } | | main.rs:1048:5:1049:14 | S2 | +| main.rs:1065:21:1065:21 | x | | main.rs:1065:13:1065:14 | T1 | +| main.rs:1068:5:1070:5 | { ... } | | main.rs:1065:17:1065:18 | T2 | +| main.rs:1069:9:1069:9 | x | | main.rs:1065:13:1065:14 | T1 | +| main.rs:1072:16:1088:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1074:18:1074:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1074:18:1074:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1074:18:1074:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1074:18:1074:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1074:26:1074:31 | id(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1074:29:1074:30 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1077:18:1077:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1077:18:1077:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1077:18:1077:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1077:18:1077:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1077:26:1077:37 | id::<...>(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1077:26:1077:37 | id::<...>(...) | TRef | main.rs:1045:5:1046:14 | S1 | +| main.rs:1077:35:1077:36 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1081:18:1081:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1081:18:1081:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1081:18:1081:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1081:18:1081:44 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1081:26:1081:44 | id::<...>(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1081:26:1081:44 | id::<...>(...) | TRef | main.rs:1051:5:1051:25 | dyn Trait | +| main.rs:1081:42:1081:43 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1084:9:1084:25 | into::<...>(...) | | main.rs:1048:5:1049:14 | S2 | +| main.rs:1087:13:1087:13 | y | | main.rs:1048:5:1049:14 | S2 | +| main.rs:1101:22:1101:25 | SelfParam | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1101:22:1101:25 | SelfParam | Fst | main.rs:1100:10:1100:12 | Fst | +| main.rs:1101:22:1101:25 | SelfParam | Snd | main.rs:1100:15:1100:17 | Snd | +| main.rs:1101:35:1108:9 | { ... } | | main.rs:1100:15:1100:17 | Snd | +| main.rs:1102:19:1102:22 | self | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1102:19:1102:22 | self | Fst | main.rs:1100:10:1100:12 | Fst | +| main.rs:1102:19:1102:22 | self | Snd | main.rs:1100:15:1100:17 | Snd | +| main.rs:1103:43:1103:82 | MacroExpr | | file://:0:0:0:0 | ! | +| main.rs:1103:50:1103:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | & | +| main.rs:1103:50:1103:81 | "PairNone has no second elemen... | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1103:50:1103:81 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | +| main.rs:1103:50:1103:81 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1104:43:1104:81 | MacroExpr | | file://:0:0:0:0 | ! | +| main.rs:1104:50:1104:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | & | +| main.rs:1104:50:1104:80 | "PairFst has no second element... | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1104:50:1104:80 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | +| main.rs:1104:50:1104:80 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1132:10:1132:10 | t | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1132:10:1132:10 | t | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1132:10:1132:10 | t | Snd | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1132:10:1132:10 | t | Snd.Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1132:10:1132:10 | t | Snd.Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1132:30:1135:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1133:17:1133:17 | t | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1133:17:1133:17 | t | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1133:17:1133:17 | t | Snd | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1133:17:1133:17 | t | Snd.Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1133:17:1133:17 | t | Snd.Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1134:18:1134:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1134:18:1134:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1134:18:1134:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1134:18:1134:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1145:16:1165:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1147:13:1147:14 | p1 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1147:13:1147:14 | p1 | Fst | main.rs:1111:5:1112:14 | S1 | +| main.rs:1147:13:1147:14 | p1 | Snd | main.rs:1114:5:1115:14 | S2 | +| main.rs:1148:18:1148:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1148:18:1148:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1148:18:1148:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1148:18:1148:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1148:26:1148:27 | p1 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1148:26:1148:27 | p1 | Fst | main.rs:1111:5:1112:14 | S1 | +| main.rs:1148:26:1148:27 | p1 | Snd | main.rs:1114:5:1115:14 | S2 | +| main.rs:1151:13:1151:14 | p2 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1151:13:1151:14 | p2 | Fst | main.rs:1111:5:1112:14 | S1 | +| main.rs:1151:13:1151:14 | p2 | Snd | main.rs:1114:5:1115:14 | S2 | +| main.rs:1152:18:1152:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1152:18:1152:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1152:18:1152:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1152:18:1152:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1152:26:1152:27 | p2 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1152:26:1152:27 | p2 | Fst | main.rs:1111:5:1112:14 | S1 | +| main.rs:1152:26:1152:27 | p2 | Snd | main.rs:1114:5:1115:14 | S2 | +| main.rs:1155:13:1155:14 | p3 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1155:13:1155:14 | p3 | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1156:18:1156:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1156:18:1156:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1156:18:1156:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1156:18:1156:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1156:26:1156:27 | p3 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1156:26:1156:27 | p3 | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1159:13:1159:14 | p3 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1159:13:1159:14 | p3 | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1159:13:1159:14 | p3 | Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1160:18:1160:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1160:18:1160:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1160:18:1160:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1160:18:1160:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1160:26:1160:27 | p3 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1160:26:1160:27 | p3 | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1160:26:1160:27 | p3 | Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1162:9:1162:55 | g(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1164:13:1164:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1164:13:1164:13 | x | E | main.rs:1111:5:1112:14 | S1 | +| main.rs:1164:13:1164:13 | x | T | main.rs:1137:5:1137:34 | S4 | +| main.rs:1164:13:1164:13 | x | T.T41 | main.rs:1114:5:1115:14 | S2 | +| main.rs:1164:13:1164:13 | x | T.T42 | main.rs:1139:5:1139:22 | S5 | +| main.rs:1164:13:1164:13 | x | T.T42.T5 | main.rs:1114:5:1115:14 | S2 | +| main.rs:1177:16:1177:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1177:16:1177:24 | SelfParam | TRefMut | main.rs:1175:5:1182:5 | Self [trait MyTrait] | +| main.rs:1177:27:1177:31 | value | | main.rs:1175:19:1175:19 | S | +| main.rs:1179:21:1179:29 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1179:21:1179:29 | SelfParam | TRefMut | main.rs:1175:5:1182:5 | Self [trait MyTrait] | +| main.rs:1179:32:1179:36 | value | | main.rs:1175:19:1175:19 | S | +| main.rs:1179:42:1181:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1180:13:1180:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1180:13:1180:16 | self | TRefMut | main.rs:1175:5:1182:5 | Self [trait MyTrait] | +| main.rs:1180:22:1180:26 | value | | main.rs:1175:19:1175:19 | S | +| main.rs:1186:16:1186:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1186:16:1186:24 | SelfParam | TRefMut | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1186:16:1186:24 | SelfParam | TRefMut.T | main.rs:1184:10:1184:10 | T | +| main.rs:1186:27:1186:31 | value | | main.rs:1184:10:1184:10 | T | +| main.rs:1186:37:1186:38 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1190:26:1192:9 | { ... } | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1190:26:1192:9 | { ... } | T | main.rs:1189:10:1189:10 | T | +| main.rs:1196:20:1196:23 | SelfParam | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1196:20:1196:23 | SelfParam | T | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1196:20:1196:23 | SelfParam | T.T | main.rs:1195:10:1195:10 | T | +| main.rs:1196:41:1201:9 | { ... } | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1196:41:1201:9 | { ... } | T | main.rs:1195:10:1195:10 | T | +| main.rs:1197:19:1197:22 | self | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1197:19:1197:22 | self | T | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1197:19:1197:22 | self | T.T | main.rs:1195:10:1195:10 | T | +| main.rs:1207:16:1252:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1208:13:1208:14 | x1 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1208:13:1208:14 | x1 | T | main.rs:1204:5:1205:13 | S | +| main.rs:1208:18:1208:37 | ...::new(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1208:18:1208:37 | ...::new(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1209:18:1209:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1209:18:1209:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1209:18:1209:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1209:18:1209:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1209:26:1209:27 | x1 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1209:26:1209:27 | x1 | T | main.rs:1204:5:1205:13 | S | +| main.rs:1211:17:1211:18 | x2 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1211:22:1211:36 | ...::new(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1212:9:1212:10 | x2 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1213:18:1213:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1213:18:1213:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1213:18:1213:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1213:18:1213:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1213:26:1213:27 | x2 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1215:17:1215:18 | x3 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1215:22:1215:36 | ...::new(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1216:9:1216:10 | x3 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1217:18:1217:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1217:18:1217:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1217:18:1217:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1217:18:1217:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1217:26:1217:27 | x3 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1219:17:1219:18 | x4 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1219:22:1219:36 | ...::new(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1220:9:1220:33 | ...::set(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1220:23:1220:29 | &mut x4 | | {EXTERNAL LOCATION} | &mut | +| main.rs:1220:28:1220:29 | x4 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1221:18:1221:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1221:18:1221:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1221:18:1221:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1221:18:1221:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1221:26:1221:27 | x4 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1224:18:1224:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1224:18:1224:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1224:18:1224:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1224:18:1224:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1227:18:1227:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1227:18:1227:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1227:18:1227:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1227:18:1227:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1227:26:1227:26 | x | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1228:18:1228:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1228:18:1228:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1228:18:1228:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1228:18:1228:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1228:26:1228:26 | y | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1230:13:1230:13 | x | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1230:17:1230:33 | MyThing {...} | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1231:13:1231:13 | y | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1231:17:1231:33 | MyThing {...} | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1233:18:1233:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1233:18:1233:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1233:18:1233:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1233:18:1233:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1233:26:1233:26 | x | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1234:18:1234:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1234:18:1234:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1234:18:1234:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1234:18:1234:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1234:26:1234:26 | y | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1236:13:1236:13 | x | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1236:17:1236:34 | MyThing2 {...} | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1237:13:1237:13 | y | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1237:17:1237:34 | MyThing2 {...} | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1239:18:1239:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1239:18:1239:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1239:18:1239:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1239:18:1239:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1239:26:1239:26 | x | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1240:18:1240:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1240:18:1240:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1240:18:1240:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1240:18:1240:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1240:26:1240:26 | y | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1242:13:1242:13 | x | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1242:17:1242:33 | MyThing {...} | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1243:31:1243:31 | x | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1245:13:1245:13 | x | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1245:17:1245:34 | MyThing2 {...} | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1246:31:1246:31 | x | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1263:22:1263:22 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1263:22:1263:22 | x | TRef | main.rs:1263:11:1263:19 | T | -| main.rs:1263:35:1265:5 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1263:35:1265:5 | { ... } | TRef | main.rs:1263:11:1263:19 | T | -| main.rs:1264:9:1264:9 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1264:9:1264:9 | x | TRef | main.rs:1263:11:1263:19 | T | -| main.rs:1268:17:1268:20 | SelfParam | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1268:29:1270:9 | { ... } | | main.rs:1256:5:1257:14 | S2 | -| main.rs:1273:21:1273:21 | x | | main.rs:1273:13:1273:14 | T1 | -| main.rs:1276:5:1278:5 | { ... } | | main.rs:1273:17:1273:18 | T2 | -| main.rs:1277:9:1277:9 | x | | main.rs:1273:13:1273:14 | T1 | -| main.rs:1280:16:1296:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1282:18:1282:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1282:18:1282:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1282:18:1282:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1282:18:1282:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1282:26:1282:31 | id(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1282:29:1282:30 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1285:18:1285:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1285:18:1285:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1285:18:1285:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1285:18:1285:37 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1285:26:1285:37 | id::<...>(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1285:26:1285:37 | id::<...>(...) | TRef | main.rs:1253:5:1254:14 | S1 | -| main.rs:1285:35:1285:36 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1289:18:1289:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1289:18:1289:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1289:18:1289:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1289:18:1289:44 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1289:26:1289:44 | id::<...>(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1289:26:1289:44 | id::<...>(...) | TRef | main.rs:1259:5:1259:25 | dyn Trait | -| main.rs:1289:42:1289:43 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1292:9:1292:25 | into::<...>(...) | | main.rs:1256:5:1257:14 | S2 | -| main.rs:1295:13:1295:13 | y | | main.rs:1256:5:1257:14 | S2 | -| main.rs:1309:22:1309:25 | SelfParam | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1309:22:1309:25 | SelfParam | Fst | main.rs:1308:10:1308:12 | Fst | -| main.rs:1309:22:1309:25 | SelfParam | Snd | main.rs:1308:15:1308:17 | Snd | -| main.rs:1309:35:1316:9 | { ... } | | main.rs:1308:15:1308:17 | Snd | -| main.rs:1310:19:1310:22 | self | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1310:19:1310:22 | self | Fst | main.rs:1308:10:1308:12 | Fst | -| main.rs:1310:19:1310:22 | self | Snd | main.rs:1308:15:1308:17 | Snd | -| main.rs:1311:43:1311:82 | MacroExpr | | file://:0:0:0:0 | ! | -| main.rs:1311:50:1311:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | & | -| main.rs:1311:50:1311:81 | "PairNone has no second elemen... | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1311:50:1311:81 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | -| main.rs:1311:50:1311:81 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1312:43:1312:81 | MacroExpr | | file://:0:0:0:0 | ! | -| main.rs:1312:50:1312:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | & | -| main.rs:1312:50:1312:80 | "PairFst has no second element... | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1312:50:1312:80 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | -| main.rs:1312:50:1312:80 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1340:10:1340:10 | t | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1340:10:1340:10 | t | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1340:10:1340:10 | t | Snd | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1340:10:1340:10 | t | Snd.Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1340:10:1340:10 | t | Snd.Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1340:30:1343:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1341:17:1341:17 | t | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1341:17:1341:17 | t | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1341:17:1341:17 | t | Snd | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1341:17:1341:17 | t | Snd.Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1341:17:1341:17 | t | Snd.Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1342:18:1342:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1342:18:1342:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1342:18:1342:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1342:18:1342:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1357:22:1357:25 | SelfParam | | main.rs:1355:5:1358:5 | Self [trait TraitWithAssocType] | -| main.rs:1365:22:1365:25 | SelfParam | | main.rs:1353:5:1353:28 | GenS | -| main.rs:1365:22:1365:25 | SelfParam | GenT | main.rs:1360:10:1360:15 | Output | -| main.rs:1365:44:1367:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1365:44:1367:9 | { ... } | E | main.rs:1360:10:1360:15 | Output | -| main.rs:1365:44:1367:9 | { ... } | T | main.rs:1360:10:1360:15 | Output | -| main.rs:1366:16:1366:19 | self | | main.rs:1353:5:1353:28 | GenS | -| main.rs:1366:16:1366:19 | self | GenT | main.rs:1360:10:1360:15 | Output | -| main.rs:1370:16:1392:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1372:13:1372:14 | p1 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1372:13:1372:14 | p1 | Fst | main.rs:1319:5:1320:14 | S1 | -| main.rs:1372:13:1372:14 | p1 | Snd | main.rs:1322:5:1323:14 | S2 | -| main.rs:1373:18:1373:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1373:18:1373:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1373:18:1373:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1373:18:1373:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1373:26:1373:27 | p1 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1373:26:1373:27 | p1 | Fst | main.rs:1319:5:1320:14 | S1 | -| main.rs:1373:26:1373:27 | p1 | Snd | main.rs:1322:5:1323:14 | S2 | -| main.rs:1376:13:1376:14 | p2 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1376:13:1376:14 | p2 | Fst | main.rs:1319:5:1320:14 | S1 | -| main.rs:1376:13:1376:14 | p2 | Snd | main.rs:1322:5:1323:14 | S2 | -| main.rs:1377:18:1377:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1377:18:1377:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1377:18:1377:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1377:18:1377:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1377:26:1377:27 | p2 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1377:26:1377:27 | p2 | Fst | main.rs:1319:5:1320:14 | S1 | -| main.rs:1377:26:1377:27 | p2 | Snd | main.rs:1322:5:1323:14 | S2 | -| main.rs:1380:13:1380:14 | p3 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1380:13:1380:14 | p3 | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1381:18:1381:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1381:18:1381:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1381:18:1381:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1381:18:1381:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1381:26:1381:27 | p3 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1381:26:1381:27 | p3 | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1384:13:1384:14 | p3 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1384:13:1384:14 | p3 | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1384:13:1384:14 | p3 | Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1385:18:1385:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1385:18:1385:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1385:18:1385:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1385:18:1385:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1385:26:1385:27 | p3 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1385:26:1385:27 | p3 | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1385:26:1385:27 | p3 | Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1387:9:1387:55 | g(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1389:13:1389:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1389:13:1389:13 | x | E | main.rs:1319:5:1320:14 | S1 | -| main.rs:1389:13:1389:13 | x | T | main.rs:1345:5:1345:34 | S4 | -| main.rs:1389:13:1389:13 | x | T.T41 | main.rs:1322:5:1323:14 | S2 | -| main.rs:1389:13:1389:13 | x | T.T42 | main.rs:1347:5:1347:22 | S5 | -| main.rs:1389:13:1389:13 | x | T.T42.T5 | main.rs:1322:5:1323:14 | S2 | -| main.rs:1391:22:1391:25 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1404:16:1404:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1404:16:1404:24 | SelfParam | TRefMut | main.rs:1402:5:1409:5 | Self [trait MyTrait] | -| main.rs:1404:27:1404:31 | value | | main.rs:1402:19:1402:19 | S | -| main.rs:1406:21:1406:29 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1406:21:1406:29 | SelfParam | TRefMut | main.rs:1402:5:1409:5 | Self [trait MyTrait] | -| main.rs:1406:32:1406:36 | value | | main.rs:1402:19:1402:19 | S | -| main.rs:1406:42:1408:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1407:13:1407:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1407:13:1407:16 | self | TRefMut | main.rs:1402:5:1409:5 | Self [trait MyTrait] | -| main.rs:1407:22:1407:26 | value | | main.rs:1402:19:1402:19 | S | -| main.rs:1413:16:1413:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1413:16:1413:24 | SelfParam | TRefMut | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1413:16:1413:24 | SelfParam | TRefMut.T | main.rs:1411:10:1411:10 | T | -| main.rs:1413:27:1413:31 | value | | main.rs:1411:10:1411:10 | T | -| main.rs:1413:37:1413:38 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1417:26:1419:9 | { ... } | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1417:26:1419:9 | { ... } | T | main.rs:1416:10:1416:10 | T | -| main.rs:1423:20:1423:23 | SelfParam | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1423:20:1423:23 | SelfParam | T | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1423:20:1423:23 | SelfParam | T.T | main.rs:1422:10:1422:10 | T | -| main.rs:1423:41:1428:9 | { ... } | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1423:41:1428:9 | { ... } | T | main.rs:1422:10:1422:10 | T | -| main.rs:1424:19:1424:22 | self | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1424:19:1424:22 | self | T | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1424:19:1424:22 | self | T.T | main.rs:1422:10:1422:10 | T | -| main.rs:1434:16:1479:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1435:13:1435:14 | x1 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1435:13:1435:14 | x1 | T | main.rs:1431:5:1432:13 | S | -| main.rs:1435:18:1435:37 | ...::new(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1435:18:1435:37 | ...::new(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1436:18:1436:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1436:18:1436:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1436:18:1436:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1436:18:1436:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1436:26:1436:27 | x1 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1436:26:1436:27 | x1 | T | main.rs:1431:5:1432:13 | S | -| main.rs:1438:17:1438:18 | x2 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1438:22:1438:36 | ...::new(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1439:9:1439:10 | x2 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1440:18:1440:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1440:18:1440:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1440:18:1440:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1440:18:1440:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1440:26:1440:27 | x2 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1442:17:1442:18 | x3 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1442:22:1442:36 | ...::new(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1443:9:1443:10 | x3 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1444:18:1444:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1444:18:1444:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1444:18:1444:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1444:18:1444:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1444:26:1444:27 | x3 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1446:17:1446:18 | x4 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1446:22:1446:36 | ...::new(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1447:9:1447:33 | ...::set(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1447:23:1447:29 | &mut x4 | | {EXTERNAL LOCATION} | &mut | -| main.rs:1447:28:1447:29 | x4 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1448:18:1448:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1448:18:1448:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1448:18:1448:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1448:18:1448:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1448:26:1448:27 | x4 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1451:18:1451:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1451:18:1451:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1451:18:1451:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1451:18:1451:37 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1454:18:1454:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1454:18:1454:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1454:18:1454:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1454:18:1454:61 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1454:26:1454:61 | ...::flatten(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1454:26:1454:61 | ...::flatten(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1462:18:1462:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1462:18:1462:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1462:18:1462:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1462:18:1462:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1466:13:1466:16 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1467:13:1467:17 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1469:18:1469:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1469:18:1469:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1469:18:1469:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1469:18:1469:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1472:30:1477:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1473:13:1475:13 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1473:22:1475:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1478:18:1478:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1478:18:1478:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1478:18:1478:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1478:18:1478:34 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1496:15:1496:18 | SelfParam | | main.rs:1484:5:1485:19 | S | -| main.rs:1496:15:1496:18 | SelfParam | T | main.rs:1495:10:1495:10 | T | -| main.rs:1496:26:1498:9 | { ... } | | main.rs:1495:10:1495:10 | T | -| main.rs:1497:13:1497:16 | self | | main.rs:1484:5:1485:19 | S | -| main.rs:1497:13:1497:16 | self | T | main.rs:1495:10:1495:10 | T | -| main.rs:1500:15:1500:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1500:15:1500:19 | SelfParam | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1500:15:1500:19 | SelfParam | TRef.T | main.rs:1495:10:1495:10 | T | -| main.rs:1500:28:1502:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1500:28:1502:9 | { ... } | TRef | main.rs:1495:10:1495:10 | T | -| main.rs:1501:13:1501:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1501:14:1501:17 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1501:14:1501:17 | self | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1501:14:1501:17 | self | TRef.T | main.rs:1495:10:1495:10 | T | -| main.rs:1504:15:1504:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1504:15:1504:25 | SelfParam | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1504:15:1504:25 | SelfParam | TRef.T | main.rs:1495:10:1495:10 | T | -| main.rs:1504:34:1506:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1504:34:1506:9 | { ... } | TRef | main.rs:1495:10:1495:10 | T | -| main.rs:1505:13:1505:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1505:14:1505:17 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1505:14:1505:17 | self | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1505:14:1505:17 | self | TRef.T | main.rs:1495:10:1495:10 | T | -| main.rs:1510:29:1510:33 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1510:29:1510:33 | SelfParam | TRef | main.rs:1509:5:1512:5 | Self [trait ATrait] | -| main.rs:1511:33:1511:36 | SelfParam | | main.rs:1509:5:1512:5 | Self [trait ATrait] | -| main.rs:1517:29:1517:33 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1517:29:1517:33 | SelfParam | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1517:29:1517:33 | SelfParam | TRef.TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1517:43:1519:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1518:17:1518:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1518:17:1518:20 | self | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1518:17:1518:20 | self | TRef.TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1522:33:1522:36 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1522:33:1522:36 | SelfParam | TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1522:46:1524:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1523:15:1523:18 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1523:15:1523:18 | self | TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1527:16:1577:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1529:18:1529:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1529:18:1529:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1529:18:1529:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1529:18:1529:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1533:18:1533:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1533:18:1533:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1533:18:1533:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1533:18:1533:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1534:18:1534:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1534:18:1534:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1534:18:1534:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1534:18:1534:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1538:18:1538:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1538:18:1538:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1538:18:1538:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1538:18:1538:41 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1538:26:1538:41 | ...::m2(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1538:26:1538:41 | ...::m2(...) | TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1538:38:1538:40 | &x3 | | {EXTERNAL LOCATION} | & | -| main.rs:1539:18:1539:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1539:18:1539:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1539:18:1539:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1539:18:1539:41 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1539:26:1539:41 | ...::m3(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1539:26:1539:41 | ...::m3(...) | TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1539:38:1539:40 | &x3 | | {EXTERNAL LOCATION} | & | -| main.rs:1541:13:1541:14 | x4 | | {EXTERNAL LOCATION} | & | -| main.rs:1541:18:1541:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1543:18:1543:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1543:18:1543:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1543:18:1543:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1543:18:1543:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1543:26:1543:27 | x4 | | {EXTERNAL LOCATION} | & | -| main.rs:1544:18:1544:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1544:18:1544:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1544:18:1544:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1544:18:1544:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1544:26:1544:27 | x4 | | {EXTERNAL LOCATION} | & | -| main.rs:1546:13:1546:14 | x5 | | {EXTERNAL LOCATION} | & | -| main.rs:1546:18:1546:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1548:18:1548:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1548:18:1548:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1548:18:1548:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1548:18:1548:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1548:26:1548:27 | x5 | | {EXTERNAL LOCATION} | & | -| main.rs:1549:18:1549:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1549:18:1549:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1549:18:1549:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1549:18:1549:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1549:26:1549:27 | x5 | | {EXTERNAL LOCATION} | & | -| main.rs:1551:13:1551:14 | x6 | | {EXTERNAL LOCATION} | & | -| main.rs:1551:18:1551:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1554:18:1554:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1554:18:1554:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1554:18:1554:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1554:18:1554:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1554:28:1554:29 | x6 | | {EXTERNAL LOCATION} | & | -| main.rs:1556:20:1556:22 | &S2 | | {EXTERNAL LOCATION} | & | -| main.rs:1560:18:1560:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1560:18:1560:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1560:18:1560:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1560:18:1560:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1562:13:1562:14 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1562:26:1562:32 | "Hello" | | {EXTERNAL LOCATION} | & | -| main.rs:1562:26:1562:32 | "Hello" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1566:17:1566:18 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1568:13:1568:20 | my_thing | | {EXTERNAL LOCATION} | & | -| main.rs:1568:24:1568:39 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1568:25:1568:39 | MyInt {...} | | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1570:17:1570:24 | my_thing | | {EXTERNAL LOCATION} | & | -| main.rs:1571:18:1571:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1571:18:1571:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1571:18:1571:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1571:18:1571:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1574:13:1574:20 | my_thing | | {EXTERNAL LOCATION} | & | -| main.rs:1574:24:1574:39 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1574:25:1574:39 | MyInt {...} | | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1575:17:1575:24 | my_thing | | {EXTERNAL LOCATION} | & | -| main.rs:1576:18:1576:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1576:18:1576:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1576:18:1576:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1576:18:1576:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1583:16:1583:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1583:16:1583:20 | SelfParam | TRef | main.rs:1581:5:1589:5 | Self [trait MyTrait] | -| main.rs:1586:16:1586:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1586:16:1586:20 | SelfParam | TRef | main.rs:1581:5:1589:5 | Self [trait MyTrait] | -| main.rs:1586:32:1588:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1586:32:1588:9 | { ... } | TRef | main.rs:1581:5:1589:5 | Self [trait MyTrait] | -| main.rs:1587:13:1587:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1587:13:1587:16 | self | TRef | main.rs:1581:5:1589:5 | Self [trait MyTrait] | -| main.rs:1595:16:1595:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1595:16:1595:20 | SelfParam | TRef | main.rs:1591:5:1591:20 | MyStruct | -| main.rs:1595:36:1597:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1595:36:1597:9 | { ... } | TRef | main.rs:1591:5:1591:20 | MyStruct | -| main.rs:1596:13:1596:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1596:13:1596:16 | self | TRef | main.rs:1591:5:1591:20 | MyStruct | -| main.rs:1600:16:1603:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1612:16:1612:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1612:16:1612:20 | SelfParam | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1612:16:1612:20 | SelfParam | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1612:32:1614:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1612:32:1614:9 | { ... } | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1612:32:1614:9 | { ... } | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1613:13:1613:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1613:13:1613:16 | self | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1613:13:1613:16 | self | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1616:16:1616:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1616:16:1616:20 | SelfParam | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1616:16:1616:20 | SelfParam | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1616:23:1616:23 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1616:23:1616:23 | x | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1616:23:1616:23 | x | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1616:42:1618:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1616:42:1618:9 | { ... } | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1616:42:1618:9 | { ... } | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1617:13:1617:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1617:13:1617:16 | self | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1617:13:1617:16 | self | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1621:16:1627:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1626:15:1626:17 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1626:16:1626:17 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1637:17:1637:25 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1637:17:1637:25 | SelfParam | TRefMut | main.rs:1631:5:1634:5 | MyFlag | -| main.rs:1637:28:1639:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1638:13:1638:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1638:13:1638:16 | self | TRefMut | main.rs:1631:5:1634:5 | MyFlag | -| main.rs:1638:26:1638:29 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1638:26:1638:29 | self | TRefMut | main.rs:1631:5:1634:5 | MyFlag | -| main.rs:1645:15:1645:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1645:15:1645:19 | SelfParam | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1645:31:1647:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1645:31:1647:9 | { ... } | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1646:13:1646:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1646:14:1646:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1646:15:1646:19 | &self | | {EXTERNAL LOCATION} | & | -| main.rs:1646:16:1646:19 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1646:16:1646:19 | self | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1649:15:1649:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1649:15:1649:25 | SelfParam | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1649:37:1651:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1649:37:1651:9 | { ... } | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1650:13:1650:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1650:14:1650:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1650:15:1650:19 | &self | | {EXTERNAL LOCATION} | & | -| main.rs:1650:16:1650:19 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1650:16:1650:19 | self | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1653:15:1653:15 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1653:15:1653:15 | x | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1653:34:1655:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1653:34:1655:9 | { ... } | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1654:13:1654:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1654:13:1654:13 | x | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1657:15:1657:15 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1657:15:1657:15 | x | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1657:34:1659:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1657:34:1659:9 | { ... } | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1658:13:1658:16 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1658:14:1658:16 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1658:15:1658:16 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1658:16:1658:16 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1658:16:1658:16 | x | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1662:16:1675:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1663:13:1663:13 | x | | main.rs:1642:5:1642:13 | S | -| main.rs:1663:17:1663:20 | S {...} | | main.rs:1642:5:1642:13 | S | -| main.rs:1664:9:1664:9 | x | | main.rs:1642:5:1642:13 | S | -| main.rs:1665:9:1665:9 | x | | main.rs:1642:5:1642:13 | S | -| main.rs:1666:9:1666:17 | ...::f3(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1666:9:1666:17 | ...::f3(...) | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1666:15:1666:16 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1666:16:1666:16 | x | | main.rs:1642:5:1642:13 | S | -| main.rs:1668:19:1668:24 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1668:20:1668:24 | &true | | {EXTERNAL LOCATION} | & | -| main.rs:1668:21:1668:24 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1673:9:1673:31 | ...::flip(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1673:22:1673:30 | &mut flag | | {EXTERNAL LOCATION} | &mut | -| main.rs:1674:18:1674:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1674:18:1674:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1674:18:1674:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1674:18:1674:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1689:43:1692:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1689:43:1692:5 | { ... } | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1689:43:1692:5 | { ... } | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1696:46:1700:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1696:46:1700:5 | { ... } | E | main.rs:1684:5:1685:14 | S2 | -| main.rs:1696:46:1700:5 | { ... } | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1704:40:1709:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1704:40:1709:5 | { ... } | E | main.rs:1684:5:1685:14 | S2 | -| main.rs:1704:40:1709:5 | { ... } | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1713:30:1713:34 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1713:30:1713:34 | input | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1713:30:1713:34 | input | T | main.rs:1713:20:1713:27 | T | -| main.rs:1713:69:1720:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1713:69:1720:5 | { ... } | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1713:69:1720:5 | { ... } | T | main.rs:1713:20:1713:27 | T | -| main.rs:1714:21:1714:25 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1714:21:1714:25 | input | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1714:21:1714:25 | input | T | main.rs:1713:20:1713:27 | T | -| main.rs:1716:22:1716:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1716:22:1716:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1716:22:1716:30 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1716:22:1716:30 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1723:16:1739:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1724:9:1726:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1724:37:1724:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1724:37:1724:52 | try_same_error(...) | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1724:37:1724:52 | try_same_error(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1724:54:1726:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1725:22:1725:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1725:22:1725:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1725:22:1725:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1725:22:1725:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1728:9:1730:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1728:37:1728:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1728:37:1728:55 | try_convert_error(...) | E | main.rs:1684:5:1685:14 | S2 | -| main.rs:1728:37:1728:55 | try_convert_error(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1728:57:1730:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1729:22:1729:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1729:22:1729:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1729:22:1729:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1729:22:1729:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1732:9:1734:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1732:37:1732:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1732:37:1732:49 | try_chained(...) | E | main.rs:1684:5:1685:14 | S2 | -| main.rs:1732:37:1732:49 | try_chained(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1732:51:1734:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1733:22:1733:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1733:22:1733:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1733:22:1733:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1733:22:1733:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1736:9:1738:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1736:37:1736:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1736:37:1736:63 | try_complex(...) | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1736:65:1738:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1737:22:1737:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1737:22:1737:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1737:22:1737:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1737:22:1737:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1743:16:1834:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1744:13:1744:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1746:17:1746:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1747:17:1747:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1748:13:1748:13 | c | | {EXTERNAL LOCATION} | char | -| main.rs:1748:17:1748:19 | 'c' | | {EXTERNAL LOCATION} | char | -| main.rs:1749:13:1749:17 | hello | | {EXTERNAL LOCATION} | & | -| main.rs:1749:13:1749:17 | hello | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1749:21:1749:27 | "Hello" | | {EXTERNAL LOCATION} | & | -| main.rs:1749:21:1749:27 | "Hello" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1750:13:1750:13 | f | | {EXTERNAL LOCATION} | f64 | -| main.rs:1750:17:1750:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | -| main.rs:1751:13:1751:13 | t | | {EXTERNAL LOCATION} | bool | -| main.rs:1751:17:1751:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1752:13:1752:13 | f | | {EXTERNAL LOCATION} | bool | -| main.rs:1752:17:1752:21 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1755:26:1755:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1755:26:1755:30 | SelfParam | TRef | main.rs:1754:9:1758:9 | Self [trait MyTrait] | -| main.rs:1761:26:1761:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1761:26:1761:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [;] | -| main.rs:1761:26:1761:30 | SelfParam | TRef.TArray | main.rs:1760:14:1760:23 | T | -| main.rs:1761:39:1763:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1761:39:1763:13 | { ... } | TRef | main.rs:1760:14:1760:23 | T | -| main.rs:1762:17:1762:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1762:17:1762:20 | self | TRef | {EXTERNAL LOCATION} | [;] | -| main.rs:1762:17:1762:20 | self | TRef.TArray | main.rs:1760:14:1760:23 | T | -| main.rs:1765:31:1767:13 | { ... } | | main.rs:1760:14:1760:23 | T | -| main.rs:1770:17:1770:25 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:1771:13:1771:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1771:17:1771:47 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1771:37:1771:46 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1771:38:1771:46 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:1772:13:1772:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1772:17:1772:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:1775:26:1775:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1775:26:1775:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:1775:26:1775:30 | SelfParam | TRef.TSlice | main.rs:1774:14:1774:23 | T | -| main.rs:1775:39:1777:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1775:39:1777:13 | { ... } | TRef | main.rs:1774:14:1774:23 | T | -| main.rs:1776:17:1776:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1776:17:1776:20 | self | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:1776:17:1776:20 | self | TRef.TSlice | main.rs:1774:14:1774:23 | T | -| main.rs:1779:31:1781:13 | { ... } | | main.rs:1774:14:1774:23 | T | -| main.rs:1784:13:1784:13 | s | | {EXTERNAL LOCATION} | & | -| main.rs:1784:13:1784:13 | s | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:1784:13:1784:13 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | -| main.rs:1784:25:1784:34 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1784:26:1784:34 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:1785:17:1785:17 | s | | {EXTERNAL LOCATION} | & | -| main.rs:1785:17:1785:17 | s | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:1785:17:1785:17 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | -| main.rs:1786:13:1786:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1786:17:1786:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1786:34:1786:34 | s | | {EXTERNAL LOCATION} | & | -| main.rs:1786:34:1786:34 | s | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:1786:34:1786:34 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | -| main.rs:1787:13:1787:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1787:17:1787:34 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:1790:26:1790:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1790:26:1790:30 | SelfParam | TRef | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1790:26:1790:30 | SelfParam | TRef.T0 | main.rs:1789:14:1789:23 | T | -| main.rs:1790:26:1790:30 | SelfParam | TRef.T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:1790:39:1792:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1790:39:1792:13 | { ... } | TRef | main.rs:1789:14:1789:23 | T | -| main.rs:1791:17:1791:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1791:18:1791:21 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1791:18:1791:21 | self | TRef | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1791:18:1791:21 | self | TRef.T0 | main.rs:1789:14:1789:23 | T | -| main.rs:1791:18:1791:21 | self | TRef.T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:1794:31:1796:13 | { ... } | | main.rs:1789:14:1789:23 | T | -| main.rs:1799:13:1799:13 | p | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1799:17:1799:23 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1800:17:1800:17 | p | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1801:13:1801:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1801:17:1801:39 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1801:37:1801:38 | &p | | {EXTERNAL LOCATION} | & | -| main.rs:1801:38:1801:38 | p | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1802:13:1802:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1802:17:1802:39 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:1805:26:1805:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1805:26:1805:30 | SelfParam | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1805:26:1805:30 | SelfParam | TRef.TRef | main.rs:1804:14:1804:23 | T | -| main.rs:1805:39:1807:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1805:39:1807:13 | { ... } | TRef | main.rs:1804:14:1804:23 | T | -| main.rs:1806:18:1806:21 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1806:18:1806:21 | self | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1806:18:1806:21 | self | TRef.TRef | main.rs:1804:14:1804:23 | T | -| main.rs:1809:31:1811:13 | { ... } | | main.rs:1804:14:1804:23 | T | -| main.rs:1814:13:1814:13 | r | | {EXTERNAL LOCATION} | & | -| main.rs:1814:17:1814:19 | &42 | | {EXTERNAL LOCATION} | & | -| main.rs:1815:17:1815:17 | r | | {EXTERNAL LOCATION} | & | -| main.rs:1816:13:1816:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1816:17:1816:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1816:33:1816:34 | &r | | {EXTERNAL LOCATION} | & | -| main.rs:1816:34:1816:34 | r | | {EXTERNAL LOCATION} | & | -| main.rs:1817:13:1817:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1817:17:1817:33 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:1820:26:1820:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1820:26:1820:30 | SelfParam | TRef | {EXTERNAL LOCATION} | *mut | -| main.rs:1820:26:1820:30 | SelfParam | TRef.TPtrMut | main.rs:1819:14:1819:23 | T | -| main.rs:1820:39:1822:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1820:39:1822:13 | { ... } | TRef | main.rs:1819:14:1819:23 | T | -| main.rs:1821:26:1821:32 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1821:29:1821:32 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1821:29:1821:32 | self | TRef | {EXTERNAL LOCATION} | *mut | -| main.rs:1821:29:1821:32 | self | TRef.TPtrMut | main.rs:1819:14:1819:23 | T | -| main.rs:1824:31:1826:13 | { ... } | | main.rs:1819:14:1819:23 | T | -| main.rs:1830:13:1830:13 | p | | {EXTERNAL LOCATION} | *mut | -| main.rs:1830:13:1830:13 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | -| main.rs:1830:27:1830:32 | &mut v | | {EXTERNAL LOCATION} | &mut | -| main.rs:1831:26:1831:26 | p | | {EXTERNAL LOCATION} | *mut | -| main.rs:1831:26:1831:26 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | -| main.rs:1832:26:1832:48 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1832:46:1832:47 | &p | | {EXTERNAL LOCATION} | & | -| main.rs:1832:47:1832:47 | p | | {EXTERNAL LOCATION} | *mut | -| main.rs:1832:47:1832:47 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | -| main.rs:1833:13:1833:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1833:17:1833:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:1839:16:1851:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1840:13:1840:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:1840:17:1840:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1840:17:1840:29 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1840:25:1840:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1841:13:1841:13 | y | | {EXTERNAL LOCATION} | bool | -| main.rs:1841:17:1841:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1841:17:1841:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1841:25:1841:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1845:17:1847:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1847:16:1849:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1864:30:1866:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1865:13:1865:31 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1872:16:1872:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1872:22:1872:24 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1872:41:1877:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1873:13:1876:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1874:20:1874:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1874:29:1874:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1875:20:1875:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1875:29:1875:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1882:23:1882:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1882:23:1882:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1882:34:1882:36 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1882:45:1885:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1883:13:1883:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1883:13:1883:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1883:23:1883:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1884:13:1884:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1884:13:1884:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1884:23:1884:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1890:16:1890:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1890:22:1890:24 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1890:41:1895:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1891:13:1894:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1892:20:1892:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1892:29:1892:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1893:20:1893:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1893:29:1893:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1900:23:1900:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1900:23:1900:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1900:34:1900:36 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1900:45:1903:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1901:13:1901:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1901:13:1901:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1901:23:1901:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1902:13:1902:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1902:13:1902:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1902:23:1902:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1908:16:1908:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1908:22:1908:24 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1908:41:1913:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1909:13:1912:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1910:20:1910:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1910:29:1910:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1911:20:1911:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1911:29:1911:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1917:23:1917:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1917:23:1917:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1917:34:1917:36 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1917:45:1920:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1918:13:1918:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1918:13:1918:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1918:23:1918:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1919:13:1919:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1919:13:1919:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1919:23:1919:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1925:16:1925:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1925:22:1925:24 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1925:41:1930:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1926:13:1929:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1927:20:1927:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1927:29:1927:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1928:20:1928:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1928:29:1928:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1934:23:1934:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1934:23:1934:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1934:34:1934:36 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1934:45:1937:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1935:13:1935:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1935:13:1935:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1935:23:1935:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1936:13:1936:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1936:13:1936:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1936:23:1936:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1942:16:1942:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1942:22:1942:24 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1942:41:1947:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1943:13:1946:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1944:20:1944:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1944:29:1944:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1945:20:1945:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1945:29:1945:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1951:23:1951:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1951:23:1951:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1951:34:1951:36 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1951:45:1954:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1952:13:1952:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1952:13:1952:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1952:23:1952:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1953:13:1953:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1953:13:1953:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1953:23:1953:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1959:19:1959:22 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1959:25:1959:27 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1959:44:1964:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1960:13:1963:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1961:20:1961:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1961:29:1961:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1962:20:1962:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1962:29:1962:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1968:26:1968:34 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1968:26:1968:34 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1968:37:1968:39 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1968:48:1971:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1969:13:1969:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1969:13:1969:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1969:23:1969:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1970:13:1970:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1970:13:1970:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1970:23:1970:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1976:18:1976:21 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1976:24:1976:26 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1976:43:1981:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1977:13:1980:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1978:20:1978:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1978:29:1978:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1979:20:1979:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1979:29:1979:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1985:25:1985:33 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1985:25:1985:33 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1985:36:1985:38 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1985:47:1988:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1986:13:1986:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1986:13:1986:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1986:23:1986:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1987:13:1987:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1987:13:1987:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1987:23:1987:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1993:19:1993:22 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1993:25:1993:27 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1993:44:1998:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1994:13:1997:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1995:20:1995:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1995:29:1995:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1996:20:1996:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1996:29:1996:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2002:26:2002:34 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:2002:26:2002:34 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2002:37:2002:39 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2002:48:2005:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2003:13:2003:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2003:13:2003:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2003:23:2003:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2004:13:2004:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2004:13:2004:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2004:23:2004:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2010:16:2010:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2010:22:2010:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2010:40:2015:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2011:13:2014:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2012:20:2012:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2012:30:2012:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2013:20:2013:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2013:30:2013:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2019:23:2019:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:2019:23:2019:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2019:34:2019:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2019:44:2022:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2020:13:2020:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2020:13:2020:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2020:24:2020:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2021:13:2021:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2021:13:2021:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2021:24:2021:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2027:16:2027:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2027:22:2027:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2027:40:2032:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2028:13:2031:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2029:20:2029:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2029:30:2029:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2030:20:2030:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2030:30:2030:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2036:23:2036:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:2036:23:2036:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2036:34:2036:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2036:44:2039:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2037:13:2037:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2037:13:2037:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2037:24:2037:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2038:13:2038:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2038:13:2038:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2038:24:2038:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2044:16:2044:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2044:30:2049:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2045:13:2048:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2046:21:2046:24 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2047:21:2047:24 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2054:16:2054:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2054:30:2059:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2055:13:2058:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2056:21:2056:24 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2057:21:2057:24 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2063:15:2063:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2063:15:2063:19 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2063:22:2063:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2063:22:2063:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2063:44:2065:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2064:13:2064:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2064:13:2064:16 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2064:13:2064:29 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2064:13:2064:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2064:23:2064:27 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2064:23:2064:27 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2064:34:2064:37 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2064:34:2064:37 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2064:34:2064:50 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2064:44:2064:48 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2064:44:2064:48 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2067:15:2067:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2067:15:2067:19 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2067:22:2067:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2067:22:2067:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2067:44:2069:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2068:13:2068:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2068:13:2068:16 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2068:13:2068:29 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2068:13:2068:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2068:23:2068:27 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2068:23:2068:27 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2068:34:2068:37 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2068:34:2068:37 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2068:34:2068:50 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2068:44:2068:48 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2068:44:2068:48 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2073:24:2073:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2073:24:2073:28 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2073:31:2073:35 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2073:31:2073:35 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2073:75:2075:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2073:75:2075:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:2074:14:2074:17 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2074:14:2074:17 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2074:23:2074:26 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2074:23:2074:26 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2074:43:2074:62 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2074:45:2074:49 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2074:45:2074:49 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2074:55:2074:59 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2074:55:2074:59 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2077:15:2077:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2077:15:2077:19 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2077:22:2077:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2077:22:2077:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2077:44:2079:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2078:13:2078:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2078:13:2078:16 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2078:13:2078:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2078:13:2078:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2078:22:2078:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2078:22:2078:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2078:33:2078:36 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2078:33:2078:36 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2078:33:2078:48 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2078:42:2078:46 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2078:42:2078:46 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2081:15:2081:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2081:15:2081:19 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2081:22:2081:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2081:22:2081:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2081:44:2083:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2082:13:2082:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2082:13:2082:16 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2082:13:2082:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2082:13:2082:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2082:23:2082:27 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2082:23:2082:27 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2082:34:2082:37 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2082:34:2082:37 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2082:34:2082:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2082:44:2082:48 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2082:44:2082:48 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2085:15:2085:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2085:15:2085:19 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2085:22:2085:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2085:22:2085:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2085:44:2087:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2086:13:2086:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2086:13:2086:16 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2086:13:2086:28 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2086:13:2086:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2086:22:2086:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2086:22:2086:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2086:33:2086:36 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2086:33:2086:36 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2086:33:2086:48 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2086:42:2086:46 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2086:42:2086:46 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2089:15:2089:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2089:15:2089:19 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2089:22:2089:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2089:22:2089:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2089:44:2091:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2090:13:2090:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2090:13:2090:16 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2090:13:2090:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2090:13:2090:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2090:23:2090:27 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2090:23:2090:27 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2090:34:2090:37 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2090:34:2090:37 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2090:34:2090:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2090:44:2090:48 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2090:44:2090:48 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2094:26:2094:26 | a | | main.rs:2094:18:2094:23 | T | -| main.rs:2094:32:2094:32 | b | | main.rs:2094:18:2094:23 | T | -| main.rs:2095:9:2095:9 | a | | main.rs:2094:18:2094:23 | T | -| main.rs:2095:13:2095:13 | b | | main.rs:2094:18:2094:23 | T | -| main.rs:2098:16:2229:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2102:23:2102:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2102:31:2102:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2103:23:2103:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2103:31:2103:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2104:23:2104:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2104:30:2104:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2105:23:2105:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2105:31:2105:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2106:23:2106:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2106:30:2106:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2107:23:2107:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2107:32:2107:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2110:23:2110:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2110:31:2110:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2111:23:2111:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2111:31:2111:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2112:23:2112:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2112:31:2112:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2113:23:2113:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2113:31:2113:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2114:23:2114:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2114:31:2114:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2115:39:2115:42 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2115:45:2115:48 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2118:17:2118:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2118:34:2118:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2119:9:2119:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2119:27:2119:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2121:17:2121:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2121:34:2121:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2122:9:2122:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2122:27:2122:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2124:17:2124:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2124:34:2124:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2125:9:2125:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2125:27:2125:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2127:17:2127:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2127:34:2127:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2128:9:2128:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2128:27:2128:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2130:17:2130:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2130:34:2130:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2131:9:2131:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2131:27:2131:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2134:26:2134:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2134:34:2134:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2135:25:2135:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2135:33:2135:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2136:26:2136:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2136:34:2136:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2137:23:2137:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2137:32:2137:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2138:23:2138:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2138:32:2138:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2141:17:2141:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2141:37:2141:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2142:9:2142:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2142:30:2142:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2144:17:2144:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2144:36:2144:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2145:9:2145:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2145:29:2145:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2147:17:2147:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2147:37:2147:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2148:9:2148:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2148:30:2148:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2150:17:2150:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2150:34:2150:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2151:9:2151:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2151:28:2151:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2153:17:2153:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2153:34:2153:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2154:9:2154:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2154:28:2154:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2156:24:2156:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2157:24:2157:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2160:13:2160:14 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2160:18:2160:36 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2161:13:2161:14 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2161:18:2161:36 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2164:23:2164:24 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2164:29:2164:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2165:23:2165:24 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2165:29:2165:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2166:23:2166:24 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2166:28:2166:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2167:23:2167:24 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2167:29:2167:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2168:23:2168:24 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2168:28:2168:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2169:23:2169:24 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2169:29:2169:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2172:24:2172:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2172:29:2172:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2173:24:2173:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2173:29:2173:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2174:24:2174:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2174:29:2174:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2175:24:2175:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2175:29:2175:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2176:24:2176:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2176:29:2176:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2179:17:2179:31 | vec2_add_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2179:35:2179:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2180:9:2180:23 | vec2_add_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2180:28:2180:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2182:17:2182:31 | vec2_sub_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2182:35:2182:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2183:9:2183:23 | vec2_sub_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2183:28:2183:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2185:17:2185:31 | vec2_mul_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2185:35:2185:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2186:9:2186:23 | vec2_mul_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2186:28:2186:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2188:17:2188:31 | vec2_div_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2188:35:2188:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2189:9:2189:23 | vec2_div_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2189:28:2189:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2191:17:2191:31 | vec2_rem_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2191:35:2191:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2192:9:2192:23 | vec2_rem_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2192:28:2192:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2195:27:2195:28 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2195:32:2195:33 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2196:26:2196:27 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2196:31:2196:32 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2197:27:2197:28 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2197:32:2197:33 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2198:24:2198:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2198:30:2198:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2199:24:2199:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2199:30:2199:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2202:17:2202:34 | vec2_bitand_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2202:38:2202:39 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2203:9:2203:26 | vec2_bitand_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2203:31:2203:32 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2205:17:2205:33 | vec2_bitor_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2205:37:2205:38 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2206:9:2206:25 | vec2_bitor_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2206:30:2206:31 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2208:17:2208:34 | vec2_bitxor_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2208:38:2208:39 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2209:9:2209:26 | vec2_bitxor_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2209:31:2209:32 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2211:17:2211:31 | vec2_shl_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2211:35:2211:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2212:9:2212:23 | vec2_shl_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2212:29:2212:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2214:17:2214:31 | vec2_shr_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2214:35:2214:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2215:9:2215:23 | vec2_shr_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2215:29:2215:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2218:25:2218:26 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2219:25:2219:26 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2223:30:2223:48 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2228:30:2228:48 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2238:18:2238:21 | SelfParam | | main.rs:2235:5:2235:14 | S1 | -| main.rs:2238:24:2238:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2241:25:2243:5 | { ... } | | main.rs:2235:5:2235:14 | S1 | -| main.rs:2246:9:2246:20 | { ... } | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2250:9:2250:16 | { ... } | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2250:9:2250:16 | { ... } | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2259:13:2259:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | -| main.rs:2259:13:2259:42 | SelfParam | Ptr | {EXTERNAL LOCATION} | &mut | -| main.rs:2259:13:2259:42 | SelfParam | Ptr.TRefMut | main.rs:2253:5:2253:14 | S2 | -| main.rs:2260:13:2260:15 | _cx | | {EXTERNAL LOCATION} | &mut | -| main.rs:2260:13:2260:15 | _cx | TRefMut | {EXTERNAL LOCATION} | Context | -| main.rs:2261:44:2263:9 | { ... } | | {EXTERNAL LOCATION} | Poll | -| main.rs:2261:44:2263:9 | { ... } | T | main.rs:2235:5:2235:14 | S1 | -| main.rs:2270:22:2278:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2271:9:2271:12 | f1(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2271:9:2271:12 | f1(...) | dyn(Output) | main.rs:2235:5:2235:14 | S1 | -| main.rs:2272:9:2272:12 | f2(...) | | main.rs:2245:16:2245:39 | impl ... | -| main.rs:2273:9:2273:12 | f3(...) | | main.rs:2249:16:2249:39 | impl ... | -| main.rs:2274:9:2274:12 | f4(...) | | main.rs:2266:16:2266:39 | impl ... | -| main.rs:2276:13:2276:13 | b | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2276:17:2276:28 | { ... } | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2277:9:2277:9 | b | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2288:15:2288:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2288:15:2288:19 | SelfParam | TRef | main.rs:2287:5:2289:5 | Self [trait Trait1] | -| main.rs:2288:22:2288:23 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2292:15:2292:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2292:15:2292:19 | SelfParam | TRef | main.rs:2291:5:2293:5 | Self [trait Trait2] | -| main.rs:2292:22:2292:23 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2296:15:2296:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2296:15:2296:19 | SelfParam | TRef | main.rs:2282:5:2283:14 | S1 | -| main.rs:2296:22:2296:23 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2300:15:2300:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2300:15:2300:19 | SelfParam | TRef | main.rs:2282:5:2283:14 | S1 | -| main.rs:2300:22:2300:23 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2308:18:2308:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2308:18:2308:22 | SelfParam | TRef | main.rs:2307:5:2309:5 | Self [trait MyTrait] | -| main.rs:2312:18:2312:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2312:18:2312:22 | SelfParam | TRef | main.rs:2282:5:2283:14 | S1 | -| main.rs:2312:31:2314:9 | { ... } | | main.rs:2284:5:2284:14 | S2 | -| main.rs:2318:18:2318:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2318:18:2318:22 | SelfParam | TRef | main.rs:2285:5:2285:22 | S3 | -| main.rs:2318:18:2318:22 | SelfParam | TRef.T3 | main.rs:2317:10:2317:17 | T | -| main.rs:2318:30:2321:9 | { ... } | | main.rs:2317:10:2317:17 | T | -| main.rs:2319:25:2319:28 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2319:25:2319:28 | self | TRef | main.rs:2285:5:2285:22 | S3 | -| main.rs:2319:25:2319:28 | self | TRef.T3 | main.rs:2317:10:2317:17 | T | -| main.rs:2328:41:2328:41 | t | | main.rs:2328:26:2328:38 | B | -| main.rs:2328:52:2330:5 | { ... } | | main.rs:2328:23:2328:23 | A | -| main.rs:2329:9:2329:9 | t | | main.rs:2328:26:2328:38 | B | -| main.rs:2332:34:2332:34 | x | | main.rs:2332:24:2332:31 | T | -| main.rs:2332:59:2334:5 | { ... } | | main.rs:2332:43:2332:57 | impl ... | -| main.rs:2332:59:2334:5 | { ... } | impl(T) | main.rs:2332:24:2332:31 | T | -| main.rs:2333:12:2333:12 | x | | main.rs:2332:24:2332:31 | T | -| main.rs:2336:34:2336:34 | x | | main.rs:2336:24:2336:31 | T | -| main.rs:2336:67:2338:5 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2336:67:2338:5 | { ... } | T | main.rs:2336:50:2336:64 | impl ... | -| main.rs:2336:67:2338:5 | { ... } | T.impl(T) | main.rs:2336:24:2336:31 | T | -| main.rs:2337:17:2337:17 | x | | main.rs:2336:24:2336:31 | T | -| main.rs:2340:34:2340:34 | x | | main.rs:2340:24:2340:31 | T | -| main.rs:2340:78:2342:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2340:78:2342:5 | { ... } | T0 | main.rs:2340:44:2340:58 | impl ... | -| main.rs:2340:78:2342:5 | { ... } | T0.impl(T) | main.rs:2340:24:2340:31 | T | -| main.rs:2340:78:2342:5 | { ... } | T1 | main.rs:2340:61:2340:75 | impl ... | -| main.rs:2340:78:2342:5 | { ... } | T1.impl(T) | main.rs:2340:24:2340:31 | T | -| main.rs:2341:9:2341:30 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2341:13:2341:13 | x | | main.rs:2340:24:2340:31 | T | -| main.rs:2341:28:2341:28 | x | | main.rs:2340:24:2340:31 | T | -| main.rs:2344:26:2344:26 | t | | main.rs:2344:29:2344:43 | impl ... | -| main.rs:2344:51:2346:5 | { ... } | | main.rs:2344:23:2344:23 | A | -| main.rs:2345:9:2345:9 | t | | main.rs:2344:29:2344:43 | impl ... | -| main.rs:2348:16:2362:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2349:13:2349:13 | x | | main.rs:2303:16:2303:35 | impl ... + ... | -| main.rs:2349:17:2349:20 | f1(...) | | main.rs:2303:16:2303:35 | impl ... + ... | -| main.rs:2350:9:2350:9 | x | | main.rs:2303:16:2303:35 | impl ... + ... | -| main.rs:2351:9:2351:9 | x | | main.rs:2303:16:2303:35 | impl ... + ... | -| main.rs:2352:13:2352:13 | a | | main.rs:2324:28:2324:43 | impl ... | -| main.rs:2352:17:2352:32 | get_a_my_trait(...) | | main.rs:2324:28:2324:43 | impl ... | -| main.rs:2353:32:2353:32 | a | | main.rs:2324:28:2324:43 | impl ... | -| main.rs:2354:13:2354:13 | a | | main.rs:2324:28:2324:43 | impl ... | -| main.rs:2354:17:2354:32 | get_a_my_trait(...) | | main.rs:2324:28:2324:43 | impl ... | -| main.rs:2355:32:2355:32 | a | | main.rs:2324:28:2324:43 | impl ... | -| main.rs:2357:17:2357:35 | get_a_my_trait2(...) | | main.rs:2332:43:2332:57 | impl ... | -| main.rs:2360:17:2360:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2360:17:2360:35 | get_a_my_trait3(...) | T | main.rs:2336:50:2336:64 | impl ... | -| main.rs:2361:17:2361:35 | get_a_my_trait4(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2361:17:2361:35 | get_a_my_trait4(...) | T0 | main.rs:2340:44:2340:58 | impl ... | -| main.rs:2361:17:2361:35 | get_a_my_trait4(...) | T1 | main.rs:2340:61:2340:75 | impl ... | -| main.rs:2372:16:2372:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2372:16:2372:20 | SelfParam | TRef | main.rs:2368:5:2369:13 | S | -| main.rs:2372:31:2374:9 | { ... } | | main.rs:2368:5:2369:13 | S | -| main.rs:2383:26:2385:9 | { ... } | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2383:26:2385:9 | { ... } | T | main.rs:2382:10:2382:10 | T | -| main.rs:2384:13:2384:38 | MyVec {...} | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2384:27:2384:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2384:27:2384:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2387:17:2387:25 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:2387:17:2387:25 | SelfParam | TRefMut | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2387:17:2387:25 | SelfParam | TRefMut.T | main.rs:2382:10:2382:10 | T | -| main.rs:2387:28:2387:32 | value | | main.rs:2382:10:2382:10 | T | -| main.rs:2387:38:2389:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2388:13:2388:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2388:13:2388:16 | self | TRefMut | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2388:13:2388:16 | self | TRefMut.T | main.rs:2382:10:2382:10 | T | -| main.rs:2388:28:2388:32 | value | | main.rs:2382:10:2382:10 | T | -| main.rs:2396:18:2396:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2396:18:2396:22 | SelfParam | TRef | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2396:18:2396:22 | SelfParam | TRef.T | main.rs:2392:10:2392:10 | T | -| main.rs:2396:25:2396:29 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2396:56:2398:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2396:56:2398:9 | { ... } | TRef | main.rs:2392:10:2392:10 | T | -| main.rs:2397:13:2397:29 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2397:14:2397:17 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2397:14:2397:17 | self | TRef | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2397:14:2397:17 | self | TRef.T | main.rs:2392:10:2392:10 | T | -| main.rs:2397:24:2397:28 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2401:22:2401:26 | slice | | {EXTERNAL LOCATION} | & | -| main.rs:2401:22:2401:26 | slice | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:2401:22:2401:26 | slice | TRef.TSlice | main.rs:2368:5:2369:13 | S | -| main.rs:2401:35:2403:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2402:17:2402:21 | slice | | {EXTERNAL LOCATION} | & | -| main.rs:2402:17:2402:21 | slice | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:2402:17:2402:21 | slice | TRef.TSlice | main.rs:2368:5:2369:13 | S | -| main.rs:2405:37:2405:37 | a | | main.rs:2405:20:2405:34 | T | -| main.rs:2405:43:2405:43 | b | | {EXTERNAL LOCATION} | usize | -| main.rs:2409:9:2409:9 | a | | main.rs:2405:20:2405:34 | T | -| main.rs:2409:11:2409:11 | b | | {EXTERNAL LOCATION} | usize | -| main.rs:2412:16:2423:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2413:17:2413:19 | vec | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2413:23:2413:34 | ...::new(...) | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2414:9:2414:11 | vec | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2415:9:2415:11 | vec | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2417:13:2417:14 | xs | | {EXTERNAL LOCATION} | [;] | -| main.rs:2417:13:2417:14 | xs | TArray | main.rs:2368:5:2369:13 | S | -| main.rs:2417:26:2417:28 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2418:17:2418:18 | xs | | {EXTERNAL LOCATION} | [;] | -| main.rs:2418:17:2418:18 | xs | TArray | main.rs:2368:5:2369:13 | S | -| main.rs:2420:29:2420:31 | vec | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2422:9:2422:26 | analyze_slice(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2422:23:2422:25 | &xs | | {EXTERNAL LOCATION} | & | -| main.rs:2422:24:2422:25 | xs | | {EXTERNAL LOCATION} | [;] | -| main.rs:2422:24:2422:25 | xs | TArray | main.rs:2368:5:2369:13 | S | -| main.rs:2427:16:2429:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2428:25:2428:35 | "Hello, {}" | | {EXTERNAL LOCATION} | & | -| main.rs:2428:25:2428:35 | "Hello, {}" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2428:25:2428:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2428:38:2428:45 | "World!" | | {EXTERNAL LOCATION} | & | -| main.rs:2428:38:2428:45 | "World!" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2437:19:2437:22 | SelfParam | | main.rs:2433:5:2438:5 | Self [trait MyAdd] | -| main.rs:2437:25:2437:27 | rhs | | main.rs:2433:17:2433:26 | Rhs | -| main.rs:2444:19:2444:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2444:25:2444:29 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2444:45:2446:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2445:13:2445:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2453:19:2453:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2453:25:2453:29 | value | | {EXTERNAL LOCATION} | & | -| main.rs:2453:25:2453:29 | value | TRef | {EXTERNAL LOCATION} | i64 | -| main.rs:2453:46:2455:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2454:14:2454:18 | value | | {EXTERNAL LOCATION} | & | -| main.rs:2454:14:2454:18 | value | TRef | {EXTERNAL LOCATION} | i64 | -| main.rs:2462:19:2462:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2462:25:2462:29 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2462:46:2468:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2463:16:2463:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2477:19:2477:22 | SelfParam | | main.rs:2471:5:2471:19 | S | -| main.rs:2477:19:2477:22 | SelfParam | T | main.rs:2473:10:2473:17 | T | -| main.rs:2477:25:2477:29 | other | | main.rs:2471:5:2471:19 | S | -| main.rs:2477:25:2477:29 | other | T | main.rs:2473:10:2473:17 | T | -| main.rs:2477:54:2479:9 | { ... } | | main.rs:2471:5:2471:19 | S | -| main.rs:2478:16:2478:19 | self | | main.rs:2471:5:2471:19 | S | -| main.rs:2478:16:2478:19 | self | T | main.rs:2473:10:2473:17 | T | -| main.rs:2478:31:2478:35 | other | | main.rs:2471:5:2471:19 | S | -| main.rs:2478:31:2478:35 | other | T | main.rs:2473:10:2473:17 | T | -| main.rs:2486:19:2486:22 | SelfParam | | main.rs:2471:5:2471:19 | S | -| main.rs:2486:19:2486:22 | SelfParam | T | main.rs:2482:10:2482:17 | T | -| main.rs:2486:25:2486:29 | other | | main.rs:2482:10:2482:17 | T | -| main.rs:2486:51:2488:9 | { ... } | | main.rs:2471:5:2471:19 | S | -| main.rs:2487:16:2487:19 | self | | main.rs:2471:5:2471:19 | S | -| main.rs:2487:16:2487:19 | self | T | main.rs:2482:10:2482:17 | T | -| main.rs:2487:31:2487:35 | other | | main.rs:2482:10:2482:17 | T | -| main.rs:2498:19:2498:22 | SelfParam | | main.rs:2471:5:2471:19 | S | -| main.rs:2498:19:2498:22 | SelfParam | T | main.rs:2491:14:2491:14 | T | -| main.rs:2498:25:2498:29 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2498:25:2498:29 | other | TRef | main.rs:2491:14:2491:14 | T | -| main.rs:2498:55:2500:9 | { ... } | | main.rs:2471:5:2471:19 | S | -| main.rs:2499:16:2499:19 | self | | main.rs:2471:5:2471:19 | S | -| main.rs:2499:16:2499:19 | self | T | main.rs:2491:14:2491:14 | T | -| main.rs:2499:31:2499:35 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2499:31:2499:35 | other | TRef | main.rs:2491:14:2491:14 | T | -| main.rs:2505:20:2505:24 | value | | main.rs:2503:18:2503:18 | T | -| main.rs:2510:20:2510:24 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2510:40:2512:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2511:13:2511:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2517:20:2517:24 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2517:41:2523:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2518:16:2518:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2528:21:2528:25 | value | | main.rs:2526:19:2526:19 | T | -| main.rs:2528:31:2528:31 | x | | main.rs:2526:5:2529:5 | Self [trait MyFrom2] | -| main.rs:2533:21:2533:25 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2533:33:2533:33 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2533:48:2535:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2534:13:2534:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2540:21:2540:25 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2540:34:2540:34 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2540:49:2546:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2541:16:2541:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2551:15:2551:15 | x | | main.rs:2549:5:2555:5 | Self [trait MySelfTrait] | -| main.rs:2554:15:2554:15 | x | | main.rs:2549:5:2555:5 | Self [trait MySelfTrait] | -| main.rs:2559:15:2559:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2559:31:2561:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2560:13:2560:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2564:15:2564:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2564:32:2566:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2565:13:2565:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2571:15:2571:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2571:31:2573:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2576:15:2576:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2576:32:2578:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2577:13:2577:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2581:16:2606:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2582:13:2582:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2583:9:2583:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2583:18:2583:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2584:9:2584:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2584:18:2584:22 | &5i64 | | {EXTERNAL LOCATION} | & | -| main.rs:2584:19:2584:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2585:9:2585:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2585:18:2585:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2587:11:2587:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2587:26:2587:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2588:11:2588:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2588:24:2588:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2589:11:2589:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2589:24:2589:28 | &3i64 | | {EXTERNAL LOCATION} | & | -| main.rs:2589:25:2589:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2591:13:2591:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2591:17:2591:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2591:30:2591:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2592:13:2592:13 | y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2592:17:2592:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2592:30:2592:33 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2593:13:2593:13 | z | | {EXTERNAL LOCATION} | i64 | -| main.rs:2593:38:2593:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2594:9:2594:34 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2594:23:2594:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2594:30:2594:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2595:9:2595:33 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2595:23:2595:26 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2595:29:2595:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2596:9:2596:38 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2596:27:2596:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2596:34:2596:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2598:9:2598:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2598:17:2598:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2599:9:2599:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2599:17:2599:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2600:9:2600:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2600:18:2600:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2601:9:2601:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2601:18:2601:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2602:9:2602:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2602:25:2602:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2603:25:2603:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2604:9:2604:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2604:25:2604:28 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2605:25:2605:28 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2613:26:2615:9 | { ... } | | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2614:13:2614:25 | MyCallable {...} | | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2617:17:2617:21 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2617:17:2617:21 | SelfParam | TRef | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2617:31:2619:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2622:16:2729:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2625:9:2625:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2625:18:2625:26 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2625:28:2625:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2626:9:2626:44 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2626:18:2626:26 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2626:43:2626:44 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2627:9:2627:41 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2627:18:2627:26 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2627:40:2627:41 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2629:13:2629:17 | vals1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2629:21:2629:31 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2629:22:2629:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2630:9:2630:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2630:18:2630:22 | vals1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2630:24:2630:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2632:13:2632:17 | vals2 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2632:21:2632:29 | [1u16; 3] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2632:22:2632:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2633:9:2633:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2633:18:2633:22 | vals2 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2633:24:2633:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2635:13:2635:17 | vals3 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2635:13:2635:17 | vals3 | TArray | {EXTERNAL LOCATION} | u32 | -| main.rs:2635:31:2635:39 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2636:9:2636:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2636:18:2636:22 | vals3 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2636:18:2636:22 | vals3 | TArray | {EXTERNAL LOCATION} | u32 | -| main.rs:2636:24:2636:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2638:13:2638:17 | vals4 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2638:13:2638:17 | vals4 | TArray | {EXTERNAL LOCATION} | u64 | -| main.rs:2638:31:2638:36 | [1; 3] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2639:9:2639:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2639:18:2639:22 | vals4 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2639:18:2639:22 | vals4 | TArray | {EXTERNAL LOCATION} | u64 | -| main.rs:2639:24:2639:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2641:17:2641:24 | strings1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2641:28:2641:48 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2641:29:2641:33 | "foo" | | {EXTERNAL LOCATION} | & | -| main.rs:2641:29:2641:33 | "foo" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2641:36:2641:40 | "bar" | | {EXTERNAL LOCATION} | & | -| main.rs:2641:36:2641:40 | "bar" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2641:43:2641:47 | "baz" | | {EXTERNAL LOCATION} | & | -| main.rs:2641:43:2641:47 | "baz" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2642:9:2642:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2642:18:2642:26 | &strings1 | | {EXTERNAL LOCATION} | & | -| main.rs:2642:19:2642:26 | strings1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2642:28:2642:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2643:9:2643:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2643:18:2643:30 | &mut strings1 | | {EXTERNAL LOCATION} | &mut | -| main.rs:2643:23:2643:30 | strings1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2643:32:2643:33 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2644:9:2644:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2644:18:2644:25 | strings1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2644:27:2644:28 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2646:13:2646:20 | strings2 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2647:9:2651:9 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2648:13:2648:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2648:26:2648:30 | "foo" | | {EXTERNAL LOCATION} | & | -| main.rs:2648:26:2648:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2649:13:2649:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2649:26:2649:30 | "bar" | | {EXTERNAL LOCATION} | & | -| main.rs:2649:26:2649:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2650:13:2650:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2650:26:2650:30 | "baz" | | {EXTERNAL LOCATION} | & | -| main.rs:2650:26:2650:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2652:9:2652:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2652:18:2652:25 | strings2 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2652:27:2652:28 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2654:13:2654:20 | strings3 | | {EXTERNAL LOCATION} | & | -| main.rs:2655:9:2659:9 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2655:10:2659:9 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2656:13:2656:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2656:26:2656:30 | "foo" | | {EXTERNAL LOCATION} | & | -| main.rs:2656:26:2656:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2657:13:2657:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2657:26:2657:30 | "bar" | | {EXTERNAL LOCATION} | & | -| main.rs:2657:26:2657:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2658:13:2658:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2658:26:2658:30 | "baz" | | {EXTERNAL LOCATION} | & | -| main.rs:2658:26:2658:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2660:9:2660:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2660:18:2660:25 | strings3 | | {EXTERNAL LOCATION} | & | -| main.rs:2660:27:2660:28 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2662:13:2662:21 | callables | | {EXTERNAL LOCATION} | [;] | -| main.rs:2662:25:2662:81 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2662:26:2662:42 | ...::new(...) | | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2662:45:2662:61 | ...::new(...) | | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2662:64:2662:80 | ...::new(...) | | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2663:9:2667:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2664:12:2664:20 | callables | | {EXTERNAL LOCATION} | [;] | -| main.rs:2665:9:2667:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2671:9:2671:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2671:18:2671:22 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2671:24:2671:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2672:9:2672:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2672:18:2672:26 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2672:19:2672:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2672:19:2672:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2672:28:2672:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2673:13:2673:17 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2673:21:2673:25 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2674:9:2674:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2674:18:2674:22 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2674:24:2674:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2675:13:2675:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2675:26:2675:27 | .. | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2676:9:2676:51 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2676:18:2676:48 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2676:19:2676:36 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2676:20:2676:23 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2676:26:2676:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2676:32:2676:35 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2676:38:2676:47 | range_full | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2676:50:2676:51 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2678:13:2678:18 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2679:9:2682:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | -| main.rs:2680:20:2680:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2681:18:2681:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2683:9:2683:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2683:18:2683:23 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2683:25:2683:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2688:9:2688:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2688:24:2688:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2690:13:2690:18 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2690:13:2690:18 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2690:13:2690:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2690:32:2690:43 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2690:33:2690:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2691:9:2691:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2691:18:2691:23 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2691:18:2691:23 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2691:18:2691:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2691:25:2691:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2693:22:2693:33 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2693:23:2693:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2694:9:2694:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2694:25:2694:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2696:13:2696:17 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2696:21:2696:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2696:31:2696:42 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2696:32:2696:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2697:9:2697:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2697:18:2697:22 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2697:24:2697:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2699:13:2699:17 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2699:13:2699:17 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2699:13:2699:17 | vals6 | T | {EXTERNAL LOCATION} | & | -| main.rs:2699:13:2699:17 | vals6 | T.TRef | {EXTERNAL LOCATION} | u64 | -| main.rs:2699:32:2699:43 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2699:33:2699:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2700:9:2700:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2700:18:2700:22 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2700:18:2700:22 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2700:18:2700:22 | vals6 | T | {EXTERNAL LOCATION} | & | -| main.rs:2700:18:2700:22 | vals6 | T.TRef | {EXTERNAL LOCATION} | u64 | -| main.rs:2700:24:2700:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2702:17:2702:21 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2702:17:2702:21 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2702:25:2702:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2702:25:2702:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2703:9:2703:13 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2703:9:2703:13 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2703:20:2703:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2704:9:2704:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2704:18:2704:22 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2704:18:2704:22 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2704:24:2704:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2708:17:2711:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2709:13:2710:13 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2709:29:2710:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2713:17:2713:20 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2713:17:2713:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2713:24:2713:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2713:24:2713:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2714:9:2714:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2714:9:2714:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2714:24:2714:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2714:24:2714:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2714:33:2714:37 | "one" | | {EXTERNAL LOCATION} | & | -| main.rs:2714:33:2714:37 | "one" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2715:9:2715:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2715:9:2715:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2715:24:2715:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2715:24:2715:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2715:33:2715:37 | "two" | | {EXTERNAL LOCATION} | & | -| main.rs:2715:33:2715:37 | "two" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2716:9:2716:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2716:20:2716:23 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2716:20:2716:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2716:32:2716:33 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2717:9:2717:37 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2717:22:2717:25 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2717:22:2717:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2717:36:2717:37 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2718:9:2718:42 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2718:13:2718:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2718:29:2718:32 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2718:29:2718:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2718:41:2718:42 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2719:9:2719:36 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2719:13:2719:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2719:29:2719:33 | &map1 | | {EXTERNAL LOCATION} | & | -| main.rs:2719:30:2719:33 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2719:30:2719:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2719:35:2719:36 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2723:17:2723:17 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2725:17:2728:9 | while ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2725:23:2725:23 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2726:9:2728:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2727:13:2727:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2739:40:2741:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2739:40:2741:9 | { ... } | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2739:40:2741:9 | { ... } | T.T | main.rs:2738:10:2738:19 | T | -| main.rs:2743:30:2745:9 | { ... } | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2743:30:2745:9 | { ... } | T | main.rs:2738:10:2738:19 | T | -| main.rs:2747:19:2747:22 | SelfParam | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2747:19:2747:22 | SelfParam | T | main.rs:2738:10:2738:19 | T | -| main.rs:2747:33:2749:9 | { ... } | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2747:33:2749:9 | { ... } | T | main.rs:2738:10:2738:19 | T | -| main.rs:2748:13:2748:16 | self | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2748:13:2748:16 | self | T | main.rs:2738:10:2738:19 | T | -| main.rs:2760:15:2760:15 | x | | main.rs:2760:12:2760:12 | T | -| main.rs:2760:26:2762:5 | { ... } | | main.rs:2760:12:2760:12 | T | -| main.rs:2761:9:2761:9 | x | | main.rs:2760:12:2760:12 | T | -| main.rs:2764:16:2786:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2765:13:2765:14 | x1 | | {EXTERNAL LOCATION} | Option | -| main.rs:2765:13:2765:14 | x1 | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2765:13:2765:14 | x1 | T.T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2765:34:2765:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2765:34:2765:48 | ...::assoc_fun(...) | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2766:13:2766:14 | x2 | | {EXTERNAL LOCATION} | Option | -| main.rs:2766:13:2766:14 | x2 | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2766:13:2766:14 | x2 | T.T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2766:18:2766:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2766:18:2766:38 | ...::assoc_fun(...) | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2766:18:2766:38 | ...::assoc_fun(...) | T.T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2767:13:2767:14 | x3 | | {EXTERNAL LOCATION} | Option | -| main.rs:2767:13:2767:14 | x3 | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2767:13:2767:14 | x3 | T.T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2767:18:2767:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2767:18:2767:32 | ...::assoc_fun(...) | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2767:18:2767:32 | ...::assoc_fun(...) | T.T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2768:13:2768:14 | x4 | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2768:13:2768:14 | x4 | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2768:18:2768:48 | ...::method(...) | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2768:18:2768:48 | ...::method(...) | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2768:35:2768:47 | ...::default(...) | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2769:13:2769:14 | x5 | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2769:13:2769:14 | x5 | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2769:18:2769:42 | ...::method(...) | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2769:18:2769:42 | ...::method(...) | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2769:29:2769:41 | ...::default(...) | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2773:21:2773:33 | ...::default(...) | | main.rs:2735:5:2736:14 | S2 | -| main.rs:2774:13:2774:15 | x10 | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2774:13:2774:15 | x10 | T5 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2774:19:2777:9 | S5::<...> {...} | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2774:19:2777:9 | S5::<...> {...} | T5 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2778:13:2778:15 | x11 | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2778:19:2778:34 | S5 {...} | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2779:13:2779:15 | x12 | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2779:19:2779:33 | S5 {...} | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2780:13:2780:15 | x13 | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2780:19:2783:9 | S5 {...} | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2782:20:2782:32 | ...::default(...) | | main.rs:2735:5:2736:14 | S2 | -| main.rs:2784:13:2784:15 | x14 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2784:19:2784:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2785:13:2785:15 | x15 | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2785:13:2785:15 | x15 | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2785:19:2785:37 | ...::default(...) | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2785:19:2785:37 | ...::default(...) | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2794:35:2796:9 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2794:35:2796:9 | { ... } | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2794:35:2796:9 | { ... } | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2795:13:2795:26 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2795:14:2795:18 | S1 {...} | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2795:21:2795:25 | S1 {...} | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2797:16:2797:19 | SelfParam | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2797:22:2797:23 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2800:16:2834:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2801:13:2801:13 | a | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2801:13:2801:13 | a | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2801:13:2801:13 | a | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2801:17:2801:30 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2801:17:2801:30 | ...::get_pair(...) | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2801:17:2801:30 | ...::get_pair(...) | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2802:17:2802:17 | b | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2802:17:2802:17 | b | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2802:17:2802:17 | b | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2802:21:2802:34 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2802:21:2802:34 | ...::get_pair(...) | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2802:21:2802:34 | ...::get_pair(...) | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2803:13:2803:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2803:22:2803:35 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2803:22:2803:35 | ...::get_pair(...) | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2803:22:2803:35 | ...::get_pair(...) | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2804:13:2804:22 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2804:26:2804:39 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2804:26:2804:39 | ...::get_pair(...) | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2804:26:2804:39 | ...::get_pair(...) | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2805:13:2805:26 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2805:30:2805:43 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2805:30:2805:43 | ...::get_pair(...) | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2805:30:2805:43 | ...::get_pair(...) | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2807:9:2807:9 | a | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2807:9:2807:9 | a | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2807:9:2807:9 | a | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2808:9:2808:9 | b | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2808:9:2808:9 | b | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2808:9:2808:9 | b | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2821:13:2821:16 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2821:20:2821:25 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2822:13:2822:13 | i | | {EXTERNAL LOCATION} | i64 | -| main.rs:2822:22:2822:25 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2823:13:2823:13 | j | | {EXTERNAL LOCATION} | bool | -| main.rs:2823:23:2823:26 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2825:20:2825:25 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2827:13:2827:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2827:30:2827:41 | "unexpected" | | {EXTERNAL LOCATION} | & | -| main.rs:2827:30:2827:41 | "unexpected" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2827:30:2827:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2827:30:2827:41 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2828:25:2828:34 | "expected" | | {EXTERNAL LOCATION} | & | -| main.rs:2828:25:2828:34 | "expected" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2828:25:2828:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2828:25:2828:34 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2832:13:2832:13 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2832:17:2832:31 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2832:18:2832:31 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2832:18:2832:31 | ...::get_pair(...) | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2832:18:2832:31 | ...::get_pair(...) | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2833:9:2833:9 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2839:27:2861:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2840:13:2840:23 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2840:13:2840:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | -| main.rs:2840:27:2840:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2840:27:2840:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2840:36:2840:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2843:15:2843:25 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2843:15:2843:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | -| main.rs:2844:24:2846:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2845:26:2845:36 | "Boxed 100\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2845:26:2845:36 | "Boxed 100\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2845:26:2845:36 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2845:26:2845:36 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2847:22:2850:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2849:26:2849:42 | "Boxed value: {}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2849:26:2849:42 | "Boxed value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2849:26:2849:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2849:26:2849:51 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2854:13:2854:22 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2854:13:2854:22 | nested_box | A | {EXTERNAL LOCATION} | Global | -| main.rs:2854:26:2854:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2854:26:2854:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2854:35:2854:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2854:35:2854:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2854:44:2854:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2855:15:2855:24 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2855:15:2855:24 | nested_box | A | {EXTERNAL LOCATION} | Global | -| main.rs:2856:26:2859:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2858:26:2858:43 | "Nested boxed: {}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2858:26:2858:43 | "Nested boxed: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2858:26:2858:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2858:26:2858:59 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2870:36:2872:9 | { ... } | | main.rs:2867:5:2867:22 | Path | -| main.rs:2871:13:2871:19 | Path {...} | | main.rs:2867:5:2867:22 | Path | -| main.rs:2874:29:2874:33 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2874:29:2874:33 | SelfParam | TRef | main.rs:2867:5:2867:22 | Path | -| main.rs:2874:59:2876:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:2874:59:2876:9 | { ... } | E | {EXTERNAL LOCATION} | () | -| main.rs:2874:59:2876:9 | { ... } | T | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2875:16:2875:29 | ...::new(...) | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2882:39:2884:9 | { ... } | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2883:13:2883:22 | PathBuf {...} | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2892:18:2892:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2892:18:2892:22 | SelfParam | TRef | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2892:34:2896:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2892:34:2896:9 | { ... } | TRef | main.rs:2867:5:2867:22 | Path | -| main.rs:2894:33:2894:43 | ...::new(...) | | main.rs:2867:5:2867:22 | Path | -| main.rs:2895:13:2895:17 | &path | | {EXTERNAL LOCATION} | & | -| main.rs:2899:16:2907:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2900:13:2900:17 | path1 | | main.rs:2867:5:2867:22 | Path | -| main.rs:2900:21:2900:31 | ...::new(...) | | main.rs:2867:5:2867:22 | Path | -| main.rs:2901:21:2901:25 | path1 | | main.rs:2867:5:2867:22 | Path | -| main.rs:2904:13:2904:20 | pathbuf1 | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2904:24:2904:37 | ...::new(...) | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2905:24:2905:31 | pathbuf1 | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2912:14:2912:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2912:14:2912:18 | SelfParam | TRef | main.rs:2911:5:2913:5 | Self [trait MyTrait] | -| main.rs:2919:14:2919:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2919:14:2919:18 | SelfParam | TRef | main.rs:2915:5:2916:19 | S | -| main.rs:2919:14:2919:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2919:28:2921:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2920:13:2920:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2920:13:2920:16 | self | TRef | main.rs:2915:5:2916:19 | S | -| main.rs:2920:13:2920:16 | self | TRef.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2925:14:2925:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2925:14:2925:18 | SelfParam | TRef | main.rs:2915:5:2916:19 | S | -| main.rs:2925:14:2925:18 | SelfParam | TRef.T | main.rs:2915:5:2916:19 | S | -| main.rs:2925:14:2925:18 | SelfParam | TRef.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2925:28:2927:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2926:13:2926:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2926:13:2926:16 | self | TRef | main.rs:2915:5:2916:19 | S | -| main.rs:2926:13:2926:16 | self | TRef.T | main.rs:2915:5:2916:19 | S | -| main.rs:2926:13:2926:16 | self | TRef.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2931:15:2931:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2931:15:2931:19 | SelfParam | TRef | main.rs:2915:5:2916:19 | S | -| main.rs:2931:15:2931:19 | SelfParam | TRef.T | main.rs:2930:10:2930:16 | T | -| main.rs:2931:33:2933:9 | { ... } | | main.rs:2915:5:2916:19 | S | -| main.rs:2931:33:2933:9 | { ... } | T | main.rs:2915:5:2916:19 | S | -| main.rs:2931:33:2933:9 | { ... } | T.T | main.rs:2930:10:2930:16 | T | -| main.rs:2932:17:2932:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2932:17:2932:20 | self | TRef | main.rs:2915:5:2916:19 | S | -| main.rs:2932:17:2932:20 | self | TRef.T | main.rs:2930:10:2930:16 | T | -| main.rs:2936:14:2936:14 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2936:48:2953:5 | { ... } | | {EXTERNAL LOCATION} | Box | -| main.rs:2936:48:2953:5 | { ... } | A | {EXTERNAL LOCATION} | Global | -| main.rs:2936:48:2953:5 | { ... } | T | main.rs:2911:5:2913:5 | dyn MyTrait | -| main.rs:2936:48:2953:5 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2937:20:2937:20 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2947:12:2947:12 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2949:13:2949:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2949:13:2949:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2951:13:2951:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2951:13:2951:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2957:22:2961:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2958:18:2958:18 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2958:33:2960:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2959:13:2959:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2966:11:2966:14 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2966:30:2974:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2969:13:2971:13 | if cond {...} | | {EXTERNAL LOCATION} | () | -| main.rs:2969:16:2969:19 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2969:21:2971:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2977:20:2984:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2982:18:2982:26 | "b: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2982:18:2982:26 | "b: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2982:18:2982:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2982:18:2982:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2986:20:2988:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2991:11:2991:14 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2991:30:2999:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2992:13:2992:13 | a | | {EXTERNAL LOCATION} | () | -| main.rs:2992:17:2996:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2993:13:2995:13 | if cond {...} | | {EXTERNAL LOCATION} | () | -| main.rs:2993:16:2993:19 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2993:21:2995:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2997:18:2997:26 | "a: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2997:18:2997:26 | "a: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2997:18:2997:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2997:18:2997:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2997:29:2997:29 | a | | {EXTERNAL LOCATION} | () | -| main.rs:3003:16:3050:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:3005:13:3005:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:3005:13:3005:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3009:26:3009:28 | opt | | {EXTERNAL LOCATION} | Option | -| main.rs:3009:26:3009:28 | opt | T | main.rs:3009:23:3009:23 | T | -| main.rs:3009:42:3009:42 | x | | main.rs:3009:23:3009:23 | T | -| main.rs:3009:48:3009:49 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:3012:9:3012:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3019:13:3019:13 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3019:17:3019:39 | ...::A {...} | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3020:13:3020:13 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3020:13:3020:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3020:13:3020:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3020:40:3020:40 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3021:13:3021:13 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3021:13:3021:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3021:17:3021:52 | ...::A {...} | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3021:17:3021:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3023:13:3023:13 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3023:13:3023:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3023:17:3025:9 | ...::B::<...> {...} | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3023:17:3025:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3024:20:3024:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:3027:29:3027:29 | e | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3027:29:3027:29 | e | T1 | main.rs:3027:26:3027:26 | T | -| main.rs:3027:29:3027:29 | e | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3027:53:3027:53 | x | | main.rs:3027:26:3027:26 | T | -| main.rs:3027:59:3027:60 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:3030:13:3030:13 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3030:17:3032:9 | ...::B {...} | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3031:20:3031:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:3033:9:3033:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3033:23:3033:23 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3036:13:3036:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:3036:13:3036:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:3036:13:3036:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3040:29:3040:31 | res | | {EXTERNAL LOCATION} | Result | -| main.rs:3040:29:3040:31 | res | E | main.rs:3040:26:3040:26 | E | -| main.rs:3040:29:3040:31 | res | T | main.rs:3040:23:3040:23 | T | -| main.rs:3040:48:3040:48 | x | | main.rs:3040:26:3040:26 | E | -| main.rs:3040:54:3040:55 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:3043:9:3043:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3043:23:3043:27 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:3045:17:3045:17 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:3045:17:3045:17 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:3045:21:3045:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:3045:21:3045:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:3046:9:3046:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:3046:9:3046:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:3049:9:3049:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:3049:9:3049:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:3056:14:3056:17 | SelfParam | | main.rs:3054:5:3062:5 | Self [trait MyTrait] | -| main.rs:3059:14:3059:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:3059:14:3059:18 | SelfParam | TRef | main.rs:3054:5:3062:5 | Self [trait MyTrait] | -| main.rs:3059:21:3059:25 | other | | {EXTERNAL LOCATION} | & | -| main.rs:3059:21:3059:25 | other | TRef | main.rs:3054:5:3062:5 | Self [trait MyTrait] | -| main.rs:3059:44:3061:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:3059:44:3061:9 | { ... } | TRef | main.rs:3054:5:3062:5 | Self [trait MyTrait] | -| main.rs:3060:13:3060:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:3060:13:3060:16 | self | TRef | main.rs:3054:5:3062:5 | Self [trait MyTrait] | -| main.rs:3066:14:3066:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | -| main.rs:3066:28:3068:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:3067:13:3067:16 | self | | {EXTERNAL LOCATION} | i32 | -| main.rs:3073:14:3073:17 | SelfParam | | {EXTERNAL LOCATION} | usize | -| main.rs:3073:28:3075:9 | { ... } | | {EXTERNAL LOCATION} | usize | -| main.rs:3074:13:3074:16 | self | | {EXTERNAL LOCATION} | usize | -| main.rs:3080:14:3080:17 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:3080:14:3080:17 | SelfParam | TRef | main.rs:3078:10:3078:10 | T | -| main.rs:3080:28:3082:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:3080:28:3082:9 | { ... } | TRef | main.rs:3078:10:3078:10 | T | -| main.rs:3081:13:3081:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:3081:13:3081:16 | self | TRef | main.rs:3078:10:3078:10 | T | -| main.rs:3085:25:3089:5 | { ... } | | {EXTERNAL LOCATION} | usize | -| main.rs:3091:12:3099:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:3092:13:3092:13 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:3093:13:3093:13 | y | | {EXTERNAL LOCATION} | & | -| main.rs:3093:17:3093:18 | &1 | | {EXTERNAL LOCATION} | & | -| main.rs:3094:17:3094:17 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:3094:21:3094:21 | y | | {EXTERNAL LOCATION} | & | -| main.rs:3097:13:3097:13 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:3098:23:3098:23 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:3107:11:3142:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:3108:5:3108:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3109:5:3109:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:3110:5:3110:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:3110:20:3110:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:3110:41:3110:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:3111:5:3111:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3112:5:3112:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3113:5:3113:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3114:5:3114:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3115:5:3115:33 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3116:5:3116:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3117:5:3117:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3118:5:3118:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3119:5:3119:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3120:5:3120:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3121:5:3121:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3122:5:3122:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3123:5:3123:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3124:5:3124:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3125:5:3125:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3126:5:3126:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3127:5:3127:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:3127:5:3127:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:3128:5:3128:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3129:5:3129:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3130:5:3130:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3131:5:3131:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3132:5:3132:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3133:5:3133:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3134:5:3134:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3135:5:3135:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3136:5:3136:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3137:5:3137:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3138:5:3138:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3139:5:3139:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3140:5:3140:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:3140:5:3140:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:3140:5:3140:20 | ...::f(...) | T | main.rs:2911:5:2913:5 | dyn MyTrait | -| main.rs:3140:5:3140:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:3140:16:3140:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:3141:5:3141:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1227:18:1227:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1227:18:1227:61 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1227:26:1227:61 | ...::flatten(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1227:26:1227:61 | ...::flatten(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1235:18:1235:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1235:18:1235:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1235:18:1235:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1235:18:1235:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1239:13:1239:16 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1240:13:1240:17 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1242:18:1242:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1242:18:1242:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1242:18:1242:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1242:18:1242:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1245:30:1250:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1246:13:1248:13 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1246:22:1248:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1251:18:1251:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1251:18:1251:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1251:18:1251:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1251:18:1251:34 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1269:15:1269:18 | SelfParam | | main.rs:1257:5:1258:19 | S | +| main.rs:1269:15:1269:18 | SelfParam | T | main.rs:1268:10:1268:10 | T | +| main.rs:1269:26:1271:9 | { ... } | | main.rs:1268:10:1268:10 | T | +| main.rs:1270:13:1270:16 | self | | main.rs:1257:5:1258:19 | S | +| main.rs:1270:13:1270:16 | self | T | main.rs:1268:10:1268:10 | T | +| main.rs:1273:15:1273:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1273:15:1273:19 | SelfParam | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1273:15:1273:19 | SelfParam | TRef.T | main.rs:1268:10:1268:10 | T | +| main.rs:1273:28:1275:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1273:28:1275:9 | { ... } | TRef | main.rs:1268:10:1268:10 | T | +| main.rs:1274:13:1274:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1274:14:1274:17 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1274:14:1274:17 | self | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1274:14:1274:17 | self | TRef.T | main.rs:1268:10:1268:10 | T | +| main.rs:1277:15:1277:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1277:15:1277:25 | SelfParam | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1277:15:1277:25 | SelfParam | TRef.T | main.rs:1268:10:1268:10 | T | +| main.rs:1277:34:1279:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1277:34:1279:9 | { ... } | TRef | main.rs:1268:10:1268:10 | T | +| main.rs:1278:13:1278:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1278:14:1278:17 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1278:14:1278:17 | self | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1278:14:1278:17 | self | TRef.T | main.rs:1268:10:1268:10 | T | +| main.rs:1283:29:1283:33 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1283:29:1283:33 | SelfParam | TRef | main.rs:1282:5:1285:5 | Self [trait ATrait] | +| main.rs:1284:33:1284:36 | SelfParam | | main.rs:1282:5:1285:5 | Self [trait ATrait] | +| main.rs:1290:29:1290:33 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1290:29:1290:33 | SelfParam | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1290:29:1290:33 | SelfParam | TRef.TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1290:43:1292:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1291:17:1291:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1291:17:1291:20 | self | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1291:17:1291:20 | self | TRef.TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1295:33:1295:36 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1295:33:1295:36 | SelfParam | TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1295:46:1297:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1296:15:1296:18 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1296:15:1296:18 | self | TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1300:16:1350:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1302:18:1302:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1302:18:1302:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1302:18:1302:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1302:18:1302:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1306:18:1306:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1306:18:1306:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1306:18:1306:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1306:18:1306:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1307:18:1307:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1307:18:1307:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1307:18:1307:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1307:18:1307:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1311:18:1311:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1311:18:1311:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1311:18:1311:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1311:18:1311:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1311:26:1311:41 | ...::m2(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1311:26:1311:41 | ...::m2(...) | TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1311:38:1311:40 | &x3 | | {EXTERNAL LOCATION} | & | +| main.rs:1312:18:1312:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1312:18:1312:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1312:18:1312:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1312:18:1312:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1312:26:1312:41 | ...::m3(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1312:26:1312:41 | ...::m3(...) | TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1312:38:1312:40 | &x3 | | {EXTERNAL LOCATION} | & | +| main.rs:1314:13:1314:14 | x4 | | {EXTERNAL LOCATION} | & | +| main.rs:1314:18:1314:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1316:18:1316:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1316:18:1316:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1316:18:1316:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1316:18:1316:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1316:26:1316:27 | x4 | | {EXTERNAL LOCATION} | & | +| main.rs:1317:18:1317:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1317:18:1317:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1317:18:1317:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1317:18:1317:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1317:26:1317:27 | x4 | | {EXTERNAL LOCATION} | & | +| main.rs:1319:13:1319:14 | x5 | | {EXTERNAL LOCATION} | & | +| main.rs:1319:18:1319:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1321:18:1321:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1321:18:1321:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1321:18:1321:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1321:18:1321:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1321:26:1321:27 | x5 | | {EXTERNAL LOCATION} | & | +| main.rs:1322:18:1322:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1322:18:1322:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1322:18:1322:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1322:18:1322:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1322:26:1322:27 | x5 | | {EXTERNAL LOCATION} | & | +| main.rs:1324:13:1324:14 | x6 | | {EXTERNAL LOCATION} | & | +| main.rs:1324:18:1324:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1327:18:1327:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1327:18:1327:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1327:18:1327:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1327:18:1327:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1327:28:1327:29 | x6 | | {EXTERNAL LOCATION} | & | +| main.rs:1329:20:1329:22 | &S2 | | {EXTERNAL LOCATION} | & | +| main.rs:1333:18:1333:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1333:18:1333:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1333:18:1333:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1333:18:1333:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1335:13:1335:14 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1335:26:1335:32 | "Hello" | | {EXTERNAL LOCATION} | & | +| main.rs:1335:26:1335:32 | "Hello" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1339:17:1339:18 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1341:13:1341:20 | my_thing | | {EXTERNAL LOCATION} | & | +| main.rs:1341:24:1341:39 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1341:25:1341:39 | MyInt {...} | | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1343:17:1343:24 | my_thing | | {EXTERNAL LOCATION} | & | +| main.rs:1344:18:1344:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1344:18:1344:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1344:18:1344:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1344:18:1344:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1347:13:1347:20 | my_thing | | {EXTERNAL LOCATION} | & | +| main.rs:1347:24:1347:39 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1347:25:1347:39 | MyInt {...} | | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1348:17:1348:24 | my_thing | | {EXTERNAL LOCATION} | & | +| main.rs:1349:18:1349:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1349:18:1349:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1349:18:1349:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1349:18:1349:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1356:16:1356:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1356:16:1356:20 | SelfParam | TRef | main.rs:1354:5:1362:5 | Self [trait MyTrait] | +| main.rs:1359:16:1359:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1359:16:1359:20 | SelfParam | TRef | main.rs:1354:5:1362:5 | Self [trait MyTrait] | +| main.rs:1359:32:1361:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1359:32:1361:9 | { ... } | TRef | main.rs:1354:5:1362:5 | Self [trait MyTrait] | +| main.rs:1360:13:1360:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1360:13:1360:16 | self | TRef | main.rs:1354:5:1362:5 | Self [trait MyTrait] | +| main.rs:1368:16:1368:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1368:16:1368:20 | SelfParam | TRef | main.rs:1364:5:1364:20 | MyStruct | +| main.rs:1368:36:1370:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1368:36:1370:9 | { ... } | TRef | main.rs:1364:5:1364:20 | MyStruct | +| main.rs:1369:13:1369:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1369:13:1369:16 | self | TRef | main.rs:1364:5:1364:20 | MyStruct | +| main.rs:1373:16:1376:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1385:16:1385:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1385:16:1385:20 | SelfParam | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1385:16:1385:20 | SelfParam | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1385:32:1387:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1385:32:1387:9 | { ... } | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1385:32:1387:9 | { ... } | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1386:13:1386:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1386:13:1386:16 | self | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1386:13:1386:16 | self | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1389:16:1389:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1389:16:1389:20 | SelfParam | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1389:16:1389:20 | SelfParam | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1389:23:1389:23 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1389:23:1389:23 | x | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1389:23:1389:23 | x | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1389:42:1391:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1389:42:1391:9 | { ... } | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1389:42:1391:9 | { ... } | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1390:13:1390:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1390:13:1390:16 | self | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1390:13:1390:16 | self | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1394:16:1400:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1399:15:1399:17 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1399:16:1399:17 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1410:17:1410:25 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1410:17:1410:25 | SelfParam | TRefMut | main.rs:1404:5:1407:5 | MyFlag | +| main.rs:1410:28:1412:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1411:13:1411:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1411:13:1411:16 | self | TRefMut | main.rs:1404:5:1407:5 | MyFlag | +| main.rs:1411:26:1411:29 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1411:26:1411:29 | self | TRefMut | main.rs:1404:5:1407:5 | MyFlag | +| main.rs:1418:15:1418:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1418:15:1418:19 | SelfParam | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1418:31:1420:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1418:31:1420:9 | { ... } | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1419:13:1419:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1419:14:1419:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1419:15:1419:19 | &self | | {EXTERNAL LOCATION} | & | +| main.rs:1419:16:1419:19 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1419:16:1419:19 | self | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1422:15:1422:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1422:15:1422:25 | SelfParam | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1422:37:1424:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1422:37:1424:9 | { ... } | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1423:13:1423:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1423:14:1423:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1423:15:1423:19 | &self | | {EXTERNAL LOCATION} | & | +| main.rs:1423:16:1423:19 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1423:16:1423:19 | self | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1426:15:1426:15 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1426:15:1426:15 | x | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1426:34:1428:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1426:34:1428:9 | { ... } | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1427:13:1427:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1427:13:1427:13 | x | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1430:15:1430:15 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1430:15:1430:15 | x | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1430:34:1432:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1430:34:1432:9 | { ... } | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1431:13:1431:16 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1431:14:1431:16 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1431:15:1431:16 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1431:16:1431:16 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1431:16:1431:16 | x | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1435:16:1448:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1436:13:1436:13 | x | | main.rs:1415:5:1415:13 | S | +| main.rs:1436:17:1436:20 | S {...} | | main.rs:1415:5:1415:13 | S | +| main.rs:1437:9:1437:9 | x | | main.rs:1415:5:1415:13 | S | +| main.rs:1438:9:1438:9 | x | | main.rs:1415:5:1415:13 | S | +| main.rs:1439:9:1439:17 | ...::f3(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1439:9:1439:17 | ...::f3(...) | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1439:15:1439:16 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1439:16:1439:16 | x | | main.rs:1415:5:1415:13 | S | +| main.rs:1441:19:1441:24 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1441:20:1441:24 | &true | | {EXTERNAL LOCATION} | & | +| main.rs:1441:21:1441:24 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1446:9:1446:31 | ...::flip(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1446:22:1446:30 | &mut flag | | {EXTERNAL LOCATION} | &mut | +| main.rs:1447:18:1447:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1447:18:1447:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1447:18:1447:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1447:18:1447:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1462:43:1465:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1462:43:1465:5 | { ... } | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1462:43:1465:5 | { ... } | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1469:46:1473:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1469:46:1473:5 | { ... } | E | main.rs:1457:5:1458:14 | S2 | +| main.rs:1469:46:1473:5 | { ... } | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1477:40:1482:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1477:40:1482:5 | { ... } | E | main.rs:1457:5:1458:14 | S2 | +| main.rs:1477:40:1482:5 | { ... } | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1486:30:1486:34 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1486:30:1486:34 | input | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1486:30:1486:34 | input | T | main.rs:1486:20:1486:27 | T | +| main.rs:1486:69:1493:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1486:69:1493:5 | { ... } | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1486:69:1493:5 | { ... } | T | main.rs:1486:20:1486:27 | T | +| main.rs:1487:21:1487:25 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1487:21:1487:25 | input | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1487:21:1487:25 | input | T | main.rs:1486:20:1486:27 | T | +| main.rs:1489:22:1489:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1489:22:1489:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1489:22:1489:30 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1489:22:1489:30 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1496:16:1512:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1497:9:1499:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1497:37:1497:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1497:37:1497:52 | try_same_error(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1497:37:1497:52 | try_same_error(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1497:54:1499:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1498:22:1498:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1498:22:1498:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1498:22:1498:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1498:22:1498:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1501:9:1503:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1501:37:1501:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1501:37:1501:55 | try_convert_error(...) | E | main.rs:1457:5:1458:14 | S2 | +| main.rs:1501:37:1501:55 | try_convert_error(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1501:57:1503:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1502:22:1502:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1502:22:1502:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1502:22:1502:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1502:22:1502:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1505:9:1507:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1505:37:1505:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1505:37:1505:49 | try_chained(...) | E | main.rs:1457:5:1458:14 | S2 | +| main.rs:1505:37:1505:49 | try_chained(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1505:51:1507:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1506:22:1506:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1506:22:1506:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1506:22:1506:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1506:22:1506:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1509:9:1511:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1509:37:1509:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1509:37:1509:63 | try_complex(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1509:65:1511:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1510:22:1510:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1510:22:1510:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1510:22:1510:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1510:22:1510:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1516:16:1607:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1517:13:1517:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1519:17:1519:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1520:17:1520:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1521:13:1521:13 | c | | {EXTERNAL LOCATION} | char | +| main.rs:1521:17:1521:19 | 'c' | | {EXTERNAL LOCATION} | char | +| main.rs:1522:13:1522:17 | hello | | {EXTERNAL LOCATION} | & | +| main.rs:1522:13:1522:17 | hello | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1522:21:1522:27 | "Hello" | | {EXTERNAL LOCATION} | & | +| main.rs:1522:21:1522:27 | "Hello" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1523:13:1523:13 | f | | {EXTERNAL LOCATION} | f64 | +| main.rs:1523:17:1523:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | +| main.rs:1524:13:1524:13 | t | | {EXTERNAL LOCATION} | bool | +| main.rs:1524:17:1524:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1525:13:1525:13 | f | | {EXTERNAL LOCATION} | bool | +| main.rs:1525:17:1525:21 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1528:26:1528:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1528:26:1528:30 | SelfParam | TRef | main.rs:1527:9:1531:9 | Self [trait MyTrait] | +| main.rs:1534:26:1534:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1534:26:1534:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:1534:26:1534:30 | SelfParam | TRef.TArray | main.rs:1533:14:1533:23 | T | +| main.rs:1534:39:1536:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1534:39:1536:13 | { ... } | TRef | main.rs:1533:14:1533:23 | T | +| main.rs:1535:17:1535:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1535:17:1535:20 | self | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:1535:17:1535:20 | self | TRef.TArray | main.rs:1533:14:1533:23 | T | +| main.rs:1538:31:1540:13 | { ... } | | main.rs:1533:14:1533:23 | T | +| main.rs:1543:17:1543:25 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:1544:13:1544:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1544:17:1544:47 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1544:37:1544:46 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1544:38:1544:46 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:1545:13:1545:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1545:17:1545:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1548:26:1548:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1548:26:1548:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1548:26:1548:30 | SelfParam | TRef.TSlice | main.rs:1547:14:1547:23 | T | +| main.rs:1548:39:1550:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1548:39:1550:13 | { ... } | TRef | main.rs:1547:14:1547:23 | T | +| main.rs:1549:17:1549:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1549:17:1549:20 | self | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1549:17:1549:20 | self | TRef.TSlice | main.rs:1547:14:1547:23 | T | +| main.rs:1552:31:1554:13 | { ... } | | main.rs:1547:14:1547:23 | T | +| main.rs:1557:13:1557:13 | s | | {EXTERNAL LOCATION} | & | +| main.rs:1557:13:1557:13 | s | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1557:13:1557:13 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| main.rs:1557:25:1557:34 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1557:26:1557:34 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:1558:17:1558:17 | s | | {EXTERNAL LOCATION} | & | +| main.rs:1558:17:1558:17 | s | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1558:17:1558:17 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| main.rs:1559:13:1559:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1559:17:1559:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1559:34:1559:34 | s | | {EXTERNAL LOCATION} | & | +| main.rs:1559:34:1559:34 | s | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1559:34:1559:34 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| main.rs:1560:13:1560:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1560:17:1560:34 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1563:26:1563:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1563:26:1563:30 | SelfParam | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1563:26:1563:30 | SelfParam | TRef.T0 | main.rs:1562:14:1562:23 | T | +| main.rs:1563:26:1563:30 | SelfParam | TRef.T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:1563:39:1565:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1563:39:1565:13 | { ... } | TRef | main.rs:1562:14:1562:23 | T | +| main.rs:1564:17:1564:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1564:18:1564:21 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1564:18:1564:21 | self | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1564:18:1564:21 | self | TRef.T0 | main.rs:1562:14:1562:23 | T | +| main.rs:1564:18:1564:21 | self | TRef.T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:1567:31:1569:13 | { ... } | | main.rs:1562:14:1562:23 | T | +| main.rs:1572:13:1572:13 | p | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1572:17:1572:23 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1573:17:1573:17 | p | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1574:13:1574:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1574:17:1574:39 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1574:37:1574:38 | &p | | {EXTERNAL LOCATION} | & | +| main.rs:1574:38:1574:38 | p | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1575:13:1575:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1575:17:1575:39 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1578:26:1578:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1578:26:1578:30 | SelfParam | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1578:26:1578:30 | SelfParam | TRef.TRef | main.rs:1577:14:1577:23 | T | +| main.rs:1578:39:1580:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1578:39:1580:13 | { ... } | TRef | main.rs:1577:14:1577:23 | T | +| main.rs:1579:18:1579:21 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1579:18:1579:21 | self | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1579:18:1579:21 | self | TRef.TRef | main.rs:1577:14:1577:23 | T | +| main.rs:1582:31:1584:13 | { ... } | | main.rs:1577:14:1577:23 | T | +| main.rs:1587:13:1587:13 | r | | {EXTERNAL LOCATION} | & | +| main.rs:1587:17:1587:19 | &42 | | {EXTERNAL LOCATION} | & | +| main.rs:1588:17:1588:17 | r | | {EXTERNAL LOCATION} | & | +| main.rs:1589:13:1589:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1589:17:1589:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1589:33:1589:34 | &r | | {EXTERNAL LOCATION} | & | +| main.rs:1589:34:1589:34 | r | | {EXTERNAL LOCATION} | & | +| main.rs:1590:13:1590:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1590:17:1590:33 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1593:26:1593:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1593:26:1593:30 | SelfParam | TRef | {EXTERNAL LOCATION} | *mut | +| main.rs:1593:26:1593:30 | SelfParam | TRef.TPtrMut | main.rs:1592:14:1592:23 | T | +| main.rs:1593:39:1595:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1593:39:1595:13 | { ... } | TRef | main.rs:1592:14:1592:23 | T | +| main.rs:1594:26:1594:32 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1594:29:1594:32 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1594:29:1594:32 | self | TRef | {EXTERNAL LOCATION} | *mut | +| main.rs:1594:29:1594:32 | self | TRef.TPtrMut | main.rs:1592:14:1592:23 | T | +| main.rs:1597:31:1599:13 | { ... } | | main.rs:1592:14:1592:23 | T | +| main.rs:1603:13:1603:13 | p | | {EXTERNAL LOCATION} | *mut | +| main.rs:1603:13:1603:13 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | +| main.rs:1603:27:1603:32 | &mut v | | {EXTERNAL LOCATION} | &mut | +| main.rs:1604:26:1604:26 | p | | {EXTERNAL LOCATION} | *mut | +| main.rs:1604:26:1604:26 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | +| main.rs:1605:26:1605:48 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1605:46:1605:47 | &p | | {EXTERNAL LOCATION} | & | +| main.rs:1605:47:1605:47 | p | | {EXTERNAL LOCATION} | *mut | +| main.rs:1605:47:1605:47 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | +| main.rs:1606:13:1606:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1606:17:1606:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1612:16:1624:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1613:13:1613:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:1613:17:1613:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1613:17:1613:29 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1613:25:1613:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1614:13:1614:13 | y | | {EXTERNAL LOCATION} | bool | +| main.rs:1614:17:1614:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1614:17:1614:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1614:25:1614:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1618:17:1620:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1620:16:1622:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1637:30:1639:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1638:13:1638:31 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1645:16:1645:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1645:22:1645:24 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1645:41:1650:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1646:13:1649:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1647:20:1647:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1647:29:1647:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1648:20:1648:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1648:29:1648:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1655:23:1655:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1655:23:1655:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1655:34:1655:36 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1655:45:1658:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1656:13:1656:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1656:13:1656:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1656:23:1656:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1657:13:1657:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1657:13:1657:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1657:23:1657:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1663:16:1663:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1663:22:1663:24 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1663:41:1668:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1664:13:1667:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1665:20:1665:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1665:29:1665:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1666:20:1666:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1666:29:1666:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1673:23:1673:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1673:23:1673:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1673:34:1673:36 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1673:45:1676:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1674:13:1674:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1674:13:1674:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1674:23:1674:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1675:13:1675:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1675:13:1675:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1675:23:1675:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1681:16:1681:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1681:22:1681:24 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1681:41:1686:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1682:13:1685:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1683:20:1683:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1683:29:1683:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1684:20:1684:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1684:29:1684:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1690:23:1690:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1690:23:1690:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1690:34:1690:36 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1690:45:1693:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1691:13:1691:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1691:13:1691:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1691:23:1691:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1692:13:1692:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1692:13:1692:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1692:23:1692:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1698:16:1698:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1698:22:1698:24 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1698:41:1703:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1699:13:1702:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1700:20:1700:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1700:29:1700:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1701:20:1701:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1701:29:1701:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1707:23:1707:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1707:23:1707:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1707:34:1707:36 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1707:45:1710:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1708:13:1708:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1708:13:1708:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1708:23:1708:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1709:13:1709:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1709:13:1709:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1709:23:1709:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1715:16:1715:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1715:22:1715:24 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1715:41:1720:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1716:13:1719:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1717:20:1717:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1717:29:1717:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1718:20:1718:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1718:29:1718:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1724:23:1724:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1724:23:1724:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1724:34:1724:36 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1724:45:1727:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1725:13:1725:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1725:13:1725:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1725:23:1725:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1726:13:1726:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1726:13:1726:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1726:23:1726:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1732:19:1732:22 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1732:25:1732:27 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1732:44:1737:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1733:13:1736:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1734:20:1734:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1734:29:1734:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1735:20:1735:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1735:29:1735:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1741:26:1741:34 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1741:26:1741:34 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1741:37:1741:39 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1741:48:1744:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1742:13:1742:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1742:13:1742:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1742:23:1742:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1743:13:1743:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1743:13:1743:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1743:23:1743:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1749:18:1749:21 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1749:24:1749:26 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1749:43:1754:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1750:13:1753:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1751:20:1751:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1751:29:1751:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1752:20:1752:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1752:29:1752:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1758:25:1758:33 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1758:25:1758:33 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1758:36:1758:38 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1758:47:1761:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1759:13:1759:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1759:13:1759:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1759:23:1759:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1760:13:1760:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1760:13:1760:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1760:23:1760:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1766:19:1766:22 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1766:25:1766:27 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1766:44:1771:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1767:13:1770:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1768:20:1768:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1768:29:1768:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1769:20:1769:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1769:29:1769:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1775:26:1775:34 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1775:26:1775:34 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1775:37:1775:39 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1775:48:1778:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1776:13:1776:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1776:13:1776:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1776:23:1776:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1777:13:1777:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1777:13:1777:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1777:23:1777:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1783:16:1783:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1783:22:1783:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1783:40:1788:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1784:13:1787:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1785:20:1785:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1785:30:1785:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1786:20:1786:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1786:30:1786:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1792:23:1792:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1792:23:1792:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1792:34:1792:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1792:44:1795:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1793:13:1793:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1793:13:1793:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1793:24:1793:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1794:13:1794:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1794:13:1794:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1794:24:1794:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1800:16:1800:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1800:22:1800:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1800:40:1805:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1801:13:1804:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1802:20:1802:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1802:30:1802:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1803:20:1803:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1803:30:1803:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1809:23:1809:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1809:23:1809:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1809:34:1809:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1809:44:1812:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1810:13:1810:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1810:13:1810:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1810:24:1810:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1811:13:1811:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1811:13:1811:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1811:24:1811:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1817:16:1817:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1817:30:1822:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1818:13:1821:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1819:21:1819:24 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1820:21:1820:24 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1827:16:1827:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1827:30:1832:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1828:13:1831:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1829:21:1829:24 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1830:21:1830:24 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1836:15:1836:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1836:15:1836:19 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1836:22:1836:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1836:22:1836:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1836:44:1838:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1837:13:1837:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1837:13:1837:16 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1837:13:1837:29 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1837:13:1837:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1837:23:1837:27 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1837:23:1837:27 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1837:34:1837:37 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1837:34:1837:37 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1837:34:1837:50 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1837:44:1837:48 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1837:44:1837:48 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1840:15:1840:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1840:15:1840:19 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1840:22:1840:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1840:22:1840:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1840:44:1842:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1841:13:1841:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1841:13:1841:16 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1841:13:1841:29 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1841:13:1841:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1841:23:1841:27 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1841:23:1841:27 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1841:34:1841:37 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1841:34:1841:37 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1841:34:1841:50 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1841:44:1841:48 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1841:44:1841:48 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1846:24:1846:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1846:24:1846:28 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1846:31:1846:35 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1846:31:1846:35 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1846:75:1848:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:1846:75:1848:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1847:14:1847:17 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1847:14:1847:17 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1847:23:1847:26 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1847:23:1847:26 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1847:43:1847:62 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1847:45:1847:49 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1847:45:1847:49 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1847:55:1847:59 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1847:55:1847:59 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1850:15:1850:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1850:15:1850:19 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1850:22:1850:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1850:22:1850:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1850:44:1852:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1851:13:1851:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1851:13:1851:16 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1851:13:1851:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1851:13:1851:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1851:22:1851:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1851:22:1851:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1851:33:1851:36 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1851:33:1851:36 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1851:33:1851:48 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1851:42:1851:46 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1851:42:1851:46 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1854:15:1854:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1854:15:1854:19 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1854:22:1854:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1854:22:1854:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1854:44:1856:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1855:13:1855:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1855:13:1855:16 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1855:13:1855:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1855:13:1855:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1855:23:1855:27 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1855:23:1855:27 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1855:34:1855:37 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1855:34:1855:37 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1855:34:1855:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1855:44:1855:48 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1855:44:1855:48 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1858:15:1858:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1858:15:1858:19 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1858:22:1858:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1858:22:1858:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1858:44:1860:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1859:13:1859:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1859:13:1859:16 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1859:13:1859:28 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1859:13:1859:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1859:22:1859:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1859:22:1859:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1859:33:1859:36 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1859:33:1859:36 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1859:33:1859:48 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1859:42:1859:46 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1859:42:1859:46 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1862:15:1862:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1862:15:1862:19 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1862:22:1862:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1862:22:1862:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1862:44:1864:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1863:13:1863:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1863:13:1863:16 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1863:13:1863:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1863:13:1863:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1863:23:1863:27 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1863:23:1863:27 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1863:34:1863:37 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1863:34:1863:37 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1863:34:1863:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1863:44:1863:48 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1863:44:1863:48 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1867:26:1867:26 | a | | main.rs:1867:18:1867:23 | T | +| main.rs:1867:32:1867:32 | b | | main.rs:1867:18:1867:23 | T | +| main.rs:1868:9:1868:9 | a | | main.rs:1867:18:1867:23 | T | +| main.rs:1868:13:1868:13 | b | | main.rs:1867:18:1867:23 | T | +| main.rs:1871:16:2002:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1875:23:1875:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1875:31:1875:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1876:23:1876:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1876:31:1876:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1877:23:1877:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1877:30:1877:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1878:23:1878:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1878:31:1878:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1879:23:1879:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1879:30:1879:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1880:23:1880:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1880:32:1880:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1883:23:1883:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1883:31:1883:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1884:23:1884:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1884:31:1884:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1885:23:1885:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1885:31:1885:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1886:23:1886:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1886:31:1886:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1887:23:1887:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1887:31:1887:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1888:39:1888:42 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1888:45:1888:48 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1891:17:1891:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1891:34:1891:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1892:9:1892:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1892:27:1892:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1894:17:1894:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1894:34:1894:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1895:9:1895:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1895:27:1895:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1897:17:1897:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1897:34:1897:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1898:9:1898:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1898:27:1898:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1900:17:1900:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1900:34:1900:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1901:9:1901:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1901:27:1901:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1903:17:1903:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1903:34:1903:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1904:9:1904:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1904:27:1904:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1907:26:1907:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1907:34:1907:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1908:25:1908:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1908:33:1908:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1909:26:1909:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1909:34:1909:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1910:23:1910:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1910:32:1910:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1911:23:1911:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1911:32:1911:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1914:17:1914:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1914:37:1914:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1915:9:1915:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1915:30:1915:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1917:17:1917:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1917:36:1917:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1918:9:1918:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1918:29:1918:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1920:17:1920:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1920:37:1920:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1921:9:1921:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1921:30:1921:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1923:17:1923:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1923:34:1923:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1924:9:1924:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1924:28:1924:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1926:17:1926:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1926:34:1926:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1927:9:1927:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1927:28:1927:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1929:24:1929:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1930:24:1930:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1933:13:1933:14 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1933:18:1933:36 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1934:13:1934:14 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1934:18:1934:36 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1937:23:1937:24 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1937:29:1937:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1938:23:1938:24 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1938:29:1938:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1939:23:1939:24 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1939:28:1939:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1940:23:1940:24 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1940:29:1940:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1941:23:1941:24 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1941:28:1941:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1942:23:1942:24 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1942:29:1942:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1945:24:1945:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1945:29:1945:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1946:24:1946:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1946:29:1946:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1947:24:1947:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1947:29:1947:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1948:24:1948:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1948:29:1948:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1949:24:1949:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1949:29:1949:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1952:17:1952:31 | vec2_add_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1952:35:1952:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1953:9:1953:23 | vec2_add_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1953:28:1953:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1955:17:1955:31 | vec2_sub_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1955:35:1955:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1956:9:1956:23 | vec2_sub_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1956:28:1956:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1958:17:1958:31 | vec2_mul_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1958:35:1958:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1959:9:1959:23 | vec2_mul_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1959:28:1959:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1961:17:1961:31 | vec2_div_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1961:35:1961:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1962:9:1962:23 | vec2_div_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1962:28:1962:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1964:17:1964:31 | vec2_rem_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1964:35:1964:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1965:9:1965:23 | vec2_rem_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1965:28:1965:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1968:27:1968:28 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1968:32:1968:33 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1969:26:1969:27 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1969:31:1969:32 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1970:27:1970:28 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1970:32:1970:33 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1971:24:1971:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1971:30:1971:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1972:24:1972:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1972:30:1972:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1975:17:1975:34 | vec2_bitand_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1975:38:1975:39 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1976:9:1976:26 | vec2_bitand_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1976:31:1976:32 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1978:17:1978:33 | vec2_bitor_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1978:37:1978:38 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1979:9:1979:25 | vec2_bitor_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1979:30:1979:31 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1981:17:1981:34 | vec2_bitxor_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1981:38:1981:39 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1982:9:1982:26 | vec2_bitxor_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1982:31:1982:32 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1984:17:1984:31 | vec2_shl_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1984:35:1984:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1985:9:1985:23 | vec2_shl_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1985:29:1985:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1987:17:1987:31 | vec2_shr_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1987:35:1987:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1988:9:1988:23 | vec2_shr_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1988:29:1988:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1991:25:1991:26 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1992:25:1992:26 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1996:30:1996:48 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:2001:30:2001:48 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:2011:18:2011:21 | SelfParam | | main.rs:2008:5:2008:14 | S1 | +| main.rs:2011:24:2011:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2014:25:2016:5 | { ... } | | main.rs:2008:5:2008:14 | S1 | +| main.rs:2019:9:2019:20 | { ... } | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2023:9:2023:16 | { ... } | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2023:9:2023:16 | { ... } | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2032:13:2032:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | +| main.rs:2032:13:2032:42 | SelfParam | Ptr | {EXTERNAL LOCATION} | &mut | +| main.rs:2032:13:2032:42 | SelfParam | Ptr.TRefMut | main.rs:2026:5:2026:14 | S2 | +| main.rs:2033:13:2033:15 | _cx | | {EXTERNAL LOCATION} | &mut | +| main.rs:2033:13:2033:15 | _cx | TRefMut | {EXTERNAL LOCATION} | Context | +| main.rs:2034:44:2036:9 | { ... } | | {EXTERNAL LOCATION} | Poll | +| main.rs:2034:44:2036:9 | { ... } | T | main.rs:2008:5:2008:14 | S1 | +| main.rs:2043:22:2051:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2044:9:2044:12 | f1(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2044:9:2044:12 | f1(...) | dyn(Output) | main.rs:2008:5:2008:14 | S1 | +| main.rs:2045:9:2045:12 | f2(...) | | main.rs:2018:16:2018:39 | impl ... | +| main.rs:2046:9:2046:12 | f3(...) | | main.rs:2022:16:2022:39 | impl ... | +| main.rs:2047:9:2047:12 | f4(...) | | main.rs:2039:16:2039:39 | impl ... | +| main.rs:2049:13:2049:13 | b | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2049:17:2049:28 | { ... } | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2050:9:2050:9 | b | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2061:15:2061:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2061:15:2061:19 | SelfParam | TRef | main.rs:2060:5:2062:5 | Self [trait Trait1] | +| main.rs:2061:22:2061:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2065:15:2065:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2065:15:2065:19 | SelfParam | TRef | main.rs:2064:5:2066:5 | Self [trait Trait2] | +| main.rs:2065:22:2065:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2069:15:2069:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2069:15:2069:19 | SelfParam | TRef | main.rs:2055:5:2056:14 | S1 | +| main.rs:2069:22:2069:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2073:15:2073:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2073:15:2073:19 | SelfParam | TRef | main.rs:2055:5:2056:14 | S1 | +| main.rs:2073:22:2073:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2081:18:2081:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2081:18:2081:22 | SelfParam | TRef | main.rs:2080:5:2082:5 | Self [trait MyTrait] | +| main.rs:2085:18:2085:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2085:18:2085:22 | SelfParam | TRef | main.rs:2055:5:2056:14 | S1 | +| main.rs:2085:31:2087:9 | { ... } | | main.rs:2057:5:2057:14 | S2 | +| main.rs:2091:18:2091:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2091:18:2091:22 | SelfParam | TRef | main.rs:2058:5:2058:22 | S3 | +| main.rs:2091:18:2091:22 | SelfParam | TRef.T3 | main.rs:2090:10:2090:17 | T | +| main.rs:2091:30:2094:9 | { ... } | | main.rs:2090:10:2090:17 | T | +| main.rs:2092:25:2092:28 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2092:25:2092:28 | self | TRef | main.rs:2058:5:2058:22 | S3 | +| main.rs:2092:25:2092:28 | self | TRef.T3 | main.rs:2090:10:2090:17 | T | +| main.rs:2101:41:2101:41 | t | | main.rs:2101:26:2101:38 | B | +| main.rs:2101:52:2103:5 | { ... } | | main.rs:2101:23:2101:23 | A | +| main.rs:2102:9:2102:9 | t | | main.rs:2101:26:2101:38 | B | +| main.rs:2105:34:2105:34 | x | | main.rs:2105:24:2105:31 | T | +| main.rs:2105:59:2107:5 | { ... } | | main.rs:2105:43:2105:57 | impl ... | +| main.rs:2105:59:2107:5 | { ... } | impl(T) | main.rs:2105:24:2105:31 | T | +| main.rs:2106:12:2106:12 | x | | main.rs:2105:24:2105:31 | T | +| main.rs:2109:34:2109:34 | x | | main.rs:2109:24:2109:31 | T | +| main.rs:2109:67:2111:5 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2109:67:2111:5 | { ... } | T | main.rs:2109:50:2109:64 | impl ... | +| main.rs:2109:67:2111:5 | { ... } | T.impl(T) | main.rs:2109:24:2109:31 | T | +| main.rs:2110:17:2110:17 | x | | main.rs:2109:24:2109:31 | T | +| main.rs:2113:34:2113:34 | x | | main.rs:2113:24:2113:31 | T | +| main.rs:2113:78:2115:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2113:78:2115:5 | { ... } | T0 | main.rs:2113:44:2113:58 | impl ... | +| main.rs:2113:78:2115:5 | { ... } | T0.impl(T) | main.rs:2113:24:2113:31 | T | +| main.rs:2113:78:2115:5 | { ... } | T1 | main.rs:2113:61:2113:75 | impl ... | +| main.rs:2113:78:2115:5 | { ... } | T1.impl(T) | main.rs:2113:24:2113:31 | T | +| main.rs:2114:9:2114:30 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2114:13:2114:13 | x | | main.rs:2113:24:2113:31 | T | +| main.rs:2114:28:2114:28 | x | | main.rs:2113:24:2113:31 | T | +| main.rs:2117:26:2117:26 | t | | main.rs:2117:29:2117:43 | impl ... | +| main.rs:2117:51:2119:5 | { ... } | | main.rs:2117:23:2117:23 | A | +| main.rs:2118:9:2118:9 | t | | main.rs:2117:29:2117:43 | impl ... | +| main.rs:2121:16:2135:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2122:13:2122:13 | x | | main.rs:2076:16:2076:35 | impl ... + ... | +| main.rs:2122:17:2122:20 | f1(...) | | main.rs:2076:16:2076:35 | impl ... + ... | +| main.rs:2123:9:2123:9 | x | | main.rs:2076:16:2076:35 | impl ... + ... | +| main.rs:2124:9:2124:9 | x | | main.rs:2076:16:2076:35 | impl ... + ... | +| main.rs:2125:13:2125:13 | a | | main.rs:2097:28:2097:43 | impl ... | +| main.rs:2125:17:2125:32 | get_a_my_trait(...) | | main.rs:2097:28:2097:43 | impl ... | +| main.rs:2126:32:2126:32 | a | | main.rs:2097:28:2097:43 | impl ... | +| main.rs:2127:13:2127:13 | a | | main.rs:2097:28:2097:43 | impl ... | +| main.rs:2127:17:2127:32 | get_a_my_trait(...) | | main.rs:2097:28:2097:43 | impl ... | +| main.rs:2128:32:2128:32 | a | | main.rs:2097:28:2097:43 | impl ... | +| main.rs:2130:17:2130:35 | get_a_my_trait2(...) | | main.rs:2105:43:2105:57 | impl ... | +| main.rs:2133:17:2133:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2133:17:2133:35 | get_a_my_trait3(...) | T | main.rs:2109:50:2109:64 | impl ... | +| main.rs:2134:17:2134:35 | get_a_my_trait4(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2134:17:2134:35 | get_a_my_trait4(...) | T0 | main.rs:2113:44:2113:58 | impl ... | +| main.rs:2134:17:2134:35 | get_a_my_trait4(...) | T1 | main.rs:2113:61:2113:75 | impl ... | +| main.rs:2145:16:2145:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2145:16:2145:20 | SelfParam | TRef | main.rs:2141:5:2142:13 | S | +| main.rs:2145:31:2147:9 | { ... } | | main.rs:2141:5:2142:13 | S | +| main.rs:2156:26:2158:9 | { ... } | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2156:26:2158:9 | { ... } | T | main.rs:2155:10:2155:10 | T | +| main.rs:2157:13:2157:38 | MyVec {...} | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2157:27:2157:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2157:27:2157:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2160:17:2160:25 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:2160:17:2160:25 | SelfParam | TRefMut | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2160:17:2160:25 | SelfParam | TRefMut.T | main.rs:2155:10:2155:10 | T | +| main.rs:2160:28:2160:32 | value | | main.rs:2155:10:2155:10 | T | +| main.rs:2160:38:2162:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2161:13:2161:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:2161:13:2161:16 | self | TRefMut | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2161:13:2161:16 | self | TRefMut.T | main.rs:2155:10:2155:10 | T | +| main.rs:2161:28:2161:32 | value | | main.rs:2155:10:2155:10 | T | +| main.rs:2169:18:2169:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2169:18:2169:22 | SelfParam | TRef | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2169:18:2169:22 | SelfParam | TRef.T | main.rs:2165:10:2165:10 | T | +| main.rs:2169:25:2169:29 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2169:56:2171:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2169:56:2171:9 | { ... } | TRef | main.rs:2165:10:2165:10 | T | +| main.rs:2170:13:2170:29 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2170:14:2170:17 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2170:14:2170:17 | self | TRef | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2170:14:2170:17 | self | TRef.T | main.rs:2165:10:2165:10 | T | +| main.rs:2170:24:2170:28 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2174:22:2174:26 | slice | | {EXTERNAL LOCATION} | & | +| main.rs:2174:22:2174:26 | slice | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:2174:22:2174:26 | slice | TRef.TSlice | main.rs:2141:5:2142:13 | S | +| main.rs:2174:35:2176:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2175:17:2175:21 | slice | | {EXTERNAL LOCATION} | & | +| main.rs:2175:17:2175:21 | slice | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:2175:17:2175:21 | slice | TRef.TSlice | main.rs:2141:5:2142:13 | S | +| main.rs:2178:37:2178:37 | a | | main.rs:2178:20:2178:34 | T | +| main.rs:2178:43:2178:43 | b | | {EXTERNAL LOCATION} | usize | +| main.rs:2182:9:2182:9 | a | | main.rs:2178:20:2178:34 | T | +| main.rs:2182:11:2182:11 | b | | {EXTERNAL LOCATION} | usize | +| main.rs:2185:16:2196:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2186:17:2186:19 | vec | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2186:23:2186:34 | ...::new(...) | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2187:9:2187:11 | vec | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2188:9:2188:11 | vec | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2190:13:2190:14 | xs | | {EXTERNAL LOCATION} | [;] | +| main.rs:2190:13:2190:14 | xs | TArray | main.rs:2141:5:2142:13 | S | +| main.rs:2190:26:2190:28 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2191:17:2191:18 | xs | | {EXTERNAL LOCATION} | [;] | +| main.rs:2191:17:2191:18 | xs | TArray | main.rs:2141:5:2142:13 | S | +| main.rs:2193:29:2193:31 | vec | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2195:9:2195:26 | analyze_slice(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2195:23:2195:25 | &xs | | {EXTERNAL LOCATION} | & | +| main.rs:2195:24:2195:25 | xs | | {EXTERNAL LOCATION} | [;] | +| main.rs:2195:24:2195:25 | xs | TArray | main.rs:2141:5:2142:13 | S | +| main.rs:2200:16:2202:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2201:25:2201:35 | "Hello, {}" | | {EXTERNAL LOCATION} | & | +| main.rs:2201:25:2201:35 | "Hello, {}" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2201:25:2201:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2201:38:2201:45 | "World!" | | {EXTERNAL LOCATION} | & | +| main.rs:2201:38:2201:45 | "World!" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2210:19:2210:22 | SelfParam | | main.rs:2206:5:2211:5 | Self [trait MyAdd] | +| main.rs:2210:25:2210:27 | rhs | | main.rs:2206:17:2206:26 | Rhs | +| main.rs:2217:19:2217:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2217:25:2217:29 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2217:45:2219:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2218:13:2218:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2226:19:2226:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2226:25:2226:29 | value | | {EXTERNAL LOCATION} | & | +| main.rs:2226:25:2226:29 | value | TRef | {EXTERNAL LOCATION} | i64 | +| main.rs:2226:46:2228:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2227:14:2227:18 | value | | {EXTERNAL LOCATION} | & | +| main.rs:2227:14:2227:18 | value | TRef | {EXTERNAL LOCATION} | i64 | +| main.rs:2235:19:2235:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2235:25:2235:29 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2235:46:2241:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2236:16:2236:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2250:19:2250:22 | SelfParam | | main.rs:2244:5:2244:19 | S | +| main.rs:2250:19:2250:22 | SelfParam | T | main.rs:2246:10:2246:17 | T | +| main.rs:2250:25:2250:29 | other | | main.rs:2244:5:2244:19 | S | +| main.rs:2250:25:2250:29 | other | T | main.rs:2246:10:2246:17 | T | +| main.rs:2250:54:2252:9 | { ... } | | main.rs:2244:5:2244:19 | S | +| main.rs:2251:16:2251:19 | self | | main.rs:2244:5:2244:19 | S | +| main.rs:2251:16:2251:19 | self | T | main.rs:2246:10:2246:17 | T | +| main.rs:2251:31:2251:35 | other | | main.rs:2244:5:2244:19 | S | +| main.rs:2251:31:2251:35 | other | T | main.rs:2246:10:2246:17 | T | +| main.rs:2259:19:2259:22 | SelfParam | | main.rs:2244:5:2244:19 | S | +| main.rs:2259:19:2259:22 | SelfParam | T | main.rs:2255:10:2255:17 | T | +| main.rs:2259:25:2259:29 | other | | main.rs:2255:10:2255:17 | T | +| main.rs:2259:51:2261:9 | { ... } | | main.rs:2244:5:2244:19 | S | +| main.rs:2260:16:2260:19 | self | | main.rs:2244:5:2244:19 | S | +| main.rs:2260:16:2260:19 | self | T | main.rs:2255:10:2255:17 | T | +| main.rs:2260:31:2260:35 | other | | main.rs:2255:10:2255:17 | T | +| main.rs:2271:19:2271:22 | SelfParam | | main.rs:2244:5:2244:19 | S | +| main.rs:2271:19:2271:22 | SelfParam | T | main.rs:2264:14:2264:14 | T | +| main.rs:2271:25:2271:29 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2271:25:2271:29 | other | TRef | main.rs:2264:14:2264:14 | T | +| main.rs:2271:55:2273:9 | { ... } | | main.rs:2244:5:2244:19 | S | +| main.rs:2272:16:2272:19 | self | | main.rs:2244:5:2244:19 | S | +| main.rs:2272:16:2272:19 | self | T | main.rs:2264:14:2264:14 | T | +| main.rs:2272:31:2272:35 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2272:31:2272:35 | other | TRef | main.rs:2264:14:2264:14 | T | +| main.rs:2278:20:2278:24 | value | | main.rs:2276:18:2276:18 | T | +| main.rs:2283:20:2283:24 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2283:40:2285:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2284:13:2284:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2290:20:2290:24 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2290:41:2296:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2291:16:2291:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2301:21:2301:25 | value | | main.rs:2299:19:2299:19 | T | +| main.rs:2301:31:2301:31 | x | | main.rs:2299:5:2302:5 | Self [trait MyFrom2] | +| main.rs:2306:21:2306:25 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2306:33:2306:33 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2306:48:2308:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2307:13:2307:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2313:21:2313:25 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2313:34:2313:34 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2313:49:2319:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2314:16:2314:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2324:15:2324:15 | x | | main.rs:2322:5:2328:5 | Self [trait MySelfTrait] | +| main.rs:2327:15:2327:15 | x | | main.rs:2322:5:2328:5 | Self [trait MySelfTrait] | +| main.rs:2332:15:2332:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2332:31:2334:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2333:13:2333:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2337:15:2337:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2337:32:2339:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2338:13:2338:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2344:15:2344:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2344:31:2346:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2349:15:2349:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2349:32:2351:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2350:13:2350:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2354:16:2379:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2355:13:2355:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2356:9:2356:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2356:18:2356:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2357:9:2357:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2357:18:2357:22 | &5i64 | | {EXTERNAL LOCATION} | & | +| main.rs:2357:19:2357:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2358:9:2358:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2358:18:2358:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2360:11:2360:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2360:26:2360:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2361:11:2361:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2361:24:2361:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2362:11:2362:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2362:24:2362:28 | &3i64 | | {EXTERNAL LOCATION} | & | +| main.rs:2362:25:2362:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2364:13:2364:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2364:17:2364:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2364:30:2364:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2365:13:2365:13 | y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2365:17:2365:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2365:30:2365:33 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2366:13:2366:13 | z | | {EXTERNAL LOCATION} | i64 | +| main.rs:2366:38:2366:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2367:9:2367:34 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2367:23:2367:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2367:30:2367:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2368:9:2368:33 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2368:23:2368:26 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2368:29:2368:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2369:9:2369:38 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2369:27:2369:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2369:34:2369:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2371:9:2371:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2371:17:2371:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2372:9:2372:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2372:17:2372:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2373:9:2373:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2373:18:2373:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2374:9:2374:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2374:18:2374:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2375:9:2375:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2375:25:2375:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2376:25:2376:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2377:9:2377:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2377:25:2377:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2378:25:2378:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2386:26:2388:9 | { ... } | | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2387:13:2387:25 | MyCallable {...} | | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2390:17:2390:21 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2390:17:2390:21 | SelfParam | TRef | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2390:31:2392:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2395:16:2502:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2398:9:2398:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2398:18:2398:26 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2398:28:2398:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2399:9:2399:44 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2399:18:2399:26 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2399:43:2399:44 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2400:9:2400:41 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2400:18:2400:26 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2400:40:2400:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2402:13:2402:17 | vals1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2402:21:2402:31 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2402:22:2402:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2403:9:2403:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2403:18:2403:22 | vals1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2403:24:2403:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2405:13:2405:17 | vals2 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2405:21:2405:29 | [1u16; 3] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2405:22:2405:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2406:9:2406:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2406:18:2406:22 | vals2 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2406:24:2406:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2408:13:2408:17 | vals3 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2408:13:2408:17 | vals3 | TArray | {EXTERNAL LOCATION} | u32 | +| main.rs:2408:31:2408:39 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2409:9:2409:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2409:18:2409:22 | vals3 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2409:18:2409:22 | vals3 | TArray | {EXTERNAL LOCATION} | u32 | +| main.rs:2409:24:2409:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2411:13:2411:17 | vals4 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2411:13:2411:17 | vals4 | TArray | {EXTERNAL LOCATION} | u64 | +| main.rs:2411:31:2411:36 | [1; 3] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2412:9:2412:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2412:18:2412:22 | vals4 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2412:18:2412:22 | vals4 | TArray | {EXTERNAL LOCATION} | u64 | +| main.rs:2412:24:2412:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2414:17:2414:24 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2414:28:2414:48 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2414:29:2414:33 | "foo" | | {EXTERNAL LOCATION} | & | +| main.rs:2414:29:2414:33 | "foo" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2414:36:2414:40 | "bar" | | {EXTERNAL LOCATION} | & | +| main.rs:2414:36:2414:40 | "bar" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2414:43:2414:47 | "baz" | | {EXTERNAL LOCATION} | & | +| main.rs:2414:43:2414:47 | "baz" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2415:9:2415:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2415:18:2415:26 | &strings1 | | {EXTERNAL LOCATION} | & | +| main.rs:2415:19:2415:26 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2415:28:2415:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2416:9:2416:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2416:18:2416:30 | &mut strings1 | | {EXTERNAL LOCATION} | &mut | +| main.rs:2416:23:2416:30 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2416:32:2416:33 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2417:9:2417:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2417:18:2417:25 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2417:27:2417:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2419:13:2419:20 | strings2 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2420:9:2424:9 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2421:13:2421:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2421:26:2421:30 | "foo" | | {EXTERNAL LOCATION} | & | +| main.rs:2421:26:2421:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2422:13:2422:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2422:26:2422:30 | "bar" | | {EXTERNAL LOCATION} | & | +| main.rs:2422:26:2422:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2423:13:2423:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2423:26:2423:30 | "baz" | | {EXTERNAL LOCATION} | & | +| main.rs:2423:26:2423:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2425:9:2425:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2425:18:2425:25 | strings2 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2425:27:2425:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2427:13:2427:20 | strings3 | | {EXTERNAL LOCATION} | & | +| main.rs:2428:9:2432:9 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2428:10:2432:9 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2429:13:2429:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2429:26:2429:30 | "foo" | | {EXTERNAL LOCATION} | & | +| main.rs:2429:26:2429:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2430:13:2430:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2430:26:2430:30 | "bar" | | {EXTERNAL LOCATION} | & | +| main.rs:2430:26:2430:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2431:13:2431:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2431:26:2431:30 | "baz" | | {EXTERNAL LOCATION} | & | +| main.rs:2431:26:2431:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2433:9:2433:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2433:18:2433:25 | strings3 | | {EXTERNAL LOCATION} | & | +| main.rs:2433:27:2433:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2435:13:2435:21 | callables | | {EXTERNAL LOCATION} | [;] | +| main.rs:2435:25:2435:81 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2435:26:2435:42 | ...::new(...) | | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2435:45:2435:61 | ...::new(...) | | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2435:64:2435:80 | ...::new(...) | | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2436:9:2440:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2437:12:2437:20 | callables | | {EXTERNAL LOCATION} | [;] | +| main.rs:2438:9:2440:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2444:9:2444:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2444:18:2444:22 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2444:24:2444:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2445:9:2445:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2445:18:2445:26 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2445:19:2445:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2445:19:2445:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2445:28:2445:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2446:13:2446:17 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2446:21:2446:25 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2447:9:2447:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2447:18:2447:22 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2447:24:2447:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2448:13:2448:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2448:26:2448:27 | .. | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2449:9:2449:51 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2449:18:2449:48 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2449:19:2449:36 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2449:20:2449:23 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2449:26:2449:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2449:32:2449:35 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2449:38:2449:47 | range_full | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2449:50:2449:51 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2451:13:2451:18 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2452:9:2455:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | +| main.rs:2453:20:2453:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2454:18:2454:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2456:9:2456:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2456:18:2456:23 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2456:25:2456:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2461:9:2461:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2461:24:2461:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2463:13:2463:18 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2463:13:2463:18 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2463:13:2463:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2463:32:2463:43 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2463:33:2463:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2464:9:2464:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2464:18:2464:23 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2464:18:2464:23 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2464:18:2464:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2464:25:2464:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2466:22:2466:33 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2466:23:2466:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2467:9:2467:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2467:25:2467:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2469:13:2469:17 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2469:21:2469:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2469:31:2469:42 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2469:32:2469:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2470:9:2470:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2470:18:2470:22 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2470:24:2470:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2472:13:2472:17 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2472:13:2472:17 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2472:13:2472:17 | vals6 | T | {EXTERNAL LOCATION} | & | +| main.rs:2472:13:2472:17 | vals6 | T.TRef | {EXTERNAL LOCATION} | u64 | +| main.rs:2472:32:2472:43 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2472:33:2472:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2473:9:2473:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2473:18:2473:22 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2473:18:2473:22 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2473:18:2473:22 | vals6 | T | {EXTERNAL LOCATION} | & | +| main.rs:2473:18:2473:22 | vals6 | T.TRef | {EXTERNAL LOCATION} | u64 | +| main.rs:2473:24:2473:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2475:17:2475:21 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2475:17:2475:21 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2475:25:2475:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2475:25:2475:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2476:9:2476:13 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2476:9:2476:13 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2476:20:2476:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2477:9:2477:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2477:18:2477:22 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2477:18:2477:22 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2477:24:2477:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2481:17:2484:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2482:13:2483:13 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2482:29:2483:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2486:17:2486:20 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2486:17:2486:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2486:24:2486:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2486:24:2486:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2487:9:2487:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2487:9:2487:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2487:24:2487:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2487:24:2487:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2487:33:2487:37 | "one" | | {EXTERNAL LOCATION} | & | +| main.rs:2487:33:2487:37 | "one" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2488:9:2488:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2488:9:2488:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2488:24:2488:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2488:24:2488:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2488:33:2488:37 | "two" | | {EXTERNAL LOCATION} | & | +| main.rs:2488:33:2488:37 | "two" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2489:9:2489:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2489:20:2489:23 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2489:20:2489:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2489:32:2489:33 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2490:9:2490:37 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2490:22:2490:25 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2490:22:2490:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2490:36:2490:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2491:9:2491:42 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2491:13:2491:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2491:29:2491:32 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2491:29:2491:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2491:41:2491:42 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2492:9:2492:36 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2492:13:2492:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2492:29:2492:33 | &map1 | | {EXTERNAL LOCATION} | & | +| main.rs:2492:30:2492:33 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2492:30:2492:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2492:35:2492:36 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2496:17:2496:17 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2498:17:2501:9 | while ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2498:23:2498:23 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2499:9:2501:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2500:13:2500:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2512:40:2514:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2512:40:2514:9 | { ... } | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2512:40:2514:9 | { ... } | T.T | main.rs:2511:10:2511:19 | T | +| main.rs:2516:30:2518:9 | { ... } | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2516:30:2518:9 | { ... } | T | main.rs:2511:10:2511:19 | T | +| main.rs:2520:19:2520:22 | SelfParam | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2520:19:2520:22 | SelfParam | T | main.rs:2511:10:2511:19 | T | +| main.rs:2520:33:2522:9 | { ... } | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2520:33:2522:9 | { ... } | T | main.rs:2511:10:2511:19 | T | +| main.rs:2521:13:2521:16 | self | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2521:13:2521:16 | self | T | main.rs:2511:10:2511:19 | T | +| main.rs:2533:15:2533:15 | x | | main.rs:2533:12:2533:12 | T | +| main.rs:2533:26:2535:5 | { ... } | | main.rs:2533:12:2533:12 | T | +| main.rs:2534:9:2534:9 | x | | main.rs:2533:12:2533:12 | T | +| main.rs:2537:16:2559:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2538:13:2538:14 | x1 | | {EXTERNAL LOCATION} | Option | +| main.rs:2538:13:2538:14 | x1 | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2538:13:2538:14 | x1 | T.T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2538:34:2538:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2538:34:2538:48 | ...::assoc_fun(...) | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2539:13:2539:14 | x2 | | {EXTERNAL LOCATION} | Option | +| main.rs:2539:13:2539:14 | x2 | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2539:13:2539:14 | x2 | T.T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2539:18:2539:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2539:18:2539:38 | ...::assoc_fun(...) | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2539:18:2539:38 | ...::assoc_fun(...) | T.T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2540:13:2540:14 | x3 | | {EXTERNAL LOCATION} | Option | +| main.rs:2540:13:2540:14 | x3 | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2540:13:2540:14 | x3 | T.T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2540:18:2540:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2540:18:2540:32 | ...::assoc_fun(...) | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2540:18:2540:32 | ...::assoc_fun(...) | T.T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2541:13:2541:14 | x4 | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2541:13:2541:14 | x4 | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2541:18:2541:48 | ...::method(...) | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2541:18:2541:48 | ...::method(...) | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2541:35:2541:47 | ...::default(...) | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2542:13:2542:14 | x5 | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2542:13:2542:14 | x5 | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2542:18:2542:42 | ...::method(...) | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2542:18:2542:42 | ...::method(...) | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2542:29:2542:41 | ...::default(...) | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2546:21:2546:33 | ...::default(...) | | main.rs:2508:5:2509:14 | S2 | +| main.rs:2547:13:2547:15 | x10 | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2547:13:2547:15 | x10 | T5 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2547:19:2550:9 | S5::<...> {...} | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2547:19:2550:9 | S5::<...> {...} | T5 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2551:13:2551:15 | x11 | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2551:19:2551:34 | S5 {...} | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2552:13:2552:15 | x12 | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2552:19:2552:33 | S5 {...} | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2553:13:2553:15 | x13 | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2553:19:2556:9 | S5 {...} | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2555:20:2555:32 | ...::default(...) | | main.rs:2508:5:2509:14 | S2 | +| main.rs:2557:13:2557:15 | x14 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2557:19:2557:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2558:13:2558:15 | x15 | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2558:13:2558:15 | x15 | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2558:19:2558:37 | ...::default(...) | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2558:19:2558:37 | ...::default(...) | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2567:35:2569:9 | { ... } | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2567:35:2569:9 | { ... } | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2567:35:2569:9 | { ... } | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2568:13:2568:26 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2568:14:2568:18 | S1 {...} | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2568:21:2568:25 | S1 {...} | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2570:16:2570:19 | SelfParam | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2570:22:2570:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2573:16:2607:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2574:13:2574:13 | a | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2574:13:2574:13 | a | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2574:13:2574:13 | a | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2574:17:2574:30 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2574:17:2574:30 | ...::get_pair(...) | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2574:17:2574:30 | ...::get_pair(...) | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2575:17:2575:17 | b | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2575:17:2575:17 | b | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2575:17:2575:17 | b | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2575:21:2575:34 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2575:21:2575:34 | ...::get_pair(...) | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2575:21:2575:34 | ...::get_pair(...) | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2576:13:2576:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2576:22:2576:35 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2576:22:2576:35 | ...::get_pair(...) | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2576:22:2576:35 | ...::get_pair(...) | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2577:13:2577:22 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2577:26:2577:39 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2577:26:2577:39 | ...::get_pair(...) | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2577:26:2577:39 | ...::get_pair(...) | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2578:13:2578:26 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2578:30:2578:43 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2578:30:2578:43 | ...::get_pair(...) | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2578:30:2578:43 | ...::get_pair(...) | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2580:9:2580:9 | a | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2580:9:2580:9 | a | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2580:9:2580:9 | a | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2581:9:2581:9 | b | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2581:9:2581:9 | b | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2581:9:2581:9 | b | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2594:13:2594:16 | pair | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2594:20:2594:25 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2595:13:2595:13 | i | | {EXTERNAL LOCATION} | i64 | +| main.rs:2595:22:2595:25 | pair | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2596:13:2596:13 | j | | {EXTERNAL LOCATION} | bool | +| main.rs:2596:23:2596:26 | pair | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2598:20:2598:25 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2600:13:2600:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2600:30:2600:41 | "unexpected" | | {EXTERNAL LOCATION} | & | +| main.rs:2600:30:2600:41 | "unexpected" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2600:30:2600:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2600:30:2600:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2601:25:2601:34 | "expected" | | {EXTERNAL LOCATION} | & | +| main.rs:2601:25:2601:34 | "expected" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2601:25:2601:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2601:25:2601:34 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2605:13:2605:13 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2605:17:2605:31 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2605:18:2605:31 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2605:18:2605:31 | ...::get_pair(...) | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2605:18:2605:31 | ...::get_pair(...) | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2606:9:2606:9 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2612:27:2634:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2613:13:2613:23 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2613:13:2613:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2613:27:2613:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2613:27:2613:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2613:36:2613:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2616:15:2616:25 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2616:15:2616:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2617:24:2619:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2618:26:2618:36 | "Boxed 100\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2618:26:2618:36 | "Boxed 100\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2618:26:2618:36 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2618:26:2618:36 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2620:22:2623:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2622:26:2622:42 | "Boxed value: {}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2622:26:2622:42 | "Boxed value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2622:26:2622:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2622:26:2622:51 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2627:13:2627:22 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2627:13:2627:22 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2627:26:2627:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2627:26:2627:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2627:35:2627:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2627:35:2627:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2627:44:2627:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2628:15:2628:24 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2628:15:2628:24 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2629:26:2632:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2631:26:2631:43 | "Nested boxed: {}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2631:26:2631:43 | "Nested boxed: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2631:26:2631:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2631:26:2631:59 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2643:36:2645:9 | { ... } | | main.rs:2640:5:2640:22 | Path | +| main.rs:2644:13:2644:19 | Path {...} | | main.rs:2640:5:2640:22 | Path | +| main.rs:2647:29:2647:33 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2647:29:2647:33 | SelfParam | TRef | main.rs:2640:5:2640:22 | Path | +| main.rs:2647:59:2649:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:2647:59:2649:9 | { ... } | E | {EXTERNAL LOCATION} | () | +| main.rs:2647:59:2649:9 | { ... } | T | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2648:16:2648:29 | ...::new(...) | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2655:39:2657:9 | { ... } | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2656:13:2656:22 | PathBuf {...} | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2665:18:2665:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2665:18:2665:22 | SelfParam | TRef | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2665:34:2669:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2665:34:2669:9 | { ... } | TRef | main.rs:2640:5:2640:22 | Path | +| main.rs:2667:33:2667:43 | ...::new(...) | | main.rs:2640:5:2640:22 | Path | +| main.rs:2668:13:2668:17 | &path | | {EXTERNAL LOCATION} | & | +| main.rs:2672:16:2680:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2673:13:2673:17 | path1 | | main.rs:2640:5:2640:22 | Path | +| main.rs:2673:21:2673:31 | ...::new(...) | | main.rs:2640:5:2640:22 | Path | +| main.rs:2674:21:2674:25 | path1 | | main.rs:2640:5:2640:22 | Path | +| main.rs:2677:13:2677:20 | pathbuf1 | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2677:24:2677:37 | ...::new(...) | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2678:24:2678:31 | pathbuf1 | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2685:14:2685:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2685:14:2685:18 | SelfParam | TRef | main.rs:2684:5:2686:5 | Self [trait MyTrait] | +| main.rs:2692:14:2692:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2692:14:2692:18 | SelfParam | TRef | main.rs:2688:5:2689:19 | S | +| main.rs:2692:14:2692:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2692:28:2694:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2693:13:2693:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2693:13:2693:16 | self | TRef | main.rs:2688:5:2689:19 | S | +| main.rs:2693:13:2693:16 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2698:14:2698:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2698:14:2698:18 | SelfParam | TRef | main.rs:2688:5:2689:19 | S | +| main.rs:2698:14:2698:18 | SelfParam | TRef.T | main.rs:2688:5:2689:19 | S | +| main.rs:2698:14:2698:18 | SelfParam | TRef.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2698:28:2700:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2699:13:2699:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2699:13:2699:16 | self | TRef | main.rs:2688:5:2689:19 | S | +| main.rs:2699:13:2699:16 | self | TRef.T | main.rs:2688:5:2689:19 | S | +| main.rs:2699:13:2699:16 | self | TRef.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2704:15:2704:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2704:15:2704:19 | SelfParam | TRef | main.rs:2688:5:2689:19 | S | +| main.rs:2704:15:2704:19 | SelfParam | TRef.T | main.rs:2703:10:2703:16 | T | +| main.rs:2704:33:2706:9 | { ... } | | main.rs:2688:5:2689:19 | S | +| main.rs:2704:33:2706:9 | { ... } | T | main.rs:2688:5:2689:19 | S | +| main.rs:2704:33:2706:9 | { ... } | T.T | main.rs:2703:10:2703:16 | T | +| main.rs:2705:17:2705:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2705:17:2705:20 | self | TRef | main.rs:2688:5:2689:19 | S | +| main.rs:2705:17:2705:20 | self | TRef.T | main.rs:2703:10:2703:16 | T | +| main.rs:2709:14:2709:14 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2709:48:2726:5 | { ... } | | {EXTERNAL LOCATION} | Box | +| main.rs:2709:48:2726:5 | { ... } | A | {EXTERNAL LOCATION} | Global | +| main.rs:2709:48:2726:5 | { ... } | T | main.rs:2684:5:2686:5 | dyn MyTrait | +| main.rs:2709:48:2726:5 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2710:20:2710:20 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2720:12:2720:12 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2722:13:2722:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2722:13:2722:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2724:13:2724:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2724:13:2724:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2730:22:2734:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2731:18:2731:18 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2731:33:2733:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2732:13:2732:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:11:2739:14 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2739:30:2747:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2742:13:2744:13 | if cond {...} | | {EXTERNAL LOCATION} | () | +| main.rs:2742:16:2742:19 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2742:21:2744:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2750:20:2757:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2755:18:2755:26 | "b: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2755:18:2755:26 | "b: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2755:18:2755:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2755:18:2755:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2759:20:2761:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2764:11:2764:14 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2764:30:2772:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2765:13:2765:13 | a | | {EXTERNAL LOCATION} | () | +| main.rs:2765:17:2769:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2766:13:2768:13 | if cond {...} | | {EXTERNAL LOCATION} | () | +| main.rs:2766:16:2766:19 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2766:21:2768:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2770:18:2770:26 | "a: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2770:18:2770:26 | "a: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2770:18:2770:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2770:18:2770:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2770:29:2770:29 | a | | {EXTERNAL LOCATION} | () | +| main.rs:2776:16:2823:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2778:13:2778:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2778:13:2778:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2782:26:2782:28 | opt | | {EXTERNAL LOCATION} | Option | +| main.rs:2782:26:2782:28 | opt | T | main.rs:2782:23:2782:23 | T | +| main.rs:2782:42:2782:42 | x | | main.rs:2782:23:2782:23 | T | +| main.rs:2782:48:2782:49 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2785:9:2785:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2792:13:2792:13 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2792:17:2792:39 | ...::A {...} | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2793:13:2793:13 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2793:13:2793:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2793:13:2793:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2793:40:2793:40 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2794:13:2794:13 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2794:13:2794:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2794:17:2794:52 | ...::A {...} | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2794:17:2794:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2796:13:2796:13 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2796:13:2796:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2796:17:2798:9 | ...::B::<...> {...} | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2796:17:2798:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2797:20:2797:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2800:29:2800:29 | e | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2800:29:2800:29 | e | T1 | main.rs:2800:26:2800:26 | T | +| main.rs:2800:29:2800:29 | e | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2800:53:2800:53 | x | | main.rs:2800:26:2800:26 | T | +| main.rs:2800:59:2800:60 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2803:13:2803:13 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2803:17:2805:9 | ...::B {...} | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2804:20:2804:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2806:9:2806:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2806:23:2806:23 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2809:13:2809:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2809:13:2809:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2809:13:2809:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2813:29:2813:31 | res | | {EXTERNAL LOCATION} | Result | +| main.rs:2813:29:2813:31 | res | E | main.rs:2813:26:2813:26 | E | +| main.rs:2813:29:2813:31 | res | T | main.rs:2813:23:2813:23 | T | +| main.rs:2813:48:2813:48 | x | | main.rs:2813:26:2813:26 | E | +| main.rs:2813:54:2813:55 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2816:9:2816:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2816:23:2816:27 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:2818:17:2818:17 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2818:17:2818:17 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2818:21:2818:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2818:21:2818:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2819:9:2819:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2819:9:2819:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2822:9:2822:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2822:9:2822:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2829:14:2829:17 | SelfParam | | main.rs:2827:5:2835:5 | Self [trait MyTrait] | +| main.rs:2832:14:2832:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2832:14:2832:18 | SelfParam | TRef | main.rs:2827:5:2835:5 | Self [trait MyTrait] | +| main.rs:2832:21:2832:25 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2832:21:2832:25 | other | TRef | main.rs:2827:5:2835:5 | Self [trait MyTrait] | +| main.rs:2832:44:2834:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2832:44:2834:9 | { ... } | TRef | main.rs:2827:5:2835:5 | Self [trait MyTrait] | +| main.rs:2833:13:2833:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2833:13:2833:16 | self | TRef | main.rs:2827:5:2835:5 | Self [trait MyTrait] | +| main.rs:2839:14:2839:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | +| main.rs:2839:28:2841:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2840:13:2840:16 | self | | {EXTERNAL LOCATION} | i32 | +| main.rs:2846:14:2846:17 | SelfParam | | {EXTERNAL LOCATION} | usize | +| main.rs:2846:28:2848:9 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:2847:13:2847:16 | self | | {EXTERNAL LOCATION} | usize | +| main.rs:2853:14:2853:17 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2853:14:2853:17 | SelfParam | TRef | main.rs:2851:10:2851:10 | T | +| main.rs:2853:28:2855:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2853:28:2855:9 | { ... } | TRef | main.rs:2851:10:2851:10 | T | +| main.rs:2854:13:2854:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2854:13:2854:16 | self | TRef | main.rs:2851:10:2851:10 | T | +| main.rs:2858:25:2862:5 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:2864:12:2872:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2865:13:2865:13 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2866:13:2866:13 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2866:17:2866:18 | &1 | | {EXTERNAL LOCATION} | & | +| main.rs:2867:17:2867:17 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2867:21:2867:21 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2870:13:2870:13 | y | | {EXTERNAL LOCATION} | usize | +| main.rs:2871:23:2871:23 | y | | {EXTERNAL LOCATION} | usize | +| main.rs:2881:11:2916:1 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2882:5:2882:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2883:5:2883:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2884:5:2884:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2884:20:2884:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2884:41:2884:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2885:5:2885:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2886:5:2886:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2887:5:2887:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2888:5:2888:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2889:5:2889:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2890:5:2890:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2891:5:2891:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2892:5:2892:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2893:5:2893:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2894:5:2894:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2895:5:2895:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2896:5:2896:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2897:5:2897:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2898:5:2898:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2899:5:2899:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2900:5:2900:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2900:5:2900:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2901:5:2901:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2902:5:2902:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2903:5:2903:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2904:5:2904:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2905:5:2905:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2906:5:2906:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2907:5:2907:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2908:5:2908:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2909:5:2909:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2910:5:2910:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2911:5:2911:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2912:5:2912:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2913:5:2913:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2914:5:2914:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2914:5:2914:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2914:5:2914:20 | ...::f(...) | T | main.rs:2684:5:2686:5 | dyn MyTrait | +| main.rs:2914:5:2914:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2914:16:2914:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2915:5:2915:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () | | pattern_matching.rs:15:5:18:5 | if ... {...} | | {EXTERNAL LOCATION} | () | @@ -4538,6 +4678,387 @@ inferCertainType | raw_pointer.rs:59:5:59:30 | raw_type_from_deref(...) | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:59:25:59:29 | false | | {EXTERNAL LOCATION} | bool | inferType +| associated_types.rs:5:15:5:18 | SelfParam | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:5:15:5:18 | SelfParam | A | associated_types.rs:4:6:4:6 | A | +| associated_types.rs:5:26:7:5 | { ... } | | associated_types.rs:4:6:4:6 | A | +| associated_types.rs:6:9:6:12 | self | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:6:9:6:12 | self | A | associated_types.rs:4:6:4:6 | A | +| associated_types.rs:6:9:6:14 | self.0 | | associated_types.rs:4:6:4:6 | A | +| associated_types.rs:23:12:23:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:23:12:23:16 | SelfParam | TRef | associated_types.rs:19:1:27:1 | Self [trait GetSet] | +| associated_types.rs:26:12:26:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:26:12:26:16 | SelfParam | TRef | associated_types.rs:19:1:27:1 | Self [trait GetSet] | +| associated_types.rs:26:19:26:20 | _a | | associated_types.rs:20:5:20:16 | Output[GetSet] | +| associated_types.rs:26:37:26:38 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:29:43:29:46 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:29:43:29:46 | item | TRef | associated_types.rs:29:11:29:40 | T | +| associated_types.rs:29:58:31:1 | { ... } | | associated_types.rs:29:8:29:8 | O | +| associated_types.rs:30:5:30:8 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:30:5:30:8 | item | TRef | associated_types.rs:29:11:29:40 | T | +| associated_types.rs:30:5:30:14 | item.get() | | associated_types.rs:29:8:29:8 | O | +| associated_types.rs:37:20:37:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:37:20:37:24 | SelfParam | TRef | associated_types.rs:33:1:38:1 | Self [trait AnotherGet] | +| associated_types.rs:44:12:44:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:44:12:44:16 | SelfParam | TRef | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:44:35:46:5 | { ... } | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:45:9:45:10 | S3 | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:53:12:53:16 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:53:12:53:16 | SelfParam | TRef | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:53:12:53:16 | SelfParam | TRef.A | associated_types.rs:49:6:49:12 | T | +| associated_types.rs:53:35:55:5 | { ... } | | associated_types.rs:49:6:49:12 | T | +| associated_types.rs:54:9:54:12 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:54:9:54:12 | self | TRef | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:54:9:54:12 | self | TRef.A | associated_types.rs:49:6:49:12 | T | +| associated_types.rs:54:9:54:14 | self.0 | | associated_types.rs:49:6:49:12 | T | +| associated_types.rs:65:15:65:18 | SelfParam | | associated_types.rs:61:5:76:5 | Self [trait MyTrait] | +| associated_types.rs:67:15:67:18 | SelfParam | | associated_types.rs:61:5:76:5 | Self [trait MyTrait] | +| associated_types.rs:71:9:75:9 | { ... } | | associated_types.rs:62:9:62:28 | AssociatedType[MyTrait] | +| associated_types.rs:72:13:72:16 | self | | associated_types.rs:61:5:76:5 | Self [trait MyTrait] | +| associated_types.rs:72:13:72:21 | self.m1() | | associated_types.rs:62:9:62:28 | AssociatedType[MyTrait] | +| associated_types.rs:74:13:74:43 | ...::default(...) | | associated_types.rs:62:9:62:28 | AssociatedType[MyTrait] | +| associated_types.rs:82:15:82:18 | SelfParam | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:82:45:84:9 | { ... } | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:83:13:83:14 | S3 | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:91:15:91:18 | SelfParam | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:91:45:93:9 | { ... } | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:91:45:93:9 | { ... } | A | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:92:13:92:25 | Wrapper(...) | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:92:13:92:25 | Wrapper(...) | A | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:92:21:92:24 | self | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:96:19:110:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:97:13:97:14 | x1 | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:97:18:97:18 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:99:9:99:33 | MacroExpr | | {EXTERNAL LOCATION} | () | +| associated_types.rs:99:18:99:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| associated_types.rs:99:18:99:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| associated_types.rs:99:18:99:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:99:18:99:32 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:99:18:99:32 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:99:26:99:27 | x1 | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:99:26:99:32 | x1.m1() | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:101:13:101:14 | x2 | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:101:18:101:18 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:103:13:103:13 | y | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:103:17:103:18 | x2 | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:103:17:103:23 | x2.m2() | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:104:9:104:27 | MacroExpr | | {EXTERNAL LOCATION} | () | +| associated_types.rs:104:18:104:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| associated_types.rs:104:18:104:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| associated_types.rs:104:18:104:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:104:18:104:26 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:104:18:104:26 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:104:26:104:26 | y | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:106:13:106:14 | x5 | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:106:18:106:19 | S2 | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:107:9:107:33 | MacroExpr | | {EXTERNAL LOCATION} | () | +| associated_types.rs:107:18:107:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| associated_types.rs:107:18:107:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| associated_types.rs:107:18:107:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:107:18:107:32 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:107:18:107:32 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:107:26:107:27 | x5 | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:107:26:107:32 | x5.m1() | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:107:26:107:32 | x5.m1() | A | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:108:13:108:14 | x6 | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:108:18:108:19 | S2 | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:109:9:109:33 | MacroExpr | | {EXTERNAL LOCATION} | () | +| associated_types.rs:109:18:109:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| associated_types.rs:109:18:109:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| associated_types.rs:109:18:109:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:109:18:109:32 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:109:18:109:32 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:109:26:109:27 | x6 | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:109:26:109:32 | x6.m2() | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:109:26:109:32 | x6.m2() | A | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:117:30:117:34 | thing | | associated_types.rs:117:19:117:27 | T | +| associated_types.rs:118:9:118:13 | thing | | associated_types.rs:117:19:117:27 | T | +| associated_types.rs:121:33:121:37 | thing | | associated_types.rs:121:22:121:30 | T | +| associated_types.rs:122:9:122:13 | thing | | associated_types.rs:121:22:121:30 | T | +| associated_types.rs:125:19:128:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:126:30:126:30 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:127:33:127:33 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:135:26:135:26 | x | | associated_types.rs:135:23:135:23 | T | +| associated_types.rs:138:5:140:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:139:13:139:14 | _a | | {EXTERNAL LOCATION} | char | +| associated_types.rs:139:18:139:18 | x | | associated_types.rs:135:23:135:23 | T | +| associated_types.rs:139:18:139:24 | x.get() | | {EXTERNAL LOCATION} | char | +| associated_types.rs:143:24:143:24 | x | | associated_types.rs:143:21:143:21 | T | +| associated_types.rs:146:5:150:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:147:13:147:15 | _a1 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:147:19:147:19 | x | | associated_types.rs:143:21:143:21 | T | +| associated_types.rs:147:19:147:25 | x.get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:148:13:148:15 | _a2 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:148:19:148:25 | get(...) | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:148:23:148:24 | &x | | {EXTERNAL LOCATION} | & | +| associated_types.rs:148:23:148:24 | &x | TRef | associated_types.rs:143:21:143:21 | T | +| associated_types.rs:148:24:148:24 | x | | associated_types.rs:143:21:143:21 | T | +| associated_types.rs:149:13:149:14 | _b | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:149:18:149:18 | x | | associated_types.rs:143:21:143:21 | T | +| associated_types.rs:149:18:149:32 | x.get_another() | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:153:23:153:23 | x | | associated_types.rs:153:20:153:20 | T | +| associated_types.rs:157:5:161:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:158:13:158:15 | _a1 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:158:19:158:19 | x | | associated_types.rs:153:20:153:20 | T | +| associated_types.rs:158:19:158:25 | x.get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:159:13:159:15 | _a2 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:159:19:159:25 | get(...) | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:159:23:159:24 | &x | | {EXTERNAL LOCATION} | & | +| associated_types.rs:159:23:159:24 | &x | TRef | associated_types.rs:153:20:153:20 | T | +| associated_types.rs:159:24:159:24 | x | | associated_types.rs:153:20:153:20 | T | +| associated_types.rs:160:13:160:14 | _b | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:160:18:160:18 | x | | associated_types.rs:153:20:153:20 | T | +| associated_types.rs:160:18:160:32 | x.get_another() | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:167:17:167:21 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:167:17:167:21 | SelfParam | TRef | associated_types.rs:163:5:168:5 | Self [trait AssocNameClash] | +| associated_types.rs:170:34:170:34 | x | | associated_types.rs:170:31:170:31 | T | +| associated_types.rs:174:5:177:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:175:13:175:14 | _a | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:175:18:175:18 | x | | associated_types.rs:170:31:170:31 | T | +| associated_types.rs:175:18:175:24 | x.get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:176:18:176:18 | x | | associated_types.rs:170:31:170:31 | T | +| associated_types.rs:187:19:187:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:187:19:187:23 | SelfParam | TRef | associated_types.rs:183:5:194:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:187:26:187:26 | a | | associated_types.rs:187:16:187:16 | A | +| associated_types.rs:190:23:190:27 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:190:23:190:27 | SelfParam | TRef | associated_types.rs:183:5:194:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:190:30:190:30 | a | | associated_types.rs:190:20:190:20 | A | +| associated_types.rs:190:36:190:36 | b | | associated_types.rs:190:20:190:20 | A | +| associated_types.rs:190:76:193:9 | { ... } | | associated_types.rs:184:9:184:52 | GenericAssociatedType[MyTraitAssoc2] | +| associated_types.rs:191:13:191:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:191:13:191:16 | self | TRef | associated_types.rs:183:5:194:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:191:13:191:23 | self.put(...) | | associated_types.rs:184:9:184:52 | GenericAssociatedType[MyTraitAssoc2] | +| associated_types.rs:191:22:191:22 | a | | associated_types.rs:190:20:190:20 | A | +| associated_types.rs:192:13:192:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:192:13:192:16 | self | TRef | associated_types.rs:183:5:194:5 | Self [trait MyTraitAssoc2] | +| associated_types.rs:192:13:192:23 | self.put(...) | | associated_types.rs:184:9:184:52 | GenericAssociatedType[MyTraitAssoc2] | +| associated_types.rs:192:22:192:22 | b | | associated_types.rs:190:20:190:20 | A | +| associated_types.rs:201:19:201:23 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:201:19:201:23 | SelfParam | TRef | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:201:26:201:26 | a | | associated_types.rs:201:16:201:16 | A | +| associated_types.rs:201:46:203:9 | { ... } | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:201:46:203:9 | { ... } | A | associated_types.rs:201:16:201:16 | A | +| associated_types.rs:202:13:202:22 | Wrapper(...) | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:202:13:202:22 | Wrapper(...) | A | associated_types.rs:201:16:201:16 | A | +| associated_types.rs:202:21:202:21 | a | | associated_types.rs:201:16:201:16 | A | +| associated_types.rs:206:19:213:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:207:13:207:13 | s | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:207:17:207:17 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:209:13:209:15 | _g1 | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:209:13:209:15 | _g1 | A | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:209:19:209:19 | s | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:209:19:209:29 | s.put(...) | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:209:19:209:29 | s.put(...) | A | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:209:25:209:28 | 1i32 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:212:13:212:15 | _g2 | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:212:19:212:19 | s | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:212:19:212:40 | s.put_two(...) | | associated_types.rs:1:1:2:21 | Wrapper | +| associated_types.rs:212:29:212:32 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:212:35:212:39 | false | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:224:21:224:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:224:21:224:25 | SelfParam | TRef | associated_types.rs:219:5:229:5 | Self [trait TraitMultipleAssoc] | +| associated_types.rs:226:20:226:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:226:20:226:24 | SelfParam | TRef | associated_types.rs:219:5:229:5 | Self [trait TraitMultipleAssoc] | +| associated_types.rs:228:20:228:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:228:20:228:24 | SelfParam | TRef | associated_types.rs:219:5:229:5 | Self [trait TraitMultipleAssoc] | +| associated_types.rs:235:21:235:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:235:21:235:25 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:235:34:237:9 | { ... } | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:236:13:236:14 | S3 | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:239:20:239:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:239:20:239:24 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:239:43:241:9 | { ... } | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:240:13:240:13 | S | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:243:20:243:24 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:243:20:243:24 | SelfParam | TRef | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:243:43:245:9 | { ... } | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:244:13:244:14 | S2 | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:248:19:252:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:249:13:249:23 | _assoc_zero | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:249:27:249:28 | S3 | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:249:27:249:39 | S3.get_zero() | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:250:13:250:22 | _assoc_one | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:250:26:250:27 | S3 | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:250:26:250:37 | S3.get_one() | | associated_types.rs:10:1:11:9 | S | +| associated_types.rs:251:13:251:22 | _assoc_two | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:251:26:251:27 | S3 | | associated_types.rs:16:1:17:10 | S3 | +| associated_types.rs:251:26:251:37 | S3.get_two() | | associated_types.rs:13:1:14:10 | S2 | +| associated_types.rs:260:24:260:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:260:24:260:28 | SelfParam | TRef | associated_types.rs:258:5:261:5 | Self [trait Subtrait] | +| associated_types.rs:269:23:269:27 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:269:23:269:27 | SelfParam | TRef | associated_types.rs:263:5:273:5 | Self [trait Subtrait2] | +| associated_types.rs:269:30:269:31 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:269:48:269:49 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:269:66:272:9 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:270:13:270:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:270:13:270:16 | self | TRef | associated_types.rs:263:5:273:5 | Self [trait Subtrait2] | +| associated_types.rs:270:13:270:24 | self.set(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:270:22:270:23 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:271:13:271:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:271:13:271:16 | self | TRef | associated_types.rs:263:5:273:5 | Self [trait Subtrait2] | +| associated_types.rs:271:13:271:24 | self.set(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:271:22:271:23 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:280:16:280:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:280:16:280:20 | SelfParam | TRef | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:280:16:280:20 | SelfParam | TRef.T | associated_types.rs:277:10:277:16 | T | +| associated_types.rs:280:39:282:9 | { ... } | | associated_types.rs:277:10:277:16 | T | +| associated_types.rs:281:13:281:16 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:281:13:281:16 | self | TRef | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:281:13:281:16 | self | TRef.T | associated_types.rs:277:10:277:16 | T | +| associated_types.rs:281:13:281:18 | self.0 | | associated_types.rs:277:10:277:16 | T | +| associated_types.rs:284:16:284:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:284:16:284:20 | SelfParam | TRef | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:284:16:284:20 | SelfParam | TRef.T | associated_types.rs:277:10:277:16 | T | +| associated_types.rs:284:23:284:30 | _content | | associated_types.rs:277:10:277:16 | T | +| associated_types.rs:284:47:286:9 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:285:13:285:43 | MacroExpr | | {EXTERNAL LOCATION} | () | +| associated_types.rs:285:22:285:42 | "Inserting content: \\n" | | {EXTERNAL LOCATION} | & | +| associated_types.rs:285:22:285:42 | "Inserting content: \\n" | TRef | {EXTERNAL LOCATION} | str | +| associated_types.rs:285:22:285:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:285:22:285:42 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:285:22:285:42 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:291:24:291:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:291:24:291:28 | SelfParam | TRef | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:291:24:291:28 | SelfParam | TRef.T | associated_types.rs:289:10:289:16 | T | +| associated_types.rs:291:47:293:9 | { ... } | | associated_types.rs:289:10:289:16 | T | +| associated_types.rs:292:13:292:19 | (...) | | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:292:13:292:19 | (...) | T | associated_types.rs:289:10:289:16 | T | +| associated_types.rs:292:13:292:21 | ... .0 | | associated_types.rs:289:10:289:16 | T | +| associated_types.rs:292:14:292:18 | * ... | | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:292:14:292:18 | * ... | T | associated_types.rs:289:10:289:16 | T | +| associated_types.rs:292:15:292:18 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:292:15:292:18 | self | TRef | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:292:15:292:18 | self | TRef.T | associated_types.rs:289:10:289:16 | T | +| associated_types.rs:296:33:296:36 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:296:33:296:36 | item | TRef | associated_types.rs:296:20:296:30 | T | +| associated_types.rs:297:9:297:12 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:297:9:297:12 | item | TRef | associated_types.rs:296:20:296:30 | T | +| associated_types.rs:300:35:300:38 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:300:35:300:38 | item | TRef | associated_types.rs:300:21:300:32 | T | +| associated_types.rs:300:90:303:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:301:9:301:12 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:301:9:301:12 | item | TRef | associated_types.rs:300:21:300:32 | T | +| associated_types.rs:301:9:301:20 | item.set(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:302:9:302:12 | item | | {EXTERNAL LOCATION} | & | +| associated_types.rs:302:9:302:12 | item | TRef | associated_types.rs:300:21:300:32 | T | +| associated_types.rs:302:9:302:31 | item.insert_two(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:305:19:311:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:306:13:306:17 | item1 | | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:306:13:306:17 | item1 | T | {EXTERNAL LOCATION} | i64 | +| associated_types.rs:306:21:306:33 | MyType(...) | | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:306:21:306:33 | MyType(...) | T | {EXTERNAL LOCATION} | i64 | +| associated_types.rs:306:28:306:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| associated_types.rs:307:25:307:29 | item1 | | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:307:25:307:29 | item1 | T | {EXTERNAL LOCATION} | i64 | +| associated_types.rs:309:13:309:17 | item2 | | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:309:13:309:17 | item2 | T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:309:21:309:32 | MyType(...) | | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:309:21:309:32 | MyType(...) | T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:309:28:309:31 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:310:37:310:42 | &item2 | | {EXTERNAL LOCATION} | & | +| associated_types.rs:310:37:310:42 | &item2 | TRef | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:310:37:310:42 | &item2 | TRef.T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:310:38:310:42 | item2 | | associated_types.rs:275:5:275:24 | MyType | +| associated_types.rs:310:38:310:42 | item2 | T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:324:16:324:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| associated_types.rs:324:16:324:20 | SelfParam | TRef | associated_types.rs:317:5:317:20 | ST | +| associated_types.rs:324:16:324:20 | SelfParam | TRef.T | associated_types.rs:319:10:319:21 | Output | +| associated_types.rs:324:39:326:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| associated_types.rs:324:39:326:9 | { ... } | E | associated_types.rs:319:10:319:21 | Output | +| associated_types.rs:324:39:326:9 | { ... } | T | associated_types.rs:319:10:319:21 | Output | +| associated_types.rs:325:13:325:22 | Ok(...) | | {EXTERNAL LOCATION} | Result | +| associated_types.rs:325:13:325:22 | Ok(...) | E | associated_types.rs:319:10:319:21 | Output | +| associated_types.rs:325:13:325:22 | Ok(...) | T | associated_types.rs:319:10:319:21 | Output | +| associated_types.rs:325:16:325:19 | self | | {EXTERNAL LOCATION} | & | +| associated_types.rs:325:16:325:19 | self | TRef | associated_types.rs:317:5:317:20 | ST | +| associated_types.rs:325:16:325:19 | self | TRef.T | associated_types.rs:319:10:319:21 | Output | +| associated_types.rs:325:16:325:21 | self.0 | | associated_types.rs:319:10:319:21 | Output | +| associated_types.rs:329:19:331:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:330:13:330:14 | _y | | {EXTERNAL LOCATION} | Result | +| associated_types.rs:330:13:330:14 | _y | E | {EXTERNAL LOCATION} | bool | +| associated_types.rs:330:13:330:14 | _y | T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:330:18:330:25 | ST(...) | | associated_types.rs:317:5:317:20 | ST | +| associated_types.rs:330:18:330:25 | ST(...) | T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:330:18:330:31 | ... .get() | | {EXTERNAL LOCATION} | Result | +| associated_types.rs:330:18:330:31 | ... .get() | E | {EXTERNAL LOCATION} | bool | +| associated_types.rs:330:18:330:31 | ... .get() | T | {EXTERNAL LOCATION} | bool | +| associated_types.rs:330:21:330:24 | true | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:338:31:338:31 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:338:31:338:31 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:338:31:338:31 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:338:61:346:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:340:13:340:15 | _a1 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:340:19:340:22 | (...) | | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:340:19:340:22 | (...) | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:340:19:340:28 | ... .get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:340:20:340:21 | * ... | | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:340:20:340:21 | * ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:340:21:340:21 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:340:21:340:21 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:340:21:340:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:343:13:343:15 | _a2 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:343:19:343:19 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:343:19:343:19 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:343:19:343:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:343:19:343:25 | t.get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:345:13:345:15 | _a3 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:345:19:345:24 | get(...) | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:345:23:345:23 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:345:23:345:23 | t | TRef | associated_types.rs:19:1:27:1 | dyn GetSet | +| associated_types.rs:345:23:345:23 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:348:36:348:36 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:348:36:348:36 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:348:36:348:36 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:348:36:348:36 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:348:92:354:5 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:349:13:349:15 | _a1 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:349:19:349:22 | (...) | | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:349:19:349:22 | (...) | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:349:19:349:22 | (...) | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:349:19:349:28 | ... .get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:349:20:349:21 | * ... | | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:349:20:349:21 | * ... | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:349:20:349:21 | * ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:349:21:349:21 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:349:21:349:21 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:349:21:349:21 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:349:21:349:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:350:13:350:15 | _a2 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:350:19:350:19 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:350:19:350:19 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:350:19:350:19 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:350:19:350:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:350:19:350:25 | t.get() | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:351:13:351:15 | _a3 | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:351:19:351:24 | get(...) | | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:351:23:351:23 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:351:23:351:23 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:351:23:351:23 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:351:23:351:23 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:352:13:352:15 | _b1 | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:352:19:352:22 | (...) | | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:352:19:352:22 | (...) | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:352:19:352:22 | (...) | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:352:19:352:36 | ... .get_another() | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:352:20:352:21 | * ... | | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:352:20:352:21 | * ... | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:352:20:352:21 | * ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:352:21:352:21 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:352:21:352:21 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:352:21:352:21 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:352:21:352:21 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:353:13:353:15 | _b2 | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:353:19:353:19 | t | | {EXTERNAL LOCATION} | & | +| associated_types.rs:353:19:353:19 | t | TRef | associated_types.rs:33:1:38:1 | dyn AnotherGet | +| associated_types.rs:353:19:353:19 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | +| associated_types.rs:353:19:353:19 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| associated_types.rs:353:19:353:33 | t.get_another() | | {EXTERNAL LOCATION} | bool | +| associated_types.rs:357:15:364:1 | { ... } | | {EXTERNAL LOCATION} | () | +| associated_types.rs:358:5:358:48 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:359:5:359:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:360:5:360:35 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:361:5:361:37 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:362:5:362:41 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| associated_types.rs:363:5:363:46 | ...::test(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:15:18:15:22 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:15:18:15:22 | SelfParam | TRef | blanket_impl.rs:9:5:10:14 | S2 | | blanket_impl.rs:15:42:17:9 | { ... } | | {EXTERNAL LOCATION} | & | @@ -4899,12 +5420,12 @@ inferType | blanket_impl.rs:299:47:299:67 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:299:47:299:67 | "SELECT * FROM users" | TRef | {EXTERNAL LOCATION} | str | | closure.rs:4:19:31:5 | { ... } | | {EXTERNAL LOCATION} | () | -| closure.rs:6:13:6:22 | my_closure | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:6:13:6:22 | my_closure | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:6:13:6:22 | my_closure | dyn(Args) | {EXTERNAL LOCATION} | (T_2) | | closure.rs:6:13:6:22 | my_closure | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:6:13:6:22 | my_closure | dyn(Args).T1 | {EXTERNAL LOCATION} | bool | | closure.rs:6:13:6:22 | my_closure | dyn(Output) | {EXTERNAL LOCATION} | bool | -| closure.rs:6:26:6:38 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:6:26:6:38 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:6:26:6:38 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_2) | | closure.rs:6:26:6:38 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:6:26:6:38 | \|...\| ... | dyn(Args).T1 | {EXTERNAL LOCATION} | bool | @@ -4916,11 +5437,11 @@ inferType | closure.rs:6:38:6:38 | b | | {EXTERNAL LOCATION} | bool | | closure.rs:8:13:8:13 | x | | {EXTERNAL LOCATION} | i64 | | closure.rs:8:22:8:25 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| closure.rs:9:13:9:19 | add_one | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:9:13:9:19 | add_one | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:9:13:9:19 | add_one | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:9:13:9:19 | add_one | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:9:13:9:19 | add_one | dyn(Output) | {EXTERNAL LOCATION} | i64 | -| closure.rs:9:23:9:34 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:9:23:9:34 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:9:23:9:34 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:9:23:9:34 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:9:23:9:34 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i64 | @@ -4929,7 +5450,7 @@ inferType | closure.rs:9:27:9:34 | ... + ... | | {EXTERNAL LOCATION} | i64 | | closure.rs:9:31:9:34 | 1i64 | | {EXTERNAL LOCATION} | i64 | | closure.rs:10:13:10:14 | _y | | {EXTERNAL LOCATION} | i64 | -| closure.rs:10:18:10:24 | add_one | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:10:18:10:24 | add_one | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:10:18:10:24 | add_one | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:10:18:10:24 | add_one | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:10:18:10:24 | add_one | dyn(Output) | {EXTERNAL LOCATION} | i64 | @@ -4937,55 +5458,55 @@ inferType | closure.rs:10:26:10:26 | x | | {EXTERNAL LOCATION} | i64 | | closure.rs:13:13:13:13 | x | | {EXTERNAL LOCATION} | i64 | | closure.rs:13:17:13:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | -| closure.rs:14:13:14:20 | add_zero | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:14:13:14:20 | add_zero | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:14:13:14:20 | add_zero | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:14:13:14:20 | add_zero | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:14:13:14:20 | add_zero | dyn(Output) | {EXTERNAL LOCATION} | i64 | -| closure.rs:14:24:14:33 | \|...\| n | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:14:24:14:33 | \|...\| n | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:14:24:14:33 | \|...\| n | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:14:24:14:33 | \|...\| n | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:14:24:14:33 | \|...\| n | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:14:25:14:25 | n | | {EXTERNAL LOCATION} | i64 | | closure.rs:14:33:14:33 | n | | {EXTERNAL LOCATION} | i64 | | closure.rs:15:13:15:14 | _y | | {EXTERNAL LOCATION} | i64 | -| closure.rs:15:18:15:25 | add_zero | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:15:18:15:25 | add_zero | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:15:18:15:25 | add_zero | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:15:18:15:25 | add_zero | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:15:18:15:25 | add_zero | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:15:18:15:28 | add_zero(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:15:27:15:27 | x | | {EXTERNAL LOCATION} | i64 | -| closure.rs:17:13:17:21 | _get_bool | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:17:13:17:21 | _get_bool | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:17:13:17:21 | _get_bool | dyn(Args) | {EXTERNAL LOCATION} | () | | closure.rs:17:13:17:21 | _get_bool | dyn(Output) | {EXTERNAL LOCATION} | bool | -| closure.rs:17:25:21:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:17:25:21:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:17:25:21:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | () | | closure.rs:17:25:21:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:17:36:21:9 | { ... } | | {EXTERNAL LOCATION} | bool | | closure.rs:19:17:19:17 | b | | {EXTERNAL LOCATION} | bool | | closure.rs:19:21:19:38 | ...::default(...) | | {EXTERNAL LOCATION} | bool | | closure.rs:20:13:20:13 | b | | {EXTERNAL LOCATION} | bool | -| closure.rs:24:13:24:14 | id | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:24:13:24:14 | id | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:24:13:24:14 | id | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:24:13:24:14 | id | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:24:13:24:14 | id | dyn(Output) | {EXTERNAL LOCATION} | bool | -| closure.rs:24:18:24:22 | \|...\| b | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:24:18:24:22 | \|...\| b | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:24:18:24:22 | \|...\| b | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:24:18:24:22 | \|...\| b | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:24:18:24:22 | \|...\| b | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:24:19:24:19 | b | | {EXTERNAL LOCATION} | bool | | closure.rs:24:22:24:22 | b | | {EXTERNAL LOCATION} | bool | | closure.rs:25:13:25:14 | _b | | {EXTERNAL LOCATION} | bool | -| closure.rs:25:18:25:19 | id | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:25:18:25:19 | id | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:25:18:25:19 | id | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:25:18:25:19 | id | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:25:18:25:19 | id | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:25:18:25:25 | id(...) | | {EXTERNAL LOCATION} | bool | | closure.rs:25:21:25:24 | true | | {EXTERNAL LOCATION} | bool | -| closure.rs:28:13:28:15 | id2 | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:28:13:28:15 | id2 | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:28:13:28:15 | id2 | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:28:13:28:15 | id2 | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:28:13:28:15 | id2 | dyn(Output) | {EXTERNAL LOCATION} | bool | -| closure.rs:28:19:28:23 | \|...\| b | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:28:19:28:23 | \|...\| b | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:28:19:28:23 | \|...\| b | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:28:19:28:23 | \|...\| b | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:28:19:28:23 | \|...\| b | dyn(Output) | {EXTERNAL LOCATION} | bool | @@ -4994,7 +5515,7 @@ inferType | closure.rs:29:13:29:15 | arg | | {EXTERNAL LOCATION} | bool | | closure.rs:29:19:29:36 | ...::default(...) | | {EXTERNAL LOCATION} | bool | | closure.rs:30:13:30:15 | _b2 | | {EXTERNAL LOCATION} | bool | -| closure.rs:30:25:30:27 | id2 | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:30:25:30:27 | id2 | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:30:25:30:27 | id2 | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:30:25:30:27 | id2 | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:30:25:30:27 | id2 | dyn(Output) | {EXTERNAL LOCATION} | bool | @@ -5032,12 +5553,12 @@ inferType | closure.rs:53:11:53:11 | 2 | | {EXTERNAL LOCATION} | i32 | | closure.rs:53:11:53:11 | 2 | | {EXTERNAL LOCATION} | i64 | | closure.rs:56:15:68:5 | { ... } | | {EXTERNAL LOCATION} | () | -| closure.rs:57:13:57:13 | f | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:57:13:57:13 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:57:13:57:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:57:13:57:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:57:13:57:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:57:13:57:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | -| closure.rs:57:17:63:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:57:17:63:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:57:17:63:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:57:17:63:9 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:57:17:63:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | @@ -5060,63 +5581,213 @@ inferType | closure.rs:64:13:64:14 | _r | | {EXTERNAL LOCATION} | i64 | | closure.rs:64:18:64:31 | apply(...) | | {EXTERNAL LOCATION} | i32 | | closure.rs:64:18:64:31 | apply(...) | | {EXTERNAL LOCATION} | i64 | -| closure.rs:64:24:64:24 | f | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:64:24:64:24 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:64:24:64:24 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:64:24:64:24 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:64:24:64:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:64:24:64:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:64:27:64:30 | true | | {EXTERNAL LOCATION} | bool | -| closure.rs:66:13:66:13 | f | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:66:13:66:13 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:66:13:66:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:66:17:66:25 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:66:17:66:25 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:66:17:66:25 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:66:25:66:25 | 1 | | {EXTERNAL LOCATION} | i32 | | closure.rs:67:13:67:15 | _r2 | | {EXTERNAL LOCATION} | i64 | | closure.rs:67:19:67:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | -| closure.rs:67:29:67:29 | f | | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:67:29:67:29 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:67:29:67:29 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:72:54:72:54 | f | | {EXTERNAL LOCATION} | Box | -| closure.rs:72:54:72:54 | f | A | {EXTERNAL LOCATION} | Global | -| closure.rs:72:54:72:54 | f | T | closure.rs:72:26:72:51 | F | -| closure.rs:72:65:72:67 | arg | | closure.rs:72:20:72:20 | A | -| closure.rs:72:78:74:5 | { ... } | | closure.rs:72:23:72:23 | B | -| closure.rs:73:9:73:9 | f | | {EXTERNAL LOCATION} | Box | -| closure.rs:73:9:73:9 | f | A | {EXTERNAL LOCATION} | Global | -| closure.rs:73:9:73:9 | f | T | closure.rs:72:26:72:51 | F | -| closure.rs:73:9:73:14 | f(...) | | closure.rs:72:23:72:23 | B | -| closure.rs:73:11:73:13 | arg | | closure.rs:72:20:72:20 | A | -| closure.rs:76:30:76:30 | f | | {EXTERNAL LOCATION} | Box | -| closure.rs:76:30:76:30 | f | A | {EXTERNAL LOCATION} | Global | -| closure.rs:76:30:76:30 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:76:30:76:30 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:76:30:76:30 | f | T.dyn(Args).T0 | closure.rs:76:24:76:24 | A | -| closure.rs:76:30:76:30 | f | T.dyn(Output) | closure.rs:76:27:76:27 | B | -| closure.rs:76:58:76:60 | arg | | closure.rs:76:24:76:24 | A | -| closure.rs:76:66:79:5 | { ... } | | {EXTERNAL LOCATION} | () | -| closure.rs:77:13:77:15 | _r1 | | closure.rs:76:27:76:27 | B | -| closure.rs:77:19:77:37 | apply_boxed(...) | | closure.rs:76:27:76:27 | B | -| closure.rs:77:31:77:31 | f | | {EXTERNAL LOCATION} | Box | -| closure.rs:77:31:77:31 | f | A | {EXTERNAL LOCATION} | Global | -| closure.rs:77:31:77:31 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:77:31:77:31 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:77:31:77:31 | f | T.dyn(Args).T0 | closure.rs:76:24:76:24 | A | -| closure.rs:77:31:77:31 | f | T.dyn(Output) | closure.rs:76:27:76:27 | B | -| closure.rs:77:34:77:36 | arg | | closure.rs:76:24:76:24 | A | -| closure.rs:78:13:78:15 | _r2 | | {EXTERNAL LOCATION} | bool | -| closure.rs:78:19:78:57 | apply_boxed(...) | | {EXTERNAL LOCATION} | bool | -| closure.rs:78:31:78:53 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| closure.rs:78:31:78:53 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| closure.rs:78:31:78:53 | ...::new(...) | T | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:78:31:78:53 | ...::new(...) | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:78:31:78:53 | ...::new(...) | T.dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | -| closure.rs:78:31:78:53 | ...::new(...) | T.dyn(Output) | {EXTERNAL LOCATION} | bool | -| closure.rs:78:40:78:52 | \|...\| true | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:78:40:78:52 | \|...\| true | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:78:40:78:52 | \|...\| true | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | -| closure.rs:78:40:78:52 | \|...\| true | dyn(Output) | {EXTERNAL LOCATION} | bool | -| closure.rs:78:41:78:41 | _ | | {EXTERNAL LOCATION} | i64 | -| closure.rs:78:49:78:52 | true | | {EXTERNAL LOCATION} | bool | -| closure.rs:78:56:78:56 | 3 | | {EXTERNAL LOCATION} | i32 | +| closure.rs:72:47:72:47 | f | | closure.rs:72:20:72:40 | F | +| closure.rs:72:53:74:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:73:13:73:19 | _return | | {EXTERNAL LOCATION} | i64 | +| closure.rs:73:23:73:23 | f | | closure.rs:72:20:72:40 | F | +| closure.rs:73:23:73:29 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:73:25:73:28 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:76:48:76:48 | f | | closure.rs:76:28:76:41 | F | +| closure.rs:76:54:78:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:77:13:77:19 | _return | | {EXTERNAL LOCATION} | () | +| closure.rs:77:23:77:23 | f | | closure.rs:76:28:76:41 | F | +| closure.rs:77:23:77:29 | f(...) | | {EXTERNAL LOCATION} | () | +| closure.rs:77:25:77:28 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:80:49:80:49 | f | | closure.rs:80:22:80:42 | F | +| closure.rs:80:55:83:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:81:13:81:15 | arg | | {EXTERNAL LOCATION} | bool | +| closure.rs:81:19:81:36 | ...::default(...) | | {EXTERNAL LOCATION} | bool | +| closure.rs:82:9:82:9 | f | | closure.rs:80:22:80:42 | F | +| closure.rs:82:9:82:14 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:82:11:82:13 | arg | | {EXTERNAL LOCATION} | bool | +| closure.rs:85:42:85:42 | f | | closure.rs:85:20:85:35 | F | +| closure.rs:85:48:85:48 | a | | closure.rs:85:14:85:14 | A | +| closure.rs:85:59:87:5 | { ... } | | closure.rs:85:17:85:17 | B | +| closure.rs:86:9:86:9 | f | | closure.rs:85:20:85:35 | F | +| closure.rs:86:9:86:12 | f(...) | | closure.rs:85:17:85:17 | B | +| closure.rs:86:11:86:11 | a | | closure.rs:85:14:85:14 | A | +| closure.rs:89:22:89:22 | f | | closure.rs:89:25:89:46 | impl ... | +| closure.rs:89:56:91:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:90:9:90:9 | f | | closure.rs:89:25:89:46 | impl ... | +| closure.rs:90:9:90:12 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:90:11:90:11 | 2 | | {EXTERNAL LOCATION} | i32 | +| closure.rs:90:11:90:11 | 2 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:93:15:105:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:94:13:94:13 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:94:13:94:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:94:13:94:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | +| closure.rs:94:13:94:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| closure.rs:94:13:94:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:94:17:100:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:94:17:100:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:94:17:100:9 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | +| closure.rs:94:17:100:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| closure.rs:94:17:100:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:94:18:94:18 | x | | {EXTERNAL LOCATION} | bool | +| closure.rs:94:34:100:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| closure.rs:94:34:100:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:95:13:99:13 | if x {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| closure.rs:95:13:99:13 | if x {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| closure.rs:95:16:95:16 | x | | {EXTERNAL LOCATION} | bool | +| closure.rs:95:18:97:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| closure.rs:95:18:97:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:96:17:96:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| closure.rs:96:17:96:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:97:20:99:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| closure.rs:97:20:99:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:98:17:98:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| closure.rs:98:17:98:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:101:13:101:14 | _r | | {EXTERNAL LOCATION} | i32 | +| closure.rs:101:13:101:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:101:18:101:31 | apply(...) | | {EXTERNAL LOCATION} | i32 | +| closure.rs:101:18:101:31 | apply(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:101:24:101:24 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:101:24:101:24 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:101:24:101:24 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | +| closure.rs:101:24:101:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| closure.rs:101:24:101:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:101:27:101:30 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:103:13:103:13 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:103:13:103:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:103:17:103:25 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:103:17:103:25 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:103:25:103:25 | 1 | | {EXTERNAL LOCATION} | i32 | +| closure.rs:104:13:104:15 | _r2 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:104:19:104:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:104:29:104:29 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:104:29:104:29 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:109:40:109:40 | f | | closure.rs:109:20:109:37 | F | +| closure.rs:109:46:111:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:110:13:110:19 | _return | | {EXTERNAL LOCATION} | i64 | +| closure.rs:110:23:110:23 | f | | closure.rs:109:20:109:37 | F | +| closure.rs:110:23:110:29 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:110:25:110:28 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:113:41:113:41 | f | | closure.rs:113:28:113:38 | F | +| closure.rs:113:47:115:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:114:13:114:19 | _return | | {EXTERNAL LOCATION} | () | +| closure.rs:114:23:114:23 | f | | closure.rs:113:28:113:38 | F | +| closure.rs:114:23:114:29 | f(...) | | {EXTERNAL LOCATION} | () | +| closure.rs:114:25:114:28 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:117:42:117:42 | f | | closure.rs:117:22:117:39 | F | +| closure.rs:117:48:120:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:118:13:118:15 | arg | | {EXTERNAL LOCATION} | bool | +| closure.rs:118:19:118:36 | ...::default(...) | | {EXTERNAL LOCATION} | bool | +| closure.rs:119:9:119:9 | f | | closure.rs:117:22:117:39 | F | +| closure.rs:119:9:119:14 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:119:11:119:13 | arg | | {EXTERNAL LOCATION} | bool | +| closure.rs:122:35:122:35 | f | | closure.rs:122:20:122:32 | F | +| closure.rs:122:41:122:41 | a | | closure.rs:122:14:122:14 | A | +| closure.rs:122:52:124:5 | { ... } | | closure.rs:122:17:122:17 | B | +| closure.rs:123:9:123:9 | f | | closure.rs:122:20:122:32 | F | +| closure.rs:123:9:123:12 | f(...) | | closure.rs:122:17:122:17 | B | +| closure.rs:123:11:123:11 | a | | closure.rs:122:14:122:14 | A | +| closure.rs:126:18:126:18 | f | | closure.rs:126:21:126:39 | impl ... | +| closure.rs:126:49:128:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:127:9:127:9 | f | | closure.rs:126:21:126:39 | impl ... | +| closure.rs:127:9:127:12 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:127:11:127:11 | 2 | | {EXTERNAL LOCATION} | i32 | +| closure.rs:127:11:127:11 | 2 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:130:15:142:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:131:13:131:13 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:131:13:131:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:131:13:131:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | +| closure.rs:131:13:131:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| closure.rs:131:13:131:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:131:17:137:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:131:17:137:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:131:17:137:9 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | +| closure.rs:131:17:137:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| closure.rs:131:17:137:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:131:18:131:18 | x | | {EXTERNAL LOCATION} | bool | +| closure.rs:131:34:137:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| closure.rs:131:34:137:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:132:13:136:13 | if x {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| closure.rs:132:13:136:13 | if x {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| closure.rs:132:16:132:16 | x | | {EXTERNAL LOCATION} | bool | +| closure.rs:132:18:134:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| closure.rs:132:18:134:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:133:17:133:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| closure.rs:133:17:133:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:134:20:136:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| closure.rs:134:20:136:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:135:17:135:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| closure.rs:135:17:135:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:138:13:138:14 | _r | | {EXTERNAL LOCATION} | i32 | +| closure.rs:138:13:138:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:138:18:138:31 | apply(...) | | {EXTERNAL LOCATION} | i32 | +| closure.rs:138:18:138:31 | apply(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:138:24:138:24 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:138:24:138:24 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:138:24:138:24 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | +| closure.rs:138:24:138:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| closure.rs:138:24:138:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:138:27:138:30 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:140:13:140:13 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:140:13:140:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:140:17:140:25 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:140:17:140:25 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:140:25:140:25 | 1 | | {EXTERNAL LOCATION} | i32 | +| closure.rs:141:13:141:15 | _r2 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:141:19:141:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:141:29:141:29 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:141:29:141:29 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:146:54:146:54 | f | | {EXTERNAL LOCATION} | Box | +| closure.rs:146:54:146:54 | f | A | {EXTERNAL LOCATION} | Global | +| closure.rs:146:54:146:54 | f | T | closure.rs:146:26:146:51 | F | +| closure.rs:146:65:146:67 | arg | | closure.rs:146:20:146:20 | A | +| closure.rs:146:78:148:5 | { ... } | | closure.rs:146:23:146:23 | B | +| closure.rs:147:9:147:9 | f | | {EXTERNAL LOCATION} | Box | +| closure.rs:147:9:147:9 | f | A | {EXTERNAL LOCATION} | Global | +| closure.rs:147:9:147:9 | f | T | closure.rs:146:26:146:51 | F | +| closure.rs:147:9:147:14 | f(...) | | closure.rs:146:23:146:23 | B | +| closure.rs:147:11:147:13 | arg | | closure.rs:146:20:146:20 | A | +| closure.rs:150:30:150:30 | f | | {EXTERNAL LOCATION} | Box | +| closure.rs:150:30:150:30 | f | A | {EXTERNAL LOCATION} | Global | +| closure.rs:150:30:150:30 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:150:30:150:30 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:150:30:150:30 | f | T.dyn(Args).T0 | closure.rs:150:24:150:24 | A | +| closure.rs:150:30:150:30 | f | T.dyn(Output) | closure.rs:150:27:150:27 | B | +| closure.rs:150:58:150:60 | arg | | closure.rs:150:24:150:24 | A | +| closure.rs:150:66:153:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:151:13:151:15 | _r1 | | closure.rs:150:27:150:27 | B | +| closure.rs:151:19:151:37 | apply_boxed(...) | | closure.rs:150:27:150:27 | B | +| closure.rs:151:31:151:31 | f | | {EXTERNAL LOCATION} | Box | +| closure.rs:151:31:151:31 | f | A | {EXTERNAL LOCATION} | Global | +| closure.rs:151:31:151:31 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | +| closure.rs:151:31:151:31 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:151:31:151:31 | f | T.dyn(Args).T0 | closure.rs:150:24:150:24 | A | +| closure.rs:151:31:151:31 | f | T.dyn(Output) | closure.rs:150:27:150:27 | B | +| closure.rs:151:34:151:36 | arg | | closure.rs:150:24:150:24 | A | +| closure.rs:152:13:152:15 | _r2 | | {EXTERNAL LOCATION} | bool | +| closure.rs:152:19:152:57 | apply_boxed(...) | | {EXTERNAL LOCATION} | bool | +| closure.rs:152:31:152:53 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| closure.rs:152:31:152:53 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| closure.rs:152:31:152:53 | ...::new(...) | T | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:152:31:152:53 | ...::new(...) | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:152:31:152:53 | ...::new(...) | T.dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:152:31:152:53 | ...::new(...) | T.dyn(Output) | {EXTERNAL LOCATION} | bool | +| closure.rs:152:40:152:52 | \|...\| true | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:152:40:152:52 | \|...\| true | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:152:40:152:52 | \|...\| true | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:152:40:152:52 | \|...\| true | dyn(Output) | {EXTERNAL LOCATION} | bool | +| closure.rs:152:41:152:41 | _ | | {EXTERNAL LOCATION} | i64 | +| closure.rs:152:49:152:52 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:152:56:152:56 | 3 | | {EXTERNAL LOCATION} | i32 | | dereference.rs:13:14:13:18 | SelfParam | | {EXTERNAL LOCATION} | & | | dereference.rs:13:14:13:18 | SelfParam | TRef | dereference.rs:5:1:7:1 | MyIntPointer | | dereference.rs:13:29:15:5 | { ... } | | {EXTERNAL LOCATION} | & | @@ -6480,8 +7151,6 @@ inferType | 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:440:17:440:34 | thing.convert_to() | | 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] | @@ -7276,4232 +7945,3988 @@ inferType | main.rs:902:13:902:13 | y | | {EXTERNAL LOCATION} | i32 | | main.rs:902:22:902:31 | ...::m2(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:902:29:902:30 | S2 | | main.rs:745:5:746:14 | S2 | -| main.rs:913:19:913:22 | SelfParam | | main.rs:907:5:910:5 | Wrapper | -| main.rs:913:19:913:22 | SelfParam | A | main.rs:912:10:912:10 | A | -| main.rs:913:30:915:9 | { ... } | | main.rs:912:10:912:10 | A | -| main.rs:914:13:914:16 | self | | main.rs:907:5:910:5 | Wrapper | -| main.rs:914:13:914:16 | self | A | main.rs:912:10:912:10 | A | -| main.rs:914:13:914:22 | self.field | | main.rs:912:10:912:10 | A | -| main.rs:922:15:922:18 | SelfParam | | main.rs:918:5:932:5 | Self [trait MyTrait] | -| main.rs:924:15:924:18 | SelfParam | | main.rs:918:5:932:5 | Self [trait MyTrait] | -| main.rs:928:9:931:9 | { ... } | | main.rs:919:9:919:28 | AssociatedType | -| main.rs:929:13:929:16 | self | | main.rs:918:5:932:5 | Self [trait MyTrait] | -| main.rs:929:13:929:21 | self.m1() | | main.rs:919:9:919:28 | AssociatedType | -| main.rs:930:13:930:43 | ...::default(...) | | main.rs:919:9:919:28 | AssociatedType | -| main.rs:938:19:938:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:938:19:938:23 | SelfParam | TRef | main.rs:934:5:944:5 | Self [trait MyTraitAssoc2] | -| main.rs:938:26:938:26 | a | | main.rs:938:16:938:16 | A | -| main.rs:940:22:940:26 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:940:22:940:26 | SelfParam | TRef | main.rs:934:5:944:5 | Self [trait MyTraitAssoc2] | -| main.rs:940:29:940:29 | a | | main.rs:940:19:940:19 | A | -| main.rs:940:35:940:35 | b | | main.rs:940:19:940:19 | A | -| main.rs:940:75:943:9 | { ... } | | main.rs:935:9:935:52 | GenericAssociatedType | -| main.rs:941:13:941:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:941:13:941:16 | self | TRef | main.rs:934:5:944:5 | Self [trait MyTraitAssoc2] | -| main.rs:941:13:941:23 | self.put(...) | | main.rs:935:9:935:52 | GenericAssociatedType | -| main.rs:941:22:941:22 | a | | main.rs:940:19:940:19 | A | -| main.rs:942:13:942:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:942:13:942:16 | self | TRef | main.rs:934:5:944:5 | Self [trait MyTraitAssoc2] | -| main.rs:942:13:942:23 | self.put(...) | | main.rs:935:9:935:52 | GenericAssociatedType | -| main.rs:942:22:942:22 | b | | main.rs:940:19:940:19 | A | -| main.rs:951:21:951:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:951:21:951:25 | SelfParam | TRef | main.rs:946:5:956:5 | Self [trait TraitMultipleAssoc] | -| main.rs:953:20:953:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:953:20:953:24 | SelfParam | TRef | main.rs:946:5:956:5 | Self [trait TraitMultipleAssoc] | -| main.rs:955:20:955:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:955:20:955:24 | SelfParam | TRef | main.rs:946:5:956:5 | Self [trait TraitMultipleAssoc] | -| main.rs:971:15:971:18 | SelfParam | | main.rs:958:5:959:13 | S | -| main.rs:971:45:973:9 | { ... } | | main.rs:964:5:965:14 | AT | -| main.rs:972:13:972:14 | AT | | main.rs:964:5:965:14 | AT | -| main.rs:981:19:981:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:981:19:981:23 | SelfParam | TRef | main.rs:958:5:959:13 | S | -| main.rs:981:26:981:26 | a | | main.rs:981:16:981:16 | A | -| main.rs:981:46:983:9 | { ... } | | main.rs:907:5:910:5 | Wrapper | -| main.rs:981:46:983:9 | { ... } | A | main.rs:981:16:981:16 | A | -| main.rs:982:13:982:32 | Wrapper {...} | | main.rs:907:5:910:5 | Wrapper | -| main.rs:982:13:982:32 | Wrapper {...} | A | main.rs:981:16:981:16 | A | -| main.rs:982:30:982:30 | a | | main.rs:981:16:981:16 | A | -| main.rs:990:15:990:18 | SelfParam | | main.rs:961:5:962:14 | S2 | -| main.rs:990:45:992:9 | { ... } | | main.rs:907:5:910:5 | Wrapper | -| main.rs:990:45:992:9 | { ... } | A | main.rs:961:5:962:14 | S2 | -| main.rs:991:13:991:35 | Wrapper {...} | | main.rs:907:5:910:5 | Wrapper | -| main.rs:991:13:991:35 | Wrapper {...} | A | main.rs:961:5:962:14 | S2 | -| main.rs:991:30:991:33 | self | | main.rs:961:5:962:14 | S2 | -| main.rs:997:30:999:9 | { ... } | | main.rs:907:5:910:5 | Wrapper | -| main.rs:997:30:999:9 | { ... } | A | main.rs:961:5:962:14 | S2 | -| main.rs:998:13:998:33 | Wrapper {...} | | main.rs:907:5:910:5 | Wrapper | -| main.rs:998:13:998:33 | Wrapper {...} | A | main.rs:961:5:962:14 | S2 | -| main.rs:998:30:998:31 | S2 | | main.rs:961:5:962:14 | S2 | -| main.rs:1004:22:1004:26 | thing | | main.rs:1004:10:1004:19 | T | -| main.rs:1005:9:1005:13 | thing | | main.rs:1004:10:1004:19 | T | -| main.rs:1012:21:1012:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1012:21:1012:25 | SelfParam | TRef | main.rs:964:5:965:14 | AT | -| main.rs:1012:34:1014:9 | { ... } | | main.rs:964:5:965:14 | AT | -| main.rs:1013:13:1013:14 | AT | | main.rs:964:5:965:14 | AT | -| main.rs:1016:20:1016:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1016:20:1016:24 | SelfParam | TRef | main.rs:964:5:965:14 | AT | -| main.rs:1016:43:1018:9 | { ... } | | main.rs:958:5:959:13 | S | -| main.rs:1017:13:1017:13 | S | | main.rs:958:5:959:13 | S | -| main.rs:1020:20:1020:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1020:20:1020:24 | SelfParam | TRef | main.rs:964:5:965:14 | AT | -| main.rs:1020:43:1022:9 | { ... } | | main.rs:961:5:962:14 | S2 | -| main.rs:1021:13:1021:14 | S2 | | main.rs:961:5:962:14 | S2 | -| main.rs:1025:16:1053:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1026:13:1026:14 | x1 | | main.rs:958:5:959:13 | S | -| main.rs:1026:18:1026:18 | S | | main.rs:958:5:959:13 | S | -| main.rs:1028:9:1028:33 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1028:18:1028:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1028:18:1028:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1028:18:1028:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1028:18:1028:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1028:18:1028:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1028:26:1028:27 | x1 | | main.rs:958:5:959:13 | S | -| main.rs:1028:26:1028:32 | x1.m1() | | main.rs:964:5:965:14 | AT | -| main.rs:1030:13:1030:14 | x2 | | main.rs:958:5:959:13 | S | -| main.rs:1030:18:1030:18 | S | | main.rs:958:5:959:13 | S | -| main.rs:1032:13:1032:13 | y | | main.rs:964:5:965:14 | AT | -| main.rs:1032:17:1032:18 | x2 | | main.rs:958:5:959:13 | S | -| main.rs:1032:17:1032:23 | x2.m2() | | main.rs:964:5:965:14 | AT | -| main.rs:1033:9:1033:27 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1033:18:1033:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1033:18:1033:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1033:18:1033:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1033:18:1033:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1033:18:1033:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1033:26:1033:26 | y | | main.rs:964:5:965:14 | AT | -| main.rs:1035:13:1035:14 | x3 | | main.rs:958:5:959:13 | S | -| main.rs:1035:18:1035:18 | S | | main.rs:958:5:959:13 | S | -| main.rs:1037:9:1037:44 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1037:18:1037:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1037:18:1037:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1037:18:1037:43 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1037:18:1037:43 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1037:18:1037:43 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1037:26:1037:27 | x3 | | main.rs:958:5:959:13 | S | -| main.rs:1037:26:1037:34 | x3.put(...) | | main.rs:907:5:910:5 | Wrapper | -| main.rs:1037:26:1037:34 | x3.put(...) | A | {EXTERNAL LOCATION} | i32 | -| main.rs:1037:26:1037:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | -| main.rs:1037:33:1037:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1040:9:1040:50 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1040:18:1040:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1040:18:1040:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1040:18:1040:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1040:18:1040:49 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1040:18:1040:49 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1040:26:1040:27 | x3 | | main.rs:958:5:959:13 | S | -| main.rs:1040:26:1040:40 | x3.putTwo(...) | | main.rs:907:5:910:5 | Wrapper | -| main.rs:1040:36:1040:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1040:39:1040:39 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1042:20:1042:20 | S | | main.rs:958:5:959:13 | S | -| main.rs:1043:9:1043:28 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1043:18:1043:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1043:18:1043:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1043:18:1043:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1043:18:1043:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1043:18:1043:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1045:13:1045:14 | x5 | | main.rs:961:5:962:14 | S2 | -| main.rs:1045:18:1045:19 | S2 | | main.rs:961:5:962:14 | S2 | -| main.rs:1046:9:1046:33 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1046:18:1046:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1046:18:1046:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1046:18:1046:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1046:18:1046:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1046:18:1046:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1046:26:1046:27 | x5 | | main.rs:961:5:962:14 | S2 | -| main.rs:1046:26:1046:32 | x5.m1() | | main.rs:907:5:910:5 | Wrapper | -| main.rs:1046:26:1046:32 | x5.m1() | A | main.rs:961:5:962:14 | S2 | -| main.rs:1047:13:1047:14 | x6 | | main.rs:961:5:962:14 | S2 | -| main.rs:1047:18:1047:19 | S2 | | main.rs:961:5:962:14 | S2 | -| main.rs:1048:9:1048:33 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1048:18:1048:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1048:18:1048:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1048:18:1048:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1048:18:1048:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1048:18:1048:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1048:26:1048:27 | x6 | | main.rs:961:5:962:14 | S2 | -| main.rs:1048:26:1048:32 | x6.m2() | | main.rs:907:5:910:5 | Wrapper | -| main.rs:1048:26:1048:32 | x6.m2() | A | main.rs:961:5:962:14 | S2 | -| main.rs:1050:13:1050:22 | assoc_zero | | main.rs:964:5:965:14 | AT | -| main.rs:1050:26:1050:27 | AT | | main.rs:964:5:965:14 | AT | -| main.rs:1050:26:1050:38 | AT.get_zero() | | main.rs:964:5:965:14 | AT | -| main.rs:1051:13:1051:21 | assoc_one | | main.rs:958:5:959:13 | S | -| main.rs:1051:25:1051:26 | AT | | main.rs:964:5:965:14 | AT | -| main.rs:1051:25:1051:36 | AT.get_one() | | main.rs:958:5:959:13 | S | -| main.rs:1052:13:1052:21 | assoc_two | | main.rs:961:5:962:14 | S2 | -| main.rs:1052:25:1052:26 | AT | | main.rs:964:5:965:14 | AT | -| main.rs:1052:25:1052:36 | AT.get_two() | | main.rs:961:5:962:14 | S2 | -| main.rs:1060:19:1060:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1060:19:1060:23 | SelfParam | TRef | main.rs:1057:5:1061:5 | Self [trait Supertrait] | -| main.rs:1060:26:1060:32 | content | | main.rs:1058:9:1058:21 | Content | -| main.rs:1065:24:1065:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1065:24:1065:28 | SelfParam | TRef | main.rs:1063:5:1066:5 | Self [trait Subtrait] | -| main.rs:1074:23:1074:27 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1074:23:1074:27 | SelfParam | TRef | main.rs:1068:5:1078:5 | Self [trait Subtrait2] | -| main.rs:1074:68:1077:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1075:13:1075:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1075:13:1075:16 | self | TRef | main.rs:1068:5:1078:5 | Self [trait Subtrait2] | -| main.rs:1075:13:1075:27 | self.insert(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1076:13:1076:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1076:13:1076:16 | self | TRef | main.rs:1068:5:1078:5 | Self [trait Subtrait2] | -| main.rs:1076:13:1076:27 | self.insert(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1084:19:1084:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1084:19:1084:23 | SelfParam | TRef | main.rs:1080:5:1080:24 | MyType | -| main.rs:1084:19:1084:23 | SelfParam | TRef.T | main.rs:1082:10:1082:10 | T | -| main.rs:1084:26:1084:33 | _content | | main.rs:1082:10:1082:10 | T | -| main.rs:1084:51:1086:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1085:13:1085:43 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1085:22:1085:42 | "Inserting content: \\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1085:22:1085:42 | "Inserting content: \\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1085:22:1085:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1085:22:1085:42 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1085:22:1085:42 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1091:24:1091:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1091:24:1091:28 | SelfParam | TRef | main.rs:1080:5:1080:24 | MyType | -| main.rs:1091:24:1091:28 | SelfParam | TRef.T | main.rs:1089:10:1089:17 | T | -| main.rs:1091:48:1093:9 | { ... } | | main.rs:1089:10:1089:17 | T | -| main.rs:1092:13:1092:19 | (...) | | main.rs:1080:5:1080:24 | MyType | -| main.rs:1092:13:1092:19 | (...) | T | main.rs:1089:10:1089:17 | T | -| main.rs:1092:13:1092:21 | ... .0 | | main.rs:1089:10:1089:17 | T | -| main.rs:1092:13:1092:29 | ... .clone() | | main.rs:1089:10:1089:17 | T | -| main.rs:1092:14:1092:18 | * ... | | main.rs:1080:5:1080:24 | MyType | -| main.rs:1092:14:1092:18 | * ... | T | main.rs:1089:10:1089:17 | T | -| main.rs:1092:15:1092:18 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1092:15:1092:18 | self | TRef | main.rs:1080:5:1080:24 | MyType | -| main.rs:1092:15:1092:18 | self | TRef.T | main.rs:1089:10:1089:17 | T | -| main.rs:1096:33:1096:36 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1096:33:1096:36 | item | TRef | main.rs:1096:20:1096:30 | T | -| main.rs:1097:9:1097:12 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1097:9:1097:12 | item | TRef | main.rs:1096:20:1096:30 | T | -| main.rs:1100:35:1100:38 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1100:35:1100:38 | item | TRef | main.rs:1100:21:1100:32 | T | -| main.rs:1100:93:1103:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1101:9:1101:12 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1101:9:1101:12 | item | TRef | main.rs:1100:21:1100:32 | T | -| main.rs:1101:9:1101:23 | item.insert(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1102:9:1102:12 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1102:9:1102:12 | item | TRef | main.rs:1100:21:1100:32 | T | -| main.rs:1102:9:1102:31 | item.insert_two(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1105:15:1111:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1106:13:1106:17 | item1 | | main.rs:1080:5:1080:24 | MyType | -| main.rs:1106:13:1106:17 | item1 | T | {EXTERNAL LOCATION} | i64 | -| main.rs:1106:21:1106:33 | MyType(...) | | main.rs:1080:5:1080:24 | MyType | -| main.rs:1106:21:1106:33 | MyType(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:1106:28:1106:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1107:25:1107:29 | item1 | | main.rs:1080:5:1080:24 | MyType | -| main.rs:1107:25:1107:29 | item1 | T | {EXTERNAL LOCATION} | i64 | -| main.rs:1109:13:1109:17 | item2 | | main.rs:1080:5:1080:24 | MyType | -| main.rs:1109:13:1109:17 | item2 | T | {EXTERNAL LOCATION} | bool | -| main.rs:1109:21:1109:32 | MyType(...) | | main.rs:1080:5:1080:24 | MyType | -| main.rs:1109:21:1109:32 | MyType(...) | T | {EXTERNAL LOCATION} | bool | -| main.rs:1109:28:1109:31 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1110:37:1110:42 | &item2 | | {EXTERNAL LOCATION} | & | -| main.rs:1110:37:1110:42 | &item2 | TRef | main.rs:1080:5:1080:24 | MyType | -| main.rs:1110:37:1110:42 | &item2 | TRef.T | {EXTERNAL LOCATION} | bool | -| main.rs:1110:38:1110:42 | item2 | | main.rs:1080:5:1080:24 | MyType | -| main.rs:1110:38:1110:42 | item2 | T | {EXTERNAL LOCATION} | bool | -| main.rs:1127:15:1127:18 | SelfParam | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1127:15:1127:18 | SelfParam | A | main.rs:1126:10:1126:10 | T | -| main.rs:1127:26:1132:9 | { ... } | | main.rs:1126:10:1126:10 | T | -| main.rs:1128:13:1131:13 | match self { ... } | | main.rs:1126:10:1126:10 | T | -| main.rs:1128:19:1128:22 | self | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1128:19:1128:22 | self | A | main.rs:1126:10:1126:10 | T | -| main.rs:1129:17:1129:29 | ...::C1(...) | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1129:17:1129:29 | ...::C1(...) | A | main.rs:1126:10:1126:10 | T | -| main.rs:1129:28:1129:28 | a | | main.rs:1126:10:1126:10 | T | -| main.rs:1129:34:1129:34 | a | | main.rs:1126:10:1126:10 | T | -| main.rs:1130:17:1130:32 | ...::C2 {...} | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1130:17:1130:32 | ...::C2 {...} | A | main.rs:1126:10:1126:10 | T | -| main.rs:1130:30:1130:30 | a | | main.rs:1126:10:1126:10 | T | -| main.rs:1130:37:1130:37 | a | | main.rs:1126:10:1126:10 | T | -| main.rs:1135:16:1141:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1136:13:1136:13 | x | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1136:13:1136:13 | x | A | main.rs:1121:5:1122:14 | S1 | -| main.rs:1136:17:1136:30 | ...::C1(...) | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1136:17:1136:30 | ...::C1(...) | A | main.rs:1121:5:1122:14 | S1 | -| main.rs:1136:28:1136:29 | S1 | | main.rs:1121:5:1122:14 | S1 | -| main.rs:1137:13:1137:13 | y | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1137:13:1137:13 | y | A | main.rs:1123:5:1124:14 | S2 | -| main.rs:1137:17:1137:36 | ...::C2 {...} | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1137:17:1137:36 | ...::C2 {...} | A | main.rs:1123:5:1124:14 | S2 | -| main.rs:1137:33:1137:34 | S2 | | main.rs:1123:5:1124:14 | S2 | -| main.rs:1139:9:1139:32 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1139:18:1139:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1139:18:1139:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1139:18:1139:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1139:18:1139:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1139:18:1139:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1139:26:1139:26 | x | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1139:26:1139:26 | x | A | main.rs:1121:5:1122:14 | S1 | -| main.rs:1139:26:1139:31 | x.m1() | | main.rs:1121:5:1122:14 | S1 | -| main.rs:1140:9:1140:32 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1140:18:1140:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1140:18:1140:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1140:18:1140:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1140:18:1140:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1140:18:1140:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1140:26:1140:26 | y | | main.rs:1115:5:1119:5 | MyEnum | -| main.rs:1140:26:1140:26 | y | A | main.rs:1123:5:1124:14 | S2 | -| main.rs:1140:26:1140:31 | y.m1() | | main.rs:1123:5:1124:14 | S2 | -| main.rs:1162:15:1162:18 | SelfParam | | main.rs:1160:5:1163:5 | Self [trait MyTrait1] | -| main.rs:1167:15:1167:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1167:15:1167:19 | SelfParam | TRef | main.rs:1165:5:1177:5 | Self [trait MyTrait2] | -| main.rs:1170:9:1176:9 | { ... } | | main.rs:1165:20:1165:22 | Tr2 | -| main.rs:1171:13:1175:13 | if ... {...} else {...} | | main.rs:1165:20:1165:22 | Tr2 | -| main.rs:1171:16:1171:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1171:16:1171:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1171:20:1171:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1171:22:1173:13 | { ... } | | main.rs:1165:20:1165:22 | Tr2 | -| main.rs:1172:17:1172:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1172:17:1172:20 | self | TRef | main.rs:1165:5:1177:5 | Self [trait MyTrait2] | -| main.rs:1172:17:1172:25 | self.m1() | | main.rs:1165:20:1165:22 | Tr2 | -| main.rs:1173:20:1175:13 | { ... } | | main.rs:1165:20:1165:22 | Tr2 | -| main.rs:1174:17:1174:31 | ...::m1(...) | | main.rs:1165:20:1165:22 | Tr2 | -| main.rs:1174:26:1174:30 | * ... | | main.rs:1165:5:1177:5 | Self [trait MyTrait2] | -| main.rs:1174:27:1174:30 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1174:27:1174:30 | self | TRef | main.rs:1165:5:1177:5 | Self [trait MyTrait2] | -| main.rs:1181:15:1181:18 | SelfParam | | main.rs:1179:5:1191:5 | Self [trait MyTrait3] | -| main.rs:1184:9:1190:9 | { ... } | | main.rs:1179:20:1179:22 | Tr3 | -| main.rs:1185:13:1189:13 | if ... {...} else {...} | | main.rs:1179:20:1179:22 | Tr3 | -| main.rs:1185:16:1185:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1185:16:1185:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1185:20:1185:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1185:22:1187:13 | { ... } | | main.rs:1179:20:1179:22 | Tr3 | -| main.rs:1186:17:1186:20 | self | | main.rs:1179:5:1191:5 | Self [trait MyTrait3] | -| main.rs:1186:17:1186:25 | self.m2() | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1186:17:1186:25 | self.m2() | A | main.rs:1179:20:1179:22 | Tr3 | -| main.rs:1186:17:1186:27 | ... .a | | main.rs:1179:20:1179:22 | Tr3 | -| main.rs:1187:20:1189:13 | { ... } | | main.rs:1179:20:1179:22 | Tr3 | -| main.rs:1188:17:1188:31 | ...::m2(...) | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1188:17:1188:31 | ...::m2(...) | A | main.rs:1179:20:1179:22 | Tr3 | -| main.rs:1188:17:1188:33 | ... .a | | main.rs:1179:20:1179:22 | Tr3 | -| main.rs:1188:26:1188:30 | &self | | {EXTERNAL LOCATION} | & | -| main.rs:1188:26:1188:30 | &self | TRef | main.rs:1179:5:1191:5 | Self [trait MyTrait3] | -| main.rs:1188:27:1188:30 | self | | main.rs:1179:5:1191:5 | Self [trait MyTrait3] | -| main.rs:1195:15:1195:18 | SelfParam | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1195:15:1195:18 | SelfParam | A | main.rs:1193:10:1193:10 | T | -| main.rs:1195:26:1197:9 | { ... } | | main.rs:1193:10:1193:10 | T | -| main.rs:1196:13:1196:16 | self | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1196:13:1196:16 | self | A | main.rs:1193:10:1193:10 | T | -| main.rs:1196:13:1196:18 | self.a | | main.rs:1193:10:1193:10 | T | -| main.rs:1204:15:1204:18 | SelfParam | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1204:15:1204:18 | SelfParam | A | main.rs:1202:10:1202:10 | T | -| main.rs:1204:35:1206:9 | { ... } | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1204:35:1206:9 | { ... } | A | main.rs:1202:10:1202:10 | T | -| main.rs:1205:13:1205:33 | MyThing {...} | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1205:13:1205:33 | MyThing {...} | A | main.rs:1202:10:1202:10 | T | -| main.rs:1205:26:1205:29 | self | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1205:26:1205:29 | self | A | main.rs:1202:10:1202:10 | T | -| main.rs:1205:26:1205:31 | self.a | | main.rs:1202:10:1202:10 | T | -| main.rs:1213:44:1213:44 | x | | main.rs:1213:26:1213:41 | T2 | -| main.rs:1213:57:1215:5 | { ... } | | main.rs:1213:22:1213:23 | T1 | -| main.rs:1214:9:1214:9 | x | | main.rs:1213:26:1213:41 | T2 | -| main.rs:1214:9:1214:14 | x.m1() | | main.rs:1213:22:1213:23 | T1 | -| main.rs:1217:56:1217:56 | x | | main.rs:1217:39:1217:53 | T | -| main.rs:1217:62:1221:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1219:13:1219:13 | a | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1219:13:1219:13 | a | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1219:17:1219:17 | x | | main.rs:1217:39:1217:53 | T | -| main.rs:1219:17:1219:22 | x.m1() | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1219:17:1219:22 | x.m1() | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1220:9:1220:27 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1220:18:1220:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1220:18:1220:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1220:18:1220:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1220:18:1220:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1220:18:1220:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1220:26:1220:26 | a | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1220:26:1220:26 | a | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1223:16:1247:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1224:13:1224:13 | x | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1224:13:1224:13 | x | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1224:17:1224:33 | MyThing {...} | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1224:17:1224:33 | MyThing {...} | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1224:30:1224:31 | S1 | | main.rs:1155:5:1156:14 | S1 | -| main.rs:1225:13:1225:13 | y | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1225:13:1225:13 | y | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1225:17:1225:33 | MyThing {...} | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1225:17:1225:33 | MyThing {...} | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1225:30:1225:31 | S2 | | main.rs:1157:5:1158:14 | S2 | -| main.rs:1227:9:1227:32 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:919:15:919:18 | SelfParam | | main.rs:907:5:911:5 | MyEnum | +| main.rs:919:15:919:18 | SelfParam | A | main.rs:918:10:918:10 | T | +| main.rs:919:26:924:9 | { ... } | | main.rs:918:10:918:10 | T | +| main.rs:920:13:923:13 | match self { ... } | | main.rs:918:10:918:10 | T | +| main.rs:920:19:920:22 | self | | main.rs:907:5:911:5 | MyEnum | +| main.rs:920:19:920:22 | self | A | main.rs:918:10:918:10 | T | +| main.rs:921:17:921:29 | ...::C1(...) | | main.rs:907:5:911:5 | MyEnum | +| main.rs:921:17:921:29 | ...::C1(...) | A | main.rs:918:10:918:10 | T | +| main.rs:921:28:921:28 | a | | main.rs:918:10:918:10 | T | +| main.rs:921:34:921:34 | a | | main.rs:918:10:918:10 | T | +| main.rs:922:17:922:32 | ...::C2 {...} | | main.rs:907:5:911:5 | MyEnum | +| main.rs:922:17:922:32 | ...::C2 {...} | A | main.rs:918:10:918:10 | T | +| main.rs:922:30:922:30 | a | | main.rs:918:10:918:10 | T | +| main.rs:922:37:922:37 | a | | main.rs:918:10:918:10 | T | +| main.rs:927:16:933:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:928:13:928:13 | x | | main.rs:907:5:911:5 | MyEnum | +| main.rs:928:13:928:13 | x | A | main.rs:913:5:914:14 | S1 | +| main.rs:928:17:928:30 | ...::C1(...) | | main.rs:907:5:911:5 | MyEnum | +| main.rs:928:17:928:30 | ...::C1(...) | A | main.rs:913:5:914:14 | S1 | +| main.rs:928:28:928:29 | S1 | | main.rs:913:5:914:14 | S1 | +| main.rs:929:13:929:13 | y | | main.rs:907:5:911:5 | MyEnum | +| main.rs:929:13:929:13 | y | A | main.rs:915:5:916:14 | S2 | +| main.rs:929:17:929:36 | ...::C2 {...} | | main.rs:907:5:911:5 | MyEnum | +| main.rs:929:17:929:36 | ...::C2 {...} | A | main.rs:915:5:916:14 | S2 | +| main.rs:929:33:929:34 | S2 | | main.rs:915:5:916:14 | S2 | +| main.rs:931:9:931:32 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:931:18:931:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:931:18:931:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:931:18:931:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:931:18:931:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:931:18:931:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:931:26:931:26 | x | | main.rs:907:5:911:5 | MyEnum | +| main.rs:931:26:931:26 | x | A | main.rs:913:5:914:14 | S1 | +| main.rs:931:26:931:31 | x.m1() | | main.rs:913:5:914:14 | S1 | +| main.rs:932:9:932:32 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:932:18:932:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:932:18:932:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:932:18:932:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:932:18:932:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:932:18:932:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:932:26:932:26 | y | | main.rs:907:5:911:5 | MyEnum | +| main.rs:932:26:932:26 | y | A | main.rs:915:5:916:14 | S2 | +| main.rs:932:26:932:31 | y.m1() | | main.rs:915:5:916:14 | S2 | +| main.rs:954:15:954:18 | SelfParam | | main.rs:952:5:955:5 | Self [trait MyTrait1] | +| main.rs:959:15:959:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:959:15:959:19 | SelfParam | TRef | main.rs:957:5:969:5 | Self [trait MyTrait2] | +| main.rs:962:9:968:9 | { ... } | | main.rs:957:20:957:22 | Tr2 | +| main.rs:963:13:967:13 | if ... {...} else {...} | | main.rs:957:20:957:22 | Tr2 | +| main.rs:963:16:963:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:963:16:963:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:963:20:963:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:963:22:965:13 | { ... } | | main.rs:957:20:957:22 | Tr2 | +| main.rs:964:17:964:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:964:17:964:20 | self | TRef | main.rs:957:5:969:5 | Self [trait MyTrait2] | +| main.rs:964:17:964:25 | self.m1() | | main.rs:957:20:957:22 | Tr2 | +| main.rs:965:20:967:13 | { ... } | | main.rs:957:20:957:22 | Tr2 | +| main.rs:966:17:966:31 | ...::m1(...) | | main.rs:957:20:957:22 | Tr2 | +| main.rs:966:26:966:30 | * ... | | main.rs:957:5:969:5 | Self [trait MyTrait2] | +| main.rs:966:27:966:30 | self | | {EXTERNAL LOCATION} | & | +| main.rs:966:27:966:30 | self | TRef | main.rs:957:5:969:5 | Self [trait MyTrait2] | +| main.rs:973:15:973:18 | SelfParam | | main.rs:971:5:983:5 | Self [trait MyTrait3] | +| main.rs:976:9:982:9 | { ... } | | main.rs:971:20:971:22 | Tr3 | +| main.rs:977:13:981:13 | if ... {...} else {...} | | main.rs:971:20:971:22 | Tr3 | +| main.rs:977:16:977:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:977:16:977:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:977:20:977:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:977:22:979:13 | { ... } | | main.rs:971:20:971:22 | Tr3 | +| main.rs:978:17:978:20 | self | | main.rs:971:5:983:5 | Self [trait MyTrait3] | +| main.rs:978:17:978:25 | self.m2() | | main.rs:937:5:940:5 | MyThing | +| main.rs:978:17:978:25 | self.m2() | A | main.rs:971:20:971:22 | Tr3 | +| main.rs:978:17:978:27 | ... .a | | main.rs:971:20:971:22 | Tr3 | +| main.rs:979:20:981:13 | { ... } | | main.rs:971:20:971:22 | Tr3 | +| main.rs:980:17:980:31 | ...::m2(...) | | main.rs:937:5:940:5 | MyThing | +| main.rs:980:17:980:31 | ...::m2(...) | A | main.rs:971:20:971:22 | Tr3 | +| main.rs:980:17:980:33 | ... .a | | main.rs:971:20:971:22 | Tr3 | +| main.rs:980:26:980:30 | &self | | {EXTERNAL LOCATION} | & | +| main.rs:980:26:980:30 | &self | TRef | main.rs:971:5:983:5 | Self [trait MyTrait3] | +| main.rs:980:27:980:30 | self | | main.rs:971:5:983:5 | Self [trait MyTrait3] | +| main.rs:987:15:987:18 | SelfParam | | main.rs:937:5:940:5 | MyThing | +| main.rs:987:15:987:18 | SelfParam | A | main.rs:985:10:985:10 | T | +| main.rs:987:26:989:9 | { ... } | | main.rs:985:10:985:10 | T | +| main.rs:988:13:988:16 | self | | main.rs:937:5:940:5 | MyThing | +| main.rs:988:13:988:16 | self | A | main.rs:985:10:985:10 | T | +| main.rs:988:13:988:18 | self.a | | main.rs:985:10:985:10 | T | +| main.rs:996:15:996:18 | SelfParam | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:996:15:996:18 | SelfParam | A | main.rs:994:10:994:10 | T | +| main.rs:996:35:998:9 | { ... } | | main.rs:937:5:940:5 | MyThing | +| main.rs:996:35:998:9 | { ... } | A | main.rs:994:10:994:10 | T | +| main.rs:997:13:997:33 | MyThing {...} | | main.rs:937:5:940:5 | MyThing | +| main.rs:997:13:997:33 | MyThing {...} | A | main.rs:994:10:994:10 | T | +| main.rs:997:26:997:29 | self | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:997:26:997:29 | self | A | main.rs:994:10:994:10 | T | +| main.rs:997:26:997:31 | self.a | | main.rs:994:10:994:10 | T | +| main.rs:1005:44:1005:44 | x | | main.rs:1005:26:1005:41 | T2 | +| main.rs:1005:57:1007:5 | { ... } | | main.rs:1005:22:1005:23 | T1 | +| main.rs:1006:9:1006:9 | x | | main.rs:1005:26:1005:41 | T2 | +| main.rs:1006:9:1006:14 | x.m1() | | main.rs:1005:22:1005:23 | T1 | +| main.rs:1009:56:1009:56 | x | | main.rs:1009:39:1009:53 | T | +| main.rs:1009:62:1013:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1011:13:1011:13 | a | | main.rs:937:5:940:5 | MyThing | +| main.rs:1011:13:1011:13 | a | A | main.rs:947:5:948:14 | S1 | +| main.rs:1011:17:1011:17 | x | | main.rs:1009:39:1009:53 | T | +| main.rs:1011:17:1011:22 | x.m1() | | main.rs:937:5:940:5 | MyThing | +| main.rs:1011:17:1011:22 | x.m1() | A | main.rs:947:5:948:14 | S1 | +| main.rs:1012:9:1012:27 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1012:18:1012:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1012:18:1012:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1012:18:1012:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1012:18:1012:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1012:18:1012:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1012:26:1012:26 | a | | main.rs:937:5:940:5 | MyThing | +| main.rs:1012:26:1012:26 | a | A | main.rs:947:5:948:14 | S1 | +| main.rs:1015:16:1039:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1016:13:1016:13 | x | | main.rs:937:5:940:5 | MyThing | +| main.rs:1016:13:1016:13 | x | A | main.rs:947:5:948:14 | S1 | +| main.rs:1016:17:1016:33 | MyThing {...} | | main.rs:937:5:940:5 | MyThing | +| main.rs:1016:17:1016:33 | MyThing {...} | A | main.rs:947:5:948:14 | S1 | +| main.rs:1016:30:1016:31 | S1 | | main.rs:947:5:948:14 | S1 | +| main.rs:1017:13:1017:13 | y | | main.rs:937:5:940:5 | MyThing | +| main.rs:1017:13:1017:13 | y | A | main.rs:949:5:950:14 | S2 | +| main.rs:1017:17:1017:33 | MyThing {...} | | main.rs:937:5:940:5 | MyThing | +| main.rs:1017:17:1017:33 | MyThing {...} | A | main.rs:949:5:950:14 | S2 | +| main.rs:1017:30:1017:31 | S2 | | main.rs:949:5:950:14 | S2 | +| main.rs:1019:9:1019:32 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1019:18:1019:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1019:18:1019:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1019:18:1019:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1019:18:1019:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1019:18:1019:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1019:26:1019:26 | x | | main.rs:937:5:940:5 | MyThing | +| main.rs:1019:26:1019:26 | x | A | main.rs:947:5:948:14 | S1 | +| main.rs:1019:26:1019:31 | x.m1() | | main.rs:947:5:948:14 | S1 | +| main.rs:1020:9:1020:32 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1020:18:1020:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1020:18:1020:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1020:18:1020:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1020:18:1020:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1020:18:1020:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1020:26:1020:26 | y | | main.rs:937:5:940:5 | MyThing | +| main.rs:1020:26:1020:26 | y | A | main.rs:949:5:950:14 | S2 | +| main.rs:1020:26:1020:31 | y.m1() | | main.rs:949:5:950:14 | S2 | +| main.rs:1022:13:1022:13 | x | | main.rs:937:5:940:5 | MyThing | +| main.rs:1022:13:1022:13 | x | A | main.rs:947:5:948:14 | S1 | +| main.rs:1022:17:1022:33 | MyThing {...} | | main.rs:937:5:940:5 | MyThing | +| main.rs:1022:17:1022:33 | MyThing {...} | A | main.rs:947:5:948:14 | S1 | +| main.rs:1022:30:1022:31 | S1 | | main.rs:947:5:948:14 | S1 | +| main.rs:1023:13:1023:13 | y | | main.rs:937:5:940:5 | MyThing | +| main.rs:1023:13:1023:13 | y | A | main.rs:949:5:950:14 | S2 | +| main.rs:1023:17:1023:33 | MyThing {...} | | main.rs:937:5:940:5 | MyThing | +| main.rs:1023:17:1023:33 | MyThing {...} | A | main.rs:949:5:950:14 | S2 | +| main.rs:1023:30:1023:31 | S2 | | main.rs:949:5:950:14 | S2 | +| main.rs:1025:9:1025:32 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1025:18:1025:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1025:18:1025:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1025:18:1025:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1025:18:1025:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1025:18:1025:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1025:26:1025:26 | x | | main.rs:937:5:940:5 | MyThing | +| main.rs:1025:26:1025:26 | x | A | main.rs:947:5:948:14 | S1 | +| main.rs:1025:26:1025:31 | x.m2() | | main.rs:947:5:948:14 | S1 | +| main.rs:1026:9:1026:32 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1026:18:1026:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1026:18:1026:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1026:18:1026:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1026:18:1026:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1026:18:1026:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1026:26:1026:26 | y | | main.rs:937:5:940:5 | MyThing | +| main.rs:1026:26:1026:26 | y | A | main.rs:949:5:950:14 | S2 | +| main.rs:1026:26:1026:31 | y.m2() | | main.rs:949:5:950:14 | S2 | +| main.rs:1028:13:1028:13 | x | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1028:13:1028:13 | x | A | main.rs:947:5:948:14 | S1 | +| main.rs:1028:17:1028:34 | MyThing2 {...} | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1028:17:1028:34 | MyThing2 {...} | A | main.rs:947:5:948:14 | S1 | +| main.rs:1028:31:1028:32 | S1 | | main.rs:947:5:948:14 | S1 | +| main.rs:1029:13:1029:13 | y | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1029:13:1029:13 | y | A | main.rs:949:5:950:14 | S2 | +| main.rs:1029:17:1029:34 | MyThing2 {...} | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1029:17:1029:34 | MyThing2 {...} | A | main.rs:949:5:950:14 | S2 | +| main.rs:1029:31:1029:32 | S2 | | main.rs:949:5:950:14 | S2 | +| main.rs:1031:9:1031:32 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1031:18:1031:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1031:18:1031:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1031:18:1031:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1031:18:1031:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1031:18:1031:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1031:26:1031:26 | x | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1031:26:1031:26 | x | A | main.rs:947:5:948:14 | S1 | +| main.rs:1031:26:1031:31 | x.m3() | | main.rs:947:5:948:14 | S1 | +| main.rs:1032:9:1032:32 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1032:18:1032:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1032:18:1032:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1032:18:1032:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1032:18:1032:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1032:18:1032:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1032:26:1032:26 | y | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1032:26:1032:26 | y | A | main.rs:949:5:950:14 | S2 | +| main.rs:1032:26:1032:31 | y.m3() | | main.rs:949:5:950:14 | S2 | +| main.rs:1034:13:1034:13 | x | | main.rs:937:5:940:5 | MyThing | +| main.rs:1034:13:1034:13 | x | A | main.rs:947:5:948:14 | S1 | +| main.rs:1034:17:1034:33 | MyThing {...} | | main.rs:937:5:940:5 | MyThing | +| main.rs:1034:17:1034:33 | MyThing {...} | A | main.rs:947:5:948:14 | S1 | +| main.rs:1034:30:1034:31 | S1 | | main.rs:947:5:948:14 | S1 | +| main.rs:1035:13:1035:13 | s | | main.rs:947:5:948:14 | S1 | +| main.rs:1035:17:1035:32 | call_trait_m1(...) | | main.rs:947:5:948:14 | S1 | +| main.rs:1035:31:1035:31 | x | | main.rs:937:5:940:5 | MyThing | +| main.rs:1035:31:1035:31 | x | A | main.rs:947:5:948:14 | S1 | +| main.rs:1037:13:1037:13 | x | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1037:13:1037:13 | x | A | main.rs:949:5:950:14 | S2 | +| main.rs:1037:17:1037:34 | MyThing2 {...} | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1037:17:1037:34 | MyThing2 {...} | A | main.rs:949:5:950:14 | S2 | +| main.rs:1037:31:1037:32 | S2 | | main.rs:949:5:950:14 | S2 | +| main.rs:1038:13:1038:13 | s | | main.rs:937:5:940:5 | MyThing | +| main.rs:1038:13:1038:13 | s | A | main.rs:949:5:950:14 | S2 | +| main.rs:1038:17:1038:32 | call_trait_m1(...) | | main.rs:937:5:940:5 | MyThing | +| main.rs:1038:17:1038:32 | call_trait_m1(...) | A | main.rs:949:5:950:14 | S2 | +| main.rs:1038:31:1038:31 | x | | main.rs:942:5:945:5 | MyThing2 | +| main.rs:1038:31:1038:31 | x | A | main.rs:949:5:950:14 | S2 | +| main.rs:1055:22:1055:22 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1055:22:1055:22 | x | TRef | main.rs:1055:11:1055:19 | T | +| main.rs:1055:35:1057:5 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1055:35:1057:5 | { ... } | TRef | main.rs:1055:11:1055:19 | T | +| main.rs:1056:9:1056:9 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1056:9:1056:9 | x | TRef | main.rs:1055:11:1055:19 | T | +| main.rs:1060:17:1060:20 | SelfParam | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1060:29:1062:9 | { ... } | | main.rs:1048:5:1049:14 | S2 | +| main.rs:1061:13:1061:14 | S2 | | main.rs:1048:5:1049:14 | S2 | +| main.rs:1065:21:1065:21 | x | | main.rs:1065:13:1065:14 | T1 | +| main.rs:1068:5:1070:5 | { ... } | | main.rs:1065:17:1065:18 | T2 | +| main.rs:1069:9:1069:9 | x | | main.rs:1065:13:1065:14 | T1 | +| main.rs:1069:9:1069:16 | x.into() | | main.rs:1065:17:1065:18 | T2 | +| main.rs:1072:16:1088:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1073:13:1073:13 | x | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1073:17:1073:18 | S1 | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1074:9:1074:32 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1074:18:1074:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1074:18:1074:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1074:18:1074:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1074:18:1074:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1074:18:1074:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1074:26:1074:31 | id(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1074:26:1074:31 | id(...) | TRef | main.rs:1045:5:1046:14 | S1 | +| main.rs:1074:29:1074:30 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1074:29:1074:30 | &x | TRef | main.rs:1045:5:1046:14 | S1 | +| main.rs:1074:30:1074:30 | x | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1076:13:1076:13 | x | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1076:17:1076:18 | S1 | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1077:9:1077:38 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1077:18:1077:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1077:18:1077:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1077:18:1077:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1077:18:1077:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1077:18:1077:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1077:26:1077:37 | id::<...>(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1077:26:1077:37 | id::<...>(...) | TRef | main.rs:1045:5:1046:14 | S1 | +| main.rs:1077:35:1077:36 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1077:35:1077:36 | &x | TRef | main.rs:1045:5:1046:14 | S1 | +| main.rs:1077:36:1077:36 | x | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1079:13:1079:13 | x | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1079:17:1079:18 | S1 | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1081:9:1081:45 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1081:18:1081:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1081:18:1081:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1081:18:1081:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1081:18:1081:44 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1081:18:1081:44 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1081:26:1081:44 | id::<...>(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1081:26:1081:44 | id::<...>(...) | TRef | main.rs:1051:5:1051:25 | dyn Trait | +| main.rs:1081:42:1081:43 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1081:42:1081:43 | &x | TRef | main.rs:1045:5:1046:14 | S1 | +| main.rs:1081:43:1081:43 | x | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1083:13:1083:13 | x | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1083:17:1083:18 | S1 | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1084:9:1084:25 | into::<...>(...) | | main.rs:1048:5:1049:14 | S2 | +| main.rs:1084:24:1084:24 | x | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1086:13:1086:13 | x | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1086:17:1086:18 | S1 | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1087:13:1087:13 | y | | main.rs:1048:5:1049:14 | S2 | +| main.rs:1087:21:1087:27 | into(...) | | main.rs:1048:5:1049:14 | S2 | +| main.rs:1087:26:1087:26 | x | | main.rs:1045:5:1046:14 | S1 | +| main.rs:1101:22:1101:25 | SelfParam | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1101:22:1101:25 | SelfParam | Fst | main.rs:1100:10:1100:12 | Fst | +| main.rs:1101:22:1101:25 | SelfParam | Snd | main.rs:1100:15:1100:17 | Snd | +| main.rs:1101:35:1108:9 | { ... } | | main.rs:1100:15:1100:17 | Snd | +| main.rs:1102:13:1107:13 | match self { ... } | | file://:0:0:0:0 | ! | +| main.rs:1102:13:1107:13 | match self { ... } | | main.rs:1100:15:1100:17 | Snd | +| main.rs:1102:19:1102:22 | self | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1102:19:1102:22 | self | Fst | main.rs:1100:10:1100:12 | Fst | +| main.rs:1102:19:1102:22 | self | Snd | main.rs:1100:15:1100:17 | Snd | +| main.rs:1103:17:1103:38 | ...::PairNone(...) | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1103:17:1103:38 | ...::PairNone(...) | Fst | main.rs:1100:10:1100:12 | Fst | +| main.rs:1103:17:1103:38 | ...::PairNone(...) | Snd | main.rs:1100:15:1100:17 | Snd | +| main.rs:1103:43:1103:82 | MacroExpr | | file://:0:0:0:0 | ! | +| main.rs:1103:50:1103:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | & | +| main.rs:1103:50:1103:81 | "PairNone has no second elemen... | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1103:50:1103:81 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | +| main.rs:1103:50:1103:81 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1103:50:1103:81 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1104:17:1104:38 | ...::PairFst(...) | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1104:17:1104:38 | ...::PairFst(...) | Fst | main.rs:1100:10:1100:12 | Fst | +| main.rs:1104:17:1104:38 | ...::PairFst(...) | Snd | main.rs:1100:15:1100:17 | Snd | +| main.rs:1104:37:1104:37 | _ | | main.rs:1100:10:1100:12 | Fst | +| main.rs:1104:43:1104:81 | MacroExpr | | file://:0:0:0:0 | ! | +| main.rs:1104:50:1104:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | & | +| main.rs:1104:50:1104:80 | "PairFst has no second element... | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1104:50:1104:80 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | +| main.rs:1104:50:1104:80 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1104:50:1104:80 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1105:17:1105:40 | ...::PairSnd(...) | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1105:17:1105:40 | ...::PairSnd(...) | Fst | main.rs:1100:10:1100:12 | Fst | +| main.rs:1105:17:1105:40 | ...::PairSnd(...) | Snd | main.rs:1100:15:1100:17 | Snd | +| main.rs:1105:37:1105:39 | snd | | main.rs:1100:15:1100:17 | Snd | +| main.rs:1105:45:1105:47 | snd | | main.rs:1100:15:1100:17 | Snd | +| main.rs:1106:17:1106:44 | ...::PairBoth(...) | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1106:17:1106:44 | ...::PairBoth(...) | Fst | main.rs:1100:10:1100:12 | Fst | +| main.rs:1106:17:1106:44 | ...::PairBoth(...) | Snd | main.rs:1100:15:1100:17 | Snd | +| main.rs:1106:38:1106:38 | _ | | main.rs:1100:10:1100:12 | Fst | +| main.rs:1106:41:1106:43 | snd | | main.rs:1100:15:1100:17 | Snd | +| main.rs:1106:49:1106:51 | snd | | main.rs:1100:15:1100:17 | Snd | +| main.rs:1132:10:1132:10 | t | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1132:10:1132:10 | t | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1132:10:1132:10 | t | Snd | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1132:10:1132:10 | t | Snd.Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1132:10:1132:10 | t | Snd.Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1132:30:1135:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1133:13:1133:13 | x | | main.rs:1117:5:1118:14 | S3 | +| main.rs:1133:17:1133:17 | t | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1133:17:1133:17 | t | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1133:17:1133:17 | t | Snd | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1133:17:1133:17 | t | Snd.Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1133:17:1133:17 | t | Snd.Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1133:17:1133:29 | t.unwrapSnd() | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1133:17:1133:29 | t.unwrapSnd() | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1133:17:1133:29 | t.unwrapSnd() | Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1133:17:1133:41 | ... .unwrapSnd() | | main.rs:1117:5:1118:14 | S3 | +| main.rs:1134:9:1134:27 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1134:18:1134:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1134:18:1134:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1134:18:1134:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1134:18:1134:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1134:18:1134:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1134:26:1134:26 | x | | main.rs:1117:5:1118:14 | S3 | +| main.rs:1145:16:1165:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1147:13:1147:14 | p1 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1147:13:1147:14 | p1 | Fst | main.rs:1111:5:1112:14 | S1 | +| main.rs:1147:13:1147:14 | p1 | Snd | main.rs:1114:5:1115:14 | S2 | +| main.rs:1147:26:1147:53 | ...::PairBoth(...) | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1147:26:1147:53 | ...::PairBoth(...) | Fst | main.rs:1111:5:1112:14 | S1 | +| main.rs:1147:26:1147:53 | ...::PairBoth(...) | Snd | main.rs:1114:5:1115:14 | S2 | +| main.rs:1147:47:1147:48 | S1 | | main.rs:1111:5:1112:14 | S1 | +| main.rs:1147:51:1147:52 | S2 | | main.rs:1114:5:1115:14 | S2 | +| main.rs:1148:9:1148:28 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1148:18:1148:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1148:18:1148:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1148:18:1148:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1148:18:1148:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1148:18:1148:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1148:26:1148:27 | p1 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1148:26:1148:27 | p1 | Fst | main.rs:1111:5:1112:14 | S1 | +| main.rs:1148:26:1148:27 | p1 | Snd | main.rs:1114:5:1115:14 | S2 | +| main.rs:1151:13:1151:14 | p2 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1151:13:1151:14 | p2 | Fst | main.rs:1111:5:1112:14 | S1 | +| main.rs:1151:13:1151:14 | p2 | Snd | main.rs:1114:5:1115:14 | S2 | +| main.rs:1151:26:1151:47 | ...::PairNone(...) | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1151:26:1151:47 | ...::PairNone(...) | Fst | main.rs:1111:5:1112:14 | S1 | +| main.rs:1151:26:1151:47 | ...::PairNone(...) | Snd | main.rs:1114:5:1115:14 | S2 | +| main.rs:1152:9:1152:28 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1152:18:1152:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1152:18:1152:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1152:18:1152:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1152:18:1152:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1152:18:1152:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1152:26:1152:27 | p2 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1152:26:1152:27 | p2 | Fst | main.rs:1111:5:1112:14 | S1 | +| main.rs:1152:26:1152:27 | p2 | Snd | main.rs:1114:5:1115:14 | S2 | +| main.rs:1155:13:1155:14 | p3 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1155:13:1155:14 | p3 | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1155:13:1155:14 | p3 | Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1155:34:1155:56 | ...::PairSnd(...) | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1155:34:1155:56 | ...::PairSnd(...) | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1155:34:1155:56 | ...::PairSnd(...) | Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1155:54:1155:55 | S3 | | main.rs:1117:5:1118:14 | S3 | +| main.rs:1156:9:1156:28 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1156:18:1156:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1156:18:1156:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1156:18:1156:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1156:18:1156:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1156:18:1156:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1156:26:1156:27 | p3 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1156:26:1156:27 | p3 | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1156:26:1156:27 | p3 | Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1159:13:1159:14 | p3 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1159:13:1159:14 | p3 | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1159:13:1159:14 | p3 | Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1159:35:1159:56 | ...::PairNone(...) | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1159:35:1159:56 | ...::PairNone(...) | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1159:35:1159:56 | ...::PairNone(...) | Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1160:9:1160:28 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1160:18:1160:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1160:18:1160:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1160:18:1160:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1160:18:1160:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1160:18:1160:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1160:26:1160:27 | p3 | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1160:26:1160:27 | p3 | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1160:26:1160:27 | p3 | Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1162:9:1162:55 | g(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1162:11:1162:54 | ...::PairSnd(...) | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1162:11:1162:54 | ...::PairSnd(...) | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1162:11:1162:54 | ...::PairSnd(...) | Snd | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1162:11:1162:54 | ...::PairSnd(...) | Snd.Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1162:11:1162:54 | ...::PairSnd(...) | Snd.Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1162:31:1162:53 | ...::PairSnd(...) | | main.rs:1092:5:1098:5 | PairOption | +| main.rs:1162:31:1162:53 | ...::PairSnd(...) | Fst | main.rs:1114:5:1115:14 | S2 | +| main.rs:1162:31:1162:53 | ...::PairSnd(...) | Snd | main.rs:1117:5:1118:14 | S3 | +| main.rs:1162:51:1162:52 | S3 | | main.rs:1117:5:1118:14 | S3 | +| main.rs:1164:13:1164:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1164:13:1164:13 | x | E | main.rs:1111:5:1112:14 | S1 | +| main.rs:1164:13:1164:13 | x | T | main.rs:1137:5:1137:34 | S4 | +| main.rs:1164:13:1164:13 | x | T.T41 | main.rs:1114:5:1115:14 | S2 | +| main.rs:1164:13:1164:13 | x | T.T42 | main.rs:1139:5:1139:22 | S5 | +| main.rs:1164:13:1164:13 | x | T.T42.T5 | main.rs:1114:5:1115:14 | S2 | +| main.rs:1177:16:1177:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1177:16:1177:24 | SelfParam | TRefMut | main.rs:1175:5:1182:5 | Self [trait MyTrait] | +| main.rs:1177:27:1177:31 | value | | main.rs:1175:19:1175:19 | S | +| main.rs:1179:21:1179:29 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1179:21:1179:29 | SelfParam | TRefMut | main.rs:1175:5:1182:5 | Self [trait MyTrait] | +| main.rs:1179:32:1179:36 | value | | main.rs:1175:19:1175:19 | S | +| main.rs:1179:42:1181:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1180:13:1180:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1180:13:1180:16 | self | TRefMut | main.rs:1175:5:1182:5 | Self [trait MyTrait] | +| main.rs:1180:13:1180:27 | self.set(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1180:22:1180:26 | value | | main.rs:1175:19:1175:19 | S | +| main.rs:1186:16:1186:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1186:16:1186:24 | SelfParam | TRefMut | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1186:16:1186:24 | SelfParam | TRefMut.T | main.rs:1184:10:1184:10 | T | +| main.rs:1186:27:1186:31 | value | | main.rs:1184:10:1184:10 | T | +| main.rs:1186:37:1186:38 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1190:26:1192:9 | { ... } | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1190:26:1192:9 | { ... } | T | main.rs:1189:10:1189:10 | T | +| main.rs:1191:13:1191:30 | ...::MyNone(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1191:13:1191:30 | ...::MyNone(...) | T | main.rs:1189:10:1189:10 | T | +| main.rs:1196:20:1196:23 | SelfParam | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1196:20:1196:23 | SelfParam | T | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1196:20:1196:23 | SelfParam | T.T | main.rs:1195:10:1195:10 | T | +| main.rs:1196:41:1201:9 | { ... } | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1196:41:1201:9 | { ... } | T | main.rs:1195:10:1195:10 | T | +| main.rs:1197:13:1200:13 | match self { ... } | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1197:13:1200:13 | match self { ... } | T | main.rs:1195:10:1195:10 | T | +| main.rs:1197:19:1197:22 | self | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1197:19:1197:22 | self | T | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1197:19:1197:22 | self | T.T | main.rs:1195:10:1195:10 | T | +| main.rs:1198:17:1198:34 | ...::MyNone(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1198:17:1198:34 | ...::MyNone(...) | T | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1198:17:1198:34 | ...::MyNone(...) | T.T | main.rs:1195:10:1195:10 | T | +| main.rs:1198:39:1198:56 | ...::MyNone(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1198:39:1198:56 | ...::MyNone(...) | T | main.rs:1195:10:1195:10 | T | +| main.rs:1199:17:1199:35 | ...::MySome(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1199:17:1199:35 | ...::MySome(...) | T | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1199:17:1199:35 | ...::MySome(...) | T.T | main.rs:1195:10:1195:10 | T | +| main.rs:1199:34:1199:34 | x | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1199:34:1199:34 | x | T | main.rs:1195:10:1195:10 | T | +| main.rs:1199:40:1199:40 | x | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1199:40:1199:40 | x | T | main.rs:1195:10:1195:10 | T | +| main.rs:1207:16:1252:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1208:13:1208:14 | x1 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1208:13:1208:14 | x1 | T | main.rs:1204:5:1205:13 | S | +| main.rs:1208:18:1208:37 | ...::new(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1208:18:1208:37 | ...::new(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1209:9:1209:28 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1209:18:1209:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1209:18:1209:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1209:18:1209:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1209:18:1209:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1209:18:1209:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1209:26:1209:27 | x1 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1209:26:1209:27 | x1 | T | main.rs:1204:5:1205:13 | S | +| main.rs:1211:17:1211:18 | x2 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1211:17:1211:18 | x2 | T | main.rs:1204:5:1205:13 | S | +| main.rs:1211:22:1211:36 | ...::new(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1211:22:1211:36 | ...::new(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1212:9:1212:10 | x2 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1212:9:1212:10 | x2 | T | main.rs:1204:5:1205:13 | S | +| main.rs:1212:9:1212:17 | x2.set(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1212:16:1212:16 | S | | main.rs:1204:5:1205:13 | S | +| main.rs:1213:9:1213:28 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1213:18:1213:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1213:18:1213:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1213:18:1213:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1213:18:1213:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1213:18:1213:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1213:26:1213:27 | x2 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1213:26:1213:27 | x2 | T | main.rs:1204:5:1205:13 | S | +| main.rs:1215:17:1215:18 | x3 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1215:17:1215:18 | x3 | T | main.rs:1204:5:1205:13 | S | +| main.rs:1215:22:1215:36 | ...::new(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1215:22:1215:36 | ...::new(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1216:9:1216:10 | x3 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1216:9:1216:10 | x3 | T | main.rs:1204:5:1205:13 | S | +| main.rs:1216:9:1216:22 | x3.call_set(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1216:21:1216:21 | S | | main.rs:1204:5:1205:13 | S | +| main.rs:1217:9:1217:28 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1217:18:1217:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1217:18:1217:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1217:18:1217:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1217:18:1217:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1217:18:1217:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1217:26:1217:27 | x3 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1217:26:1217:27 | x3 | T | main.rs:1204:5:1205:13 | S | +| main.rs:1219:17:1219:18 | x4 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1219:17:1219:18 | x4 | T | main.rs:1204:5:1205:13 | S | +| main.rs:1219:22:1219:36 | ...::new(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1219:22:1219:36 | ...::new(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1220:9:1220:33 | ...::set(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1220:23:1220:29 | &mut x4 | | {EXTERNAL LOCATION} | &mut | +| main.rs:1220:23:1220:29 | &mut x4 | TRefMut | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1220:23:1220:29 | &mut x4 | TRefMut.T | main.rs:1204:5:1205:13 | S | +| main.rs:1220:28:1220:29 | x4 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1220:28:1220:29 | x4 | T | main.rs:1204:5:1205:13 | S | +| main.rs:1220:32:1220:32 | S | | main.rs:1204:5:1205:13 | S | +| main.rs:1221:9:1221:28 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1221:18:1221:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1221:18:1221:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1221:18:1221:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1221:18:1221:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1221:18:1221:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1221:26:1221:27 | x4 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1221:26:1221:27 | x4 | T | main.rs:1204:5:1205:13 | S | +| main.rs:1223:13:1223:14 | x5 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1223:13:1223:14 | x5 | T | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1223:13:1223:14 | x5 | T.T | main.rs:1204:5:1205:13 | S | +| main.rs:1223:18:1223:58 | ...::MySome(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1223:18:1223:58 | ...::MySome(...) | T | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1223:18:1223:58 | ...::MySome(...) | T.T | main.rs:1204:5:1205:13 | S | +| main.rs:1223:35:1223:57 | ...::MyNone(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1223:35:1223:57 | ...::MyNone(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1224:9:1224:38 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1224:18:1224:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1224:18:1224:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1224:18:1224:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1224:18:1224:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1224:18:1224:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1224:26:1224:27 | x5 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1224:26:1224:27 | x5 | T | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1224:26:1224:27 | x5 | T.T | main.rs:1204:5:1205:13 | S | +| main.rs:1224:26:1224:37 | x5.flatten() | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1224:26:1224:37 | x5.flatten() | T | main.rs:1204:5:1205:13 | S | +| main.rs:1226:13:1226:14 | x6 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1226:13:1226:14 | x6 | T | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1226:13:1226:14 | x6 | T.T | main.rs:1204:5:1205:13 | S | +| main.rs:1226:18:1226:58 | ...::MySome(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1226:18:1226:58 | ...::MySome(...) | T | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1226:18:1226:58 | ...::MySome(...) | T.T | main.rs:1204:5:1205:13 | S | +| main.rs:1226:35:1226:57 | ...::MyNone(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1226:35:1226:57 | ...::MyNone(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1227:9:1227:62 | MacroExpr | | {EXTERNAL LOCATION} | () | | main.rs:1227:18:1227:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1227:18:1227:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1227:18:1227:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1227:18:1227:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1227:18:1227:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1227:26:1227:26 | x | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1227:26:1227:26 | x | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1227:26:1227:31 | x.m1() | | main.rs:1155:5:1156:14 | S1 | -| main.rs:1228:9:1228:32 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1228:18:1228:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1228:18:1228:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1228:18:1228:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1228:18:1228:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1228:18:1228:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1228:26:1228:26 | y | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1228:26:1228:26 | y | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1228:26:1228:31 | y.m1() | | main.rs:1157:5:1158:14 | S2 | -| main.rs:1230:13:1230:13 | x | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1230:13:1230:13 | x | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1230:17:1230:33 | MyThing {...} | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1230:17:1230:33 | MyThing {...} | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1230:30:1230:31 | S1 | | main.rs:1155:5:1156:14 | S1 | -| main.rs:1231:13:1231:13 | y | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1231:13:1231:13 | y | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1231:17:1231:33 | MyThing {...} | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1231:17:1231:33 | MyThing {...} | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1231:30:1231:31 | S2 | | main.rs:1157:5:1158:14 | S2 | -| main.rs:1233:9:1233:32 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1233:18:1233:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1233:18:1233:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1233:18:1233:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1233:18:1233:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1233:18:1233:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1233:26:1233:26 | x | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1233:26:1233:26 | x | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1233:26:1233:31 | x.m2() | | main.rs:1155:5:1156:14 | S1 | -| main.rs:1234:9:1234:32 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1234:18:1234:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1234:18:1234:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1234:18:1234:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1234:18:1234:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1234:18:1234:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1234:26:1234:26 | y | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1234:26:1234:26 | y | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1234:26:1234:31 | y.m2() | | main.rs:1157:5:1158:14 | S2 | -| main.rs:1236:13:1236:13 | x | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1236:13:1236:13 | x | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1236:17:1236:34 | MyThing2 {...} | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1236:17:1236:34 | MyThing2 {...} | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1236:31:1236:32 | S1 | | main.rs:1155:5:1156:14 | S1 | -| main.rs:1237:13:1237:13 | y | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1237:13:1237:13 | y | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1237:17:1237:34 | MyThing2 {...} | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1237:17:1237:34 | MyThing2 {...} | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1237:31:1237:32 | S2 | | main.rs:1157:5:1158:14 | S2 | -| main.rs:1239:9:1239:32 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1239:18:1239:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1239:18:1239:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1239:18:1239:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1239:18:1239:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1239:18:1239:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1239:26:1239:26 | x | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1239:26:1239:26 | x | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1239:26:1239:31 | x.m3() | | main.rs:1155:5:1156:14 | S1 | -| main.rs:1240:9:1240:32 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1240:18:1240:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1240:18:1240:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1240:18:1240:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1240:18:1240:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1240:18:1240:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1240:26:1240:26 | y | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1240:26:1240:26 | y | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1240:26:1240:31 | y.m3() | | main.rs:1157:5:1158:14 | S2 | -| main.rs:1242:13:1242:13 | x | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1242:13:1242:13 | x | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1242:17:1242:33 | MyThing {...} | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1242:17:1242:33 | MyThing {...} | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1242:30:1242:31 | S1 | | main.rs:1155:5:1156:14 | S1 | -| main.rs:1243:13:1243:13 | s | | main.rs:1155:5:1156:14 | S1 | -| main.rs:1243:17:1243:32 | call_trait_m1(...) | | main.rs:1155:5:1156:14 | S1 | -| main.rs:1243:31:1243:31 | x | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1243:31:1243:31 | x | A | main.rs:1155:5:1156:14 | S1 | -| main.rs:1245:13:1245:13 | x | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1245:13:1245:13 | x | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1245:17:1245:34 | MyThing2 {...} | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1245:17:1245:34 | MyThing2 {...} | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1245:31:1245:32 | S2 | | main.rs:1157:5:1158:14 | S2 | -| main.rs:1246:13:1246:13 | s | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1246:13:1246:13 | s | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1246:17:1246:32 | call_trait_m1(...) | | main.rs:1145:5:1148:5 | MyThing | -| main.rs:1246:17:1246:32 | call_trait_m1(...) | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1246:31:1246:31 | x | | main.rs:1150:5:1153:5 | MyThing2 | -| main.rs:1246:31:1246:31 | x | A | main.rs:1157:5:1158:14 | S2 | -| main.rs:1263:22:1263:22 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1263:22:1263:22 | x | TRef | main.rs:1263:11:1263:19 | T | -| main.rs:1263:35:1265:5 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1263:35:1265:5 | { ... } | TRef | main.rs:1263:11:1263:19 | T | -| main.rs:1264:9:1264:9 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1264:9:1264:9 | x | TRef | main.rs:1263:11:1263:19 | T | -| main.rs:1268:17:1268:20 | SelfParam | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1268:29:1270:9 | { ... } | | main.rs:1256:5:1257:14 | S2 | -| main.rs:1269:13:1269:14 | S2 | | main.rs:1256:5:1257:14 | S2 | -| main.rs:1273:21:1273:21 | x | | main.rs:1273:13:1273:14 | T1 | -| main.rs:1276:5:1278:5 | { ... } | | main.rs:1273:17:1273:18 | T2 | -| main.rs:1277:9:1277:9 | x | | main.rs:1273:13:1273:14 | T1 | -| main.rs:1277:9:1277:16 | x.into() | | main.rs:1273:17:1273:18 | T2 | -| main.rs:1280:16:1296:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1281:13:1281:13 | x | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1281:17:1281:18 | S1 | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1282:9:1282:32 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1282:18:1282:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1282:18:1282:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1282:18:1282:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1282:18:1282:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1282:18:1282:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1282:26:1282:31 | id(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1282:26:1282:31 | id(...) | TRef | main.rs:1253:5:1254:14 | S1 | -| main.rs:1282:29:1282:30 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1282:29:1282:30 | &x | TRef | main.rs:1253:5:1254:14 | S1 | -| main.rs:1282:30:1282:30 | x | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1284:13:1284:13 | x | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1284:17:1284:18 | S1 | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1285:9:1285:38 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1285:18:1285:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1285:18:1285:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1285:18:1285:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1285:18:1285:37 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1285:18:1285:37 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1285:26:1285:37 | id::<...>(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1285:26:1285:37 | id::<...>(...) | TRef | main.rs:1253:5:1254:14 | S1 | -| main.rs:1285:35:1285:36 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1285:35:1285:36 | &x | TRef | main.rs:1253:5:1254:14 | S1 | -| main.rs:1285:36:1285:36 | x | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1287:13:1287:13 | x | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1287:17:1287:18 | S1 | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1289:9:1289:45 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1289:18:1289:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1289:18:1289:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1289:18:1289:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1289:18:1289:44 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1289:18:1289:44 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1289:26:1289:44 | id::<...>(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1289:26:1289:44 | id::<...>(...) | TRef | main.rs:1259:5:1259:25 | dyn Trait | -| main.rs:1289:42:1289:43 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1289:42:1289:43 | &x | TRef | main.rs:1253:5:1254:14 | S1 | -| main.rs:1289:43:1289:43 | x | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1291:13:1291:13 | x | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1291:17:1291:18 | S1 | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1292:9:1292:25 | into::<...>(...) | | main.rs:1256:5:1257:14 | S2 | -| main.rs:1292:24:1292:24 | x | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1294:13:1294:13 | x | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1294:17:1294:18 | S1 | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1295:13:1295:13 | y | | main.rs:1256:5:1257:14 | S2 | -| main.rs:1295:21:1295:27 | into(...) | | main.rs:1256:5:1257:14 | S2 | -| main.rs:1295:26:1295:26 | x | | main.rs:1253:5:1254:14 | S1 | -| main.rs:1309:22:1309:25 | SelfParam | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1309:22:1309:25 | SelfParam | Fst | main.rs:1308:10:1308:12 | Fst | -| main.rs:1309:22:1309:25 | SelfParam | Snd | main.rs:1308:15:1308:17 | Snd | -| main.rs:1309:35:1316:9 | { ... } | | main.rs:1308:15:1308:17 | Snd | -| main.rs:1310:13:1315:13 | match self { ... } | | file://:0:0:0:0 | ! | -| main.rs:1310:13:1315:13 | match self { ... } | | main.rs:1308:15:1308:17 | Snd | -| main.rs:1310:19:1310:22 | self | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1310:19:1310:22 | self | Fst | main.rs:1308:10:1308:12 | Fst | -| main.rs:1310:19:1310:22 | self | Snd | main.rs:1308:15:1308:17 | Snd | -| main.rs:1311:17:1311:38 | ...::PairNone(...) | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1311:17:1311:38 | ...::PairNone(...) | Fst | main.rs:1308:10:1308:12 | Fst | -| main.rs:1311:17:1311:38 | ...::PairNone(...) | Snd | main.rs:1308:15:1308:17 | Snd | -| main.rs:1311:43:1311:82 | MacroExpr | | file://:0:0:0:0 | ! | -| main.rs:1311:50:1311:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | & | -| main.rs:1311:50:1311:81 | "PairNone has no second elemen... | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1311:50:1311:81 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | -| main.rs:1311:50:1311:81 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1311:50:1311:81 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1312:17:1312:38 | ...::PairFst(...) | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1312:17:1312:38 | ...::PairFst(...) | Fst | main.rs:1308:10:1308:12 | Fst | -| main.rs:1312:17:1312:38 | ...::PairFst(...) | Snd | main.rs:1308:15:1308:17 | Snd | -| main.rs:1312:37:1312:37 | _ | | main.rs:1308:10:1308:12 | Fst | -| main.rs:1312:43:1312:81 | MacroExpr | | file://:0:0:0:0 | ! | -| main.rs:1312:50:1312:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | & | -| main.rs:1312:50:1312:80 | "PairFst has no second element... | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1312:50:1312:80 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | -| main.rs:1312:50:1312:80 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1312:50:1312:80 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1313:17:1313:40 | ...::PairSnd(...) | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1313:17:1313:40 | ...::PairSnd(...) | Fst | main.rs:1308:10:1308:12 | Fst | -| main.rs:1313:17:1313:40 | ...::PairSnd(...) | Snd | main.rs:1308:15:1308:17 | Snd | -| main.rs:1313:37:1313:39 | snd | | main.rs:1308:15:1308:17 | Snd | -| main.rs:1313:45:1313:47 | snd | | main.rs:1308:15:1308:17 | Snd | -| main.rs:1314:17:1314:44 | ...::PairBoth(...) | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1314:17:1314:44 | ...::PairBoth(...) | Fst | main.rs:1308:10:1308:12 | Fst | -| main.rs:1314:17:1314:44 | ...::PairBoth(...) | Snd | main.rs:1308:15:1308:17 | Snd | -| main.rs:1314:38:1314:38 | _ | | main.rs:1308:10:1308:12 | Fst | -| main.rs:1314:41:1314:43 | snd | | main.rs:1308:15:1308:17 | Snd | -| main.rs:1314:49:1314:51 | snd | | main.rs:1308:15:1308:17 | Snd | -| main.rs:1340:10:1340:10 | t | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1340:10:1340:10 | t | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1340:10:1340:10 | t | Snd | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1340:10:1340:10 | t | Snd.Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1340:10:1340:10 | t | Snd.Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1340:30:1343:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1341:13:1341:13 | x | | main.rs:1325:5:1326:14 | S3 | -| main.rs:1341:17:1341:17 | t | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1341:17:1341:17 | t | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1341:17:1341:17 | t | Snd | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1341:17:1341:17 | t | Snd.Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1341:17:1341:17 | t | Snd.Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1341:17:1341:29 | t.unwrapSnd() | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1341:17:1341:29 | t.unwrapSnd() | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1341:17:1341:29 | t.unwrapSnd() | Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1341:17:1341:41 | ... .unwrapSnd() | | main.rs:1325:5:1326:14 | S3 | -| main.rs:1342:9:1342:27 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1342:18:1342:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1342:18:1342:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1342:18:1342:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1342:18:1342:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1342:18:1342:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1342:26:1342:26 | x | | main.rs:1325:5:1326:14 | S3 | -| main.rs:1357:22:1357:25 | SelfParam | | main.rs:1355:5:1358:5 | Self [trait TraitWithAssocType] | -| main.rs:1365:22:1365:25 | SelfParam | | main.rs:1353:5:1353:28 | GenS | -| main.rs:1365:22:1365:25 | SelfParam | GenT | main.rs:1360:10:1360:15 | Output | -| main.rs:1365:44:1367:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1365:44:1367:9 | { ... } | E | main.rs:1360:10:1360:15 | Output | -| main.rs:1365:44:1367:9 | { ... } | T | main.rs:1360:10:1360:15 | Output | -| main.rs:1366:13:1366:22 | Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1366:13:1366:22 | Ok(...) | E | main.rs:1360:10:1360:15 | Output | -| main.rs:1366:13:1366:22 | Ok(...) | T | main.rs:1360:10:1360:15 | Output | -| main.rs:1366:16:1366:19 | self | | main.rs:1353:5:1353:28 | GenS | -| main.rs:1366:16:1366:19 | self | GenT | main.rs:1360:10:1360:15 | Output | -| main.rs:1366:16:1366:21 | self.0 | | main.rs:1360:10:1360:15 | Output | -| main.rs:1370:16:1392:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1372:13:1372:14 | p1 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1372:13:1372:14 | p1 | Fst | main.rs:1319:5:1320:14 | S1 | -| main.rs:1372:13:1372:14 | p1 | Snd | main.rs:1322:5:1323:14 | S2 | -| main.rs:1372:26:1372:53 | ...::PairBoth(...) | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1372:26:1372:53 | ...::PairBoth(...) | Fst | main.rs:1319:5:1320:14 | S1 | -| main.rs:1372:26:1372:53 | ...::PairBoth(...) | Snd | main.rs:1322:5:1323:14 | S2 | -| main.rs:1372:47:1372:48 | S1 | | main.rs:1319:5:1320:14 | S1 | -| main.rs:1372:51:1372:52 | S2 | | main.rs:1322:5:1323:14 | S2 | -| main.rs:1373:9:1373:28 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1373:18:1373:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1373:18:1373:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1373:18:1373:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1373:18:1373:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1373:18:1373:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1373:26:1373:27 | p1 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1373:26:1373:27 | p1 | Fst | main.rs:1319:5:1320:14 | S1 | -| main.rs:1373:26:1373:27 | p1 | Snd | main.rs:1322:5:1323:14 | S2 | -| main.rs:1376:13:1376:14 | p2 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1376:13:1376:14 | p2 | Fst | main.rs:1319:5:1320:14 | S1 | -| main.rs:1376:13:1376:14 | p2 | Snd | main.rs:1322:5:1323:14 | S2 | -| main.rs:1376:26:1376:47 | ...::PairNone(...) | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1376:26:1376:47 | ...::PairNone(...) | Fst | main.rs:1319:5:1320:14 | S1 | -| main.rs:1376:26:1376:47 | ...::PairNone(...) | Snd | main.rs:1322:5:1323:14 | S2 | -| main.rs:1377:9:1377:28 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1377:18:1377:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1377:18:1377:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1377:18:1377:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1377:18:1377:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1377:18:1377:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1377:26:1377:27 | p2 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1377:26:1377:27 | p2 | Fst | main.rs:1319:5:1320:14 | S1 | -| main.rs:1377:26:1377:27 | p2 | Snd | main.rs:1322:5:1323:14 | S2 | -| main.rs:1380:13:1380:14 | p3 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1380:13:1380:14 | p3 | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1380:13:1380:14 | p3 | Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1380:34:1380:56 | ...::PairSnd(...) | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1380:34:1380:56 | ...::PairSnd(...) | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1380:34:1380:56 | ...::PairSnd(...) | Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1380:54:1380:55 | S3 | | main.rs:1325:5:1326:14 | S3 | -| main.rs:1381:9:1381:28 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1381:18:1381:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1381:18:1381:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1381:18:1381:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1381:18:1381:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1381:18:1381:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1381:26:1381:27 | p3 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1381:26:1381:27 | p3 | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1381:26:1381:27 | p3 | Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1384:13:1384:14 | p3 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1384:13:1384:14 | p3 | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1384:13:1384:14 | p3 | Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1384:35:1384:56 | ...::PairNone(...) | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1384:35:1384:56 | ...::PairNone(...) | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1384:35:1384:56 | ...::PairNone(...) | Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1385:9:1385:28 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1385:18:1385:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1385:18:1385:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1385:18:1385:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1385:18:1385:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1385:18:1385:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1385:26:1385:27 | p3 | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1385:26:1385:27 | p3 | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1385:26:1385:27 | p3 | Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1387:9:1387:55 | g(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1387:11:1387:54 | ...::PairSnd(...) | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1387:11:1387:54 | ...::PairSnd(...) | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1387:11:1387:54 | ...::PairSnd(...) | Snd | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1387:11:1387:54 | ...::PairSnd(...) | Snd.Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1387:11:1387:54 | ...::PairSnd(...) | Snd.Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1387:31:1387:53 | ...::PairSnd(...) | | main.rs:1300:5:1306:5 | PairOption | -| main.rs:1387:31:1387:53 | ...::PairSnd(...) | Fst | main.rs:1322:5:1323:14 | S2 | -| main.rs:1387:31:1387:53 | ...::PairSnd(...) | Snd | main.rs:1325:5:1326:14 | S3 | -| main.rs:1387:51:1387:52 | S3 | | main.rs:1325:5:1326:14 | S3 | -| main.rs:1389:13:1389:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1389:13:1389:13 | x | E | main.rs:1319:5:1320:14 | S1 | -| main.rs:1389:13:1389:13 | x | T | main.rs:1345:5:1345:34 | S4 | -| main.rs:1389:13:1389:13 | x | T.T41 | main.rs:1322:5:1323:14 | S2 | -| main.rs:1389:13:1389:13 | x | T.T42 | main.rs:1347:5:1347:22 | S5 | -| main.rs:1389:13:1389:13 | x | T.T42.T5 | main.rs:1322:5:1323:14 | S2 | -| main.rs:1391:13:1391:13 | y | | {EXTERNAL LOCATION} | Result | -| main.rs:1391:13:1391:13 | y | E | {EXTERNAL LOCATION} | bool | -| main.rs:1391:13:1391:13 | y | T | {EXTERNAL LOCATION} | bool | -| main.rs:1391:17:1391:26 | GenS(...) | | main.rs:1353:5:1353:28 | GenS | -| main.rs:1391:17:1391:26 | GenS(...) | GenT | {EXTERNAL LOCATION} | bool | -| main.rs:1391:17:1391:38 | ... .get_input() | | {EXTERNAL LOCATION} | Result | -| main.rs:1391:17:1391:38 | ... .get_input() | E | {EXTERNAL LOCATION} | bool | -| main.rs:1391:17:1391:38 | ... .get_input() | T | {EXTERNAL LOCATION} | bool | -| main.rs:1391:22:1391:25 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1404:16:1404:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1404:16:1404:24 | SelfParam | TRefMut | main.rs:1402:5:1409:5 | Self [trait MyTrait] | -| main.rs:1404:27:1404:31 | value | | main.rs:1402:19:1402:19 | S | -| main.rs:1406:21:1406:29 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1406:21:1406:29 | SelfParam | TRefMut | main.rs:1402:5:1409:5 | Self [trait MyTrait] | -| main.rs:1406:32:1406:36 | value | | main.rs:1402:19:1402:19 | S | -| main.rs:1406:42:1408:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1407:13:1407:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1407:13:1407:16 | self | TRefMut | main.rs:1402:5:1409:5 | Self [trait MyTrait] | -| main.rs:1407:13:1407:27 | self.set(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1407:22:1407:26 | value | | main.rs:1402:19:1402:19 | S | -| main.rs:1413:16:1413:24 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1413:16:1413:24 | SelfParam | TRefMut | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1413:16:1413:24 | SelfParam | TRefMut.T | main.rs:1411:10:1411:10 | T | -| main.rs:1413:27:1413:31 | value | | main.rs:1411:10:1411:10 | T | -| main.rs:1413:37:1413:38 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1417:26:1419:9 | { ... } | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1417:26:1419:9 | { ... } | T | main.rs:1416:10:1416:10 | T | -| main.rs:1418:13:1418:30 | ...::MyNone(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1418:13:1418:30 | ...::MyNone(...) | T | main.rs:1416:10:1416:10 | T | -| main.rs:1423:20:1423:23 | SelfParam | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1423:20:1423:23 | SelfParam | T | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1423:20:1423:23 | SelfParam | T.T | main.rs:1422:10:1422:10 | T | -| main.rs:1423:41:1428:9 | { ... } | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1423:41:1428:9 | { ... } | T | main.rs:1422:10:1422:10 | T | -| main.rs:1424:13:1427:13 | match self { ... } | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1424:13:1427:13 | match self { ... } | T | main.rs:1422:10:1422:10 | T | -| main.rs:1424:19:1424:22 | self | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1424:19:1424:22 | self | T | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1424:19:1424:22 | self | T.T | main.rs:1422:10:1422:10 | T | -| main.rs:1425:17:1425:34 | ...::MyNone(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1425:17:1425:34 | ...::MyNone(...) | T | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1425:17:1425:34 | ...::MyNone(...) | T.T | main.rs:1422:10:1422:10 | T | -| main.rs:1425:39:1425:56 | ...::MyNone(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1425:39:1425:56 | ...::MyNone(...) | T | main.rs:1422:10:1422:10 | T | -| main.rs:1426:17:1426:35 | ...::MySome(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1426:17:1426:35 | ...::MySome(...) | T | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1426:17:1426:35 | ...::MySome(...) | T.T | main.rs:1422:10:1422:10 | T | -| main.rs:1426:34:1426:34 | x | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1426:34:1426:34 | x | T | main.rs:1422:10:1422:10 | T | -| main.rs:1426:40:1426:40 | x | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1426:40:1426:40 | x | T | main.rs:1422:10:1422:10 | T | -| main.rs:1434:16:1479:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1435:13:1435:14 | x1 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1435:13:1435:14 | x1 | T | main.rs:1431:5:1432:13 | S | -| main.rs:1435:18:1435:37 | ...::new(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1435:18:1435:37 | ...::new(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1436:9:1436:28 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1436:18:1436:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1436:18:1436:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1436:18:1436:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1436:18:1436:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1436:18:1436:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1436:26:1436:27 | x1 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1436:26:1436:27 | x1 | T | main.rs:1431:5:1432:13 | S | -| main.rs:1438:17:1438:18 | x2 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1438:17:1438:18 | x2 | T | main.rs:1431:5:1432:13 | S | -| main.rs:1438:22:1438:36 | ...::new(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1438:22:1438:36 | ...::new(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1439:9:1439:10 | x2 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1439:9:1439:10 | x2 | T | main.rs:1431:5:1432:13 | S | -| main.rs:1439:9:1439:17 | x2.set(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1439:16:1439:16 | S | | main.rs:1431:5:1432:13 | S | -| main.rs:1440:9:1440:28 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1440:18:1440:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1440:18:1440:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1440:18:1440:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1440:18:1440:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1440:18:1440:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1440:26:1440:27 | x2 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1440:26:1440:27 | x2 | T | main.rs:1431:5:1432:13 | S | -| main.rs:1442:17:1442:18 | x3 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1442:17:1442:18 | x3 | T | main.rs:1431:5:1432:13 | S | -| main.rs:1442:22:1442:36 | ...::new(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1442:22:1442:36 | ...::new(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1443:9:1443:10 | x3 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1443:9:1443:10 | x3 | T | main.rs:1431:5:1432:13 | S | -| main.rs:1443:9:1443:22 | x3.call_set(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1443:21:1443:21 | S | | main.rs:1431:5:1432:13 | S | -| main.rs:1444:9:1444:28 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1444:18:1444:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1444:18:1444:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1444:18:1444:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1444:18:1444:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1444:18:1444:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1444:26:1444:27 | x3 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1444:26:1444:27 | x3 | T | main.rs:1431:5:1432:13 | S | -| main.rs:1446:17:1446:18 | x4 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1446:17:1446:18 | x4 | T | main.rs:1431:5:1432:13 | S | -| main.rs:1446:22:1446:36 | ...::new(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1446:22:1446:36 | ...::new(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1447:9:1447:33 | ...::set(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1447:23:1447:29 | &mut x4 | | {EXTERNAL LOCATION} | &mut | -| main.rs:1447:23:1447:29 | &mut x4 | TRefMut | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1447:23:1447:29 | &mut x4 | TRefMut.T | main.rs:1431:5:1432:13 | S | -| main.rs:1447:28:1447:29 | x4 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1447:28:1447:29 | x4 | T | main.rs:1431:5:1432:13 | S | -| main.rs:1447:32:1447:32 | S | | main.rs:1431:5:1432:13 | S | -| main.rs:1448:9:1448:28 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1448:18:1448:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1448:18:1448:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1448:18:1448:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1448:18:1448:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1448:18:1448:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1448:26:1448:27 | x4 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1448:26:1448:27 | x4 | T | main.rs:1431:5:1432:13 | S | -| main.rs:1450:13:1450:14 | x5 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1450:13:1450:14 | x5 | T | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1450:13:1450:14 | x5 | T.T | main.rs:1431:5:1432:13 | S | -| main.rs:1450:18:1450:58 | ...::MySome(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1450:18:1450:58 | ...::MySome(...) | T | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1450:18:1450:58 | ...::MySome(...) | T.T | main.rs:1431:5:1432:13 | S | -| main.rs:1450:35:1450:57 | ...::MyNone(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1450:35:1450:57 | ...::MyNone(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1451:9:1451:38 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1451:18:1451:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1451:18:1451:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1451:18:1451:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1451:18:1451:37 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1451:18:1451:37 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1451:26:1451:27 | x5 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1451:26:1451:27 | x5 | T | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1451:26:1451:27 | x5 | T.T | main.rs:1431:5:1432:13 | S | -| main.rs:1451:26:1451:37 | x5.flatten() | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1451:26:1451:37 | x5.flatten() | T | main.rs:1431:5:1432:13 | S | -| main.rs:1453:13:1453:14 | x6 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1453:13:1453:14 | x6 | T | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1453:13:1453:14 | x6 | T.T | main.rs:1431:5:1432:13 | S | -| main.rs:1453:18:1453:58 | ...::MySome(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1453:18:1453:58 | ...::MySome(...) | T | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1453:18:1453:58 | ...::MySome(...) | T.T | main.rs:1431:5:1432:13 | S | -| main.rs:1453:35:1453:57 | ...::MyNone(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1453:35:1453:57 | ...::MyNone(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1454:9:1454:62 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1454:18:1454:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1454:18:1454:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1454:18:1454:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1454:18:1454:61 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1454:18:1454:61 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1454:26:1454:61 | ...::flatten(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1454:26:1454:61 | ...::flatten(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1454:59:1454:60 | x6 | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1454:59:1454:60 | x6 | T | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1454:59:1454:60 | x6 | T.T | main.rs:1431:5:1432:13 | S | -| main.rs:1457:13:1457:19 | from_if | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1457:13:1457:19 | from_if | T | main.rs:1431:5:1432:13 | S | -| main.rs:1457:23:1461:9 | if ... {...} else {...} | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1457:23:1461:9 | if ... {...} else {...} | T | main.rs:1431:5:1432:13 | S | -| main.rs:1457:26:1457:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1457:26:1457:30 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1457:30:1457:30 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1457:32:1459:9 | { ... } | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1457:32:1459:9 | { ... } | T | main.rs:1431:5:1432:13 | S | -| main.rs:1458:13:1458:30 | ...::MyNone(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1458:13:1458:30 | ...::MyNone(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1459:16:1461:9 | { ... } | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1459:16:1461:9 | { ... } | T | main.rs:1431:5:1432:13 | S | -| main.rs:1460:13:1460:31 | ...::MySome(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1460:13:1460:31 | ...::MySome(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1460:30:1460:30 | S | | main.rs:1431:5:1432:13 | S | -| main.rs:1462:9:1462:33 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1462:18:1462:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1462:18:1462:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1462:18:1462:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1462:18:1462:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1462:18:1462:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1462:26:1462:32 | from_if | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1462:26:1462:32 | from_if | T | main.rs:1431:5:1432:13 | S | -| main.rs:1465:13:1465:22 | from_match | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1465:13:1465:22 | from_match | T | main.rs:1431:5:1432:13 | S | -| main.rs:1465:26:1468:9 | match ... { ... } | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1465:26:1468:9 | match ... { ... } | T | main.rs:1431:5:1432:13 | S | -| main.rs:1465:32:1465:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1465:32:1465:36 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1465:36:1465:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1466:13:1466:16 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1466:21:1466:38 | ...::MyNone(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1466:21:1466:38 | ...::MyNone(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1467:13:1467:17 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1467:22:1467:40 | ...::MySome(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1467:22:1467:40 | ...::MySome(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1467:39:1467:39 | S | | main.rs:1431:5:1432:13 | S | -| main.rs:1469:9:1469:36 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1469:18:1469:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1469:18:1469:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1469:18:1469:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1469:18:1469:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1469:18:1469:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1469:26:1469:35 | from_match | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1469:26:1469:35 | from_match | T | main.rs:1431:5:1432:13 | S | -| main.rs:1472:13:1472:21 | from_loop | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1472:13:1472:21 | from_loop | T | main.rs:1431:5:1432:13 | S | -| main.rs:1472:25:1477:9 | loop { ... } | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1472:25:1477:9 | loop { ... } | T | main.rs:1431:5:1432:13 | S | -| main.rs:1472:30:1477:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1473:13:1475:13 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1473:16:1473:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1473:16:1473:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1473:20:1473:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1473:22:1475:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1474:23:1474:40 | ...::MyNone(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1474:23:1474:40 | ...::MyNone(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1476:19:1476:37 | ...::MySome(...) | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1476:19:1476:37 | ...::MySome(...) | T | main.rs:1431:5:1432:13 | S | -| main.rs:1476:36:1476:36 | S | | main.rs:1431:5:1432:13 | S | -| main.rs:1478:9:1478:35 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1478:18:1478:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1478:18:1478:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1478:18:1478:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1478:18:1478:34 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1478:18:1478:34 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1478:26:1478:34 | from_loop | | main.rs:1396:5:1400:5 | MyOption | -| main.rs:1478:26:1478:34 | from_loop | T | main.rs:1431:5:1432:13 | S | -| main.rs:1496:15:1496:18 | SelfParam | | main.rs:1484:5:1485:19 | S | -| main.rs:1496:15:1496:18 | SelfParam | T | main.rs:1495:10:1495:10 | T | -| main.rs:1496:26:1498:9 | { ... } | | main.rs:1495:10:1495:10 | T | -| main.rs:1497:13:1497:16 | self | | main.rs:1484:5:1485:19 | S | -| main.rs:1497:13:1497:16 | self | T | main.rs:1495:10:1495:10 | T | -| main.rs:1497:13:1497:18 | self.0 | | main.rs:1495:10:1495:10 | T | -| main.rs:1500:15:1500:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1500:15:1500:19 | SelfParam | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1500:15:1500:19 | SelfParam | TRef.T | main.rs:1495:10:1495:10 | T | -| main.rs:1500:28:1502:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1500:28:1502:9 | { ... } | TRef | main.rs:1495:10:1495:10 | T | -| main.rs:1501:13:1501:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1501:13:1501:19 | &... | TRef | main.rs:1495:10:1495:10 | T | -| main.rs:1501:14:1501:17 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1501:14:1501:17 | self | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1501:14:1501:17 | self | TRef.T | main.rs:1495:10:1495:10 | T | -| main.rs:1501:14:1501:19 | self.0 | | main.rs:1495:10:1495:10 | T | -| main.rs:1504:15:1504:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1504:15:1504:25 | SelfParam | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1504:15:1504:25 | SelfParam | TRef.T | main.rs:1495:10:1495:10 | T | -| main.rs:1504:34:1506:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1504:34:1506:9 | { ... } | TRef | main.rs:1495:10:1495:10 | T | -| main.rs:1505:13:1505:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1505:13:1505:19 | &... | TRef | main.rs:1495:10:1495:10 | T | -| main.rs:1505:14:1505:17 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1505:14:1505:17 | self | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1505:14:1505:17 | self | TRef.T | main.rs:1495:10:1495:10 | T | -| main.rs:1505:14:1505:19 | self.0 | | main.rs:1495:10:1495:10 | T | -| main.rs:1510:29:1510:33 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1510:29:1510:33 | SelfParam | TRef | main.rs:1509:5:1512:5 | Self [trait ATrait] | -| main.rs:1511:33:1511:36 | SelfParam | | main.rs:1509:5:1512:5 | Self [trait ATrait] | -| main.rs:1517:29:1517:33 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1517:29:1517:33 | SelfParam | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1517:29:1517:33 | SelfParam | TRef.TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1517:43:1519:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1518:13:1518:22 | (...) | | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1518:13:1518:24 | ... .a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1518:14:1518:21 | * ... | | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1518:15:1518:21 | (...) | | {EXTERNAL LOCATION} | & | -| main.rs:1518:15:1518:21 | (...) | TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1518:16:1518:20 | * ... | | {EXTERNAL LOCATION} | & | -| main.rs:1518:16:1518:20 | * ... | TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1518:17:1518:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1518:17:1518:20 | self | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1518:17:1518:20 | self | TRef.TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1522:33:1522:36 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1522:33:1522:36 | SelfParam | TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1522:46:1524:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1523:13:1523:19 | (...) | | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1523:13:1523:21 | ... .a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1523:14:1523:18 | * ... | | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1523:15:1523:18 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1523:15:1523:18 | self | TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1527:16:1577:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1528:13:1528:14 | x1 | | main.rs:1484:5:1485:19 | S | -| main.rs:1528:13:1528:14 | x1 | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1528:18:1528:22 | S(...) | | main.rs:1484:5:1485:19 | S | -| main.rs:1528:18:1528:22 | S(...) | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1528:20:1528:21 | S2 | | main.rs:1487:5:1488:14 | S2 | -| main.rs:1529:9:1529:33 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1529:18:1529:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1529:18:1529:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1529:18:1529:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1529:18:1529:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1529:18:1529:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1529:26:1529:27 | x1 | | main.rs:1484:5:1485:19 | S | -| main.rs:1529:26:1529:27 | x1 | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1529:26:1529:32 | x1.m1() | | main.rs:1487:5:1488:14 | S2 | -| main.rs:1531:13:1531:14 | x2 | | main.rs:1484:5:1485:19 | S | -| main.rs:1531:13:1531:14 | x2 | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1531:18:1531:22 | S(...) | | main.rs:1484:5:1485:19 | S | -| main.rs:1531:18:1531:22 | S(...) | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1531:20:1531:21 | S2 | | main.rs:1487:5:1488:14 | S2 | -| main.rs:1533:9:1533:33 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1533:18:1533:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1533:18:1533:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1533:18:1533:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1533:18:1533:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1533:18:1533:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1533:26:1533:27 | x2 | | main.rs:1484:5:1485:19 | S | -| main.rs:1533:26:1533:27 | x2 | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1533:26:1533:32 | x2.m2() | | {EXTERNAL LOCATION} | & | -| main.rs:1533:26:1533:32 | x2.m2() | TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1534:9:1534:33 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1534:18:1534:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1534:18:1534:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1534:18:1534:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1534:18:1534:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1534:18:1534:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1534:26:1534:27 | x2 | | main.rs:1484:5:1485:19 | S | -| main.rs:1534:26:1534:27 | x2 | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1534:26:1534:32 | x2.m3() | | {EXTERNAL LOCATION} | & | -| main.rs:1534:26:1534:32 | x2.m3() | TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1536:13:1536:14 | x3 | | main.rs:1484:5:1485:19 | S | -| main.rs:1536:13:1536:14 | x3 | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1536:18:1536:22 | S(...) | | main.rs:1484:5:1485:19 | S | -| main.rs:1536:18:1536:22 | S(...) | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1536:20:1536:21 | S2 | | main.rs:1487:5:1488:14 | S2 | -| main.rs:1538:9:1538:42 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1538:18:1538:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1538:18:1538:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1538:18:1538:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1538:18:1538:41 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1538:18:1538:41 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1538:26:1538:41 | ...::m2(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1538:26:1538:41 | ...::m2(...) | TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1538:38:1538:40 | &x3 | | {EXTERNAL LOCATION} | & | -| main.rs:1538:38:1538:40 | &x3 | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1538:38:1538:40 | &x3 | TRef.T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1538:39:1538:40 | x3 | | main.rs:1484:5:1485:19 | S | -| main.rs:1538:39:1538:40 | x3 | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1539:9:1539:42 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1539:18:1539:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1539:18:1539:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1539:18:1539:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1539:18:1539:41 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1539:18:1539:41 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1539:26:1539:41 | ...::m3(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1539:26:1539:41 | ...::m3(...) | TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1539:38:1539:40 | &x3 | | {EXTERNAL LOCATION} | & | -| main.rs:1539:38:1539:40 | &x3 | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1539:38:1539:40 | &x3 | TRef.T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1539:39:1539:40 | x3 | | main.rs:1484:5:1485:19 | S | -| main.rs:1539:39:1539:40 | x3 | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1541:13:1541:14 | x4 | | {EXTERNAL LOCATION} | & | -| main.rs:1541:13:1541:14 | x4 | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1541:13:1541:14 | x4 | TRef.T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1541:18:1541:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1541:18:1541:23 | &... | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1541:18:1541:23 | &... | TRef.T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1541:19:1541:23 | S(...) | | main.rs:1484:5:1485:19 | S | -| main.rs:1541:19:1541:23 | S(...) | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1541:21:1541:22 | S2 | | main.rs:1487:5:1488:14 | S2 | -| main.rs:1543:9:1543:33 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1543:18:1543:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1543:18:1543:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1543:18:1543:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1543:18:1543:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1543:18:1543:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1543:26:1543:27 | x4 | | {EXTERNAL LOCATION} | & | -| main.rs:1543:26:1543:27 | x4 | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1543:26:1543:27 | x4 | TRef.T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1543:26:1543:32 | x4.m2() | | {EXTERNAL LOCATION} | & | -| main.rs:1543:26:1543:32 | x4.m2() | TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1544:9:1544:33 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1544:18:1544:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1544:18:1544:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1544:18:1544:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1544:18:1544:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1544:18:1544:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1544:26:1544:27 | x4 | | {EXTERNAL LOCATION} | & | -| main.rs:1544:26:1544:27 | x4 | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1544:26:1544:27 | x4 | TRef.T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1544:26:1544:32 | x4.m3() | | {EXTERNAL LOCATION} | & | -| main.rs:1544:26:1544:32 | x4.m3() | TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1546:13:1546:14 | x5 | | {EXTERNAL LOCATION} | & | -| main.rs:1546:13:1546:14 | x5 | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1546:13:1546:14 | x5 | TRef.T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1546:18:1546:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1546:18:1546:23 | &... | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1546:18:1546:23 | &... | TRef.T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1546:19:1546:23 | S(...) | | main.rs:1484:5:1485:19 | S | -| main.rs:1546:19:1546:23 | S(...) | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1546:21:1546:22 | S2 | | main.rs:1487:5:1488:14 | S2 | -| main.rs:1548:9:1548:33 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1548:18:1548:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1548:18:1548:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1548:18:1548:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1548:18:1548:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1548:18:1548:32 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1548:26:1548:27 | x5 | | {EXTERNAL LOCATION} | & | -| main.rs:1548:26:1548:27 | x5 | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1548:26:1548:27 | x5 | TRef.T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1548:26:1548:32 | x5.m1() | | main.rs:1487:5:1488:14 | S2 | -| main.rs:1549:9:1549:30 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1549:18:1549:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1549:18:1549:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1549:18:1549:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1549:18:1549:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1549:18:1549:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1549:26:1549:27 | x5 | | {EXTERNAL LOCATION} | & | -| main.rs:1549:26:1549:27 | x5 | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1549:26:1549:27 | x5 | TRef.T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1549:26:1549:29 | x5.0 | | main.rs:1487:5:1488:14 | S2 | -| main.rs:1551:13:1551:14 | x6 | | {EXTERNAL LOCATION} | & | -| main.rs:1551:13:1551:14 | x6 | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1551:13:1551:14 | x6 | TRef.T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1551:18:1551:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1551:18:1551:23 | &... | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1551:18:1551:23 | &... | TRef.T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1551:19:1551:23 | S(...) | | main.rs:1484:5:1485:19 | S | -| main.rs:1551:19:1551:23 | S(...) | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1551:21:1551:22 | S2 | | main.rs:1487:5:1488:14 | S2 | -| main.rs:1554:9:1554:36 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1554:18:1554:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1554:18:1554:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1554:18:1554:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1554:18:1554:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1554:18:1554:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1554:26:1554:30 | (...) | | main.rs:1484:5:1485:19 | S | -| main.rs:1554:26:1554:30 | (...) | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1554:26:1554:35 | ... .m1() | | main.rs:1487:5:1488:14 | S2 | -| main.rs:1554:27:1554:29 | * ... | | main.rs:1484:5:1485:19 | S | -| main.rs:1554:27:1554:29 | * ... | T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1554:28:1554:29 | x6 | | {EXTERNAL LOCATION} | & | -| main.rs:1554:28:1554:29 | x6 | TRef | main.rs:1484:5:1485:19 | S | -| main.rs:1554:28:1554:29 | x6 | TRef.T | main.rs:1487:5:1488:14 | S2 | -| main.rs:1556:13:1556:14 | x7 | | main.rs:1484:5:1485:19 | S | -| main.rs:1556:13:1556:14 | x7 | T | {EXTERNAL LOCATION} | & | -| main.rs:1556:13:1556:14 | x7 | T.TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1556:18:1556:23 | S(...) | | main.rs:1484:5:1485:19 | S | -| main.rs:1556:18:1556:23 | S(...) | T | {EXTERNAL LOCATION} | & | -| main.rs:1556:18:1556:23 | S(...) | T.TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1556:20:1556:22 | &S2 | | {EXTERNAL LOCATION} | & | -| main.rs:1556:20:1556:22 | &S2 | TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1556:21:1556:22 | S2 | | main.rs:1487:5:1488:14 | S2 | -| main.rs:1559:13:1559:13 | t | | {EXTERNAL LOCATION} | & | -| main.rs:1559:13:1559:13 | t | TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1559:17:1559:18 | x7 | | main.rs:1484:5:1485:19 | S | -| main.rs:1559:17:1559:18 | x7 | T | {EXTERNAL LOCATION} | & | -| main.rs:1559:17:1559:18 | x7 | T.TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1559:17:1559:23 | x7.m1() | | {EXTERNAL LOCATION} | & | -| main.rs:1559:17:1559:23 | x7.m1() | TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1560:9:1560:28 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1560:18:1560:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1560:18:1560:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1560:18:1560:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1560:18:1560:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1560:18:1560:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1560:26:1560:27 | x7 | | main.rs:1484:5:1485:19 | S | -| main.rs:1560:26:1560:27 | x7 | T | {EXTERNAL LOCATION} | & | -| main.rs:1560:26:1560:27 | x7 | T.TRef | main.rs:1487:5:1488:14 | S2 | -| main.rs:1562:13:1562:14 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1562:26:1562:32 | "Hello" | | {EXTERNAL LOCATION} | & | -| main.rs:1562:26:1562:32 | "Hello" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1562:26:1562:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | -| main.rs:1566:13:1566:13 | u | | {EXTERNAL LOCATION} | Result | -| main.rs:1566:13:1566:13 | u | T | {EXTERNAL LOCATION} | u32 | -| main.rs:1566:17:1566:18 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1566:17:1566:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | -| main.rs:1566:17:1566:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | -| main.rs:1568:13:1568:20 | my_thing | | {EXTERNAL LOCATION} | & | -| main.rs:1568:13:1568:20 | my_thing | TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1568:24:1568:39 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1568:24:1568:39 | &... | TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1568:25:1568:39 | MyInt {...} | | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1568:36:1568:37 | 37 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1570:13:1570:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1570:17:1570:24 | my_thing | | {EXTERNAL LOCATION} | & | -| main.rs:1570:17:1570:24 | my_thing | TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1570:17:1570:43 | my_thing.method_on_borrow() | | {EXTERNAL LOCATION} | i64 | -| main.rs:1571:9:1571:27 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1571:18:1571:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1571:18:1571:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1571:18:1571:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1571:18:1571:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1571:18:1571:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1571:26:1571:26 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1574:13:1574:20 | my_thing | | {EXTERNAL LOCATION} | & | -| main.rs:1574:13:1574:20 | my_thing | TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1574:24:1574:39 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1574:24:1574:39 | &... | TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1574:25:1574:39 | MyInt {...} | | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1574:36:1574:37 | 38 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1575:13:1575:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1575:17:1575:24 | my_thing | | {EXTERNAL LOCATION} | & | -| main.rs:1575:17:1575:24 | my_thing | TRef | main.rs:1490:5:1493:5 | MyInt | -| main.rs:1575:17:1575:47 | my_thing.method_not_on_borrow() | | {EXTERNAL LOCATION} | i64 | -| main.rs:1576:9:1576:27 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1576:18:1576:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1576:18:1576:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1576:18:1576:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1576:18:1576:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1576:18:1576:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1576:26:1576:26 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1583:16:1583:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1583:16:1583:20 | SelfParam | TRef | main.rs:1581:5:1589:5 | Self [trait MyTrait] | -| main.rs:1586:16:1586:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1586:16:1586:20 | SelfParam | TRef | main.rs:1581:5:1589:5 | Self [trait MyTrait] | -| main.rs:1586:32:1588:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1586:32:1588:9 | { ... } | TRef | main.rs:1581:5:1589:5 | Self [trait MyTrait] | -| main.rs:1587:13:1587:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1587:13:1587:16 | self | TRef | main.rs:1581:5:1589:5 | Self [trait MyTrait] | -| main.rs:1587:13:1587:22 | self.foo() | | {EXTERNAL LOCATION} | & | -| main.rs:1587:13:1587:22 | self.foo() | TRef | main.rs:1581:5:1589:5 | Self [trait MyTrait] | -| main.rs:1595:16:1595:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1595:16:1595:20 | SelfParam | TRef | main.rs:1591:5:1591:20 | MyStruct | -| main.rs:1595:36:1597:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1595:36:1597:9 | { ... } | TRef | main.rs:1591:5:1591:20 | MyStruct | -| main.rs:1596:13:1596:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1596:13:1596:16 | self | TRef | main.rs:1591:5:1591:20 | MyStruct | -| main.rs:1600:16:1603:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1601:13:1601:13 | x | | main.rs:1591:5:1591:20 | MyStruct | -| main.rs:1601:17:1601:24 | MyStruct | | main.rs:1591:5:1591:20 | MyStruct | -| main.rs:1602:9:1602:9 | x | | main.rs:1591:5:1591:20 | MyStruct | -| main.rs:1602:9:1602:15 | x.bar() | | {EXTERNAL LOCATION} | & | -| main.rs:1602:9:1602:15 | x.bar() | TRef | main.rs:1591:5:1591:20 | MyStruct | -| main.rs:1612:16:1612:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1612:16:1612:20 | SelfParam | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1612:16:1612:20 | SelfParam | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1612:32:1614:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1612:32:1614:9 | { ... } | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1612:32:1614:9 | { ... } | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1613:13:1613:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1613:13:1613:16 | self | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1613:13:1613:16 | self | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1616:16:1616:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1616:16:1616:20 | SelfParam | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1616:16:1616:20 | SelfParam | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1616:23:1616:23 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1616:23:1616:23 | x | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1616:23:1616:23 | x | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1616:42:1618:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1616:42:1618:9 | { ... } | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1616:42:1618:9 | { ... } | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1617:13:1617:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1617:13:1617:16 | self | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1617:13:1617:16 | self | TRef.T | main.rs:1611:10:1611:10 | T | -| main.rs:1621:16:1627:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1622:13:1622:13 | x | | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1622:13:1622:13 | x | T | main.rs:1607:5:1607:13 | S | -| main.rs:1622:17:1622:27 | MyStruct(...) | | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1622:17:1622:27 | MyStruct(...) | T | main.rs:1607:5:1607:13 | S | -| main.rs:1622:26:1622:26 | S | | main.rs:1607:5:1607:13 | S | -| main.rs:1623:9:1623:9 | x | | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1623:9:1623:9 | x | T | main.rs:1607:5:1607:13 | S | -| main.rs:1623:9:1623:15 | x.foo() | | {EXTERNAL LOCATION} | & | -| main.rs:1623:9:1623:15 | x.foo() | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1623:9:1623:15 | x.foo() | TRef.T | main.rs:1607:5:1607:13 | S | -| main.rs:1624:13:1624:13 | x | | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1624:13:1624:13 | x | T | main.rs:1607:5:1607:13 | S | -| main.rs:1624:17:1624:27 | MyStruct(...) | | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1624:17:1624:27 | MyStruct(...) | T | main.rs:1607:5:1607:13 | S | -| main.rs:1624:26:1624:26 | S | | main.rs:1607:5:1607:13 | S | -| main.rs:1626:9:1626:9 | x | | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1626:9:1626:9 | x | T | main.rs:1607:5:1607:13 | S | -| main.rs:1626:9:1626:18 | x.bar(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1626:9:1626:18 | x.bar(...) | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1626:9:1626:18 | x.bar(...) | TRef.T | main.rs:1607:5:1607:13 | S | -| main.rs:1626:15:1626:17 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1626:15:1626:17 | &... | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1626:15:1626:17 | &... | TRef.TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1626:15:1626:17 | &... | TRef.TRef.T | main.rs:1607:5:1607:13 | S | -| main.rs:1626:16:1626:17 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1626:16:1626:17 | &x | TRef | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1626:16:1626:17 | &x | TRef.T | main.rs:1607:5:1607:13 | S | -| main.rs:1626:17:1626:17 | x | | main.rs:1609:5:1609:26 | MyStruct | -| main.rs:1626:17:1626:17 | x | T | main.rs:1607:5:1607:13 | S | -| main.rs:1637:17:1637:25 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1637:17:1637:25 | SelfParam | TRefMut | main.rs:1631:5:1634:5 | MyFlag | -| main.rs:1637:28:1639:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1638:13:1638:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1638:13:1638:16 | self | TRefMut | main.rs:1631:5:1634:5 | MyFlag | -| main.rs:1638:13:1638:21 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1638:13:1638:34 | ... = ... | | {EXTERNAL LOCATION} | () | -| main.rs:1638:25:1638:34 | ! ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1638:26:1638:29 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1638:26:1638:29 | self | TRefMut | main.rs:1631:5:1634:5 | MyFlag | -| main.rs:1638:26:1638:34 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1645:15:1645:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1645:15:1645:19 | SelfParam | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1645:31:1647:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1645:31:1647:9 | { ... } | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1646:13:1646:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1646:13:1646:19 | &... | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1646:13:1646:19 | &... | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1646:13:1646:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | -| main.rs:1646:13:1646:19 | &... | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | -| main.rs:1646:13:1646:19 | &... | TRef.TRef.TRef.TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1646:14:1646:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1646:14:1646:19 | &... | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1646:14:1646:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | -| main.rs:1646:14:1646:19 | &... | TRef.TRef.TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1646:15:1646:19 | &self | | {EXTERNAL LOCATION} | & | -| main.rs:1646:15:1646:19 | &self | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1646:15:1646:19 | &self | TRef.TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1646:16:1646:19 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1646:16:1646:19 | self | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1649:15:1649:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1649:15:1649:25 | SelfParam | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1649:37:1651:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1649:37:1651:9 | { ... } | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1650:13:1650:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1650:13:1650:19 | &... | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1650:13:1650:19 | &... | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1650:13:1650:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | -| main.rs:1650:13:1650:19 | &... | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | -| main.rs:1650:13:1650:19 | &... | TRef.TRef.TRef.TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1650:14:1650:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1650:14:1650:19 | &... | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1650:14:1650:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | -| main.rs:1650:14:1650:19 | &... | TRef.TRef.TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1650:15:1650:19 | &self | | {EXTERNAL LOCATION} | & | -| main.rs:1650:15:1650:19 | &self | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1650:15:1650:19 | &self | TRef.TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1650:16:1650:19 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1650:16:1650:19 | self | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1653:15:1653:15 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1653:15:1653:15 | x | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1653:34:1655:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1653:34:1655:9 | { ... } | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1654:13:1654:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1654:13:1654:13 | x | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1657:15:1657:15 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1657:15:1657:15 | x | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1657:34:1659:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1657:34:1659:9 | { ... } | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1658:13:1658:16 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1658:13:1658:16 | &... | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1658:13:1658:16 | &... | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1658:13:1658:16 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | -| main.rs:1658:13:1658:16 | &... | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | -| main.rs:1658:13:1658:16 | &... | TRef.TRef.TRef.TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1658:14:1658:16 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1658:14:1658:16 | &... | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1658:14:1658:16 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | -| main.rs:1658:14:1658:16 | &... | TRef.TRef.TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1658:15:1658:16 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1658:15:1658:16 | &x | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1658:15:1658:16 | &x | TRef.TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1658:16:1658:16 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1658:16:1658:16 | x | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1662:16:1675:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1663:13:1663:13 | x | | main.rs:1642:5:1642:13 | S | -| main.rs:1663:17:1663:20 | S {...} | | main.rs:1642:5:1642:13 | S | -| main.rs:1664:9:1664:9 | x | | main.rs:1642:5:1642:13 | S | -| main.rs:1664:9:1664:14 | x.f1() | | {EXTERNAL LOCATION} | & | -| main.rs:1664:9:1664:14 | x.f1() | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1665:9:1665:9 | x | | main.rs:1642:5:1642:13 | S | -| main.rs:1665:9:1665:14 | x.f2() | | {EXTERNAL LOCATION} | & | -| main.rs:1665:9:1665:14 | x.f2() | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1666:9:1666:17 | ...::f3(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1666:9:1666:17 | ...::f3(...) | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1666:15:1666:16 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1666:15:1666:16 | &x | TRef | main.rs:1642:5:1642:13 | S | -| main.rs:1666:16:1666:16 | x | | main.rs:1642:5:1642:13 | S | -| main.rs:1668:13:1668:13 | n | | {EXTERNAL LOCATION} | bool | -| main.rs:1668:17:1668:24 | * ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1668:18:1668:24 | * ... | | {EXTERNAL LOCATION} | & | -| main.rs:1668:18:1668:24 | * ... | TRef | {EXTERNAL LOCATION} | bool | -| main.rs:1668:19:1668:24 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1668:19:1668:24 | &... | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1668:19:1668:24 | &... | TRef.TRef | {EXTERNAL LOCATION} | bool | -| main.rs:1668:20:1668:24 | &true | | {EXTERNAL LOCATION} | & | -| main.rs:1668:20:1668:24 | &true | TRef | {EXTERNAL LOCATION} | bool | -| main.rs:1668:21:1668:24 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1672:17:1672:20 | flag | | main.rs:1631:5:1634:5 | MyFlag | -| main.rs:1672:24:1672:41 | ...::default(...) | | main.rs:1631:5:1634:5 | MyFlag | -| main.rs:1673:9:1673:31 | ...::flip(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1673:22:1673:30 | &mut flag | | {EXTERNAL LOCATION} | &mut | -| main.rs:1673:22:1673:30 | &mut flag | TRefMut | main.rs:1631:5:1634:5 | MyFlag | -| main.rs:1673:27:1673:30 | flag | | main.rs:1631:5:1634:5 | MyFlag | -| main.rs:1674:9:1674:30 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1674:18:1674:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1674:18:1674:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1674:18:1674:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1674:18:1674:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1674:18:1674:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1674:26:1674:29 | flag | | main.rs:1631:5:1634:5 | MyFlag | -| main.rs:1689:43:1692:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1689:43:1692:5 | { ... } | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1689:43:1692:5 | { ... } | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1690:13:1690:13 | x | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1690:17:1690:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1690:17:1690:30 | ...::Ok(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1690:17:1690:31 | TryExpr | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1690:28:1690:29 | S1 | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1691:9:1691:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1691:9:1691:22 | ...::Ok(...) | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1691:9:1691:22 | ...::Ok(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1691:20:1691:21 | S1 | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1696:46:1700:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1696:46:1700:5 | { ... } | E | main.rs:1684:5:1685:14 | S2 | -| main.rs:1696:46:1700:5 | { ... } | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1697:13:1697:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1697:13:1697:13 | x | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1697:17:1697:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1697:17:1697:30 | ...::Ok(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1697:28:1697:29 | S1 | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1698:13:1698:13 | y | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1698:17:1698:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1698:17:1698:17 | x | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1698:17:1698:18 | TryExpr | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1699:9:1699:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1699:9:1699:22 | ...::Ok(...) | E | main.rs:1684:5:1685:14 | S2 | -| main.rs:1699:9:1699:22 | ...::Ok(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1699:20:1699:21 | S1 | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1704:40:1709:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1704:40:1709:5 | { ... } | E | main.rs:1684:5:1685:14 | S2 | -| main.rs:1704:40:1709:5 | { ... } | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1705:13:1705:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1705:13:1705:13 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1705:13:1705:13 | x | T.T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1705:17:1705:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1705:17:1705:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | -| main.rs:1705:17:1705:42 | ...::Ok(...) | T.T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1705:28:1705:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1705:28:1705:41 | ...::Ok(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1705:39:1705:40 | S1 | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1707:17:1707:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1707:17:1707:17 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1707:17:1707:17 | x | T.T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1707:17:1707:18 | TryExpr | | {EXTERNAL LOCATION} | Result | -| main.rs:1707:17:1707:18 | TryExpr | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1707:17:1707:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1707:24:1707:28 | \|...\| s | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:1707:24:1707:28 | \|...\| s | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| main.rs:1708:9:1708:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1708:9:1708:22 | ...::Ok(...) | E | main.rs:1684:5:1685:14 | S2 | -| main.rs:1708:9:1708:22 | ...::Ok(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1708:20:1708:21 | S1 | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1713:30:1713:34 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1713:30:1713:34 | input | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1713:30:1713:34 | input | T | main.rs:1713:20:1713:27 | T | -| main.rs:1713:69:1720:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1713:69:1720:5 | { ... } | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1713:69:1720:5 | { ... } | T | main.rs:1713:20:1713:27 | T | -| main.rs:1714:13:1714:17 | value | | main.rs:1713:20:1713:27 | T | -| main.rs:1714:21:1714:25 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1714:21:1714:25 | input | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1714:21:1714:25 | input | T | main.rs:1713:20:1713:27 | T | -| main.rs:1714:21:1714:26 | TryExpr | | main.rs:1713:20:1713:27 | T | -| main.rs:1715:22:1715:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1715:22:1715:38 | ...::Ok(...) | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1715:22:1715:38 | ...::Ok(...) | T | main.rs:1713:20:1713:27 | T | -| main.rs:1715:22:1718:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1715:22:1718:10 | ... .and_then(...) | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1715:33:1715:37 | value | | main.rs:1713:20:1713:27 | T | -| main.rs:1715:49:1718:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:1715:49:1718:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| main.rs:1715:49:1718:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | Result | -| main.rs:1715:49:1718:9 | \|...\| ... | dyn(Output).E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1715:53:1718:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1715:53:1718:9 | { ... } | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1716:13:1716:31 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1716:22:1716:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1716:22:1716:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1716:22:1716:30 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1716:22:1716:30 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1716:22:1716:30 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1717:13:1717:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1717:13:1717:34 | ...::Ok::<...>(...) | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1719:9:1719:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1719:9:1719:23 | ...::Err(...) | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1719:9:1719:23 | ...::Err(...) | T | main.rs:1713:20:1713:27 | T | -| main.rs:1719:21:1719:22 | S1 | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1723:16:1739:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1724:9:1726:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1724:16:1724:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1724:16:1724:33 | ...::Ok(...) | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1724:16:1724:33 | ...::Ok(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1724:27:1724:32 | result | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1724:37:1724:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1724:37:1724:52 | try_same_error(...) | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1724:37:1724:52 | try_same_error(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1724:54:1726:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1725:13:1725:36 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1725:22:1725:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1725:22:1725:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1725:22:1725:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1725:22:1725:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1725:22:1725:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1725:30:1725:35 | result | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1728:9:1730:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1728:16:1728:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1728:16:1728:33 | ...::Ok(...) | E | main.rs:1684:5:1685:14 | S2 | -| main.rs:1728:16:1728:33 | ...::Ok(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1728:27:1728:32 | result | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1728:37:1728:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1728:37:1728:55 | try_convert_error(...) | E | main.rs:1684:5:1685:14 | S2 | -| main.rs:1728:37:1728:55 | try_convert_error(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1728:57:1730:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1729:13:1729:36 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1729:22:1729:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1729:22:1729:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1729:22:1729:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1729:22:1729:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1729:22:1729:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1729:30:1729:35 | result | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1732:9:1734:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1732:16:1732:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1732:16:1732:33 | ...::Ok(...) | E | main.rs:1684:5:1685:14 | S2 | -| main.rs:1732:16:1732:33 | ...::Ok(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1732:27:1732:32 | result | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1732:37:1732:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1732:37:1732:49 | try_chained(...) | E | main.rs:1684:5:1685:14 | S2 | -| main.rs:1732:37:1732:49 | try_chained(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1732:51:1734:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1733:13:1733:36 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1733:22:1733:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1733:22:1733:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1733:22:1733:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1733:22:1733:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1733:22:1733:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1733:30:1733:35 | result | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1736:9:1738:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1736:16:1736:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1736:16:1736:33 | ...::Ok(...) | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1736:16:1736:33 | ...::Ok(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1736:27:1736:32 | result | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1736:37:1736:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1736:37:1736:63 | try_complex(...) | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1736:37:1736:63 | try_complex(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1736:49:1736:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1736:49:1736:62 | ...::Ok(...) | E | main.rs:1681:5:1682:14 | S1 | -| main.rs:1736:49:1736:62 | ...::Ok(...) | T | main.rs:1681:5:1682:14 | S1 | -| main.rs:1736:60:1736:61 | S1 | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1736:65:1738:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1737:13:1737:36 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:1737:22:1737:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1737:22:1737:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1737:22:1737:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:1737:22:1737:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1737:22:1737:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1737:30:1737:35 | result | | main.rs:1681:5:1682:14 | S1 | -| main.rs:1743:16:1834:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1744:13:1744:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1744:22:1744:22 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1745:13:1745:13 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1745:17:1745:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1746:13:1746:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1746:17:1746:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1746:17:1746:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | -| main.rs:1746:21:1746:21 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1747:13:1747:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1747:17:1747:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1747:17:1747:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | -| main.rs:1748:13:1748:13 | c | | {EXTERNAL LOCATION} | char | -| main.rs:1748:17:1748:19 | 'c' | | {EXTERNAL LOCATION} | char | -| main.rs:1749:13:1749:17 | hello | | {EXTERNAL LOCATION} | & | -| main.rs:1749:13:1749:17 | hello | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1749:21:1749:27 | "Hello" | | {EXTERNAL LOCATION} | & | -| main.rs:1749:21:1749:27 | "Hello" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1750:13:1750:13 | f | | {EXTERNAL LOCATION} | f64 | -| main.rs:1750:17:1750:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | -| main.rs:1751:13:1751:13 | t | | {EXTERNAL LOCATION} | bool | -| main.rs:1751:17:1751:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1752:13:1752:13 | f | | {EXTERNAL LOCATION} | bool | -| main.rs:1752:17:1752:21 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1755:26:1755:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1755:26:1755:30 | SelfParam | TRef | main.rs:1754:9:1758:9 | Self [trait MyTrait] | -| main.rs:1761:26:1761:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1761:26:1761:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [;] | -| main.rs:1761:26:1761:30 | SelfParam | TRef.TArray | main.rs:1760:14:1760:23 | T | -| main.rs:1761:39:1763:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1761:39:1763:13 | { ... } | TRef | main.rs:1760:14:1760:23 | T | -| main.rs:1762:17:1762:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1762:17:1762:20 | self | TRef | {EXTERNAL LOCATION} | [;] | -| main.rs:1762:17:1762:20 | self | TRef.TArray | main.rs:1760:14:1760:23 | T | -| main.rs:1762:17:1762:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | -| main.rs:1762:17:1762:36 | ... .unwrap() | TRef | main.rs:1760:14:1760:23 | T | -| main.rs:1762:26:1762:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1765:31:1767:13 | { ... } | | main.rs:1760:14:1760:23 | T | -| main.rs:1766:17:1766:28 | ...::default(...) | | main.rs:1760:14:1760:23 | T | -| main.rs:1770:13:1770:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1770:13:1770:13 | x | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1770:17:1770:25 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:1770:17:1770:25 | [...] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:1770:17:1770:37 | ... .my_method() | | {EXTERNAL LOCATION} | & | -| main.rs:1770:17:1770:37 | ... .my_method() | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1770:18:1770:18 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1770:21:1770:21 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1770:24:1770:24 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1771:13:1771:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1771:13:1771:13 | x | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1771:17:1771:47 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1771:17:1771:47 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1771:22:1771:22 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1771:37:1771:46 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1771:37:1771:46 | &... | TRef | {EXTERNAL LOCATION} | [;] | -| main.rs:1771:37:1771:46 | &... | TRef.TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:1771:38:1771:46 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:1771:38:1771:46 | [...] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:1771:39:1771:39 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1771:42:1771:42 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1771:45:1771:45 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1772:13:1772:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1772:17:1772:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:1772:24:1772:24 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1775:26:1775:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1775:26:1775:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:1775:26:1775:30 | SelfParam | TRef.TSlice | main.rs:1774:14:1774:23 | T | -| main.rs:1775:39:1777:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1775:39:1777:13 | { ... } | TRef | main.rs:1774:14:1774:23 | T | -| main.rs:1776:17:1776:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1776:17:1776:20 | self | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:1776:17:1776:20 | self | TRef.TSlice | main.rs:1774:14:1774:23 | T | -| main.rs:1776:17:1776:27 | self.get(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:1776:17:1776:27 | self.get(...) | T | {EXTERNAL LOCATION} | & | -| main.rs:1776:17:1776:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | -| main.rs:1776:17:1776:36 | ... .unwrap() | TRef | main.rs:1774:14:1774:23 | T | -| main.rs:1776:26:1776:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1779:31:1781:13 | { ... } | | main.rs:1774:14:1774:23 | T | -| main.rs:1780:17:1780:28 | ...::default(...) | | main.rs:1774:14:1774:23 | T | -| main.rs:1784:13:1784:13 | s | | {EXTERNAL LOCATION} | & | -| main.rs:1784:13:1784:13 | s | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:1784:13:1784:13 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | -| main.rs:1784:25:1784:34 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1784:25:1784:34 | &... | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:1784:25:1784:34 | &... | TRef | {EXTERNAL LOCATION} | [;] | -| main.rs:1784:25:1784:34 | &... | TRef.TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:1784:25:1784:34 | &... | TRef.TSlice | {EXTERNAL LOCATION} | i32 | -| main.rs:1784:26:1784:34 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:1784:26:1784:34 | [...] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:1784:27:1784:27 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1784:30:1784:30 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1784:33:1784:33 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1785:13:1785:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1785:13:1785:13 | x | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1785:17:1785:17 | s | | {EXTERNAL LOCATION} | & | -| main.rs:1785:17:1785:17 | s | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:1785:17:1785:17 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | -| main.rs:1785:17:1785:29 | s.my_method() | | {EXTERNAL LOCATION} | & | -| main.rs:1785:17:1785:29 | s.my_method() | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1786:13:1786:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1786:13:1786:13 | x | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1786:17:1786:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1786:17:1786:35 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1786:34:1786:34 | s | | {EXTERNAL LOCATION} | & | -| main.rs:1786:34:1786:34 | s | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:1786:34:1786:34 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | -| main.rs:1787:13:1787:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1787:17:1787:34 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:1790:26:1790:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1790:26:1790:30 | SelfParam | TRef | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1790:26:1790:30 | SelfParam | TRef.T0 | main.rs:1789:14:1789:23 | T | -| main.rs:1790:26:1790:30 | SelfParam | TRef.T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:1790:39:1792:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1790:39:1792:13 | { ... } | TRef | main.rs:1789:14:1789:23 | T | -| main.rs:1791:17:1791:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1791:17:1791:23 | &... | TRef | main.rs:1789:14:1789:23 | T | -| main.rs:1791:18:1791:21 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1791:18:1791:21 | self | TRef | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1791:18:1791:21 | self | TRef.T0 | main.rs:1789:14:1789:23 | T | -| main.rs:1791:18:1791:21 | self | TRef.T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:1791:18:1791:23 | self.0 | | main.rs:1789:14:1789:23 | T | -| main.rs:1794:31:1796:13 | { ... } | | main.rs:1789:14:1789:23 | T | -| main.rs:1795:17:1795:28 | ...::default(...) | | main.rs:1789:14:1789:23 | T | -| main.rs:1799:13:1799:13 | p | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1799:13:1799:13 | p | T0 | {EXTERNAL LOCATION} | i32 | -| main.rs:1799:13:1799:13 | p | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:1799:17:1799:23 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1799:17:1799:23 | TupleExpr | T0 | {EXTERNAL LOCATION} | i32 | -| main.rs:1799:17:1799:23 | TupleExpr | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:1799:18:1799:19 | 42 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1799:22:1799:22 | 7 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1800:13:1800:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1800:13:1800:13 | x | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1800:17:1800:17 | p | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1800:17:1800:17 | p | T0 | {EXTERNAL LOCATION} | i32 | -| main.rs:1800:17:1800:17 | p | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:1800:17:1800:29 | p.my_method() | | {EXTERNAL LOCATION} | & | -| main.rs:1800:17:1800:29 | p.my_method() | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1801:13:1801:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1801:13:1801:13 | x | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1801:17:1801:39 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1801:17:1801:39 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1801:37:1801:38 | &p | | {EXTERNAL LOCATION} | & | -| main.rs:1801:37:1801:38 | &p | TRef | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1801:37:1801:38 | &p | TRef.T0 | {EXTERNAL LOCATION} | i32 | -| main.rs:1801:37:1801:38 | &p | TRef.T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:1801:38:1801:38 | p | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1801:38:1801:38 | p | T0 | {EXTERNAL LOCATION} | i32 | -| main.rs:1801:38:1801:38 | p | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:1802:13:1802:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1802:17:1802:39 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:1805:26:1805:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1805:26:1805:30 | SelfParam | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1805:26:1805:30 | SelfParam | TRef.TRef | main.rs:1804:14:1804:23 | T | -| main.rs:1805:39:1807:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1805:39:1807:13 | { ... } | TRef | main.rs:1804:14:1804:23 | T | -| main.rs:1806:17:1806:21 | * ... | | {EXTERNAL LOCATION} | & | -| main.rs:1806:17:1806:21 | * ... | TRef | main.rs:1804:14:1804:23 | T | -| main.rs:1806:18:1806:21 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1806:18:1806:21 | self | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1806:18:1806:21 | self | TRef.TRef | main.rs:1804:14:1804:23 | T | -| main.rs:1809:31:1811:13 | { ... } | | main.rs:1804:14:1804:23 | T | -| main.rs:1810:17:1810:28 | ...::default(...) | | main.rs:1804:14:1804:23 | T | -| main.rs:1814:13:1814:13 | r | | {EXTERNAL LOCATION} | & | -| main.rs:1814:13:1814:13 | r | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1814:17:1814:19 | &42 | | {EXTERNAL LOCATION} | & | -| main.rs:1814:17:1814:19 | &42 | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1814:18:1814:19 | 42 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1815:13:1815:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1815:13:1815:13 | x | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1815:17:1815:17 | r | | {EXTERNAL LOCATION} | & | -| main.rs:1815:17:1815:17 | r | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1815:17:1815:29 | r.my_method() | | {EXTERNAL LOCATION} | & | -| main.rs:1815:17:1815:29 | r.my_method() | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1816:13:1816:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1816:13:1816:13 | x | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1816:17:1816:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1816:17:1816:35 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1816:33:1816:34 | &r | | {EXTERNAL LOCATION} | & | -| main.rs:1816:33:1816:34 | &r | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1816:33:1816:34 | &r | TRef.TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1816:34:1816:34 | r | | {EXTERNAL LOCATION} | & | -| main.rs:1816:34:1816:34 | r | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1817:13:1817:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1817:17:1817:33 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:1820:26:1820:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1820:26:1820:30 | SelfParam | TRef | {EXTERNAL LOCATION} | *mut | -| main.rs:1820:26:1820:30 | SelfParam | TRef.TPtrMut | main.rs:1819:14:1819:23 | T | -| main.rs:1820:39:1822:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1820:39:1822:13 | { ... } | TRef | main.rs:1819:14:1819:23 | T | -| main.rs:1821:17:1821:34 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1821:17:1821:34 | { ... } | TRef | main.rs:1819:14:1819:23 | T | -| main.rs:1821:26:1821:32 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1821:26:1821:32 | &... | TRef | main.rs:1819:14:1819:23 | T | -| main.rs:1821:27:1821:32 | * ... | | main.rs:1819:14:1819:23 | T | -| main.rs:1821:28:1821:32 | * ... | | {EXTERNAL LOCATION} | *mut | -| main.rs:1821:28:1821:32 | * ... | TPtrMut | main.rs:1819:14:1819:23 | T | -| main.rs:1821:29:1821:32 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1821:29:1821:32 | self | TRef | {EXTERNAL LOCATION} | *mut | -| main.rs:1821:29:1821:32 | self | TRef.TPtrMut | main.rs:1819:14:1819:23 | T | -| main.rs:1824:31:1826:13 | { ... } | | main.rs:1819:14:1819:23 | T | -| main.rs:1825:17:1825:28 | ...::default(...) | | main.rs:1819:14:1819:23 | T | -| main.rs:1829:17:1829:17 | v | | {EXTERNAL LOCATION} | i32 | -| main.rs:1829:21:1829:22 | 42 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1830:13:1830:13 | p | | {EXTERNAL LOCATION} | *mut | -| main.rs:1830:13:1830:13 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | -| main.rs:1830:27:1830:32 | &mut v | | {EXTERNAL LOCATION} | &mut | -| main.rs:1830:27:1830:32 | &mut v | TRefMut | {EXTERNAL LOCATION} | i32 | -| main.rs:1830:32:1830:32 | v | | {EXTERNAL LOCATION} | i32 | -| main.rs:1831:13:1831:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1831:13:1831:13 | x | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1831:17:1831:40 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1831:17:1831:40 | { ... } | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1831:26:1831:26 | p | | {EXTERNAL LOCATION} | *mut | -| main.rs:1831:26:1831:26 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | -| main.rs:1831:26:1831:38 | p.my_method() | | {EXTERNAL LOCATION} | & | -| main.rs:1831:26:1831:38 | p.my_method() | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1832:13:1832:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1832:13:1832:13 | x | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1832:17:1832:50 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1832:17:1832:50 | { ... } | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1832:26:1832:48 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1832:26:1832:48 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:1832:46:1832:47 | &p | | {EXTERNAL LOCATION} | & | -| main.rs:1832:46:1832:47 | &p | TRef | {EXTERNAL LOCATION} | *mut | -| main.rs:1832:46:1832:47 | &p | TRef.TPtrMut | {EXTERNAL LOCATION} | i32 | -| main.rs:1832:47:1832:47 | p | | {EXTERNAL LOCATION} | *mut | -| main.rs:1832:47:1832:47 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | -| main.rs:1833:13:1833:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1833:17:1833:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:1839:16:1851:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1840:13:1840:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:1840:17:1840:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1840:17:1840:29 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1840:25:1840:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1841:13:1841:13 | y | | {EXTERNAL LOCATION} | bool | -| main.rs:1841:17:1841:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1841:17:1841:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1841:25:1841:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1843:17:1843:17 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1844:13:1844:16 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1844:20:1844:21 | 34 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1844:20:1844:27 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1844:26:1844:27 | 33 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1845:9:1849:9 | if cond {...} else {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1845:12:1845:15 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1845:17:1847:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1846:17:1846:17 | z | | {EXTERNAL LOCATION} | () | -| main.rs:1846:21:1846:27 | (...) | | {EXTERNAL LOCATION} | () | -| main.rs:1846:22:1846:22 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1846:22:1846:26 | ... = ... | | {EXTERNAL LOCATION} | () | -| main.rs:1846:26:1846:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1847:16:1849:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1848:13:1848:13 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1848:13:1848:17 | ... = ... | | {EXTERNAL LOCATION} | () | -| main.rs:1848:17:1848:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1850:9:1850:9 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1864:30:1866:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1865:13:1865:31 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1865:23:1865:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1865:29:1865:29 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1872:16:1872:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1872:22:1872:24 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1872:41:1877:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1873:13:1876:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1874:20:1874:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1874:20:1874:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1874:20:1874:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1874:29:1874:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1874:29:1874:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1875:20:1875:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1875:20:1875:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1875:20:1875:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1875:29:1875:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1875:29:1875:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1882:23:1882:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1882:23:1882:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1882:34:1882:36 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1882:45:1885:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1883:13:1883:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1883:13:1883:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1883:13:1883:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1883:13:1883:27 | ... += ... | | {EXTERNAL LOCATION} | () | -| main.rs:1883:23:1883:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1883:23:1883:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1884:13:1884:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1884:13:1884:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1884:13:1884:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1884:13:1884:27 | ... += ... | | {EXTERNAL LOCATION} | () | -| main.rs:1884:23:1884:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1884:23:1884:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1890:16:1890:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1890:22:1890:24 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1890:41:1895:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1891:13:1894:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1892:20:1892:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1892:20:1892:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1892:20:1892:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1892:29:1892:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1892:29:1892:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1893:20:1893:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1893:20:1893:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1893:20:1893:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1893:29:1893:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1893:29:1893:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1900:23:1900:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1900:23:1900:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1900:34:1900:36 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1900:45:1903:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1901:13:1901:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1901:13:1901:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1901:13:1901:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1901:13:1901:27 | ... -= ... | | {EXTERNAL LOCATION} | () | -| main.rs:1901:23:1901:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1901:23:1901:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1902:13:1902:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1902:13:1902:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1902:13:1902:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1902:13:1902:27 | ... -= ... | | {EXTERNAL LOCATION} | () | -| main.rs:1902:23:1902:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1902:23:1902:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1908:16:1908:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1908:22:1908:24 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1908:41:1913:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1909:13:1912:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1910:20:1910:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1910:20:1910:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1910:20:1910:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1910:29:1910:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1910:29:1910:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1911:20:1911:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1911:20:1911:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1911:20:1911:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1911:29:1911:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1911:29:1911:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1917:23:1917:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1917:23:1917:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1917:34:1917:36 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1917:45:1920:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1918:13:1918:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1918:13:1918:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1918:13:1918:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1918:13:1918:27 | ... *= ... | | {EXTERNAL LOCATION} | () | -| main.rs:1918:23:1918:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1918:23:1918:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1919:13:1919:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1919:13:1919:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1919:13:1919:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1919:13:1919:27 | ... *= ... | | {EXTERNAL LOCATION} | () | -| main.rs:1919:23:1919:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1919:23:1919:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1925:16:1925:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1925:22:1925:24 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1925:41:1930:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1926:13:1929:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1927:20:1927:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1927:20:1927:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1927:20:1927:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1927:29:1927:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1927:29:1927:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1928:20:1928:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1928:20:1928:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1928:20:1928:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1928:29:1928:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1928:29:1928:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1934:23:1934:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1934:23:1934:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1934:34:1934:36 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1934:45:1937:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1935:13:1935:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1935:13:1935:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1935:13:1935:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1935:13:1935:27 | ... /= ... | | {EXTERNAL LOCATION} | () | -| main.rs:1935:23:1935:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1935:23:1935:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1936:13:1936:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1936:13:1936:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1936:13:1936:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1936:13:1936:27 | ... /= ... | | {EXTERNAL LOCATION} | () | -| main.rs:1936:23:1936:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1936:23:1936:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1942:16:1942:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1942:22:1942:24 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1942:41:1947:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1943:13:1946:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1944:20:1944:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1944:20:1944:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1944:20:1944:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1944:29:1944:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1944:29:1944:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1945:20:1945:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1945:20:1945:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1945:20:1945:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1945:29:1945:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1945:29:1945:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1951:23:1951:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1951:23:1951:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1951:34:1951:36 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1951:45:1954:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1952:13:1952:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1952:13:1952:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1952:13:1952:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1952:13:1952:27 | ... %= ... | | {EXTERNAL LOCATION} | () | -| main.rs:1952:23:1952:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1952:23:1952:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1953:13:1953:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1953:13:1953:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1953:13:1953:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1953:13:1953:27 | ... %= ... | | {EXTERNAL LOCATION} | () | -| main.rs:1953:23:1953:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1953:23:1953:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1959:19:1959:22 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1959:25:1959:27 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1959:44:1964:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1960:13:1963:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1961:20:1961:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1961:20:1961:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1961:20:1961:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1961:29:1961:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1961:29:1961:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1962:20:1962:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1962:20:1962:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1962:20:1962:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1962:29:1962:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1962:29:1962:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1968:26:1968:34 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1968:26:1968:34 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1968:37:1968:39 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1968:48:1971:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1969:13:1969:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1969:13:1969:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1969:13:1969:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1969:13:1969:27 | ... &= ... | | {EXTERNAL LOCATION} | () | -| main.rs:1969:23:1969:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1969:23:1969:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1970:13:1970:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1970:13:1970:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1970:13:1970:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1970:13:1970:27 | ... &= ... | | {EXTERNAL LOCATION} | () | -| main.rs:1970:23:1970:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1970:23:1970:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1976:18:1976:21 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1976:24:1976:26 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1976:43:1981:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1977:13:1980:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1978:20:1978:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1978:20:1978:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1978:20:1978:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1978:29:1978:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1978:29:1978:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1979:20:1979:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1979:20:1979:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1979:20:1979:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1979:29:1979:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1979:29:1979:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1985:25:1985:33 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:1985:25:1985:33 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1985:36:1985:38 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1985:47:1988:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1986:13:1986:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1986:13:1986:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1986:13:1986:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1986:13:1986:27 | ... \|= ... | | {EXTERNAL LOCATION} | () | -| main.rs:1986:23:1986:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1986:23:1986:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1987:13:1987:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:1987:13:1987:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1987:13:1987:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1987:13:1987:27 | ... \|= ... | | {EXTERNAL LOCATION} | () | -| main.rs:1987:23:1987:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1987:23:1987:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1993:19:1993:22 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1993:25:1993:27 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1993:44:1998:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1994:13:1997:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1995:20:1995:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1995:20:1995:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1995:20:1995:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1995:29:1995:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1995:29:1995:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1996:20:1996:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1996:20:1996:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1996:20:1996:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1996:29:1996:31 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:1996:29:1996:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2002:26:2002:34 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:2002:26:2002:34 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2002:37:2002:39 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2002:48:2005:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2003:13:2003:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2003:13:2003:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2003:13:2003:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2003:13:2003:27 | ... ^= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2003:23:2003:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2003:23:2003:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2004:13:2004:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2004:13:2004:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2004:13:2004:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2004:13:2004:27 | ... ^= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2004:23:2004:25 | rhs | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2004:23:2004:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2010:16:2010:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2010:22:2010:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2010:40:2015:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2011:13:2014:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2012:20:2012:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2012:20:2012:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2012:20:2012:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2012:30:2012:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2013:20:2013:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2013:20:2013:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2013:20:2013:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2013:30:2013:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2019:23:2019:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:2019:23:2019:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2019:34:2019:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2019:44:2022:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2020:13:2020:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2020:13:2020:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2020:13:2020:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2020:13:2020:26 | ... <<= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2020:24:2020:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2021:13:2021:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2021:13:2021:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2021:13:2021:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2021:13:2021:26 | ... <<= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2021:24:2021:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2027:16:2027:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2027:22:2027:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2027:40:2032:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2028:13:2031:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2029:20:2029:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2029:20:2029:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2029:20:2029:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2029:30:2029:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2030:20:2030:23 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2030:20:2030:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2030:20:2030:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2030:30:2030:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2036:23:2036:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:2036:23:2036:31 | SelfParam | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2036:34:2036:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2036:44:2039:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2037:13:2037:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2037:13:2037:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2037:13:2037:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2037:13:2037:26 | ... >>= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2037:24:2037:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2038:13:2038:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2038:13:2038:16 | self | TRefMut | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2038:13:2038:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2038:13:2038:26 | ... >>= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2038:24:2038:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2044:16:2044:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2044:30:2049:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2045:13:2048:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2046:20:2046:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2046:21:2046:24 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2046:21:2046:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2047:20:2047:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2047:21:2047:24 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2047:21:2047:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2054:16:2054:19 | SelfParam | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2054:30:2059:9 | { ... } | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2055:13:2058:13 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2056:20:2056:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2056:21:2056:24 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2056:21:2056:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2057:20:2057:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2057:21:2057:24 | self | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2057:21:2057:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2063:15:2063:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2063:15:2063:19 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2063:22:2063:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2063:22:2063:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2063:44:2065:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2064:13:2064:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2064:13:2064:16 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2064:13:2064:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2064:13:2064:29 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2064:13:2064:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2064:23:2064:27 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2064:23:2064:27 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2064:23:2064:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2064:34:2064:37 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2064:34:2064:37 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2064:34:2064:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2064:34:2064:50 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2064:44:2064:48 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2064:44:2064:48 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2064:44:2064:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2067:15:2067:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2067:15:2067:19 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2067:22:2067:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2067:22:2067:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2067:44:2069:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2068:13:2068:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2068:13:2068:16 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2068:13:2068:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2068:13:2068:29 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2068:13:2068:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2068:23:2068:27 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2068:23:2068:27 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2068:23:2068:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2068:34:2068:37 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2068:34:2068:37 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2068:34:2068:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2068:34:2068:50 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2068:44:2068:48 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2068:44:2068:48 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2068:44:2068:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2073:24:2073:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2073:24:2073:28 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2073:31:2073:35 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2073:31:2073:35 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2073:75:2075:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2073:75:2075:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:2074:13:2074:29 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2074:13:2074:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2074:13:2074:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:2074:14:2074:17 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2074:14:2074:17 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2074:14:2074:19 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2074:14:2074:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2074:23:2074:26 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2074:23:2074:26 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2074:23:2074:28 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2074:43:2074:62 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2074:43:2074:62 | &... | TRef | {EXTERNAL LOCATION} | i64 | -| main.rs:2074:44:2074:62 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2074:45:2074:49 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2074:45:2074:49 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2074:45:2074:51 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2074:45:2074:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2074:55:2074:59 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2074:55:2074:59 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2074:55:2074:61 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2077:15:2077:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2077:15:2077:19 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2077:22:2077:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2077:22:2077:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2077:44:2079:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2078:13:2078:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2078:13:2078:16 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2078:13:2078:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2078:13:2078:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2078:13:2078:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2078:22:2078:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2078:22:2078:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2078:22:2078:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2078:33:2078:36 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2078:33:2078:36 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2078:33:2078:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2078:33:2078:48 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2078:42:2078:46 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2078:42:2078:46 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2078:42:2078:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2081:15:2081:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2081:15:2081:19 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2081:22:2081:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2081:22:2081:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2081:44:2083:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2082:13:2082:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2082:13:2082:16 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2082:13:2082:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2082:13:2082:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2082:13:2082:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2082:23:2082:27 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2082:23:2082:27 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2082:23:2082:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2082:34:2082:37 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2082:34:2082:37 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2082:34:2082:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2082:34:2082:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2082:44:2082:48 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2082:44:2082:48 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2082:44:2082:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2085:15:2085:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2085:15:2085:19 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2085:22:2085:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2085:22:2085:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2085:44:2087:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2086:13:2086:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2086:13:2086:16 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2086:13:2086:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2086:13:2086:28 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2086:13:2086:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2086:22:2086:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2086:22:2086:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2086:22:2086:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2086:33:2086:36 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2086:33:2086:36 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2086:33:2086:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2086:33:2086:48 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2086:42:2086:46 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2086:42:2086:46 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2086:42:2086:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2089:15:2089:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2089:15:2089:19 | SelfParam | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2089:22:2089:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2089:22:2089:26 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2089:44:2091:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2090:13:2090:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2090:13:2090:16 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2090:13:2090:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2090:13:2090:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2090:13:2090:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2090:23:2090:27 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2090:23:2090:27 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2090:23:2090:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2090:34:2090:37 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2090:34:2090:37 | self | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2090:34:2090:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2090:34:2090:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2090:44:2090:48 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2090:44:2090:48 | other | TRef | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2090:44:2090:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2094:26:2094:26 | a | | main.rs:2094:18:2094:23 | T | -| main.rs:2094:32:2094:32 | b | | main.rs:2094:18:2094:23 | T | -| main.rs:2095:9:2095:9 | a | | main.rs:2094:18:2094:23 | T | -| main.rs:2095:13:2095:13 | b | | main.rs:2094:18:2094:23 | T | -| main.rs:2098:16:2229:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2102:13:2102:18 | i64_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:2102:22:2102:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2102:23:2102:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2102:23:2102:34 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2102:31:2102:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2103:13:2103:18 | i64_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:2103:22:2103:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2103:23:2103:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2103:23:2103:34 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2103:31:2103:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2104:13:2104:18 | i64_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:2104:22:2104:34 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2104:23:2104:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2104:23:2104:33 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2104:30:2104:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2105:13:2105:18 | i64_le | | {EXTERNAL LOCATION} | bool | -| main.rs:2105:22:2105:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2105:23:2105:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2105:23:2105:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2105:31:2105:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2106:13:2106:18 | i64_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:2106:22:2106:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2106:23:2106:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2106:23:2106:34 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2106:30:2106:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2107:13:2107:18 | i64_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:2107:22:2107:37 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2107:23:2107:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2107:23:2107:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2107:32:2107:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2110:13:2110:19 | i64_add | | {EXTERNAL LOCATION} | i64 | -| main.rs:2110:23:2110:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2110:23:2110:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2110:31:2110:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2111:13:2111:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | -| main.rs:2111:23:2111:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2111:23:2111:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2111:31:2111:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2112:13:2112:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | -| main.rs:2112:23:2112:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2112:23:2112:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2112:31:2112:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2113:13:2113:19 | i64_div | | {EXTERNAL LOCATION} | i64 | -| main.rs:2113:23:2113:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2113:23:2113:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2113:31:2113:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2114:13:2114:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | -| main.rs:2114:23:2114:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2114:23:2114:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2114:31:2114:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2115:39:2115:42 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2115:45:2115:48 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2118:17:2118:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2118:34:2118:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2119:9:2119:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2119:9:2119:31 | ... += ... | | {EXTERNAL LOCATION} | () | -| main.rs:2119:27:2119:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2121:17:2121:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2121:34:2121:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2122:9:2122:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2122:9:2122:31 | ... -= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2122:27:2122:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2124:17:2124:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2124:34:2124:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2125:9:2125:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2125:9:2125:31 | ... *= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2125:27:2125:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2127:17:2127:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2127:34:2127:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2128:9:2128:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2128:9:2128:31 | ... /= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2128:27:2128:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2130:17:2130:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2130:34:2130:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2131:9:2131:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2131:9:2131:31 | ... %= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2131:27:2131:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2134:13:2134:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | -| main.rs:2134:26:2134:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2134:26:2134:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2134:34:2134:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2135:13:2135:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | -| main.rs:2135:25:2135:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2135:25:2135:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2135:33:2135:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2136:13:2136:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | -| main.rs:2136:26:2136:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2136:26:2136:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2136:34:2136:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2137:13:2137:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | -| main.rs:2137:23:2137:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2137:23:2137:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2137:32:2137:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2138:13:2138:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | -| main.rs:2138:23:2138:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2138:23:2138:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2138:32:2138:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2141:17:2141:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2141:37:2141:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2142:9:2142:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2142:9:2142:34 | ... &= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2142:30:2142:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2144:17:2144:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2144:36:2144:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2145:9:2145:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2145:9:2145:33 | ... \|= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2145:29:2145:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2147:17:2147:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2147:37:2147:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2148:9:2148:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2148:9:2148:34 | ... ^= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2148:30:2148:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2150:17:2150:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2150:34:2150:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2151:9:2151:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2151:9:2151:32 | ... <<= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2151:28:2151:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2153:17:2153:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2153:34:2153:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2154:9:2154:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2154:9:2154:32 | ... >>= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2154:28:2154:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2156:13:2156:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | -| main.rs:2156:23:2156:28 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2156:24:2156:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2157:13:2157:19 | i64_not | | {EXTERNAL LOCATION} | i64 | -| main.rs:2157:23:2157:28 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2157:24:2157:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2160:13:2160:14 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2160:18:2160:36 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2160:28:2160:28 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2160:34:2160:34 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2161:13:2161:14 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2161:18:2161:36 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2161:28:2161:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2161:34:2161:34 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2164:13:2164:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:2164:23:2164:24 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2164:23:2164:30 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2164:29:2164:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2165:13:2165:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:2165:23:2165:24 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2165:23:2165:30 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2165:29:2165:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2166:13:2166:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:2166:23:2166:24 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2166:23:2166:29 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2166:28:2166:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2167:13:2167:19 | vec2_le | | {EXTERNAL LOCATION} | bool | -| main.rs:2167:23:2167:24 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2167:23:2167:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2167:29:2167:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2168:13:2168:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:2168:23:2168:24 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2168:23:2168:29 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2168:28:2168:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2169:13:2169:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:2169:23:2169:24 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2169:23:2169:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2169:29:2169:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2172:13:2172:20 | vec2_add | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2172:24:2172:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2172:24:2172:30 | ... + ... | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2172:29:2172:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2173:13:2173:20 | vec2_sub | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2173:24:2173:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2173:24:2173:30 | ... - ... | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2173:29:2173:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2174:13:2174:20 | vec2_mul | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2174:24:2174:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2174:24:2174:30 | ... * ... | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2174:29:2174:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2175:13:2175:20 | vec2_div | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2175:24:2175:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2175:24:2175:30 | ... / ... | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2175:29:2175:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2176:13:2176:20 | vec2_rem | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2176:24:2176:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2176:24:2176:30 | ... % ... | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2176:29:2176:30 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2179:17:2179:31 | vec2_add_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2179:35:2179:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2180:9:2180:23 | vec2_add_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2180:9:2180:29 | ... += ... | | {EXTERNAL LOCATION} | () | -| main.rs:2180:28:2180:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2182:17:2182:31 | vec2_sub_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2182:35:2182:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2183:9:2183:23 | vec2_sub_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2183:9:2183:29 | ... -= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2183:28:2183:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2185:17:2185:31 | vec2_mul_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2185:35:2185:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2186:9:2186:23 | vec2_mul_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2186:9:2186:29 | ... *= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2186:28:2186:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2188:17:2188:31 | vec2_div_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2188:35:2188:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2189:9:2189:23 | vec2_div_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2189:9:2189:29 | ... /= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2189:28:2189:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2191:17:2191:31 | vec2_rem_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2191:35:2191:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2192:9:2192:23 | vec2_rem_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2192:9:2192:29 | ... %= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2192:28:2192:29 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2195:13:2195:23 | vec2_bitand | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2195:27:2195:28 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2195:27:2195:33 | ... & ... | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2195:32:2195:33 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2196:13:2196:22 | vec2_bitor | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2196:26:2196:27 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2196:26:2196:32 | ... \| ... | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2196:31:2196:32 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2197:13:2197:23 | vec2_bitxor | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2197:27:2197:28 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2197:27:2197:33 | ... ^ ... | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2197:32:2197:33 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2198:13:2198:20 | vec2_shl | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2198:24:2198:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2198:24:2198:33 | ... << ... | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2198:30:2198:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2199:13:2199:20 | vec2_shr | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2199:24:2199:25 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2199:24:2199:33 | ... >> ... | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2199:30:2199:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2202:17:2202:34 | vec2_bitand_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2202:38:2202:39 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2203:9:2203:26 | vec2_bitand_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2203:9:2203:32 | ... &= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2203:31:2203:32 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2205:17:2205:33 | vec2_bitor_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2205:37:2205:38 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2206:9:2206:25 | vec2_bitor_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2206:9:2206:31 | ... \|= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2206:30:2206:31 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2208:17:2208:34 | vec2_bitxor_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2208:38:2208:39 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2209:9:2209:26 | vec2_bitxor_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2209:9:2209:32 | ... ^= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2209:31:2209:32 | v2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2211:17:2211:31 | vec2_shl_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2211:35:2211:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2212:9:2212:23 | vec2_shl_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2212:9:2212:32 | ... <<= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2212:29:2212:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2214:17:2214:31 | vec2_shr_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2214:35:2214:36 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2215:9:2215:23 | vec2_shr_assign | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2215:9:2215:32 | ... >>= ... | | {EXTERNAL LOCATION} | () | -| main.rs:2215:29:2215:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2218:13:2218:20 | vec2_neg | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2218:24:2218:26 | - ... | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2218:25:2218:26 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2219:13:2219:20 | vec2_not | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2219:24:2219:26 | ! ... | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2219:25:2219:26 | v1 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2222:13:2222:24 | default_vec2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2222:28:2222:45 | ...::default(...) | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2223:13:2223:26 | vec2_zero_plus | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2223:30:2223:48 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2223:30:2223:63 | ... + ... | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2223:40:2223:40 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2223:46:2223:46 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2223:52:2223:63 | default_vec2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2227:13:2227:24 | default_vec2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2227:28:2227:45 | ...::default(...) | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2228:13:2228:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | -| main.rs:2228:30:2228:48 | Vec2 {...} | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2228:30:2228:64 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2228:40:2228:40 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2228:46:2228:46 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2228:53:2228:64 | default_vec2 | | main.rs:1857:5:1862:5 | Vec2 | -| main.rs:2238:18:2238:21 | SelfParam | | main.rs:2235:5:2235:14 | S1 | -| main.rs:2238:24:2238:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2241:25:2243:5 | { ... } | | main.rs:2235:5:2235:14 | S1 | -| main.rs:2242:9:2242:10 | S1 | | main.rs:2235:5:2235:14 | S1 | -| main.rs:2245:41:2247:5 | { ... } | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2245:41:2247:5 | { ... } | dyn(Output) | main.rs:2235:5:2235:14 | S1 | -| main.rs:2246:9:2246:20 | { ... } | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2246:9:2246:20 | { ... } | dyn(Output) | main.rs:2235:5:2235:14 | S1 | -| main.rs:2246:17:2246:18 | S1 | | main.rs:2235:5:2235:14 | S1 | -| main.rs:2249:41:2251:5 | { ... } | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2249:41:2251:5 | { ... } | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2250:9:2250:16 | { ... } | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2250:9:2250:16 | { ... } | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2259:13:2259:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | -| main.rs:2259:13:2259:42 | SelfParam | Ptr | {EXTERNAL LOCATION} | &mut | -| main.rs:2259:13:2259:42 | SelfParam | Ptr.TRefMut | main.rs:2253:5:2253:14 | S2 | -| main.rs:2260:13:2260:15 | _cx | | {EXTERNAL LOCATION} | &mut | -| main.rs:2260:13:2260:15 | _cx | TRefMut | {EXTERNAL LOCATION} | Context | -| main.rs:2261:44:2263:9 | { ... } | | {EXTERNAL LOCATION} | Poll | -| main.rs:2261:44:2263:9 | { ... } | T | main.rs:2235:5:2235:14 | S1 | -| main.rs:2262:13:2262:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | -| main.rs:2262:13:2262:38 | ...::Ready(...) | T | main.rs:2235:5:2235:14 | S1 | -| main.rs:2262:36:2262:37 | S1 | | main.rs:2235:5:2235:14 | S1 | -| main.rs:2266:41:2268:5 | { ... } | | main.rs:2253:5:2253:14 | S2 | -| main.rs:2267:9:2267:10 | S2 | | main.rs:2253:5:2253:14 | S2 | -| main.rs:2270:22:2278:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2271:9:2271:12 | f1(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2271:9:2271:12 | f1(...) | dyn(Output) | main.rs:2235:5:2235:14 | S1 | -| main.rs:2271:9:2271:18 | await ... | | main.rs:2235:5:2235:14 | S1 | -| main.rs:2271:9:2271:22 | ... .f() | | {EXTERNAL LOCATION} | () | -| main.rs:2272:9:2272:12 | f2(...) | | main.rs:2245:16:2245:39 | impl ... | -| main.rs:2272:9:2272:18 | await ... | | main.rs:2235:5:2235:14 | S1 | -| main.rs:2272:9:2272:22 | ... .f() | | {EXTERNAL LOCATION} | () | -| main.rs:2273:9:2273:12 | f3(...) | | main.rs:2249:16:2249:39 | impl ... | -| main.rs:2273:9:2273:18 | await ... | | {EXTERNAL LOCATION} | () | -| main.rs:2274:9:2274:12 | f4(...) | | main.rs:2266:16:2266:39 | impl ... | -| main.rs:2274:9:2274:18 | await ... | | main.rs:2235:5:2235:14 | S1 | -| main.rs:2274:9:2274:22 | ... .f() | | {EXTERNAL LOCATION} | () | -| main.rs:2275:9:2275:10 | S2 | | main.rs:2253:5:2253:14 | S2 | -| main.rs:2275:9:2275:16 | await S2 | | main.rs:2235:5:2235:14 | S1 | -| main.rs:2275:9:2275:20 | ... .f() | | {EXTERNAL LOCATION} | () | -| main.rs:2276:13:2276:13 | b | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2276:13:2276:13 | b | dyn(Output) | main.rs:2235:5:2235:14 | S1 | -| main.rs:2276:17:2276:28 | { ... } | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2276:17:2276:28 | { ... } | dyn(Output) | main.rs:2235:5:2235:14 | S1 | -| main.rs:2276:25:2276:26 | S1 | | main.rs:2235:5:2235:14 | S1 | -| main.rs:2277:9:2277:9 | b | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2277:9:2277:9 | b | dyn(Output) | main.rs:2235:5:2235:14 | S1 | -| main.rs:2277:9:2277:15 | await b | | main.rs:2235:5:2235:14 | S1 | -| main.rs:2277:9:2277:19 | ... .f() | | {EXTERNAL LOCATION} | () | -| main.rs:2288:15:2288:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2288:15:2288:19 | SelfParam | TRef | main.rs:2287:5:2289:5 | Self [trait Trait1] | -| main.rs:2288:22:2288:23 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2292:15:2292:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2292:15:2292:19 | SelfParam | TRef | main.rs:2291:5:2293:5 | Self [trait Trait2] | -| main.rs:2292:22:2292:23 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2296:15:2296:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2296:15:2296:19 | SelfParam | TRef | main.rs:2282:5:2283:14 | S1 | -| main.rs:2296:22:2296:23 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2300:15:2300:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2300:15:2300:19 | SelfParam | TRef | main.rs:2282:5:2283:14 | S1 | -| main.rs:2300:22:2300:23 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2303:37:2305:5 | { ... } | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2304:9:2304:10 | S1 | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2308:18:2308:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2308:18:2308:22 | SelfParam | TRef | main.rs:2307:5:2309:5 | Self [trait MyTrait] | -| main.rs:2312:18:2312:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2312:18:2312:22 | SelfParam | TRef | main.rs:2282:5:2283:14 | S1 | -| main.rs:2312:31:2314:9 | { ... } | | main.rs:2284:5:2284:14 | S2 | -| main.rs:2313:13:2313:14 | S2 | | main.rs:2284:5:2284:14 | S2 | -| main.rs:2318:18:2318:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2318:18:2318:22 | SelfParam | TRef | main.rs:2285:5:2285:22 | S3 | -| main.rs:2318:18:2318:22 | SelfParam | TRef.T3 | main.rs:2317:10:2317:17 | T | -| main.rs:2318:30:2321:9 | { ... } | | main.rs:2317:10:2317:17 | T | -| main.rs:2319:17:2319:21 | S3(...) | | {EXTERNAL LOCATION} | & | -| main.rs:2319:17:2319:21 | S3(...) | | main.rs:2285:5:2285:22 | S3 | -| main.rs:2319:17:2319:21 | S3(...) | TRef | main.rs:2285:5:2285:22 | S3 | -| main.rs:2319:17:2319:21 | S3(...) | TRef.T3 | main.rs:2317:10:2317:17 | T | -| main.rs:2319:25:2319:28 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2319:25:2319:28 | self | TRef | main.rs:2285:5:2285:22 | S3 | -| main.rs:2319:25:2319:28 | self | TRef.T3 | main.rs:2317:10:2317:17 | T | -| main.rs:2320:13:2320:21 | t.clone() | | main.rs:2317:10:2317:17 | T | -| main.rs:2324:45:2326:5 | { ... } | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2325:9:2325:10 | S1 | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2328:41:2328:41 | t | | main.rs:2328:26:2328:38 | B | -| main.rs:2328:52:2330:5 | { ... } | | main.rs:2328:23:2328:23 | A | -| main.rs:2329:9:2329:9 | t | | main.rs:2328:26:2328:38 | B | -| main.rs:2329:9:2329:17 | t.get_a() | | main.rs:2328:23:2328:23 | A | -| main.rs:2332:34:2332:34 | x | | main.rs:2332:24:2332:31 | T | -| main.rs:2332:59:2334:5 | { ... } | | main.rs:2332:43:2332:57 | impl ... | -| main.rs:2332:59:2334:5 | { ... } | impl(T) | main.rs:2332:24:2332:31 | T | -| main.rs:2333:9:2333:13 | S3(...) | | main.rs:2285:5:2285:22 | S3 | -| main.rs:2333:9:2333:13 | S3(...) | | main.rs:2332:43:2332:57 | impl ... | -| main.rs:2333:9:2333:13 | S3(...) | T3 | main.rs:2332:24:2332:31 | T | -| main.rs:2333:9:2333:13 | S3(...) | impl(T) | main.rs:2332:24:2332:31 | T | -| main.rs:2333:12:2333:12 | x | | main.rs:2332:24:2332:31 | T | -| main.rs:2336:34:2336:34 | x | | main.rs:2336:24:2336:31 | T | -| main.rs:2336:67:2338:5 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2336:67:2338:5 | { ... } | T | main.rs:2336:50:2336:64 | impl ... | -| main.rs:2336:67:2338:5 | { ... } | T.impl(T) | main.rs:2336:24:2336:31 | T | -| main.rs:2337:9:2337:19 | Some(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2337:9:2337:19 | Some(...) | T | main.rs:2285:5:2285:22 | S3 | -| main.rs:2337:9:2337:19 | Some(...) | T | main.rs:2336:50:2336:64 | impl ... | -| main.rs:2337:9:2337:19 | Some(...) | T.T3 | main.rs:2336:24:2336:31 | T | -| main.rs:2337:9:2337:19 | Some(...) | T.impl(T) | main.rs:2336:24:2336:31 | T | -| main.rs:2337:14:2337:18 | S3(...) | | main.rs:2285:5:2285:22 | S3 | -| main.rs:2337:14:2337:18 | S3(...) | T3 | main.rs:2336:24:2336:31 | T | -| main.rs:2337:17:2337:17 | x | | main.rs:2336:24:2336:31 | T | -| main.rs:2340:34:2340:34 | x | | main.rs:2340:24:2340:31 | T | -| main.rs:2340:78:2342:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2340:78:2342:5 | { ... } | T0 | main.rs:2340:44:2340:58 | impl ... | -| main.rs:2340:78:2342:5 | { ... } | T0.impl(T) | main.rs:2340:24:2340:31 | T | -| main.rs:2340:78:2342:5 | { ... } | T1 | main.rs:2340:61:2340:75 | impl ... | -| main.rs:2340:78:2342:5 | { ... } | T1.impl(T) | main.rs:2340:24:2340:31 | T | -| main.rs:2341:9:2341:30 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2341:9:2341:30 | TupleExpr | T0 | main.rs:2285:5:2285:22 | S3 | -| main.rs:2341:9:2341:30 | TupleExpr | T0 | main.rs:2340:44:2340:58 | impl ... | -| main.rs:2341:9:2341:30 | TupleExpr | T0.T3 | main.rs:2340:24:2340:31 | T | -| main.rs:2341:9:2341:30 | TupleExpr | T0.impl(T) | main.rs:2340:24:2340:31 | T | -| main.rs:2341:9:2341:30 | TupleExpr | T1 | main.rs:2285:5:2285:22 | S3 | -| main.rs:2341:9:2341:30 | TupleExpr | T1 | main.rs:2340:61:2340:75 | impl ... | -| main.rs:2341:9:2341:30 | TupleExpr | T1.T3 | main.rs:2340:24:2340:31 | T | -| main.rs:2341:9:2341:30 | TupleExpr | T1.impl(T) | main.rs:2340:24:2340:31 | T | -| main.rs:2341:10:2341:22 | S3(...) | | main.rs:2285:5:2285:22 | S3 | -| main.rs:2341:10:2341:22 | S3(...) | | main.rs:2340:44:2340:58 | impl ... | -| main.rs:2341:10:2341:22 | S3(...) | T3 | main.rs:2340:24:2340:31 | T | -| main.rs:2341:10:2341:22 | S3(...) | impl(T) | main.rs:2340:24:2340:31 | T | -| main.rs:2341:13:2341:13 | x | | main.rs:2340:24:2340:31 | T | -| main.rs:2341:13:2341:21 | x.clone() | | main.rs:2340:24:2340:31 | T | -| main.rs:2341:25:2341:29 | S3(...) | | main.rs:2285:5:2285:22 | S3 | -| main.rs:2341:25:2341:29 | S3(...) | | main.rs:2340:61:2340:75 | impl ... | -| main.rs:2341:25:2341:29 | S3(...) | T3 | main.rs:2340:24:2340:31 | T | -| main.rs:2341:25:2341:29 | S3(...) | impl(T) | main.rs:2340:24:2340:31 | T | -| main.rs:2341:28:2341:28 | x | | main.rs:2340:24:2340:31 | T | -| main.rs:2344:26:2344:26 | t | | main.rs:2344:29:2344:43 | impl ... | -| main.rs:2344:51:2346:5 | { ... } | | main.rs:2344:23:2344:23 | A | -| main.rs:2345:9:2345:9 | t | | main.rs:2344:29:2344:43 | impl ... | -| main.rs:2345:9:2345:17 | t.get_a() | | main.rs:2344:23:2344:23 | A | -| main.rs:2348:16:2362:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2349:13:2349:13 | x | | main.rs:2303:16:2303:35 | impl ... + ... | -| main.rs:2349:17:2349:20 | f1(...) | | main.rs:2303:16:2303:35 | impl ... + ... | -| main.rs:2350:9:2350:9 | x | | main.rs:2303:16:2303:35 | impl ... + ... | -| main.rs:2350:9:2350:14 | x.f1() | | {EXTERNAL LOCATION} | () | -| main.rs:2351:9:2351:9 | x | | main.rs:2303:16:2303:35 | impl ... + ... | -| main.rs:2351:9:2351:14 | x.f2() | | {EXTERNAL LOCATION} | () | -| main.rs:2352:13:2352:13 | a | | main.rs:2324:28:2324:43 | impl ... | -| main.rs:2352:17:2352:32 | get_a_my_trait(...) | | main.rs:2324:28:2324:43 | impl ... | -| main.rs:2353:13:2353:13 | b | | main.rs:2284:5:2284:14 | S2 | -| main.rs:2353:17:2353:33 | uses_my_trait1(...) | | main.rs:2284:5:2284:14 | S2 | -| main.rs:2353:32:2353:32 | a | | main.rs:2324:28:2324:43 | impl ... | -| main.rs:2354:13:2354:13 | a | | main.rs:2324:28:2324:43 | impl ... | -| main.rs:2354:17:2354:32 | get_a_my_trait(...) | | main.rs:2324:28:2324:43 | impl ... | -| main.rs:2355:13:2355:13 | c | | main.rs:2284:5:2284:14 | S2 | -| main.rs:2355:17:2355:33 | uses_my_trait2(...) | | main.rs:2284:5:2284:14 | S2 | -| main.rs:2355:32:2355:32 | a | | main.rs:2324:28:2324:43 | impl ... | -| main.rs:2356:13:2356:13 | d | | main.rs:2284:5:2284:14 | S2 | -| main.rs:2356:17:2356:34 | uses_my_trait2(...) | | main.rs:2284:5:2284:14 | S2 | -| main.rs:2356:32:2356:33 | S1 | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2357:13:2357:13 | e | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2357:17:2357:35 | get_a_my_trait2(...) | | main.rs:2332:43:2332:57 | impl ... | -| main.rs:2357:17:2357:35 | get_a_my_trait2(...) | impl(T) | main.rs:2282:5:2283:14 | S1 | -| main.rs:2357:17:2357:43 | ... .get_a() | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2357:33:2357:34 | S1 | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2360:13:2360:13 | f | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2360:17:2360:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2360:17:2360:35 | get_a_my_trait3(...) | T | main.rs:2336:50:2336:64 | impl ... | -| main.rs:2360:17:2360:35 | get_a_my_trait3(...) | T.impl(T) | main.rs:2282:5:2283:14 | S1 | -| main.rs:2360:17:2360:44 | ... .unwrap() | | main.rs:2336:50:2336:64 | impl ... | -| main.rs:2360:17:2360:44 | ... .unwrap() | impl(T) | main.rs:2282:5:2283:14 | S1 | -| main.rs:2360:17:2360:52 | ... .get_a() | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2360:33:2360:34 | S1 | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2361:13:2361:13 | g | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2361:17:2361:35 | get_a_my_trait4(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2361:17:2361:35 | get_a_my_trait4(...) | T0 | main.rs:2340:44:2340:58 | impl ... | -| main.rs:2361:17:2361:35 | get_a_my_trait4(...) | T0.impl(T) | main.rs:2282:5:2283:14 | S1 | -| main.rs:2361:17:2361:35 | get_a_my_trait4(...) | T1 | main.rs:2340:61:2340:75 | impl ... | -| main.rs:2361:17:2361:35 | get_a_my_trait4(...) | T1.impl(T) | main.rs:2282:5:2283:14 | S1 | -| main.rs:2361:17:2361:37 | ... .0 | | main.rs:2340:44:2340:58 | impl ... | -| main.rs:2361:17:2361:37 | ... .0 | impl(T) | main.rs:2282:5:2283:14 | S1 | -| main.rs:2361:17:2361:45 | ... .get_a() | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2361:33:2361:34 | S1 | | main.rs:2282:5:2283:14 | S1 | -| main.rs:2372:16:2372:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2372:16:2372:20 | SelfParam | TRef | main.rs:2368:5:2369:13 | S | -| main.rs:2372:31:2374:9 | { ... } | | main.rs:2368:5:2369:13 | S | -| main.rs:2373:13:2373:13 | S | | main.rs:2368:5:2369:13 | S | -| main.rs:2383:26:2385:9 | { ... } | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2383:26:2385:9 | { ... } | T | main.rs:2382:10:2382:10 | T | -| main.rs:2384:13:2384:38 | MyVec {...} | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2384:13:2384:38 | MyVec {...} | T | main.rs:2382:10:2382:10 | T | -| main.rs:2384:27:2384:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2384:27:2384:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2384:27:2384:36 | ...::new(...) | T | main.rs:2382:10:2382:10 | T | -| main.rs:2387:17:2387:25 | SelfParam | | {EXTERNAL LOCATION} | &mut | -| main.rs:2387:17:2387:25 | SelfParam | TRefMut | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2387:17:2387:25 | SelfParam | TRefMut.T | main.rs:2382:10:2382:10 | T | -| main.rs:2387:28:2387:32 | value | | main.rs:2382:10:2382:10 | T | -| main.rs:2387:38:2389:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2388:13:2388:16 | self | | {EXTERNAL LOCATION} | &mut | -| main.rs:2388:13:2388:16 | self | TRefMut | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2388:13:2388:16 | self | TRefMut.T | main.rs:2382:10:2382:10 | T | -| main.rs:2388:13:2388:21 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:2388:13:2388:21 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:2388:13:2388:21 | self.data | T | main.rs:2382:10:2382:10 | T | -| main.rs:2388:13:2388:33 | ... .push(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2388:28:2388:32 | value | | main.rs:2382:10:2382:10 | T | -| main.rs:2396:18:2396:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2396:18:2396:22 | SelfParam | TRef | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2396:18:2396:22 | SelfParam | TRef.T | main.rs:2392:10:2392:10 | T | -| main.rs:2396:25:2396:29 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2396:56:2398:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2396:56:2398:9 | { ... } | TRef | main.rs:2392:10:2392:10 | T | -| main.rs:2397:13:2397:29 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2397:13:2397:29 | &... | TRef | main.rs:2392:10:2392:10 | T | -| main.rs:2397:14:2397:17 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2397:14:2397:17 | self | TRef | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2397:14:2397:17 | self | TRef.T | main.rs:2392:10:2392:10 | T | -| main.rs:2397:14:2397:22 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:2397:14:2397:22 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:2397:14:2397:22 | self.data | T | main.rs:2392:10:2392:10 | T | -| main.rs:2397:14:2397:29 | ...[index] | | main.rs:2392:10:2392:10 | T | -| main.rs:2397:24:2397:28 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2401:22:2401:26 | slice | | {EXTERNAL LOCATION} | & | -| main.rs:2401:22:2401:26 | slice | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:2401:22:2401:26 | slice | TRef.TSlice | main.rs:2368:5:2369:13 | S | -| main.rs:2401:35:2403:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2402:13:2402:13 | x | | main.rs:2368:5:2369:13 | S | -| main.rs:2402:17:2402:21 | slice | | {EXTERNAL LOCATION} | & | -| main.rs:2402:17:2402:21 | slice | TRef | {EXTERNAL LOCATION} | [] | -| main.rs:2402:17:2402:21 | slice | TRef.TSlice | main.rs:2368:5:2369:13 | S | -| main.rs:2402:17:2402:24 | slice[0] | | main.rs:2368:5:2369:13 | S | -| main.rs:2402:17:2402:30 | ... .foo() | | main.rs:2368:5:2369:13 | S | -| main.rs:2402:23:2402:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2405:37:2405:37 | a | | main.rs:2405:20:2405:34 | T | -| main.rs:2405:43:2405:43 | b | | {EXTERNAL LOCATION} | usize | -| main.rs:2409:9:2409:9 | a | | main.rs:2405:20:2405:34 | T | -| main.rs:2409:11:2409:11 | b | | {EXTERNAL LOCATION} | usize | -| main.rs:2412:16:2423:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2413:17:2413:19 | vec | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2413:17:2413:19 | vec | T | main.rs:2368:5:2369:13 | S | -| main.rs:2413:23:2413:34 | ...::new(...) | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2413:23:2413:34 | ...::new(...) | T | main.rs:2368:5:2369:13 | S | -| main.rs:2414:9:2414:11 | vec | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2414:9:2414:11 | vec | T | main.rs:2368:5:2369:13 | S | -| main.rs:2414:9:2414:19 | vec.push(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2414:18:2414:18 | S | | main.rs:2368:5:2369:13 | S | -| main.rs:2415:9:2415:11 | vec | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2415:9:2415:11 | vec | T | main.rs:2368:5:2369:13 | S | -| main.rs:2415:9:2415:14 | vec[0] | | main.rs:2368:5:2369:13 | S | -| main.rs:2415:9:2415:20 | ... .foo() | | main.rs:2368:5:2369:13 | S | -| main.rs:2415:13:2415:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2417:13:2417:14 | xs | | {EXTERNAL LOCATION} | [;] | -| main.rs:2417:13:2417:14 | xs | TArray | main.rs:2368:5:2369:13 | S | -| main.rs:2417:21:2417:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2417:26:2417:28 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2417:26:2417:28 | [...] | TArray | main.rs:2368:5:2369:13 | S | -| main.rs:2417:27:2417:27 | S | | main.rs:2368:5:2369:13 | S | -| main.rs:2418:13:2418:13 | x | | main.rs:2368:5:2369:13 | S | -| main.rs:2418:17:2418:18 | xs | | {EXTERNAL LOCATION} | [;] | -| main.rs:2418:17:2418:18 | xs | TArray | main.rs:2368:5:2369:13 | S | -| main.rs:2418:17:2418:21 | xs[0] | | main.rs:2368:5:2369:13 | S | -| main.rs:2418:17:2418:27 | ... .foo() | | main.rs:2368:5:2369:13 | S | -| main.rs:2418:20:2418:20 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2420:29:2420:31 | vec | | main.rs:2377:5:2380:5 | MyVec | -| main.rs:2420:29:2420:31 | vec | T | main.rs:2368:5:2369:13 | S | -| main.rs:2420:34:2420:34 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2422:9:2422:26 | analyze_slice(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2422:23:2422:25 | &xs | | {EXTERNAL LOCATION} | & | -| main.rs:2422:23:2422:25 | &xs | TRef | {EXTERNAL LOCATION} | [;] | -| main.rs:2422:23:2422:25 | &xs | TRef.TArray | main.rs:2368:5:2369:13 | S | -| main.rs:2422:24:2422:25 | xs | | {EXTERNAL LOCATION} | [;] | -| main.rs:2422:24:2422:25 | xs | TArray | main.rs:2368:5:2369:13 | S | -| main.rs:2427:16:2429:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2428:13:2428:13 | x | | {EXTERNAL LOCATION} | String | -| main.rs:2428:17:2428:46 | MacroExpr | | {EXTERNAL LOCATION} | String | -| main.rs:2428:25:2428:35 | "Hello, {}" | | {EXTERNAL LOCATION} | & | -| main.rs:2428:25:2428:35 | "Hello, {}" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2428:25:2428:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2428:25:2428:45 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2428:25:2428:45 | { ... } | | {EXTERNAL LOCATION} | String | -| main.rs:2428:38:2428:45 | "World!" | | {EXTERNAL LOCATION} | & | -| main.rs:2428:38:2428:45 | "World!" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2437:19:2437:22 | SelfParam | | main.rs:2433:5:2438:5 | Self [trait MyAdd] | -| main.rs:2437:25:2437:27 | rhs | | main.rs:2433:17:2433:26 | Rhs | -| main.rs:2444:19:2444:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2444:25:2444:29 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2444:45:2446:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2445:13:2445:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2453:19:2453:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2453:25:2453:29 | value | | {EXTERNAL LOCATION} | & | -| main.rs:2453:25:2453:29 | value | TRef | {EXTERNAL LOCATION} | i64 | -| main.rs:2453:46:2455:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2454:13:2454:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2454:14:2454:18 | value | | {EXTERNAL LOCATION} | & | -| main.rs:2454:14:2454:18 | value | TRef | {EXTERNAL LOCATION} | i64 | -| main.rs:2462:19:2462:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2462:25:2462:29 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2462:46:2468:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2463:13:2467:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2463:13:2467:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | -| main.rs:2463:16:2463:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2463:22:2465:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2463:22:2465:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2464:17:2464:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2464:17:2464:17 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2465:20:2467:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2465:20:2467:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2466:17:2466:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2466:17:2466:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2477:19:2477:22 | SelfParam | | main.rs:2471:5:2471:19 | S | -| main.rs:2477:19:2477:22 | SelfParam | T | main.rs:2473:10:2473:17 | T | -| main.rs:2477:25:2477:29 | other | | main.rs:2471:5:2471:19 | S | -| main.rs:2477:25:2477:29 | other | T | main.rs:2473:10:2473:17 | T | -| main.rs:2477:54:2479:9 | { ... } | | main.rs:2471:5:2471:19 | S | -| main.rs:2478:13:2478:39 | S(...) | | main.rs:2471:5:2471:19 | S | -| main.rs:2478:15:2478:22 | (...) | | main.rs:2473:10:2473:17 | T | -| main.rs:2478:16:2478:19 | self | | main.rs:2471:5:2471:19 | S | -| main.rs:2478:16:2478:19 | self | T | main.rs:2473:10:2473:17 | T | -| main.rs:2478:16:2478:21 | self.0 | | main.rs:2473:10:2473:17 | T | -| main.rs:2478:31:2478:35 | other | | main.rs:2471:5:2471:19 | S | -| main.rs:2478:31:2478:35 | other | T | main.rs:2473:10:2473:17 | T | -| main.rs:2478:31:2478:37 | other.0 | | main.rs:2473:10:2473:17 | T | -| main.rs:2486:19:2486:22 | SelfParam | | main.rs:2471:5:2471:19 | S | -| main.rs:2486:19:2486:22 | SelfParam | T | main.rs:2482:10:2482:17 | T | -| main.rs:2486:25:2486:29 | other | | main.rs:2482:10:2482:17 | T | -| main.rs:2486:51:2488:9 | { ... } | | main.rs:2471:5:2471:19 | S | -| main.rs:2487:13:2487:37 | S(...) | | main.rs:2471:5:2471:19 | S | -| main.rs:2487:15:2487:22 | (...) | | main.rs:2482:10:2482:17 | T | -| main.rs:2487:16:2487:19 | self | | main.rs:2471:5:2471:19 | S | -| main.rs:2487:16:2487:19 | self | T | main.rs:2482:10:2482:17 | T | -| main.rs:2487:16:2487:21 | self.0 | | main.rs:2482:10:2482:17 | T | -| main.rs:2487:31:2487:35 | other | | main.rs:2482:10:2482:17 | T | -| main.rs:2498:19:2498:22 | SelfParam | | main.rs:2471:5:2471:19 | S | -| main.rs:2498:19:2498:22 | SelfParam | T | main.rs:2491:14:2491:14 | T | -| main.rs:2498:25:2498:29 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2498:25:2498:29 | other | TRef | main.rs:2491:14:2491:14 | T | -| main.rs:2498:55:2500:9 | { ... } | | main.rs:2471:5:2471:19 | S | -| main.rs:2499:13:2499:37 | S(...) | | main.rs:2471:5:2471:19 | S | -| main.rs:2499:15:2499:22 | (...) | | main.rs:2491:14:2491:14 | T | -| main.rs:2499:16:2499:19 | self | | main.rs:2471:5:2471:19 | S | -| main.rs:2499:16:2499:19 | self | T | main.rs:2491:14:2491:14 | T | -| main.rs:2499:16:2499:21 | self.0 | | main.rs:2491:14:2491:14 | T | -| main.rs:2499:31:2499:35 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2499:31:2499:35 | other | TRef | main.rs:2491:14:2491:14 | T | -| main.rs:2505:20:2505:24 | value | | main.rs:2503:18:2503:18 | T | -| main.rs:2510:20:2510:24 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2510:40:2512:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2511:13:2511:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2517:20:2517:24 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2517:41:2523:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2518:13:2522:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2518:13:2522:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | -| main.rs:2518:16:2518:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2518:22:2520:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2518:22:2520:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2519:17:2519:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2519:17:2519:17 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2520:20:2522:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2520:20:2522:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2521:17:2521:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2521:17:2521:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2528:21:2528:25 | value | | main.rs:2526:19:2526:19 | T | -| main.rs:2528:31:2528:31 | x | | main.rs:2526:5:2529:5 | Self [trait MyFrom2] | -| main.rs:2533:21:2533:25 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2533:33:2533:33 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2533:48:2535:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2534:13:2534:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2540:21:2540:25 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2540:34:2540:34 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2540:49:2546:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2541:13:2545:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2541:16:2541:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2541:22:2543:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2542:17:2542:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2543:20:2545:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2544:17:2544:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2551:15:2551:15 | x | | main.rs:2549:5:2555:5 | Self [trait MySelfTrait] | -| main.rs:2554:15:2554:15 | x | | main.rs:2549:5:2555:5 | Self [trait MySelfTrait] | -| main.rs:2559:15:2559:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2559:31:2561:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2560:13:2560:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2560:13:2560:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2560:17:2560:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2564:15:2564:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2564:32:2566:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2565:13:2565:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2565:13:2565:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2565:17:2565:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2571:15:2571:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2571:31:2573:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2572:13:2572:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2572:13:2572:13 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2576:15:2576:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2576:32:2578:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2577:13:2577:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2581:16:2606:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2582:13:2582:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2582:22:2582:23 | 73 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2582:22:2582:23 | 73 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2583:9:2583:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2583:9:2583:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2583:18:2583:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2584:9:2584:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2584:9:2584:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2584:18:2584:22 | &5i64 | | {EXTERNAL LOCATION} | & | -| main.rs:2584:18:2584:22 | &5i64 | TRef | {EXTERNAL LOCATION} | i64 | -| main.rs:2584:19:2584:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2585:9:2585:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2585:9:2585:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2585:18:2585:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2587:9:2587:15 | S(...) | | main.rs:2471:5:2471:19 | S | -| main.rs:2587:9:2587:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2587:9:2587:31 | ... .my_add(...) | | main.rs:2471:5:2471:19 | S | -| main.rs:2587:11:2587:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2587:24:2587:30 | S(...) | | main.rs:2471:5:2471:19 | S | -| main.rs:2587:24:2587:30 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2587:26:2587:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2588:9:2588:15 | S(...) | | main.rs:2471:5:2471:19 | S | -| main.rs:2588:9:2588:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2588:11:2588:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2588:24:2588:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2589:9:2589:15 | S(...) | | main.rs:2471:5:2471:19 | S | -| main.rs:2589:9:2589:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2589:9:2589:29 | ... .my_add(...) | | main.rs:2471:5:2471:19 | S | -| main.rs:2589:11:2589:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2589:24:2589:28 | &3i64 | | {EXTERNAL LOCATION} | & | -| main.rs:2589:24:2589:28 | &3i64 | TRef | {EXTERNAL LOCATION} | i64 | -| main.rs:2589:25:2589:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2591:13:2591:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2591:17:2591:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2591:30:2591:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2592:13:2592:13 | y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2592:17:2592:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2592:30:2592:33 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2593:13:2593:13 | z | | {EXTERNAL LOCATION} | i64 | -| main.rs:2593:22:2593:43 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2593:38:2593:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2594:9:2594:34 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2594:23:2594:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2594:30:2594:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2595:9:2595:33 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2595:23:2595:26 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2595:29:2595:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2596:9:2596:38 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2596:27:2596:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2596:34:2596:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2598:9:2598:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2598:17:2598:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2599:9:2599:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2599:17:2599:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2600:9:2600:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2600:18:2600:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2601:9:2601:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2601:18:2601:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2602:9:2602:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2602:25:2602:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2603:9:2603:30 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2603:25:2603:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2604:9:2604:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2604:25:2604:28 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2605:9:2605:29 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2605:25:2605:28 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2613:26:2615:9 | { ... } | | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2614:13:2614:25 | MyCallable {...} | | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2617:17:2617:21 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2617:17:2617:21 | SelfParam | TRef | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2617:31:2619:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2618:13:2618:13 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2618:13:2618:13 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2622:16:2729:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2625:9:2625:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2625:13:2625:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2625:18:2625:26 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2625:18:2625:26 | [...] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:2625:19:2625:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2625:22:2625:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2625:25:2625:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2625:28:2625:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2626:9:2626:44 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2626:18:2626:26 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2626:18:2626:26 | [...] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:2626:18:2626:41 | ... .map(...) | | {EXTERNAL LOCATION} | [;] | -| main.rs:2626:19:2626:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2626:22:2626:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2626:25:2626:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2626:32:2626:40 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:2626:32:2626:40 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| main.rs:2626:40:2626:40 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2626:43:2626:44 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2627:9:2627:41 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2627:13:2627:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2627:18:2627:26 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2627:18:2627:26 | [...] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:2627:18:2627:38 | ... .into_iter() | | {EXTERNAL LOCATION} | IntoIter | -| main.rs:2627:18:2627:38 | ... .into_iter() | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2627:19:2627:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2627:22:2627:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2627:25:2627:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2627:40:2627:41 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2629:13:2629:17 | vals1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2629:13:2629:17 | vals1 | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:2629:13:2629:17 | vals1 | TArray | {EXTERNAL LOCATION} | u8 | -| main.rs:2629:21:2629:31 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2629:21:2629:31 | [...] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:2629:21:2629:31 | [...] | TArray | {EXTERNAL LOCATION} | u8 | -| main.rs:2629:22:2629:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2629:27:2629:27 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2629:27:2629:27 | 2 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2629:30:2629:30 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2629:30:2629:30 | 3 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2630:9:2630:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2630:13:2630:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2630:13:2630:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2630:18:2630:22 | vals1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2630:18:2630:22 | vals1 | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:2630:18:2630:22 | vals1 | TArray | {EXTERNAL LOCATION} | u8 | -| main.rs:2630:24:2630:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2632:13:2632:17 | vals2 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2632:13:2632:17 | vals2 | TArray | {EXTERNAL LOCATION} | u16 | -| main.rs:2632:21:2632:29 | [1u16; 3] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2632:21:2632:29 | [1u16; 3] | TArray | {EXTERNAL LOCATION} | u16 | -| main.rs:2632:22:2632:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2632:28:2632:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2633:9:2633:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2633:13:2633:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2633:18:2633:22 | vals2 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2633:18:2633:22 | vals2 | TArray | {EXTERNAL LOCATION} | u16 | -| main.rs:2633:24:2633:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2635:13:2635:17 | vals3 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2635:13:2635:17 | vals3 | TArray | {EXTERNAL LOCATION} | u32 | -| main.rs:2635:26:2635:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2635:31:2635:39 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2635:31:2635:39 | [...] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:2635:31:2635:39 | [...] | TArray | {EXTERNAL LOCATION} | u32 | -| main.rs:2635:32:2635:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2635:32:2635:32 | 1 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2635:35:2635:35 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2635:35:2635:35 | 2 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2635:38:2635:38 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2635:38:2635:38 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2636:9:2636:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2636:13:2636:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2636:18:2636:22 | vals3 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2636:18:2636:22 | vals3 | TArray | {EXTERNAL LOCATION} | u32 | -| main.rs:2636:24:2636:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2638:13:2638:17 | vals4 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2638:13:2638:17 | vals4 | TArray | {EXTERNAL LOCATION} | u64 | -| main.rs:2638:26:2638:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2638:31:2638:36 | [1; 3] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2638:31:2638:36 | [1; 3] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:2638:31:2638:36 | [1; 3] | TArray | {EXTERNAL LOCATION} | u64 | -| main.rs:2638:32:2638:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2638:32:2638:32 | 1 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2638:35:2638:35 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2639:9:2639:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2639:13:2639:13 | u | | {EXTERNAL LOCATION} | u64 | -| main.rs:2639:18:2639:22 | vals4 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2639:18:2639:22 | vals4 | TArray | {EXTERNAL LOCATION} | u64 | -| main.rs:2639:24:2639:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2641:17:2641:24 | strings1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2641:17:2641:24 | strings1 | TArray | {EXTERNAL LOCATION} | & | -| main.rs:2641:17:2641:24 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2641:28:2641:48 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2641:28:2641:48 | [...] | TArray | {EXTERNAL LOCATION} | & | -| main.rs:2641:28:2641:48 | [...] | TArray.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2641:29:2641:33 | "foo" | | {EXTERNAL LOCATION} | & | -| main.rs:2641:29:2641:33 | "foo" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2641:36:2641:40 | "bar" | | {EXTERNAL LOCATION} | & | -| main.rs:2641:36:2641:40 | "bar" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2641:43:2641:47 | "baz" | | {EXTERNAL LOCATION} | & | -| main.rs:2641:43:2641:47 | "baz" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2642:9:2642:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2642:13:2642:13 | s | | {EXTERNAL LOCATION} | & | -| main.rs:2642:13:2642:13 | s | TRef | {EXTERNAL LOCATION} | & | -| main.rs:2642:13:2642:13 | s | TRef.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2642:18:2642:26 | &strings1 | | {EXTERNAL LOCATION} | & | -| main.rs:2642:18:2642:26 | &strings1 | TRef | {EXTERNAL LOCATION} | [;] | -| main.rs:2642:18:2642:26 | &strings1 | TRef.TArray | {EXTERNAL LOCATION} | & | -| main.rs:2642:18:2642:26 | &strings1 | TRef.TArray.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2642:19:2642:26 | strings1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2642:19:2642:26 | strings1 | TArray | {EXTERNAL LOCATION} | & | -| main.rs:2642:19:2642:26 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2642:28:2642:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2643:9:2643:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2643:13:2643:13 | s | | {EXTERNAL LOCATION} | &mut | -| main.rs:2643:13:2643:13 | s | TRefMut | {EXTERNAL LOCATION} | & | -| main.rs:2643:13:2643:13 | s | TRefMut.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2643:18:2643:30 | &mut strings1 | | {EXTERNAL LOCATION} | &mut | -| main.rs:2643:18:2643:30 | &mut strings1 | TRefMut | {EXTERNAL LOCATION} | [;] | -| main.rs:2643:18:2643:30 | &mut strings1 | TRefMut.TArray | {EXTERNAL LOCATION} | & | -| main.rs:2643:18:2643:30 | &mut strings1 | TRefMut.TArray.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2643:23:2643:30 | strings1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2643:23:2643:30 | strings1 | TArray | {EXTERNAL LOCATION} | & | -| main.rs:2643:23:2643:30 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2643:32:2643:33 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2644:9:2644:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2644:13:2644:13 | s | | {EXTERNAL LOCATION} | & | -| main.rs:2644:13:2644:13 | s | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2644:18:2644:25 | strings1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2644:18:2644:25 | strings1 | TArray | {EXTERNAL LOCATION} | & | -| main.rs:2644:18:2644:25 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2644:27:2644:28 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2646:13:2646:20 | strings2 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2646:13:2646:20 | strings2 | TArray | {EXTERNAL LOCATION} | String | -| main.rs:2647:9:2651:9 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2647:9:2651:9 | [...] | TArray | {EXTERNAL LOCATION} | String | -| main.rs:2648:13:2648:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2648:26:2648:30 | "foo" | | {EXTERNAL LOCATION} | & | -| main.rs:2648:26:2648:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2649:13:2649:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2649:26:2649:30 | "bar" | | {EXTERNAL LOCATION} | & | -| main.rs:2649:26:2649:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2650:13:2650:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2650:26:2650:30 | "baz" | | {EXTERNAL LOCATION} | & | -| main.rs:2650:26:2650:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2652:9:2652:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2652:13:2652:13 | s | | {EXTERNAL LOCATION} | String | -| main.rs:2652:18:2652:25 | strings2 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2652:18:2652:25 | strings2 | TArray | {EXTERNAL LOCATION} | String | -| main.rs:2652:27:2652:28 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2654:13:2654:20 | strings3 | | {EXTERNAL LOCATION} | & | -| main.rs:2654:13:2654:20 | strings3 | TRef | {EXTERNAL LOCATION} | [;] | -| main.rs:2654:13:2654:20 | strings3 | TRef.TArray | {EXTERNAL LOCATION} | String | -| main.rs:2655:9:2659:9 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2655:9:2659:9 | &... | TRef | {EXTERNAL LOCATION} | [;] | -| main.rs:2655:9:2659:9 | &... | TRef.TArray | {EXTERNAL LOCATION} | String | -| main.rs:2655:10:2659:9 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2655:10:2659:9 | [...] | TArray | {EXTERNAL LOCATION} | String | -| main.rs:2656:13:2656:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2656:26:2656:30 | "foo" | | {EXTERNAL LOCATION} | & | -| main.rs:2656:26:2656:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2657:13:2657:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2657:26:2657:30 | "bar" | | {EXTERNAL LOCATION} | & | -| main.rs:2657:26:2657:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2658:13:2658:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2658:26:2658:30 | "baz" | | {EXTERNAL LOCATION} | & | -| main.rs:2658:26:2658:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2660:9:2660:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2660:13:2660:13 | s | | {EXTERNAL LOCATION} | & | -| main.rs:2660:13:2660:13 | s | TRef | {EXTERNAL LOCATION} | String | -| main.rs:2660:18:2660:25 | strings3 | | {EXTERNAL LOCATION} | & | -| main.rs:2660:18:2660:25 | strings3 | TRef | {EXTERNAL LOCATION} | [;] | -| main.rs:2660:18:2660:25 | strings3 | TRef.TArray | {EXTERNAL LOCATION} | String | -| main.rs:2660:27:2660:28 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2662:13:2662:21 | callables | | {EXTERNAL LOCATION} | [;] | -| main.rs:2662:13:2662:21 | callables | TArray | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2662:25:2662:81 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2662:25:2662:81 | [...] | TArray | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2662:26:2662:42 | ...::new(...) | | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2662:45:2662:61 | ...::new(...) | | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2662:64:2662:80 | ...::new(...) | | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2663:9:2667:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2663:13:2663:13 | c | | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2664:12:2664:20 | callables | | {EXTERNAL LOCATION} | [;] | -| main.rs:2664:12:2664:20 | callables | TArray | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2665:9:2667:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2666:17:2666:22 | result | | {EXTERNAL LOCATION} | i64 | -| main.rs:2666:26:2666:26 | c | | main.rs:2610:5:2610:24 | MyCallable | -| main.rs:2666:26:2666:33 | c.call() | | {EXTERNAL LOCATION} | i64 | -| main.rs:2671:9:2671:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2671:13:2671:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2671:18:2671:18 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2671:18:2671:22 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2671:18:2671:22 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2671:21:2671:22 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2671:24:2671:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2672:9:2672:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2672:13:2672:13 | u | | {EXTERNAL LOCATION} | Range | -| main.rs:2672:13:2672:13 | u | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2672:13:2672:13 | u | Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2672:18:2672:26 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2672:18:2672:26 | [...] | TArray | {EXTERNAL LOCATION} | Range | -| main.rs:2672:18:2672:26 | [...] | TArray.Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2672:18:2672:26 | [...] | TArray.Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2672:19:2672:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2672:19:2672:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2672:19:2672:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2672:19:2672:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2672:24:2672:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2672:24:2672:25 | 10 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2672:28:2672:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2673:13:2673:17 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2673:13:2673:17 | range | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2673:21:2673:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2673:21:2673:25 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2673:21:2673:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2673:24:2673:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2674:9:2674:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2674:13:2674:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2674:18:2674:22 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2674:18:2674:22 | range | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2674:24:2674:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2675:13:2675:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2675:26:2675:27 | .. | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2676:9:2676:51 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2676:18:2676:48 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2676:19:2676:36 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2676:19:2676:36 | [...] | TArray | {EXTERNAL LOCATION} | i64 | -| main.rs:2676:20:2676:23 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2676:26:2676:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2676:32:2676:35 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2676:38:2676:47 | range_full | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2676:50:2676:51 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2678:13:2678:18 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2678:13:2678:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2679:9:2682:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | -| main.rs:2679:9:2682:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2680:20:2680:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2681:18:2681:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2683:9:2683:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2683:13:2683:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2683:18:2683:23 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2683:18:2683:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2683:25:2683:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2687:13:2687:17 | vals3 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2687:21:2687:33 | MacroExpr | | {EXTERNAL LOCATION} | Vec | -| main.rs:2687:26:2687:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2687:29:2687:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2687:32:2687:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2688:9:2688:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2688:18:2688:22 | vals3 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2688:24:2688:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2690:13:2690:18 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2690:13:2690:18 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2690:13:2690:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2690:32:2690:43 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2690:32:2690:43 | [...] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:2690:32:2690:43 | [...] | TArray | {EXTERNAL LOCATION} | u16 | -| main.rs:2690:32:2690:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2690:32:2690:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2690:32:2690:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2690:33:2690:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2690:39:2690:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2690:42:2690:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2691:9:2691:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2691:13:2691:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2691:18:2691:23 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2691:18:2691:23 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2691:18:2691:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2691:25:2691:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2693:22:2693:33 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2693:22:2693:33 | [...] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:2693:22:2693:33 | [...] | TArray | {EXTERNAL LOCATION} | u16 | -| main.rs:2693:23:2693:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2693:29:2693:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2693:32:2693:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2694:9:2694:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2694:25:2694:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2696:13:2696:17 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2696:13:2696:17 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2696:13:2696:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2696:13:2696:17 | vals5 | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2696:21:2696:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2696:21:2696:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2696:21:2696:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2696:21:2696:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2696:31:2696:42 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2696:31:2696:42 | [...] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:2696:31:2696:42 | [...] | TArray | {EXTERNAL LOCATION} | u32 | -| main.rs:2696:32:2696:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2696:38:2696:38 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2696:41:2696:41 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2697:9:2697:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2697:13:2697:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2697:13:2697:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2697:18:2697:22 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2697:18:2697:22 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2697:18:2697:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2697:18:2697:22 | vals5 | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2697:24:2697:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2699:13:2699:17 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2699:13:2699:17 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2699:13:2699:17 | vals6 | T | {EXTERNAL LOCATION} | & | -| main.rs:2699:13:2699:17 | vals6 | T.TRef | {EXTERNAL LOCATION} | u64 | -| main.rs:2699:32:2699:43 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2699:32:2699:43 | [...] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:2699:32:2699:43 | [...] | TArray | {EXTERNAL LOCATION} | u64 | -| main.rs:2699:32:2699:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2699:32:2699:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2699:32:2699:60 | ... .collect() | T | {EXTERNAL LOCATION} | & | -| main.rs:2699:32:2699:60 | ... .collect() | T.TRef | {EXTERNAL LOCATION} | u64 | -| main.rs:2699:33:2699:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2699:39:2699:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2699:42:2699:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2700:9:2700:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2700:13:2700:13 | u | | {EXTERNAL LOCATION} | & | -| main.rs:2700:13:2700:13 | u | TRef | {EXTERNAL LOCATION} | u64 | -| main.rs:2700:18:2700:22 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2700:18:2700:22 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2700:18:2700:22 | vals6 | T | {EXTERNAL LOCATION} | & | -| main.rs:2700:18:2700:22 | vals6 | T.TRef | {EXTERNAL LOCATION} | u64 | -| main.rs:2700:24:2700:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2702:17:2702:21 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2702:17:2702:21 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2702:17:2702:21 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2702:25:2702:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2702:25:2702:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2702:25:2702:34 | ...::new(...) | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2703:9:2703:13 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2703:9:2703:13 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2703:9:2703:13 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2703:9:2703:23 | vals7.push(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2703:20:2703:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2704:9:2704:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2704:13:2704:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2704:18:2704:22 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2704:18:2704:22 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2704:18:2704:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2704:24:2704:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2706:13:2706:19 | matrix1 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2706:23:2706:50 | MacroExpr | | {EXTERNAL LOCATION} | Vec | -| main.rs:2706:28:2706:37 | (...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2706:28:2706:37 | MacroExpr | | {EXTERNAL LOCATION} | Vec | -| main.rs:2706:33:2706:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2706:36:2706:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2706:40:2706:49 | (...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2706:40:2706:49 | MacroExpr | | {EXTERNAL LOCATION} | Vec | -| main.rs:2706:45:2706:45 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2706:48:2706:48 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2708:13:2708:13 | _ | | {EXTERNAL LOCATION} | () | -| main.rs:2708:17:2711:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2708:28:2708:34 | matrix1 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2708:36:2711:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2709:13:2710:13 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2709:29:2710:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2713:17:2713:20 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2713:17:2713:20 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2713:17:2713:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2713:17:2713:20 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2713:17:2713:20 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2713:17:2713:20 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2713:17:2713:20 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2713:24:2713:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2713:24:2713:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2713:24:2713:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2713:24:2713:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | -| main.rs:2713:24:2713:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2713:24:2713:55 | ...::new(...) | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2713:24:2713:55 | ...::new(...) | V.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2714:9:2714:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2714:9:2714:12 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2714:9:2714:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2714:9:2714:12 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2714:9:2714:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2714:9:2714:12 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2714:9:2714:12 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2714:9:2714:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2714:9:2714:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2714:9:2714:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2714:9:2714:39 | map1.insert(...) | T.T | {EXTERNAL LOCATION} | & | -| main.rs:2714:9:2714:39 | map1.insert(...) | T.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2714:21:2714:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2714:24:2714:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2714:24:2714:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2714:24:2714:38 | ...::new(...) | T | {EXTERNAL LOCATION} | & | -| main.rs:2714:24:2714:38 | ...::new(...) | T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2714:33:2714:37 | "one" | | {EXTERNAL LOCATION} | & | -| main.rs:2714:33:2714:37 | "one" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2715:9:2715:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2715:9:2715:12 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2715:9:2715:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2715:9:2715:12 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2715:9:2715:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2715:9:2715:12 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2715:9:2715:12 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2715:9:2715:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2715:9:2715:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2715:9:2715:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2715:9:2715:39 | map1.insert(...) | T.T | {EXTERNAL LOCATION} | & | -| main.rs:2715:9:2715:39 | map1.insert(...) | T.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2715:21:2715:21 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2715:24:2715:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2715:24:2715:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2715:24:2715:38 | ...::new(...) | T | {EXTERNAL LOCATION} | & | -| main.rs:2715:24:2715:38 | ...::new(...) | T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2715:33:2715:37 | "two" | | {EXTERNAL LOCATION} | & | -| main.rs:2715:33:2715:37 | "two" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2716:9:2716:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2716:13:2716:15 | key | | {EXTERNAL LOCATION} | & | -| main.rs:2716:13:2716:15 | key | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:2716:20:2716:23 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2716:20:2716:23 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2716:20:2716:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2716:20:2716:23 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2716:20:2716:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2716:20:2716:23 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2716:20:2716:23 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2716:20:2716:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | -| main.rs:2716:20:2716:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2716:20:2716:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2716:20:2716:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2716:20:2716:30 | map1.keys() | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2716:20:2716:30 | map1.keys() | V.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2716:32:2716:33 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2717:9:2717:37 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2717:13:2717:17 | value | | {EXTERNAL LOCATION} | & | -| main.rs:2717:13:2717:17 | value | TRef | {EXTERNAL LOCATION} | Box | -| main.rs:2717:13:2717:17 | value | TRef.A | {EXTERNAL LOCATION} | Global | -| main.rs:2717:13:2717:17 | value | TRef.T | {EXTERNAL LOCATION} | & | -| main.rs:2717:13:2717:17 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2717:22:2717:25 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2717:22:2717:25 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2717:22:2717:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2717:22:2717:25 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2717:22:2717:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2717:22:2717:25 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2717:22:2717:25 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2717:22:2717:34 | map1.values() | | {EXTERNAL LOCATION} | Values | -| main.rs:2717:22:2717:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2717:22:2717:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2717:22:2717:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2717:22:2717:34 | map1.values() | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2717:22:2717:34 | map1.values() | V.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2717:36:2717:37 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2718:9:2718:42 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2718:13:2718:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2718:13:2718:24 | TuplePat | T0 | {EXTERNAL LOCATION} | & | -| main.rs:2718:13:2718:24 | TuplePat | T0.TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:2718:13:2718:24 | TuplePat | T1 | {EXTERNAL LOCATION} | & | -| main.rs:2718:13:2718:24 | TuplePat | T1.TRef | {EXTERNAL LOCATION} | Box | -| main.rs:2718:13:2718:24 | TuplePat | T1.TRef.A | {EXTERNAL LOCATION} | Global | -| main.rs:2718:13:2718:24 | TuplePat | T1.TRef.T | {EXTERNAL LOCATION} | & | -| main.rs:2718:13:2718:24 | TuplePat | T1.TRef.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2718:14:2718:16 | key | | {EXTERNAL LOCATION} | & | -| main.rs:2718:14:2718:16 | key | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:2718:19:2718:23 | value | | {EXTERNAL LOCATION} | & | -| main.rs:2718:19:2718:23 | value | TRef | {EXTERNAL LOCATION} | Box | -| main.rs:2718:19:2718:23 | value | TRef.A | {EXTERNAL LOCATION} | Global | -| main.rs:2718:19:2718:23 | value | TRef.T | {EXTERNAL LOCATION} | & | -| main.rs:2718:19:2718:23 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2718:29:2718:32 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2718:29:2718:32 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2718:29:2718:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2718:29:2718:32 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2718:29:2718:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2718:29:2718:32 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2718:29:2718:32 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2718:29:2718:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | -| main.rs:2718:29:2718:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2718:29:2718:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2718:29:2718:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2718:29:2718:39 | map1.iter() | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2718:29:2718:39 | map1.iter() | V.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2718:41:2718:42 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2719:9:2719:36 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2719:13:2719:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2719:13:2719:24 | TuplePat | T0 | {EXTERNAL LOCATION} | & | -| main.rs:2719:13:2719:24 | TuplePat | T0.TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:2719:13:2719:24 | TuplePat | T1 | {EXTERNAL LOCATION} | & | -| main.rs:2719:13:2719:24 | TuplePat | T1.TRef | {EXTERNAL LOCATION} | Box | -| main.rs:2719:13:2719:24 | TuplePat | T1.TRef.A | {EXTERNAL LOCATION} | Global | -| main.rs:2719:13:2719:24 | TuplePat | T1.TRef.T | {EXTERNAL LOCATION} | & | -| main.rs:2719:13:2719:24 | TuplePat | T1.TRef.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2719:14:2719:16 | key | | {EXTERNAL LOCATION} | & | -| main.rs:2719:14:2719:16 | key | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:2719:19:2719:23 | value | | {EXTERNAL LOCATION} | & | -| main.rs:2719:19:2719:23 | value | TRef | {EXTERNAL LOCATION} | Box | -| main.rs:2719:19:2719:23 | value | TRef.A | {EXTERNAL LOCATION} | Global | -| main.rs:2719:19:2719:23 | value | TRef.T | {EXTERNAL LOCATION} | & | -| main.rs:2719:19:2719:23 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2719:29:2719:33 | &map1 | | {EXTERNAL LOCATION} | & | -| main.rs:2719:29:2719:33 | &map1 | TRef | {EXTERNAL LOCATION} | HashMap | -| main.rs:2719:29:2719:33 | &map1 | TRef.K | {EXTERNAL LOCATION} | i32 | -| main.rs:2719:29:2719:33 | &map1 | TRef.S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2719:29:2719:33 | &map1 | TRef.V | {EXTERNAL LOCATION} | Box | -| main.rs:2719:29:2719:33 | &map1 | TRef.V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2719:29:2719:33 | &map1 | TRef.V.T | {EXTERNAL LOCATION} | & | -| main.rs:2719:29:2719:33 | &map1 | TRef.V.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2719:30:2719:33 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2719:30:2719:33 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2719:30:2719:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2719:30:2719:33 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2719:30:2719:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2719:30:2719:33 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2719:30:2719:33 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | -| main.rs:2719:35:2719:36 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2723:17:2723:17 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2723:26:2723:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2723:26:2723:26 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2725:13:2725:13 | _ | | {EXTERNAL LOCATION} | () | -| main.rs:2725:17:2728:9 | while ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2725:23:2725:23 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2725:23:2725:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2725:27:2725:28 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2726:9:2728:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2727:13:2727:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2727:13:2727:18 | ... += ... | | {EXTERNAL LOCATION} | () | -| main.rs:2727:18:2727:18 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:40:2741:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2739:40:2741:9 | { ... } | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2739:40:2741:9 | { ... } | T.T | main.rs:2738:10:2738:19 | T | -| main.rs:2740:13:2740:16 | None | | {EXTERNAL LOCATION} | Option | -| main.rs:2740:13:2740:16 | None | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2740:13:2740:16 | None | T.T | main.rs:2738:10:2738:19 | T | -| main.rs:2743:30:2745:9 | { ... } | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2743:30:2745:9 | { ... } | T | main.rs:2738:10:2738:19 | T | -| main.rs:2744:13:2744:28 | S1(...) | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2744:13:2744:28 | S1(...) | T | main.rs:2738:10:2738:19 | T | -| main.rs:2744:16:2744:27 | ...::default(...) | | main.rs:2738:10:2738:19 | T | -| main.rs:2747:19:2747:22 | SelfParam | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2747:19:2747:22 | SelfParam | T | main.rs:2738:10:2738:19 | T | -| main.rs:2747:33:2749:9 | { ... } | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2747:33:2749:9 | { ... } | T | main.rs:2738:10:2738:19 | T | -| main.rs:2748:13:2748:16 | self | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2748:13:2748:16 | self | T | main.rs:2738:10:2738:19 | T | -| main.rs:2760:15:2760:15 | x | | main.rs:2760:12:2760:12 | T | -| main.rs:2760:26:2762:5 | { ... } | | main.rs:2760:12:2760:12 | T | -| main.rs:2761:9:2761:9 | x | | main.rs:2760:12:2760:12 | T | -| main.rs:2764:16:2786:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2765:13:2765:14 | x1 | | {EXTERNAL LOCATION} | Option | -| main.rs:2765:13:2765:14 | x1 | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2765:13:2765:14 | x1 | T.T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2765:34:2765:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2765:34:2765:48 | ...::assoc_fun(...) | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2765:34:2765:48 | ...::assoc_fun(...) | T.T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2766:13:2766:14 | x2 | | {EXTERNAL LOCATION} | Option | -| main.rs:2766:13:2766:14 | x2 | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2766:13:2766:14 | x2 | T.T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2766:18:2766:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2766:18:2766:38 | ...::assoc_fun(...) | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2766:18:2766:38 | ...::assoc_fun(...) | T.T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2767:13:2767:14 | x3 | | {EXTERNAL LOCATION} | Option | -| main.rs:2767:13:2767:14 | x3 | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2767:13:2767:14 | x3 | T.T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2767:18:2767:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2767:18:2767:32 | ...::assoc_fun(...) | T | main.rs:2733:5:2733:20 | S1 | -| main.rs:2767:18:2767:32 | ...::assoc_fun(...) | T.T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2768:13:2768:14 | x4 | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2768:13:2768:14 | x4 | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2768:18:2768:48 | ...::method(...) | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2768:18:2768:48 | ...::method(...) | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2768:35:2768:47 | ...::default(...) | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2768:35:2768:47 | ...::default(...) | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2769:13:2769:14 | x5 | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2769:13:2769:14 | x5 | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2769:18:2769:42 | ...::method(...) | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2769:18:2769:42 | ...::method(...) | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2769:29:2769:41 | ...::default(...) | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2769:29:2769:41 | ...::default(...) | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2770:13:2770:14 | x6 | | main.rs:2754:5:2754:27 | S4 | -| main.rs:2770:13:2770:14 | x6 | T4 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2770:18:2770:45 | S4::<...>(...) | | main.rs:2754:5:2754:27 | S4 | -| main.rs:2770:18:2770:45 | S4::<...>(...) | T4 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2770:27:2770:44 | ...::default(...) | | main.rs:2735:5:2736:14 | S2 | -| main.rs:2771:13:2771:14 | x7 | | main.rs:2754:5:2754:27 | S4 | -| main.rs:2771:13:2771:14 | x7 | T4 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2771:18:2771:23 | S4(...) | | main.rs:2754:5:2754:27 | S4 | -| main.rs:2771:18:2771:23 | S4(...) | T4 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2771:21:2771:22 | S2 | | main.rs:2735:5:2736:14 | S2 | -| main.rs:2772:13:2772:14 | x8 | | main.rs:2754:5:2754:27 | S4 | -| main.rs:2772:13:2772:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 | -| main.rs:2772:18:2772:22 | S4(...) | | main.rs:2754:5:2754:27 | S4 | -| main.rs:2772:18:2772:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 | -| main.rs:2772:21:2772:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2773:13:2773:14 | x9 | | main.rs:2754:5:2754:27 | S4 | -| main.rs:2773:13:2773:14 | x9 | T4 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2773:18:2773:34 | S4(...) | | main.rs:2754:5:2754:27 | S4 | -| main.rs:2773:18:2773:34 | S4(...) | T4 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2773:21:2773:33 | ...::default(...) | | main.rs:2735:5:2736:14 | S2 | -| main.rs:2774:13:2774:15 | x10 | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2774:13:2774:15 | x10 | T5 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2774:19:2777:9 | S5::<...> {...} | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2774:19:2777:9 | S5::<...> {...} | T5 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2776:20:2776:37 | ...::default(...) | | main.rs:2735:5:2736:14 | S2 | -| main.rs:2778:13:2778:15 | x11 | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2778:13:2778:15 | x11 | T5 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2778:19:2778:34 | S5 {...} | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2778:19:2778:34 | S5 {...} | T5 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2778:31:2778:32 | S2 | | main.rs:2735:5:2736:14 | S2 | -| main.rs:2779:13:2779:15 | x12 | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2779:13:2779:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:2779:19:2779:33 | S5 {...} | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2779:19:2779:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:2779:31:2779:31 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2780:13:2780:15 | x13 | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2780:13:2780:15 | x13 | T5 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2780:19:2783:9 | S5 {...} | | main.rs:2756:5:2758:5 | S5 | -| main.rs:2780:19:2783:9 | S5 {...} | T5 | main.rs:2735:5:2736:14 | S2 | -| main.rs:2782:20:2782:32 | ...::default(...) | | main.rs:2735:5:2736:14 | S2 | -| main.rs:2784:13:2784:15 | x14 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2784:19:2784:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2784:30:2784:47 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2785:13:2785:15 | x15 | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2785:13:2785:15 | x15 | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2785:19:2785:37 | ...::default(...) | | main.rs:2733:5:2733:20 | S1 | -| main.rs:2785:19:2785:37 | ...::default(...) | T | main.rs:2735:5:2736:14 | S2 | -| main.rs:2794:35:2796:9 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2794:35:2796:9 | { ... } | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2794:35:2796:9 | { ... } | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2795:13:2795:26 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2795:13:2795:26 | TupleExpr | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2795:13:2795:26 | TupleExpr | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2795:14:2795:18 | S1 {...} | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2795:21:2795:25 | S1 {...} | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2797:16:2797:19 | SelfParam | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2797:22:2797:23 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2800:16:2834:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2801:13:2801:13 | a | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2801:13:2801:13 | a | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2801:13:2801:13 | a | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2801:17:2801:30 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2801:17:2801:30 | ...::get_pair(...) | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2801:17:2801:30 | ...::get_pair(...) | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2802:17:2802:17 | b | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2802:17:2802:17 | b | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2802:17:2802:17 | b | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2802:21:2802:34 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2802:21:2802:34 | ...::get_pair(...) | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2802:21:2802:34 | ...::get_pair(...) | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2803:13:2803:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2803:13:2803:18 | TuplePat | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2803:13:2803:18 | TuplePat | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2803:14:2803:14 | c | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2803:17:2803:17 | d | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2803:22:2803:35 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2803:22:2803:35 | ...::get_pair(...) | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2803:22:2803:35 | ...::get_pair(...) | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2804:13:2804:22 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2804:13:2804:22 | TuplePat | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2804:13:2804:22 | TuplePat | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2804:18:2804:18 | e | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2804:21:2804:21 | f | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2804:26:2804:39 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2804:26:2804:39 | ...::get_pair(...) | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2804:26:2804:39 | ...::get_pair(...) | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2805:13:2805:26 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2805:13:2805:26 | TuplePat | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2805:13:2805:26 | TuplePat | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2805:18:2805:18 | g | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2805:25:2805:25 | h | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2805:30:2805:43 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2805:30:2805:43 | ...::get_pair(...) | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2805:30:2805:43 | ...::get_pair(...) | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2807:9:2807:9 | a | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2807:9:2807:9 | a | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2807:9:2807:9 | a | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2807:9:2807:11 | a.0 | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2807:9:2807:17 | ... .foo() | | {EXTERNAL LOCATION} | () | -| main.rs:2808:9:2808:9 | b | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2808:9:2808:9 | b | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2808:9:2808:9 | b | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2808:9:2808:11 | b.1 | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2808:9:2808:17 | ... .foo() | | {EXTERNAL LOCATION} | () | -| main.rs:2809:9:2809:9 | c | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2809:9:2809:15 | c.foo() | | {EXTERNAL LOCATION} | () | -| main.rs:2810:9:2810:9 | d | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2810:9:2810:15 | d.foo() | | {EXTERNAL LOCATION} | () | -| main.rs:2811:9:2811:9 | e | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2811:9:2811:15 | e.foo() | | {EXTERNAL LOCATION} | () | -| main.rs:2812:9:2812:9 | f | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2812:9:2812:15 | f.foo() | | {EXTERNAL LOCATION} | () | -| main.rs:2813:9:2813:9 | g | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2813:9:2813:15 | g.foo() | | {EXTERNAL LOCATION} | () | -| main.rs:2814:9:2814:9 | h | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2814:9:2814:15 | h.foo() | | {EXTERNAL LOCATION} | () | -| main.rs:2819:13:2819:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2819:17:2819:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2820:13:2820:13 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2820:17:2820:34 | ...::default(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2821:13:2821:16 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2821:13:2821:16 | pair | T0 | {EXTERNAL LOCATION} | i64 | -| main.rs:2821:13:2821:16 | pair | T1 | {EXTERNAL LOCATION} | bool | -| main.rs:2821:20:2821:25 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2821:20:2821:25 | TupleExpr | T0 | {EXTERNAL LOCATION} | i64 | -| main.rs:2821:20:2821:25 | TupleExpr | T1 | {EXTERNAL LOCATION} | bool | -| main.rs:2821:21:2821:21 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2821:24:2821:24 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2822:13:2822:13 | i | | {EXTERNAL LOCATION} | i64 | -| main.rs:2822:22:2822:25 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2822:22:2822:25 | pair | T0 | {EXTERNAL LOCATION} | i64 | -| main.rs:2822:22:2822:25 | pair | T1 | {EXTERNAL LOCATION} | bool | -| main.rs:2822:22:2822:27 | pair.0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2823:13:2823:13 | j | | {EXTERNAL LOCATION} | bool | -| main.rs:2823:23:2823:26 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2823:23:2823:26 | pair | T0 | {EXTERNAL LOCATION} | i64 | -| main.rs:2823:23:2823:26 | pair | T1 | {EXTERNAL LOCATION} | bool | -| main.rs:2823:23:2823:28 | pair.1 | | {EXTERNAL LOCATION} | bool | -| main.rs:2825:13:2825:16 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2825:13:2825:16 | pair | T0 | {EXTERNAL LOCATION} | i32 | -| main.rs:2825:13:2825:16 | pair | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2825:20:2825:25 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2825:20:2825:25 | [...] | TArray | {EXTERNAL LOCATION} | i32 | -| main.rs:2825:20:2825:32 | ... .into() | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2825:20:2825:32 | ... .into() | T0 | {EXTERNAL LOCATION} | i32 | -| main.rs:2825:20:2825:32 | ... .into() | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2825:21:2825:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2825:24:2825:24 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2826:9:2829:9 | match pair { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2826:15:2826:18 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2826:15:2826:18 | pair | T0 | {EXTERNAL LOCATION} | i32 | -| main.rs:2826:15:2826:18 | pair | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2827:13:2827:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2827:13:2827:18 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | -| main.rs:2827:13:2827:18 | TuplePat | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2827:14:2827:14 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2827:17:2827:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2827:23:2827:42 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:2827:30:2827:41 | "unexpected" | | {EXTERNAL LOCATION} | & | -| main.rs:2827:30:2827:41 | "unexpected" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2827:30:2827:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2827:30:2827:41 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2828:13:2828:13 | _ | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2828:13:2828:13 | _ | T0 | {EXTERNAL LOCATION} | i32 | -| main.rs:2828:13:2828:13 | _ | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2828:18:2828:35 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:2828:25:2828:34 | "expected" | | {EXTERNAL LOCATION} | & | -| main.rs:2828:25:2828:34 | "expected" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2828:25:2828:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2828:25:2828:34 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2830:13:2830:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2830:17:2830:20 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2830:17:2830:20 | pair | T0 | {EXTERNAL LOCATION} | i32 | -| main.rs:2830:17:2830:20 | pair | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2830:17:2830:22 | pair.0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2832:13:2832:13 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2832:13:2832:13 | y | TRef | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2832:13:2832:13 | y | TRef.T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2832:13:2832:13 | y | TRef.T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2832:17:2832:31 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2832:17:2832:31 | &... | TRef | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2832:17:2832:31 | &... | TRef.T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2832:17:2832:31 | &... | TRef.T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2832:18:2832:31 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2832:18:2832:31 | ...::get_pair(...) | T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2832:18:2832:31 | ...::get_pair(...) | T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2833:9:2833:9 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2833:9:2833:9 | y | TRef | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2833:9:2833:9 | y | TRef.T0 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2833:9:2833:9 | y | TRef.T1 | main.rs:2790:5:2791:16 | S1 | -| main.rs:2833:9:2833:11 | y.0 | | main.rs:2790:5:2791:16 | S1 | -| main.rs:2833:9:2833:17 | ... .foo() | | {EXTERNAL LOCATION} | () | -| main.rs:2839:27:2861:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2840:13:2840:23 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2840:13:2840:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | -| main.rs:2840:13:2840:23 | boxed_value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2840:27:2840:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2840:27:2840:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2840:27:2840:42 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2840:36:2840:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2843:9:2851:9 | match boxed_value { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2843:15:2843:25 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2843:15:2843:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | -| main.rs:2843:15:2843:25 | boxed_value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2844:13:2844:19 | box 100 | | {EXTERNAL LOCATION} | Box | -| main.rs:2844:13:2844:19 | box 100 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2844:13:2844:19 | box 100 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2844:17:2844:19 | 100 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2844:24:2846:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2845:17:2845:37 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:2845:26:2845:36 | "Boxed 100\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2845:26:2845:36 | "Boxed 100\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2845:26:2845:36 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2845:26:2845:36 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2845:26:2845:36 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2847:13:2847:17 | box ... | | {EXTERNAL LOCATION} | Box | -| main.rs:2847:13:2847:17 | box ... | A | {EXTERNAL LOCATION} | Global | -| main.rs:2847:13:2847:17 | box ... | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2847:22:2850:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2849:17:2849:52 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:2849:26:2849:42 | "Boxed value: {}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2849:26:2849:42 | "Boxed value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2849:26:2849:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2849:26:2849:51 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2849:26:2849:51 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2854:13:2854:22 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2854:13:2854:22 | nested_box | A | {EXTERNAL LOCATION} | Global | -| main.rs:2854:13:2854:22 | nested_box | T | {EXTERNAL LOCATION} | Box | -| main.rs:2854:13:2854:22 | nested_box | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2854:13:2854:22 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2854:26:2854:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2854:26:2854:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2854:26:2854:50 | ...::new(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2854:26:2854:50 | ...::new(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2854:26:2854:50 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2854:35:2854:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2854:35:2854:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2854:35:2854:49 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2854:44:2854:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2855:9:2860:9 | match nested_box { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2855:15:2855:24 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2855:15:2855:24 | nested_box | A | {EXTERNAL LOCATION} | Global | -| main.rs:2855:15:2855:24 | nested_box | T | {EXTERNAL LOCATION} | Box | -| main.rs:2855:15:2855:24 | nested_box | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2855:15:2855:24 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2856:13:2856:21 | box ... | | {EXTERNAL LOCATION} | Box | -| main.rs:2856:13:2856:21 | box ... | A | {EXTERNAL LOCATION} | Global | -| main.rs:2856:13:2856:21 | box ... | T | {EXTERNAL LOCATION} | Box | -| main.rs:2856:13:2856:21 | box ... | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2856:13:2856:21 | box ... | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2856:26:2859:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2858:17:2858:60 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:2858:26:2858:43 | "Nested boxed: {}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2858:26:2858:43 | "Nested boxed: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2858:26:2858:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2858:26:2858:59 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2858:26:2858:59 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2870:36:2872:9 | { ... } | | main.rs:2867:5:2867:22 | Path | -| main.rs:2871:13:2871:19 | Path {...} | | main.rs:2867:5:2867:22 | Path | -| main.rs:2874:29:2874:33 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2874:29:2874:33 | SelfParam | TRef | main.rs:2867:5:2867:22 | Path | -| main.rs:2874:59:2876:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:2874:59:2876:9 | { ... } | E | {EXTERNAL LOCATION} | () | -| main.rs:2874:59:2876:9 | { ... } | T | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2875:13:2875:30 | Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2875:13:2875:30 | Ok(...) | E | {EXTERNAL LOCATION} | () | -| main.rs:2875:13:2875:30 | Ok(...) | T | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2875:16:2875:29 | ...::new(...) | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2882:39:2884:9 | { ... } | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2883:13:2883:22 | PathBuf {...} | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2892:18:2892:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2892:18:2892:22 | SelfParam | TRef | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2892:34:2896:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2892:34:2896:9 | { ... } | TRef | main.rs:2867:5:2867:22 | Path | -| main.rs:2894:33:2894:43 | ...::new(...) | | main.rs:2867:5:2867:22 | Path | -| main.rs:2895:13:2895:17 | &path | | {EXTERNAL LOCATION} | & | -| main.rs:2895:13:2895:17 | &path | TRef | main.rs:2867:5:2867:22 | Path | -| main.rs:2895:14:2895:17 | path | | main.rs:2867:5:2867:22 | Path | -| main.rs:2899:16:2907:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2900:13:2900:17 | path1 | | main.rs:2867:5:2867:22 | Path | -| main.rs:2900:21:2900:31 | ...::new(...) | | main.rs:2867:5:2867:22 | Path | -| main.rs:2901:13:2901:17 | path2 | | {EXTERNAL LOCATION} | Result | -| main.rs:2901:13:2901:17 | path2 | E | {EXTERNAL LOCATION} | () | -| main.rs:2901:13:2901:17 | path2 | T | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2901:21:2901:25 | path1 | | main.rs:2867:5:2867:22 | Path | -| main.rs:2901:21:2901:40 | path1.canonicalize() | | {EXTERNAL LOCATION} | Result | -| main.rs:2901:21:2901:40 | path1.canonicalize() | E | {EXTERNAL LOCATION} | () | -| main.rs:2901:21:2901:40 | path1.canonicalize() | T | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2902:13:2902:17 | path3 | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2902:21:2902:25 | path2 | | {EXTERNAL LOCATION} | Result | -| main.rs:2902:21:2902:25 | path2 | E | {EXTERNAL LOCATION} | () | -| main.rs:2902:21:2902:25 | path2 | T | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2902:21:2902:34 | path2.unwrap() | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2904:13:2904:20 | pathbuf1 | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2904:24:2904:37 | ...::new(...) | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2905:13:2905:20 | pathbuf2 | | {EXTERNAL LOCATION} | Result | -| main.rs:2905:13:2905:20 | pathbuf2 | E | {EXTERNAL LOCATION} | () | -| main.rs:2905:13:2905:20 | pathbuf2 | T | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2905:24:2905:31 | pathbuf1 | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2905:24:2905:46 | pathbuf1.canonicalize() | | {EXTERNAL LOCATION} | Result | -| main.rs:2905:24:2905:46 | pathbuf1.canonicalize() | E | {EXTERNAL LOCATION} | () | -| main.rs:2905:24:2905:46 | pathbuf1.canonicalize() | T | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2906:13:2906:20 | pathbuf3 | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2906:24:2906:31 | pathbuf2 | | {EXTERNAL LOCATION} | Result | -| main.rs:2906:24:2906:31 | pathbuf2 | E | {EXTERNAL LOCATION} | () | -| main.rs:2906:24:2906:31 | pathbuf2 | T | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2906:24:2906:40 | pathbuf2.unwrap() | | main.rs:2879:5:2879:25 | PathBuf | -| main.rs:2912:14:2912:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2912:14:2912:18 | SelfParam | TRef | main.rs:2911:5:2913:5 | Self [trait MyTrait] | -| main.rs:2919:14:2919:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2919:14:2919:18 | SelfParam | TRef | main.rs:2915:5:2916:19 | S | -| main.rs:2919:14:2919:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2919:28:2921:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2920:13:2920:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2920:13:2920:16 | self | TRef | main.rs:2915:5:2916:19 | S | -| main.rs:2920:13:2920:16 | self | TRef.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2920:13:2920:18 | self.0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2925:14:2925:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2925:14:2925:18 | SelfParam | TRef | main.rs:2915:5:2916:19 | S | -| main.rs:2925:14:2925:18 | SelfParam | TRef.T | main.rs:2915:5:2916:19 | S | -| main.rs:2925:14:2925:18 | SelfParam | TRef.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2925:28:2927:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2926:13:2926:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2926:13:2926:16 | self | TRef | main.rs:2915:5:2916:19 | S | -| main.rs:2926:13:2926:16 | self | TRef.T | main.rs:2915:5:2916:19 | S | -| main.rs:2926:13:2926:16 | self | TRef.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2926:13:2926:18 | self.0 | | main.rs:2915:5:2916:19 | S | -| main.rs:2926:13:2926:18 | self.0 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2926:13:2926:21 | ... .0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2931:15:2931:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2931:15:2931:19 | SelfParam | TRef | main.rs:2915:5:2916:19 | S | -| main.rs:2931:15:2931:19 | SelfParam | TRef.T | main.rs:2930:10:2930:16 | T | -| main.rs:2931:33:2933:9 | { ... } | | main.rs:2915:5:2916:19 | S | -| main.rs:2931:33:2933:9 | { ... } | T | main.rs:2915:5:2916:19 | S | -| main.rs:2931:33:2933:9 | { ... } | T.T | main.rs:2930:10:2930:16 | T | -| main.rs:2932:13:2932:24 | S(...) | | main.rs:2915:5:2916:19 | S | -| main.rs:2932:13:2932:24 | S(...) | T | main.rs:2915:5:2916:19 | S | -| main.rs:2932:13:2932:24 | S(...) | T.T | main.rs:2930:10:2930:16 | T | -| main.rs:2932:15:2932:23 | S(...) | | main.rs:2915:5:2916:19 | S | -| main.rs:2932:15:2932:23 | S(...) | T | main.rs:2930:10:2930:16 | T | -| main.rs:2932:17:2932:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2932:17:2932:20 | self | TRef | main.rs:2915:5:2916:19 | S | -| main.rs:2932:17:2932:20 | self | TRef.T | main.rs:2930:10:2930:16 | T | -| main.rs:2932:17:2932:22 | self.0 | | main.rs:2930:10:2930:16 | T | -| main.rs:2936:14:2936:14 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2936:48:2953:5 | { ... } | | {EXTERNAL LOCATION} | Box | -| main.rs:2936:48:2953:5 | { ... } | A | {EXTERNAL LOCATION} | Global | -| main.rs:2936:48:2953:5 | { ... } | T | main.rs:2911:5:2913:5 | dyn MyTrait | -| main.rs:2936:48:2953:5 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2937:13:2937:13 | x | | main.rs:2915:5:2916:19 | S | -| main.rs:2937:13:2937:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2937:17:2942:9 | if b {...} else {...} | | main.rs:2915:5:2916:19 | S | -| main.rs:2937:17:2942:9 | if b {...} else {...} | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2937:20:2937:20 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2937:22:2940:9 | { ... } | | main.rs:2915:5:2916:19 | S | -| main.rs:2937:22:2940:9 | { ... } | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2938:17:2938:17 | y | | main.rs:2915:5:2916:19 | S | -| main.rs:2938:17:2938:17 | y | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2938:21:2938:38 | ...::default(...) | | main.rs:2915:5:2916:19 | S | -| main.rs:2938:21:2938:38 | ...::default(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2939:13:2939:13 | y | | main.rs:2915:5:2916:19 | S | -| main.rs:2939:13:2939:13 | y | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2940:16:2942:9 | { ... } | | main.rs:2915:5:2916:19 | S | -| main.rs:2940:16:2942:9 | { ... } | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2941:13:2941:16 | S(...) | | main.rs:2915:5:2916:19 | S | -| main.rs:2941:13:2941:16 | S(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2941:15:2941:15 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2946:13:2946:13 | x | | main.rs:2915:5:2916:19 | S | -| main.rs:2946:13:2946:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2946:17:2946:20 | S(...) | | main.rs:2915:5:2916:19 | S | -| main.rs:2946:17:2946:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2946:19:2946:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2947:9:2952:9 | if b {...} else {...} | | {EXTERNAL LOCATION} | Box | -| main.rs:2947:9:2952:9 | if b {...} else {...} | A | {EXTERNAL LOCATION} | Global | -| main.rs:2947:9:2952:9 | if b {...} else {...} | T | main.rs:2911:5:2913:5 | dyn MyTrait | -| main.rs:2947:9:2952:9 | if b {...} else {...} | T | main.rs:2915:5:2916:19 | S | -| main.rs:2947:9:2952:9 | if b {...} else {...} | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2947:9:2952:9 | if b {...} else {...} | T.T | main.rs:2915:5:2916:19 | S | -| main.rs:2947:9:2952:9 | if b {...} else {...} | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2947:9:2952:9 | if b {...} else {...} | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2947:12:2947:12 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2947:14:2950:9 | { ... } | | {EXTERNAL LOCATION} | Box | -| main.rs:2947:14:2950:9 | { ... } | A | {EXTERNAL LOCATION} | Global | -| main.rs:2947:14:2950:9 | { ... } | T | main.rs:2911:5:2913:5 | dyn MyTrait | -| main.rs:2947:14:2950:9 | { ... } | T | main.rs:2915:5:2916:19 | S | -| main.rs:2947:14:2950:9 | { ... } | T.T | main.rs:2915:5:2916:19 | S | -| main.rs:2947:14:2950:9 | { ... } | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2947:14:2950:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2948:17:2948:17 | x | | main.rs:2915:5:2916:19 | S | -| main.rs:2948:17:2948:17 | x | T | main.rs:2915:5:2916:19 | S | -| main.rs:2948:17:2948:17 | x | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2948:21:2948:21 | x | | main.rs:2915:5:2916:19 | S | -| main.rs:2948:21:2948:21 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2948:21:2948:26 | x.m2() | | main.rs:2915:5:2916:19 | S | -| main.rs:2948:21:2948:26 | x.m2() | T | main.rs:2915:5:2916:19 | S | -| main.rs:2948:21:2948:26 | x.m2() | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2949:13:2949:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2949:13:2949:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2949:13:2949:23 | ...::new(...) | T | main.rs:2911:5:2913:5 | dyn MyTrait | -| main.rs:2949:13:2949:23 | ...::new(...) | T | main.rs:2915:5:2916:19 | S | -| main.rs:2949:13:2949:23 | ...::new(...) | T.T | main.rs:2915:5:2916:19 | S | -| main.rs:2949:13:2949:23 | ...::new(...) | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2949:13:2949:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2949:22:2949:22 | x | | main.rs:2915:5:2916:19 | S | -| main.rs:2949:22:2949:22 | x | T | main.rs:2915:5:2916:19 | S | -| main.rs:2949:22:2949:22 | x | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2950:16:2952:9 | { ... } | | {EXTERNAL LOCATION} | Box | -| main.rs:2950:16:2952:9 | { ... } | A | {EXTERNAL LOCATION} | Global | -| main.rs:2950:16:2952:9 | { ... } | T | main.rs:2911:5:2913:5 | dyn MyTrait | -| main.rs:2950:16:2952:9 | { ... } | T | main.rs:2915:5:2916:19 | S | -| main.rs:2950:16:2952:9 | { ... } | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2950:16:2952:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2951:13:2951:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2951:13:2951:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2951:13:2951:23 | ...::new(...) | T | main.rs:2911:5:2913:5 | dyn MyTrait | -| main.rs:2951:13:2951:23 | ...::new(...) | T | main.rs:2915:5:2916:19 | S | -| main.rs:2951:13:2951:23 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2951:13:2951:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2951:22:2951:22 | x | | main.rs:2915:5:2916:19 | S | -| main.rs:2951:22:2951:22 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2957:22:2961:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2958:18:2958:18 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2958:33:2960:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2959:13:2959:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2959:13:2959:17 | ... + ... | | {EXTERNAL LOCATION} | i32 | -| main.rs:2959:17:2959:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2966:11:2966:14 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2966:30:2974:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2968:13:2968:13 | a | | {EXTERNAL LOCATION} | () | -| main.rs:2968:17:2972:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2969:13:2971:13 | if cond {...} | | {EXTERNAL LOCATION} | () | -| main.rs:2969:16:2969:19 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2969:21:2971:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2970:24:2970:25 | 12 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2973:9:2973:9 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2977:20:2984:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2980:26:2980:27 | 12 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2982:9:2982:30 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:2982:18:2982:26 | "b: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2982:18:2982:26 | "b: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2982:18:2982:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2982:18:2982:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2982:18:2982:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2983:9:2983:9 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2986:20:2988:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2987:16:2987:16 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2991:11:2991:14 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2991:30:2999:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2992:13:2992:13 | a | | {EXTERNAL LOCATION} | () | -| main.rs:2992:17:2996:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2993:13:2995:13 | if cond {...} | | {EXTERNAL LOCATION} | () | -| main.rs:2993:16:2993:19 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2993:21:2995:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2994:24:2994:25 | 12 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2997:9:2997:30 | MacroExpr | | {EXTERNAL LOCATION} | () | -| main.rs:2997:18:2997:26 | "a: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2997:18:2997:26 | "a: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2997:18:2997:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2997:18:2997:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2997:18:2997:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2997:29:2997:29 | a | | {EXTERNAL LOCATION} | () | -| main.rs:2998:9:2998:9 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3003:16:3050:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:3004:13:3004:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:3004:13:3004:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3004:17:3004:20 | None | | {EXTERNAL LOCATION} | Option | -| main.rs:3004:17:3004:20 | None | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3005:13:3005:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:3005:13:3005:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3005:30:3005:30 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:3005:30:3005:30 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3006:13:3006:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:3006:13:3006:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3006:17:3006:35 | ...::None | | {EXTERNAL LOCATION} | Option | -| main.rs:3006:17:3006:35 | ...::None | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3007:13:3007:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:3007:13:3007:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3007:17:3007:35 | ...::None::<...> | | {EXTERNAL LOCATION} | Option | -| main.rs:3007:17:3007:35 | ...::None::<...> | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3009:26:3009:28 | opt | | {EXTERNAL LOCATION} | Option | -| main.rs:3009:26:3009:28 | opt | T | main.rs:3009:23:3009:23 | T | -| main.rs:3009:42:3009:42 | x | | main.rs:3009:23:3009:23 | T | -| main.rs:3009:48:3009:49 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:3011:13:3011:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:3011:13:3011:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3011:17:3011:20 | None | | {EXTERNAL LOCATION} | Option | -| main.rs:3011:17:3011:20 | None | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3012:9:3012:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3012:20:3012:20 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:3012:20:3012:20 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3012:23:3012:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3019:13:3019:13 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3019:13:3019:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3019:13:3019:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3019:17:3019:39 | ...::A {...} | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3019:17:3019:39 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3019:17:3019:39 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3019:37:3019:37 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3020:13:3020:13 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3020:13:3020:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3020:13:3020:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3020:40:3020:40 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3020:40:3020:40 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3020:40:3020:40 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3021:13:3021:13 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3021:13:3021:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3021:13:3021:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3021:17:3021:52 | ...::A {...} | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3021:17:3021:52 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3021:17:3021:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3021:50:3021:50 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3023:13:3023:13 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3023:13:3023:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3023:13:3023:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3023:17:3025:9 | ...::B::<...> {...} | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3023:17:3025:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3023:17:3025:9 | ...::B::<...> {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3024:20:3024:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:3027:29:3027:29 | e | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3027:29:3027:29 | e | T1 | main.rs:3027:26:3027:26 | T | -| main.rs:3027:29:3027:29 | e | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3027:53:3027:53 | x | | main.rs:3027:26:3027:26 | T | -| main.rs:3027:59:3027:60 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:3030:13:3030:13 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3030:13:3030:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3030:13:3030:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3030:17:3032:9 | ...::B {...} | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3030:17:3032:9 | ...::B {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3030:17:3032:9 | ...::B {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3031:20:3031:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:3033:9:3033:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3033:23:3033:23 | x | | main.rs:3014:9:3017:9 | MyEither | -| main.rs:3033:23:3033:23 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:3033:23:3033:23 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:3033:26:3033:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3035:13:3035:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:3035:13:3035:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:3035:13:3035:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3035:17:3035:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:3035:17:3035:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | -| main.rs:3035:17:3035:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3035:28:3035:28 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3036:13:3036:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:3036:13:3036:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:3036:13:3036:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3036:38:3036:38 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:3036:38:3036:38 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:3036:38:3036:38 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3037:13:3037:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:3037:13:3037:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:3037:13:3037:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3037:17:3037:44 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:3037:17:3037:44 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | -| main.rs:3037:17:3037:44 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3037:43:3037:43 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3038:13:3038:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:3038:13:3038:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:3038:13:3038:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3038:17:3038:44 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:3038:17:3038:44 | ...::Ok::<...>(...) | E | {EXTERNAL LOCATION} | String | -| main.rs:3038:17:3038:44 | ...::Ok::<...>(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3038:43:3038:43 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3040:29:3040:31 | res | | {EXTERNAL LOCATION} | Result | -| main.rs:3040:29:3040:31 | res | E | main.rs:3040:26:3040:26 | E | -| main.rs:3040:29:3040:31 | res | T | main.rs:3040:23:3040:23 | T | -| main.rs:3040:48:3040:48 | x | | main.rs:3040:26:3040:26 | E | -| main.rs:3040:54:3040:55 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:3042:13:3042:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:3042:13:3042:13 | x | E | {EXTERNAL LOCATION} | bool | -| main.rs:3042:13:3042:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3042:17:3042:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:3042:17:3042:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | bool | -| main.rs:3042:17:3042:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3042:28:3042:28 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3043:9:3043:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3043:20:3043:20 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:3043:20:3043:20 | x | E | {EXTERNAL LOCATION} | bool | -| main.rs:3043:20:3043:20 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3043:23:3043:27 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:3045:17:3045:17 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:3045:17:3045:17 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:3045:17:3045:17 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3045:21:3045:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:3045:21:3045:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:3045:21:3045:30 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3046:9:3046:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:3046:9:3046:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:3046:9:3046:9 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3046:9:3046:17 | x.push(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3046:16:3046:16 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3048:13:3048:13 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:3048:17:3048:34 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:3049:9:3049:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:3049:9:3049:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:3049:9:3049:9 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3049:9:3049:17 | x.push(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3049:16:3049:16 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:3056:14:3056:17 | SelfParam | | main.rs:3054:5:3062:5 | Self [trait MyTrait] | -| main.rs:3059:14:3059:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:3059:14:3059:18 | SelfParam | TRef | main.rs:3054:5:3062:5 | Self [trait MyTrait] | -| main.rs:3059:21:3059:25 | other | | {EXTERNAL LOCATION} | & | -| main.rs:3059:21:3059:25 | other | TRef | main.rs:3054:5:3062:5 | Self [trait MyTrait] | -| main.rs:3059:44:3061:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:3059:44:3061:9 | { ... } | TRef | main.rs:3054:5:3062:5 | Self [trait MyTrait] | -| main.rs:3060:13:3060:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:3060:13:3060:16 | self | TRef | main.rs:3054:5:3062:5 | Self [trait MyTrait] | -| main.rs:3060:13:3060:20 | self.f() | | {EXTERNAL LOCATION} | & | -| main.rs:3060:13:3060:20 | self.f() | TRef | main.rs:3054:5:3062:5 | Self [trait MyTrait] | -| main.rs:3066:14:3066:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | -| main.rs:3066:28:3068:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:3067:13:3067:16 | self | | {EXTERNAL LOCATION} | i32 | -| main.rs:3073:14:3073:17 | SelfParam | | {EXTERNAL LOCATION} | usize | -| main.rs:3073:28:3075:9 | { ... } | | {EXTERNAL LOCATION} | usize | -| main.rs:3074:13:3074:16 | self | | {EXTERNAL LOCATION} | usize | -| main.rs:3080:14:3080:17 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:3080:14:3080:17 | SelfParam | TRef | main.rs:3078:10:3078:10 | T | -| main.rs:3080:28:3082:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:3080:28:3082:9 | { ... } | TRef | main.rs:3078:10:3078:10 | T | -| main.rs:3081:13:3081:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:3081:13:3081:16 | self | TRef | main.rs:3078:10:3078:10 | T | -| main.rs:3085:25:3089:5 | { ... } | | {EXTERNAL LOCATION} | usize | -| main.rs:3086:17:3086:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:3086:17:3086:17 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:3086:21:3086:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3086:21:3086:21 | 0 | | {EXTERNAL LOCATION} | usize | -| main.rs:3087:9:3087:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:3087:9:3087:9 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:3087:9:3087:17 | ... = ... | | {EXTERNAL LOCATION} | () | -| main.rs:3087:13:3087:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:3087:13:3087:13 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:3087:13:3087:17 | x.f() | | {EXTERNAL LOCATION} | i32 | -| main.rs:3087:13:3087:17 | x.f() | | {EXTERNAL LOCATION} | usize | -| main.rs:3088:9:3088:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:3088:9:3088:9 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:3091:12:3099:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:3092:13:3092:13 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:3092:24:3092:24 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3092:24:3092:24 | 0 | | {EXTERNAL LOCATION} | usize | -| main.rs:3093:13:3093:13 | y | | {EXTERNAL LOCATION} | & | -| main.rs:3093:13:3093:13 | y | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:3093:17:3093:18 | &1 | | {EXTERNAL LOCATION} | & | -| main.rs:3093:17:3093:18 | &1 | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:3093:18:3093:18 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3094:13:3094:13 | z | | {EXTERNAL LOCATION} | & | -| main.rs:3094:13:3094:13 | z | TRef | {EXTERNAL LOCATION} | usize | -| main.rs:3094:17:3094:17 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:3094:17:3094:22 | x.g(...) | | {EXTERNAL LOCATION} | & | -| main.rs:3094:17:3094:22 | x.g(...) | TRef | {EXTERNAL LOCATION} | usize | -| main.rs:3094:21:3094:21 | y | | {EXTERNAL LOCATION} | & | -| main.rs:3094:21:3094:21 | y | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:3096:13:3096:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:3096:17:3096:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3097:13:3097:13 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:3097:24:3097:24 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3097:24:3097:24 | 1 | | {EXTERNAL LOCATION} | usize | -| main.rs:3098:13:3098:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:3098:17:3098:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:3098:17:3098:24 | x.max(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:3098:23:3098:23 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:3107:11:3142:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:3108:5:3108:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3109:5:3109:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:3110:5:3110:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:3110:20:3110:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:3110:41:3110:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:3111:5:3111:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3112:5:3112:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3113:5:3113:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3114:5:3114:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3115:5:3115:33 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3116:5:3116:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3117:5:3117:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3118:5:3118:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3119:5:3119:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3120:5:3120:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3121:5:3121:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3122:5:3122:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3123:5:3123:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3124:5:3124:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3125:5:3125:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3126:5:3126:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3127:5:3127:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:3127:5:3127:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:3128:5:3128:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3129:5:3129:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3130:5:3130:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3131:5:3131:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3132:5:3132:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3133:5:3133:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3134:5:3134:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3135:5:3135:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3136:5:3136:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3137:5:3137:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3138:5:3138:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3139:5:3139:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:3140:5:3140:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:3140:5:3140:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:3140:5:3140:20 | ...::f(...) | T | main.rs:2911:5:2913:5 | dyn MyTrait | -| main.rs:3140:5:3140:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:3140:16:3140:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:3141:5:3141:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1227:18:1227:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1227:18:1227:61 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1227:18:1227:61 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1227:26:1227:61 | ...::flatten(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1227:26:1227:61 | ...::flatten(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1227:59:1227:60 | x6 | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1227:59:1227:60 | x6 | T | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1227:59:1227:60 | x6 | T.T | main.rs:1204:5:1205:13 | S | +| main.rs:1230:13:1230:19 | from_if | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1230:13:1230:19 | from_if | T | main.rs:1204:5:1205:13 | S | +| main.rs:1230:23:1234:9 | if ... {...} else {...} | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1230:23:1234:9 | if ... {...} else {...} | T | main.rs:1204:5:1205:13 | S | +| main.rs:1230:26:1230:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1230:26:1230:30 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1230:30:1230:30 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1230:32:1232:9 | { ... } | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1230:32:1232:9 | { ... } | T | main.rs:1204:5:1205:13 | S | +| main.rs:1231:13:1231:30 | ...::MyNone(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1231:13:1231:30 | ...::MyNone(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1232:16:1234:9 | { ... } | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1232:16:1234:9 | { ... } | T | main.rs:1204:5:1205:13 | S | +| main.rs:1233:13:1233:31 | ...::MySome(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1233:13:1233:31 | ...::MySome(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1233:30:1233:30 | S | | main.rs:1204:5:1205:13 | S | +| main.rs:1235:9:1235:33 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1235:18:1235:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1235:18:1235:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1235:18:1235:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1235:18:1235:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1235:18:1235:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1235:26:1235:32 | from_if | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1235:26:1235:32 | from_if | T | main.rs:1204:5:1205:13 | S | +| main.rs:1238:13:1238:22 | from_match | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1238:13:1238:22 | from_match | T | main.rs:1204:5:1205:13 | S | +| main.rs:1238:26:1241:9 | match ... { ... } | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1238:26:1241:9 | match ... { ... } | T | main.rs:1204:5:1205:13 | S | +| main.rs:1238:32:1238:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1238:32:1238:36 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1238:36:1238:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1239:13:1239:16 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1239:21:1239:38 | ...::MyNone(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1239:21:1239:38 | ...::MyNone(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1240:13:1240:17 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1240:22:1240:40 | ...::MySome(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1240:22:1240:40 | ...::MySome(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1240:39:1240:39 | S | | main.rs:1204:5:1205:13 | S | +| main.rs:1242:9:1242:36 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1242:18:1242:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1242:18:1242:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1242:18:1242:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1242:18:1242:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1242:18:1242:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1242:26:1242:35 | from_match | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1242:26:1242:35 | from_match | T | main.rs:1204:5:1205:13 | S | +| main.rs:1245:13:1245:21 | from_loop | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1245:13:1245:21 | from_loop | T | main.rs:1204:5:1205:13 | S | +| main.rs:1245:25:1250:9 | loop { ... } | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1245:25:1250:9 | loop { ... } | T | main.rs:1204:5:1205:13 | S | +| main.rs:1245:30:1250:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1246:13:1248:13 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1246:16:1246:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1246:16:1246:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1246:20:1246:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1246:22:1248:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1247:23:1247:40 | ...::MyNone(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1247:23:1247:40 | ...::MyNone(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1249:19:1249:37 | ...::MySome(...) | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1249:19:1249:37 | ...::MySome(...) | T | main.rs:1204:5:1205:13 | S | +| main.rs:1249:36:1249:36 | S | | main.rs:1204:5:1205:13 | S | +| main.rs:1251:9:1251:35 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1251:18:1251:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1251:18:1251:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1251:18:1251:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1251:18:1251:34 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1251:18:1251:34 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1251:26:1251:34 | from_loop | | main.rs:1169:5:1173:5 | MyOption | +| main.rs:1251:26:1251:34 | from_loop | T | main.rs:1204:5:1205:13 | S | +| main.rs:1269:15:1269:18 | SelfParam | | main.rs:1257:5:1258:19 | S | +| main.rs:1269:15:1269:18 | SelfParam | T | main.rs:1268:10:1268:10 | T | +| main.rs:1269:26:1271:9 | { ... } | | main.rs:1268:10:1268:10 | T | +| main.rs:1270:13:1270:16 | self | | main.rs:1257:5:1258:19 | S | +| main.rs:1270:13:1270:16 | self | T | main.rs:1268:10:1268:10 | T | +| main.rs:1270:13:1270:18 | self.0 | | main.rs:1268:10:1268:10 | T | +| main.rs:1273:15:1273:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1273:15:1273:19 | SelfParam | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1273:15:1273:19 | SelfParam | TRef.T | main.rs:1268:10:1268:10 | T | +| main.rs:1273:28:1275:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1273:28:1275:9 | { ... } | TRef | main.rs:1268:10:1268:10 | T | +| main.rs:1274:13:1274:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1274:13:1274:19 | &... | TRef | main.rs:1268:10:1268:10 | T | +| main.rs:1274:14:1274:17 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1274:14:1274:17 | self | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1274:14:1274:17 | self | TRef.T | main.rs:1268:10:1268:10 | T | +| main.rs:1274:14:1274:19 | self.0 | | main.rs:1268:10:1268:10 | T | +| main.rs:1277:15:1277:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1277:15:1277:25 | SelfParam | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1277:15:1277:25 | SelfParam | TRef.T | main.rs:1268:10:1268:10 | T | +| main.rs:1277:34:1279:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1277:34:1279:9 | { ... } | TRef | main.rs:1268:10:1268:10 | T | +| main.rs:1278:13:1278:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1278:13:1278:19 | &... | TRef | main.rs:1268:10:1268:10 | T | +| main.rs:1278:14:1278:17 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1278:14:1278:17 | self | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1278:14:1278:17 | self | TRef.T | main.rs:1268:10:1268:10 | T | +| main.rs:1278:14:1278:19 | self.0 | | main.rs:1268:10:1268:10 | T | +| main.rs:1283:29:1283:33 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1283:29:1283:33 | SelfParam | TRef | main.rs:1282:5:1285:5 | Self [trait ATrait] | +| main.rs:1284:33:1284:36 | SelfParam | | main.rs:1282:5:1285:5 | Self [trait ATrait] | +| main.rs:1290:29:1290:33 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1290:29:1290:33 | SelfParam | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1290:29:1290:33 | SelfParam | TRef.TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1290:43:1292:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1291:13:1291:22 | (...) | | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1291:13:1291:24 | ... .a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1291:14:1291:21 | * ... | | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1291:15:1291:21 | (...) | | {EXTERNAL LOCATION} | & | +| main.rs:1291:15:1291:21 | (...) | TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1291:16:1291:20 | * ... | | {EXTERNAL LOCATION} | & | +| main.rs:1291:16:1291:20 | * ... | TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1291:17:1291:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1291:17:1291:20 | self | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1291:17:1291:20 | self | TRef.TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1295:33:1295:36 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1295:33:1295:36 | SelfParam | TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1295:46:1297:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1296:13:1296:19 | (...) | | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1296:13:1296:21 | ... .a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1296:14:1296:18 | * ... | | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1296:15:1296:18 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1296:15:1296:18 | self | TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1300:16:1350:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1301:13:1301:14 | x1 | | main.rs:1257:5:1258:19 | S | +| main.rs:1301:13:1301:14 | x1 | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1301:18:1301:22 | S(...) | | main.rs:1257:5:1258:19 | S | +| main.rs:1301:18:1301:22 | S(...) | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1301:20:1301:21 | S2 | | main.rs:1260:5:1261:14 | S2 | +| main.rs:1302:9:1302:33 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1302:18:1302:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1302:18:1302:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1302:18:1302:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1302:18:1302:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1302:18:1302:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1302:26:1302:27 | x1 | | main.rs:1257:5:1258:19 | S | +| main.rs:1302:26:1302:27 | x1 | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1302:26:1302:32 | x1.m1() | | main.rs:1260:5:1261:14 | S2 | +| main.rs:1304:13:1304:14 | x2 | | main.rs:1257:5:1258:19 | S | +| main.rs:1304:13:1304:14 | x2 | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1304:18:1304:22 | S(...) | | main.rs:1257:5:1258:19 | S | +| main.rs:1304:18:1304:22 | S(...) | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1304:20:1304:21 | S2 | | main.rs:1260:5:1261:14 | S2 | +| main.rs:1306:9:1306:33 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1306:18:1306:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1306:18:1306:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1306:18:1306:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1306:18:1306:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1306:18:1306:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1306:26:1306:27 | x2 | | main.rs:1257:5:1258:19 | S | +| main.rs:1306:26:1306:27 | x2 | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1306:26:1306:32 | x2.m2() | | {EXTERNAL LOCATION} | & | +| main.rs:1306:26:1306:32 | x2.m2() | TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1307:9:1307:33 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1307:18:1307:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1307:18:1307:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1307:18:1307:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1307:18:1307:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1307:18:1307:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1307:26:1307:27 | x2 | | main.rs:1257:5:1258:19 | S | +| main.rs:1307:26:1307:27 | x2 | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1307:26:1307:32 | x2.m3() | | {EXTERNAL LOCATION} | & | +| main.rs:1307:26:1307:32 | x2.m3() | TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1309:13:1309:14 | x3 | | main.rs:1257:5:1258:19 | S | +| main.rs:1309:13:1309:14 | x3 | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1309:18:1309:22 | S(...) | | main.rs:1257:5:1258:19 | S | +| main.rs:1309:18:1309:22 | S(...) | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1309:20:1309:21 | S2 | | main.rs:1260:5:1261:14 | S2 | +| main.rs:1311:9:1311:42 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1311:18:1311:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1311:18:1311:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1311:18:1311:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1311:18:1311:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1311:18:1311:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1311:26:1311:41 | ...::m2(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1311:26:1311:41 | ...::m2(...) | TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1311:38:1311:40 | &x3 | | {EXTERNAL LOCATION} | & | +| main.rs:1311:38:1311:40 | &x3 | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1311:38:1311:40 | &x3 | TRef.T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1311:39:1311:40 | x3 | | main.rs:1257:5:1258:19 | S | +| main.rs:1311:39:1311:40 | x3 | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1312:9:1312:42 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1312:18:1312:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1312:18:1312:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1312:18:1312:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1312:18:1312:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1312:18:1312:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1312:26:1312:41 | ...::m3(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1312:26:1312:41 | ...::m3(...) | TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1312:38:1312:40 | &x3 | | {EXTERNAL LOCATION} | & | +| main.rs:1312:38:1312:40 | &x3 | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1312:38:1312:40 | &x3 | TRef.T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1312:39:1312:40 | x3 | | main.rs:1257:5:1258:19 | S | +| main.rs:1312:39:1312:40 | x3 | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1314:13:1314:14 | x4 | | {EXTERNAL LOCATION} | & | +| main.rs:1314:13:1314:14 | x4 | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1314:13:1314:14 | x4 | TRef.T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1314:18:1314:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1314:18:1314:23 | &... | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1314:18:1314:23 | &... | TRef.T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1314:19:1314:23 | S(...) | | main.rs:1257:5:1258:19 | S | +| main.rs:1314:19:1314:23 | S(...) | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1314:21:1314:22 | S2 | | main.rs:1260:5:1261:14 | S2 | +| main.rs:1316:9:1316:33 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1316:18:1316:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1316:18:1316:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1316:18:1316:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1316:18:1316:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1316:18:1316:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1316:26:1316:27 | x4 | | {EXTERNAL LOCATION} | & | +| main.rs:1316:26:1316:27 | x4 | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1316:26:1316:27 | x4 | TRef.T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1316:26:1316:32 | x4.m2() | | {EXTERNAL LOCATION} | & | +| main.rs:1316:26:1316:32 | x4.m2() | TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1317:9:1317:33 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1317:18:1317:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1317:18:1317:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1317:18:1317:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1317:18:1317:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1317:18:1317:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1317:26:1317:27 | x4 | | {EXTERNAL LOCATION} | & | +| main.rs:1317:26:1317:27 | x4 | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1317:26:1317:27 | x4 | TRef.T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1317:26:1317:32 | x4.m3() | | {EXTERNAL LOCATION} | & | +| main.rs:1317:26:1317:32 | x4.m3() | TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1319:13:1319:14 | x5 | | {EXTERNAL LOCATION} | & | +| main.rs:1319:13:1319:14 | x5 | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1319:13:1319:14 | x5 | TRef.T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1319:18:1319:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1319:18:1319:23 | &... | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1319:18:1319:23 | &... | TRef.T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1319:19:1319:23 | S(...) | | main.rs:1257:5:1258:19 | S | +| main.rs:1319:19:1319:23 | S(...) | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1319:21:1319:22 | S2 | | main.rs:1260:5:1261:14 | S2 | +| main.rs:1321:9:1321:33 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1321:18:1321:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1321:18:1321:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1321:18:1321:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1321:18:1321:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1321:18:1321:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1321:26:1321:27 | x5 | | {EXTERNAL LOCATION} | & | +| main.rs:1321:26:1321:27 | x5 | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1321:26:1321:27 | x5 | TRef.T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1321:26:1321:32 | x5.m1() | | main.rs:1260:5:1261:14 | S2 | +| main.rs:1322:9:1322:30 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1322:18:1322:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1322:18:1322:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1322:18:1322:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1322:18:1322:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1322:18:1322:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1322:26:1322:27 | x5 | | {EXTERNAL LOCATION} | & | +| main.rs:1322:26:1322:27 | x5 | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1322:26:1322:27 | x5 | TRef.T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1322:26:1322:29 | x5.0 | | main.rs:1260:5:1261:14 | S2 | +| main.rs:1324:13:1324:14 | x6 | | {EXTERNAL LOCATION} | & | +| main.rs:1324:13:1324:14 | x6 | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1324:13:1324:14 | x6 | TRef.T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1324:18:1324:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1324:18:1324:23 | &... | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1324:18:1324:23 | &... | TRef.T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1324:19:1324:23 | S(...) | | main.rs:1257:5:1258:19 | S | +| main.rs:1324:19:1324:23 | S(...) | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1324:21:1324:22 | S2 | | main.rs:1260:5:1261:14 | S2 | +| main.rs:1327:9:1327:36 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1327:18:1327:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1327:18:1327:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1327:18:1327:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1327:18:1327:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1327:18:1327:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1327:26:1327:30 | (...) | | main.rs:1257:5:1258:19 | S | +| main.rs:1327:26:1327:30 | (...) | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1327:26:1327:35 | ... .m1() | | main.rs:1260:5:1261:14 | S2 | +| main.rs:1327:27:1327:29 | * ... | | main.rs:1257:5:1258:19 | S | +| main.rs:1327:27:1327:29 | * ... | T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1327:28:1327:29 | x6 | | {EXTERNAL LOCATION} | & | +| main.rs:1327:28:1327:29 | x6 | TRef | main.rs:1257:5:1258:19 | S | +| main.rs:1327:28:1327:29 | x6 | TRef.T | main.rs:1260:5:1261:14 | S2 | +| main.rs:1329:13:1329:14 | x7 | | main.rs:1257:5:1258:19 | S | +| main.rs:1329:13:1329:14 | x7 | T | {EXTERNAL LOCATION} | & | +| main.rs:1329:13:1329:14 | x7 | T.TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1329:18:1329:23 | S(...) | | main.rs:1257:5:1258:19 | S | +| main.rs:1329:18:1329:23 | S(...) | T | {EXTERNAL LOCATION} | & | +| main.rs:1329:18:1329:23 | S(...) | T.TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1329:20:1329:22 | &S2 | | {EXTERNAL LOCATION} | & | +| main.rs:1329:20:1329:22 | &S2 | TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1329:21:1329:22 | S2 | | main.rs:1260:5:1261:14 | S2 | +| main.rs:1332:13:1332:13 | t | | {EXTERNAL LOCATION} | & | +| main.rs:1332:13:1332:13 | t | TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1332:17:1332:18 | x7 | | main.rs:1257:5:1258:19 | S | +| main.rs:1332:17:1332:18 | x7 | T | {EXTERNAL LOCATION} | & | +| main.rs:1332:17:1332:18 | x7 | T.TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1332:17:1332:23 | x7.m1() | | {EXTERNAL LOCATION} | & | +| main.rs:1332:17:1332:23 | x7.m1() | TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1333:9:1333:28 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1333:18:1333:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1333:18:1333:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1333:18:1333:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1333:18:1333:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1333:18:1333:27 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1333:26:1333:27 | x7 | | main.rs:1257:5:1258:19 | S | +| main.rs:1333:26:1333:27 | x7 | T | {EXTERNAL LOCATION} | & | +| main.rs:1333:26:1333:27 | x7 | T.TRef | main.rs:1260:5:1261:14 | S2 | +| main.rs:1335:13:1335:14 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1335:26:1335:32 | "Hello" | | {EXTERNAL LOCATION} | & | +| main.rs:1335:26:1335:32 | "Hello" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1335:26:1335:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | +| main.rs:1339:13:1339:13 | u | | {EXTERNAL LOCATION} | Result | +| main.rs:1339:13:1339:13 | u | T | {EXTERNAL LOCATION} | u32 | +| main.rs:1339:17:1339:18 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1339:17:1339:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | +| main.rs:1339:17:1339:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | +| main.rs:1341:13:1341:20 | my_thing | | {EXTERNAL LOCATION} | & | +| main.rs:1341:13:1341:20 | my_thing | TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1341:24:1341:39 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1341:24:1341:39 | &... | TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1341:25:1341:39 | MyInt {...} | | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1341:36:1341:37 | 37 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1343:13:1343:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1343:17:1343:24 | my_thing | | {EXTERNAL LOCATION} | & | +| main.rs:1343:17:1343:24 | my_thing | TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1343:17:1343:43 | my_thing.method_on_borrow() | | {EXTERNAL LOCATION} | i64 | +| main.rs:1344:9:1344:27 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1344:18:1344:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1344:18:1344:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1344:18:1344:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1344:18:1344:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1344:18:1344:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1344:26:1344:26 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1347:13:1347:20 | my_thing | | {EXTERNAL LOCATION} | & | +| main.rs:1347:13:1347:20 | my_thing | TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1347:24:1347:39 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1347:24:1347:39 | &... | TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1347:25:1347:39 | MyInt {...} | | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1347:36:1347:37 | 38 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1348:13:1348:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1348:17:1348:24 | my_thing | | {EXTERNAL LOCATION} | & | +| main.rs:1348:17:1348:24 | my_thing | TRef | main.rs:1263:5:1266:5 | MyInt | +| main.rs:1348:17:1348:47 | my_thing.method_not_on_borrow() | | {EXTERNAL LOCATION} | i64 | +| main.rs:1349:9:1349:27 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1349:18:1349:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1349:18:1349:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1349:18:1349:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1349:18:1349:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1349:18:1349:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1349:26:1349:26 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1356:16:1356:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1356:16:1356:20 | SelfParam | TRef | main.rs:1354:5:1362:5 | Self [trait MyTrait] | +| main.rs:1359:16:1359:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1359:16:1359:20 | SelfParam | TRef | main.rs:1354:5:1362:5 | Self [trait MyTrait] | +| main.rs:1359:32:1361:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1359:32:1361:9 | { ... } | TRef | main.rs:1354:5:1362:5 | Self [trait MyTrait] | +| main.rs:1360:13:1360:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1360:13:1360:16 | self | TRef | main.rs:1354:5:1362:5 | Self [trait MyTrait] | +| main.rs:1360:13:1360:22 | self.foo() | | {EXTERNAL LOCATION} | & | +| main.rs:1360:13:1360:22 | self.foo() | TRef | main.rs:1354:5:1362:5 | Self [trait MyTrait] | +| main.rs:1368:16:1368:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1368:16:1368:20 | SelfParam | TRef | main.rs:1364:5:1364:20 | MyStruct | +| main.rs:1368:36:1370:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1368:36:1370:9 | { ... } | TRef | main.rs:1364:5:1364:20 | MyStruct | +| main.rs:1369:13:1369:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1369:13:1369:16 | self | TRef | main.rs:1364:5:1364:20 | MyStruct | +| main.rs:1373:16:1376:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1374:13:1374:13 | x | | main.rs:1364:5:1364:20 | MyStruct | +| main.rs:1374:17:1374:24 | MyStruct | | main.rs:1364:5:1364:20 | MyStruct | +| main.rs:1375:9:1375:9 | x | | main.rs:1364:5:1364:20 | MyStruct | +| main.rs:1375:9:1375:15 | x.bar() | | {EXTERNAL LOCATION} | & | +| main.rs:1375:9:1375:15 | x.bar() | TRef | main.rs:1364:5:1364:20 | MyStruct | +| main.rs:1385:16:1385:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1385:16:1385:20 | SelfParam | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1385:16:1385:20 | SelfParam | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1385:32:1387:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1385:32:1387:9 | { ... } | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1385:32:1387:9 | { ... } | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1386:13:1386:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1386:13:1386:16 | self | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1386:13:1386:16 | self | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1389:16:1389:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1389:16:1389:20 | SelfParam | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1389:16:1389:20 | SelfParam | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1389:23:1389:23 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1389:23:1389:23 | x | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1389:23:1389:23 | x | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1389:42:1391:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1389:42:1391:9 | { ... } | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1389:42:1391:9 | { ... } | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1390:13:1390:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1390:13:1390:16 | self | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1390:13:1390:16 | self | TRef.T | main.rs:1384:10:1384:10 | T | +| main.rs:1394:16:1400:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1395:13:1395:13 | x | | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1395:13:1395:13 | x | T | main.rs:1380:5:1380:13 | S | +| main.rs:1395:17:1395:27 | MyStruct(...) | | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1395:17:1395:27 | MyStruct(...) | T | main.rs:1380:5:1380:13 | S | +| main.rs:1395:26:1395:26 | S | | main.rs:1380:5:1380:13 | S | +| main.rs:1396:9:1396:9 | x | | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1396:9:1396:9 | x | T | main.rs:1380:5:1380:13 | S | +| main.rs:1396:9:1396:15 | x.foo() | | {EXTERNAL LOCATION} | & | +| main.rs:1396:9:1396:15 | x.foo() | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1396:9:1396:15 | x.foo() | TRef.T | main.rs:1380:5:1380:13 | S | +| main.rs:1397:13:1397:13 | x | | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1397:13:1397:13 | x | T | main.rs:1380:5:1380:13 | S | +| main.rs:1397:17:1397:27 | MyStruct(...) | | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1397:17:1397:27 | MyStruct(...) | T | main.rs:1380:5:1380:13 | S | +| main.rs:1397:26:1397:26 | S | | main.rs:1380:5:1380:13 | S | +| main.rs:1399:9:1399:9 | x | | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1399:9:1399:9 | x | T | main.rs:1380:5:1380:13 | S | +| main.rs:1399:9:1399:18 | x.bar(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1399:9:1399:18 | x.bar(...) | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1399:9:1399:18 | x.bar(...) | TRef.T | main.rs:1380:5:1380:13 | S | +| main.rs:1399:15:1399:17 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1399:15:1399:17 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1399:15:1399:17 | &... | TRef.TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1399:15:1399:17 | &... | TRef.TRef.T | main.rs:1380:5:1380:13 | S | +| main.rs:1399:16:1399:17 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1399:16:1399:17 | &x | TRef | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1399:16:1399:17 | &x | TRef.T | main.rs:1380:5:1380:13 | S | +| main.rs:1399:17:1399:17 | x | | main.rs:1382:5:1382:26 | MyStruct | +| main.rs:1399:17:1399:17 | x | T | main.rs:1380:5:1380:13 | S | +| main.rs:1410:17:1410:25 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1410:17:1410:25 | SelfParam | TRefMut | main.rs:1404:5:1407:5 | MyFlag | +| main.rs:1410:28:1412:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1411:13:1411:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1411:13:1411:16 | self | TRefMut | main.rs:1404:5:1407:5 | MyFlag | +| main.rs:1411:13:1411:21 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1411:13:1411:34 | ... = ... | | {EXTERNAL LOCATION} | () | +| main.rs:1411:25:1411:34 | ! ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1411:26:1411:29 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1411:26:1411:29 | self | TRefMut | main.rs:1404:5:1407:5 | MyFlag | +| main.rs:1411:26:1411:34 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1418:15:1418:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1418:15:1418:19 | SelfParam | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1418:31:1420:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1418:31:1420:9 | { ... } | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1419:13:1419:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1419:13:1419:19 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1419:13:1419:19 | &... | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1419:13:1419:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1419:13:1419:19 | &... | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1419:13:1419:19 | &... | TRef.TRef.TRef.TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1419:14:1419:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1419:14:1419:19 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1419:14:1419:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1419:14:1419:19 | &... | TRef.TRef.TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1419:15:1419:19 | &self | | {EXTERNAL LOCATION} | & | +| main.rs:1419:15:1419:19 | &self | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1419:15:1419:19 | &self | TRef.TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1419:16:1419:19 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1419:16:1419:19 | self | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1422:15:1422:25 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1422:15:1422:25 | SelfParam | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1422:37:1424:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1422:37:1424:9 | { ... } | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1423:13:1423:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1423:13:1423:19 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1423:13:1423:19 | &... | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1423:13:1423:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1423:13:1423:19 | &... | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1423:13:1423:19 | &... | TRef.TRef.TRef.TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1423:14:1423:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1423:14:1423:19 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1423:14:1423:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1423:14:1423:19 | &... | TRef.TRef.TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1423:15:1423:19 | &self | | {EXTERNAL LOCATION} | & | +| main.rs:1423:15:1423:19 | &self | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1423:15:1423:19 | &self | TRef.TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1423:16:1423:19 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1423:16:1423:19 | self | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1426:15:1426:15 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1426:15:1426:15 | x | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1426:34:1428:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1426:34:1428:9 | { ... } | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1427:13:1427:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1427:13:1427:13 | x | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1430:15:1430:15 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1430:15:1430:15 | x | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1430:34:1432:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1430:34:1432:9 | { ... } | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1431:13:1431:16 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1431:13:1431:16 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1431:13:1431:16 | &... | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1431:13:1431:16 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1431:13:1431:16 | &... | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1431:13:1431:16 | &... | TRef.TRef.TRef.TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1431:14:1431:16 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1431:14:1431:16 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1431:14:1431:16 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1431:14:1431:16 | &... | TRef.TRef.TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1431:15:1431:16 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1431:15:1431:16 | &x | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1431:15:1431:16 | &x | TRef.TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1431:16:1431:16 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1431:16:1431:16 | x | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1435:16:1448:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1436:13:1436:13 | x | | main.rs:1415:5:1415:13 | S | +| main.rs:1436:17:1436:20 | S {...} | | main.rs:1415:5:1415:13 | S | +| main.rs:1437:9:1437:9 | x | | main.rs:1415:5:1415:13 | S | +| main.rs:1437:9:1437:14 | x.f1() | | {EXTERNAL LOCATION} | & | +| main.rs:1437:9:1437:14 | x.f1() | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1438:9:1438:9 | x | | main.rs:1415:5:1415:13 | S | +| main.rs:1438:9:1438:14 | x.f2() | | {EXTERNAL LOCATION} | & | +| main.rs:1438:9:1438:14 | x.f2() | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1439:9:1439:17 | ...::f3(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1439:9:1439:17 | ...::f3(...) | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1439:15:1439:16 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1439:15:1439:16 | &x | TRef | main.rs:1415:5:1415:13 | S | +| main.rs:1439:16:1439:16 | x | | main.rs:1415:5:1415:13 | S | +| main.rs:1441:13:1441:13 | n | | {EXTERNAL LOCATION} | bool | +| main.rs:1441:17:1441:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1441:18:1441:24 | * ... | | {EXTERNAL LOCATION} | & | +| main.rs:1441:18:1441:24 | * ... | TRef | {EXTERNAL LOCATION} | bool | +| main.rs:1441:19:1441:24 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1441:19:1441:24 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1441:19:1441:24 | &... | TRef.TRef | {EXTERNAL LOCATION} | bool | +| main.rs:1441:20:1441:24 | &true | | {EXTERNAL LOCATION} | & | +| main.rs:1441:20:1441:24 | &true | TRef | {EXTERNAL LOCATION} | bool | +| main.rs:1441:21:1441:24 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1445:17:1445:20 | flag | | main.rs:1404:5:1407:5 | MyFlag | +| main.rs:1445:24:1445:41 | ...::default(...) | | main.rs:1404:5:1407:5 | MyFlag | +| main.rs:1446:9:1446:31 | ...::flip(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1446:22:1446:30 | &mut flag | | {EXTERNAL LOCATION} | &mut | +| main.rs:1446:22:1446:30 | &mut flag | TRefMut | main.rs:1404:5:1407:5 | MyFlag | +| main.rs:1446:27:1446:30 | flag | | main.rs:1404:5:1407:5 | MyFlag | +| main.rs:1447:9:1447:30 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1447:18:1447:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1447:18:1447:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1447:18:1447:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1447:18:1447:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1447:18:1447:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1447:26:1447:29 | flag | | main.rs:1404:5:1407:5 | MyFlag | +| main.rs:1462:43:1465:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1462:43:1465:5 | { ... } | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1462:43:1465:5 | { ... } | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1463:13:1463:13 | x | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1463:17:1463:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1463:17:1463:30 | ...::Ok(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1463:17:1463:31 | TryExpr | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1463:28:1463:29 | S1 | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1464:9:1464:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1464:9:1464:22 | ...::Ok(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1464:9:1464:22 | ...::Ok(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1464:20:1464:21 | S1 | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1469:46:1473:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1469:46:1473:5 | { ... } | E | main.rs:1457:5:1458:14 | S2 | +| main.rs:1469:46:1473:5 | { ... } | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1470:13:1470:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1470:13:1470:13 | x | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1470:17:1470:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1470:17:1470:30 | ...::Ok(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1470:28:1470:29 | S1 | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1471:13:1471:13 | y | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1471:17:1471:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1471:17:1471:17 | x | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1471:17:1471:18 | TryExpr | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1472:9:1472:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1472:9:1472:22 | ...::Ok(...) | E | main.rs:1457:5:1458:14 | S2 | +| main.rs:1472:9:1472:22 | ...::Ok(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1472:20:1472:21 | S1 | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1477:40:1482:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1477:40:1482:5 | { ... } | E | main.rs:1457:5:1458:14 | S2 | +| main.rs:1477:40:1482:5 | { ... } | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1478:13:1478:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1478:13:1478:13 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1478:13:1478:13 | x | T.T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1478:17:1478:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1478:17:1478:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | +| main.rs:1478:17:1478:42 | ...::Ok(...) | T.T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1478:28:1478:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1478:28:1478:41 | ...::Ok(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1478:39:1478:40 | S1 | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1480:17:1480:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1480:17:1480:17 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1480:17:1480:17 | x | T.T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1480:17:1480:18 | TryExpr | | {EXTERNAL LOCATION} | Result | +| main.rs:1480:17:1480:18 | TryExpr | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1480:17:1480:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1480:24:1480:28 | \|...\| s | | {EXTERNAL LOCATION} | dyn Fn | +| main.rs:1480:24:1480:28 | \|...\| s | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| main.rs:1481:9:1481:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1481:9:1481:22 | ...::Ok(...) | E | main.rs:1457:5:1458:14 | S2 | +| main.rs:1481:9:1481:22 | ...::Ok(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1481:20:1481:21 | S1 | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1486:30:1486:34 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1486:30:1486:34 | input | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1486:30:1486:34 | input | T | main.rs:1486:20:1486:27 | T | +| main.rs:1486:69:1493:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1486:69:1493:5 | { ... } | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1486:69:1493:5 | { ... } | T | main.rs:1486:20:1486:27 | T | +| main.rs:1487:13:1487:17 | value | | main.rs:1486:20:1486:27 | T | +| main.rs:1487:21:1487:25 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1487:21:1487:25 | input | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1487:21:1487:25 | input | T | main.rs:1486:20:1486:27 | T | +| main.rs:1487:21:1487:26 | TryExpr | | main.rs:1486:20:1486:27 | T | +| main.rs:1488:22:1488:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1488:22:1488:38 | ...::Ok(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1488:22:1488:38 | ...::Ok(...) | T | main.rs:1486:20:1486:27 | T | +| main.rs:1488:22:1491:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1488:22:1491:10 | ... .and_then(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1488:33:1488:37 | value | | main.rs:1486:20:1486:27 | T | +| main.rs:1488:49:1491:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | +| main.rs:1488:49:1491:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| main.rs:1488:49:1491:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | Result | +| main.rs:1488:49:1491:9 | \|...\| ... | dyn(Output).E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1488:53:1491:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1488:53:1491:9 | { ... } | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1489:13:1489:31 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1489:22:1489:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1489:22:1489:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1489:22:1489:30 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1489:22:1489:30 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1489:22:1489:30 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1490:13:1490:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1490:13:1490:34 | ...::Ok::<...>(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1492:9:1492:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1492:9:1492:23 | ...::Err(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1492:9:1492:23 | ...::Err(...) | T | main.rs:1486:20:1486:27 | T | +| main.rs:1492:21:1492:22 | S1 | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1496:16:1512:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1497:9:1499:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1497:16:1497:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1497:16:1497:33 | ...::Ok(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1497:16:1497:33 | ...::Ok(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1497:27:1497:32 | result | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1497:37:1497:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1497:37:1497:52 | try_same_error(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1497:37:1497:52 | try_same_error(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1497:54:1499:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1498:13:1498:36 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1498:22:1498:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1498:22:1498:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1498:22:1498:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1498:22:1498:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1498:22:1498:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1498:30:1498:35 | result | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1501:9:1503:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1501:16:1501:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1501:16:1501:33 | ...::Ok(...) | E | main.rs:1457:5:1458:14 | S2 | +| main.rs:1501:16:1501:33 | ...::Ok(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1501:27:1501:32 | result | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1501:37:1501:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1501:37:1501:55 | try_convert_error(...) | E | main.rs:1457:5:1458:14 | S2 | +| main.rs:1501:37:1501:55 | try_convert_error(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1501:57:1503:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1502:13:1502:36 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1502:22:1502:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1502:22:1502:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1502:22:1502:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1502:22:1502:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1502:22:1502:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1502:30:1502:35 | result | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1505:9:1507:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1505:16:1505:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1505:16:1505:33 | ...::Ok(...) | E | main.rs:1457:5:1458:14 | S2 | +| main.rs:1505:16:1505:33 | ...::Ok(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1505:27:1505:32 | result | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1505:37:1505:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1505:37:1505:49 | try_chained(...) | E | main.rs:1457:5:1458:14 | S2 | +| main.rs:1505:37:1505:49 | try_chained(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1505:51:1507:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1506:13:1506:36 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1506:22:1506:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1506:22:1506:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1506:22:1506:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1506:22:1506:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1506:22:1506:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1506:30:1506:35 | result | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1509:9:1511:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1509:16:1509:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1509:16:1509:33 | ...::Ok(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1509:16:1509:33 | ...::Ok(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1509:27:1509:32 | result | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1509:37:1509:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1509:37:1509:63 | try_complex(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1509:37:1509:63 | try_complex(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1509:49:1509:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1509:49:1509:62 | ...::Ok(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1509:49:1509:62 | ...::Ok(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1509:60:1509:61 | S1 | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1509:65:1511:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1510:13:1510:36 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1510:22:1510:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:1510:22:1510:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1510:22:1510:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1510:22:1510:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1510:22:1510:35 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1510:30:1510:35 | result | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1516:16:1607:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1517:13:1517:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1517:22:1517:22 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1518:13:1518:13 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1518:17:1518:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1519:13:1519:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1519:17:1519:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1519:17:1519:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | +| main.rs:1519:21:1519:21 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1520:13:1520:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1520:17:1520:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1520:17:1520:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | +| main.rs:1521:13:1521:13 | c | | {EXTERNAL LOCATION} | char | +| main.rs:1521:17:1521:19 | 'c' | | {EXTERNAL LOCATION} | char | +| main.rs:1522:13:1522:17 | hello | | {EXTERNAL LOCATION} | & | +| main.rs:1522:13:1522:17 | hello | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1522:21:1522:27 | "Hello" | | {EXTERNAL LOCATION} | & | +| main.rs:1522:21:1522:27 | "Hello" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:1523:13:1523:13 | f | | {EXTERNAL LOCATION} | f64 | +| main.rs:1523:17:1523:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | +| main.rs:1524:13:1524:13 | t | | {EXTERNAL LOCATION} | bool | +| main.rs:1524:17:1524:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1525:13:1525:13 | f | | {EXTERNAL LOCATION} | bool | +| main.rs:1525:17:1525:21 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1528:26:1528:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1528:26:1528:30 | SelfParam | TRef | main.rs:1527:9:1531:9 | Self [trait MyTrait] | +| main.rs:1534:26:1534:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1534:26:1534:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:1534:26:1534:30 | SelfParam | TRef.TArray | main.rs:1533:14:1533:23 | T | +| main.rs:1534:39:1536:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1534:39:1536:13 | { ... } | TRef | main.rs:1533:14:1533:23 | T | +| main.rs:1535:17:1535:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1535:17:1535:20 | self | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:1535:17:1535:20 | self | TRef.TArray | main.rs:1533:14:1533:23 | T | +| main.rs:1535:17:1535:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | +| main.rs:1535:17:1535:36 | ... .unwrap() | TRef | main.rs:1533:14:1533:23 | T | +| main.rs:1535:26:1535:26 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1538:31:1540:13 | { ... } | | main.rs:1533:14:1533:23 | T | +| main.rs:1539:17:1539:28 | ...::default(...) | | main.rs:1533:14:1533:23 | T | +| main.rs:1543:13:1543:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1543:13:1543:13 | x | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1543:17:1543:25 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:1543:17:1543:25 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:1543:17:1543:37 | ... .my_method() | | {EXTERNAL LOCATION} | & | +| main.rs:1543:17:1543:37 | ... .my_method() | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1543:18:1543:18 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1543:21:1543:21 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1543:24:1543:24 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1544:13:1544:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1544:13:1544:13 | x | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1544:17:1544:47 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1544:17:1544:47 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1544:22:1544:22 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1544:37:1544:46 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1544:37:1544:46 | &... | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:1544:37:1544:46 | &... | TRef.TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:1544:38:1544:46 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:1544:38:1544:46 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:1544:39:1544:39 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1544:42:1544:42 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1544:45:1544:45 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1545:13:1545:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1545:17:1545:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1545:24:1545:24 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1548:26:1548:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1548:26:1548:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1548:26:1548:30 | SelfParam | TRef.TSlice | main.rs:1547:14:1547:23 | T | +| main.rs:1548:39:1550:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1548:39:1550:13 | { ... } | TRef | main.rs:1547:14:1547:23 | T | +| main.rs:1549:17:1549:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1549:17:1549:20 | self | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1549:17:1549:20 | self | TRef.TSlice | main.rs:1547:14:1547:23 | T | +| main.rs:1549:17:1549:27 | self.get(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:1549:17:1549:27 | self.get(...) | T | {EXTERNAL LOCATION} | & | +| main.rs:1549:17:1549:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | +| main.rs:1549:17:1549:36 | ... .unwrap() | TRef | main.rs:1547:14:1547:23 | T | +| main.rs:1549:26:1549:26 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1552:31:1554:13 | { ... } | | main.rs:1547:14:1547:23 | T | +| main.rs:1553:17:1553:28 | ...::default(...) | | main.rs:1547:14:1547:23 | T | +| main.rs:1557:13:1557:13 | s | | {EXTERNAL LOCATION} | & | +| main.rs:1557:13:1557:13 | s | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1557:13:1557:13 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| main.rs:1557:25:1557:34 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1557:25:1557:34 | &... | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1557:25:1557:34 | &... | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:1557:25:1557:34 | &... | TRef.TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:1557:25:1557:34 | &... | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| main.rs:1557:26:1557:34 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:1557:26:1557:34 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:1557:27:1557:27 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1557:30:1557:30 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1557:33:1557:33 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1558:13:1558:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1558:13:1558:13 | x | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1558:17:1558:17 | s | | {EXTERNAL LOCATION} | & | +| main.rs:1558:17:1558:17 | s | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1558:17:1558:17 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| main.rs:1558:17:1558:29 | s.my_method() | | {EXTERNAL LOCATION} | & | +| main.rs:1558:17:1558:29 | s.my_method() | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1559:13:1559:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1559:13:1559:13 | x | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1559:17:1559:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1559:17:1559:35 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1559:34:1559:34 | s | | {EXTERNAL LOCATION} | & | +| main.rs:1559:34:1559:34 | s | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1559:34:1559:34 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | +| main.rs:1560:13:1560:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1560:17:1560:34 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1563:26:1563:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1563:26:1563:30 | SelfParam | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1563:26:1563:30 | SelfParam | TRef.T0 | main.rs:1562:14:1562:23 | T | +| main.rs:1563:26:1563:30 | SelfParam | TRef.T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:1563:39:1565:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1563:39:1565:13 | { ... } | TRef | main.rs:1562:14:1562:23 | T | +| main.rs:1564:17:1564:23 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1564:17:1564:23 | &... | TRef | main.rs:1562:14:1562:23 | T | +| main.rs:1564:18:1564:21 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1564:18:1564:21 | self | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1564:18:1564:21 | self | TRef.T0 | main.rs:1562:14:1562:23 | T | +| main.rs:1564:18:1564:21 | self | TRef.T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:1564:18:1564:23 | self.0 | | main.rs:1562:14:1562:23 | T | +| main.rs:1567:31:1569:13 | { ... } | | main.rs:1562:14:1562:23 | T | +| main.rs:1568:17:1568:28 | ...::default(...) | | main.rs:1562:14:1562:23 | T | +| main.rs:1572:13:1572:13 | p | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1572:13:1572:13 | p | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:1572:13:1572:13 | p | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:1572:17:1572:23 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1572:17:1572:23 | TupleExpr | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:1572:17:1572:23 | TupleExpr | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:1572:18:1572:19 | 42 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1572:22:1572:22 | 7 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1573:13:1573:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1573:13:1573:13 | x | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1573:17:1573:17 | p | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1573:17:1573:17 | p | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:1573:17:1573:17 | p | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:1573:17:1573:29 | p.my_method() | | {EXTERNAL LOCATION} | & | +| main.rs:1573:17:1573:29 | p.my_method() | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1574:13:1574:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1574:13:1574:13 | x | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1574:17:1574:39 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1574:17:1574:39 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1574:37:1574:38 | &p | | {EXTERNAL LOCATION} | & | +| main.rs:1574:37:1574:38 | &p | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1574:37:1574:38 | &p | TRef.T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:1574:37:1574:38 | &p | TRef.T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:1574:38:1574:38 | p | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1574:38:1574:38 | p | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:1574:38:1574:38 | p | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:1575:13:1575:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1575:17:1575:39 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1578:26:1578:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1578:26:1578:30 | SelfParam | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1578:26:1578:30 | SelfParam | TRef.TRef | main.rs:1577:14:1577:23 | T | +| main.rs:1578:39:1580:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1578:39:1580:13 | { ... } | TRef | main.rs:1577:14:1577:23 | T | +| main.rs:1579:17:1579:21 | * ... | | {EXTERNAL LOCATION} | & | +| main.rs:1579:17:1579:21 | * ... | TRef | main.rs:1577:14:1577:23 | T | +| main.rs:1579:18:1579:21 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1579:18:1579:21 | self | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1579:18:1579:21 | self | TRef.TRef | main.rs:1577:14:1577:23 | T | +| main.rs:1582:31:1584:13 | { ... } | | main.rs:1577:14:1577:23 | T | +| main.rs:1583:17:1583:28 | ...::default(...) | | main.rs:1577:14:1577:23 | T | +| main.rs:1587:13:1587:13 | r | | {EXTERNAL LOCATION} | & | +| main.rs:1587:13:1587:13 | r | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1587:17:1587:19 | &42 | | {EXTERNAL LOCATION} | & | +| main.rs:1587:17:1587:19 | &42 | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1587:18:1587:19 | 42 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1588:13:1588:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1588:13:1588:13 | x | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1588:17:1588:17 | r | | {EXTERNAL LOCATION} | & | +| main.rs:1588:17:1588:17 | r | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1588:17:1588:29 | r.my_method() | | {EXTERNAL LOCATION} | & | +| main.rs:1588:17:1588:29 | r.my_method() | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1589:13:1589:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1589:13:1589:13 | x | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1589:17:1589:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1589:17:1589:35 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1589:33:1589:34 | &r | | {EXTERNAL LOCATION} | & | +| main.rs:1589:33:1589:34 | &r | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1589:33:1589:34 | &r | TRef.TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1589:34:1589:34 | r | | {EXTERNAL LOCATION} | & | +| main.rs:1589:34:1589:34 | r | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1590:13:1590:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1590:17:1590:33 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1593:26:1593:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1593:26:1593:30 | SelfParam | TRef | {EXTERNAL LOCATION} | *mut | +| main.rs:1593:26:1593:30 | SelfParam | TRef.TPtrMut | main.rs:1592:14:1592:23 | T | +| main.rs:1593:39:1595:13 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1593:39:1595:13 | { ... } | TRef | main.rs:1592:14:1592:23 | T | +| main.rs:1594:17:1594:34 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1594:17:1594:34 | { ... } | TRef | main.rs:1592:14:1592:23 | T | +| main.rs:1594:26:1594:32 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1594:26:1594:32 | &... | TRef | main.rs:1592:14:1592:23 | T | +| main.rs:1594:27:1594:32 | * ... | | main.rs:1592:14:1592:23 | T | +| main.rs:1594:28:1594:32 | * ... | | {EXTERNAL LOCATION} | *mut | +| main.rs:1594:28:1594:32 | * ... | TPtrMut | main.rs:1592:14:1592:23 | T | +| main.rs:1594:29:1594:32 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1594:29:1594:32 | self | TRef | {EXTERNAL LOCATION} | *mut | +| main.rs:1594:29:1594:32 | self | TRef.TPtrMut | main.rs:1592:14:1592:23 | T | +| main.rs:1597:31:1599:13 | { ... } | | main.rs:1592:14:1592:23 | T | +| main.rs:1598:17:1598:28 | ...::default(...) | | main.rs:1592:14:1592:23 | T | +| main.rs:1602:17:1602:17 | v | | {EXTERNAL LOCATION} | i32 | +| main.rs:1602:21:1602:22 | 42 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1603:13:1603:13 | p | | {EXTERNAL LOCATION} | *mut | +| main.rs:1603:13:1603:13 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | +| main.rs:1603:27:1603:32 | &mut v | | {EXTERNAL LOCATION} | &mut | +| main.rs:1603:27:1603:32 | &mut v | TRefMut | {EXTERNAL LOCATION} | i32 | +| main.rs:1603:32:1603:32 | v | | {EXTERNAL LOCATION} | i32 | +| main.rs:1604:13:1604:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1604:13:1604:13 | x | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1604:17:1604:40 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1604:17:1604:40 | { ... } | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1604:26:1604:26 | p | | {EXTERNAL LOCATION} | *mut | +| main.rs:1604:26:1604:26 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | +| main.rs:1604:26:1604:38 | p.my_method() | | {EXTERNAL LOCATION} | & | +| main.rs:1604:26:1604:38 | p.my_method() | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1605:13:1605:13 | x | | {EXTERNAL LOCATION} | & | +| main.rs:1605:13:1605:13 | x | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1605:17:1605:50 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:1605:17:1605:50 | { ... } | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1605:26:1605:48 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | +| main.rs:1605:26:1605:48 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:1605:46:1605:47 | &p | | {EXTERNAL LOCATION} | & | +| main.rs:1605:46:1605:47 | &p | TRef | {EXTERNAL LOCATION} | *mut | +| main.rs:1605:46:1605:47 | &p | TRef.TPtrMut | {EXTERNAL LOCATION} | i32 | +| main.rs:1605:47:1605:47 | p | | {EXTERNAL LOCATION} | *mut | +| main.rs:1605:47:1605:47 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | +| main.rs:1606:13:1606:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1606:17:1606:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1612:16:1624:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1613:13:1613:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:1613:17:1613:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1613:17:1613:29 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1613:25:1613:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1614:13:1614:13 | y | | {EXTERNAL LOCATION} | bool | +| main.rs:1614:17:1614:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1614:17:1614:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1614:25:1614:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1616:17:1616:17 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1617:13:1617:16 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1617:20:1617:21 | 34 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1617:20:1617:27 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1617:26:1617:27 | 33 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1618:9:1622:9 | if cond {...} else {...} | | {EXTERNAL LOCATION} | () | +| main.rs:1618:12:1618:15 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1618:17:1620:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1619:17:1619:17 | z | | {EXTERNAL LOCATION} | () | +| main.rs:1619:21:1619:27 | (...) | | {EXTERNAL LOCATION} | () | +| main.rs:1619:22:1619:22 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1619:22:1619:26 | ... = ... | | {EXTERNAL LOCATION} | () | +| main.rs:1619:26:1619:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1620:16:1622:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1621:13:1621:13 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1621:13:1621:17 | ... = ... | | {EXTERNAL LOCATION} | () | +| main.rs:1621:17:1621:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1623:9:1623:9 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1637:30:1639:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1638:13:1638:31 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1638:23:1638:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1638:29:1638:29 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1645:16:1645:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1645:22:1645:24 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1645:41:1650:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1646:13:1649:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1647:20:1647:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1647:20:1647:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1647:20:1647:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1647:29:1647:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1647:29:1647:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1648:20:1648:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1648:20:1648:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1648:20:1648:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1648:29:1648:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1648:29:1648:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1655:23:1655:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1655:23:1655:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1655:34:1655:36 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1655:45:1658:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1656:13:1656:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1656:13:1656:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1656:13:1656:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1656:13:1656:27 | ... += ... | | {EXTERNAL LOCATION} | () | +| main.rs:1656:23:1656:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1656:23:1656:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1657:13:1657:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1657:13:1657:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1657:13:1657:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1657:13:1657:27 | ... += ... | | {EXTERNAL LOCATION} | () | +| main.rs:1657:23:1657:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1657:23:1657:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1663:16:1663:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1663:22:1663:24 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1663:41:1668:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1664:13:1667:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1665:20:1665:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1665:20:1665:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1665:20:1665:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1665:29:1665:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1665:29:1665:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1666:20:1666:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1666:20:1666:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1666:20:1666:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1666:29:1666:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1666:29:1666:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1673:23:1673:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1673:23:1673:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1673:34:1673:36 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1673:45:1676:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1674:13:1674:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1674:13:1674:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1674:13:1674:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1674:13:1674:27 | ... -= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1674:23:1674:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1674:23:1674:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1675:13:1675:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1675:13:1675:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1675:13:1675:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1675:13:1675:27 | ... -= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1675:23:1675:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1675:23:1675:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1681:16:1681:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1681:22:1681:24 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1681:41:1686:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1682:13:1685:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1683:20:1683:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1683:20:1683:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1683:20:1683:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1683:29:1683:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1683:29:1683:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1684:20:1684:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1684:20:1684:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1684:20:1684:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1684:29:1684:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1684:29:1684:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1690:23:1690:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1690:23:1690:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1690:34:1690:36 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1690:45:1693:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1691:13:1691:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1691:13:1691:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1691:13:1691:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1691:13:1691:27 | ... *= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1691:23:1691:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1691:23:1691:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1692:13:1692:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1692:13:1692:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1692:13:1692:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1692:13:1692:27 | ... *= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1692:23:1692:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1692:23:1692:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1698:16:1698:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1698:22:1698:24 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1698:41:1703:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1699:13:1702:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1700:20:1700:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1700:20:1700:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1700:20:1700:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1700:29:1700:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1700:29:1700:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1701:20:1701:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1701:20:1701:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1701:20:1701:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1701:29:1701:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1701:29:1701:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1707:23:1707:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1707:23:1707:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1707:34:1707:36 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1707:45:1710:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1708:13:1708:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1708:13:1708:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1708:13:1708:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1708:13:1708:27 | ... /= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1708:23:1708:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1708:23:1708:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1709:13:1709:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1709:13:1709:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1709:13:1709:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1709:13:1709:27 | ... /= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1709:23:1709:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1709:23:1709:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1715:16:1715:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1715:22:1715:24 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1715:41:1720:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1716:13:1719:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1717:20:1717:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1717:20:1717:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1717:20:1717:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1717:29:1717:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1717:29:1717:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1718:20:1718:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1718:20:1718:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1718:20:1718:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1718:29:1718:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1718:29:1718:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1724:23:1724:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1724:23:1724:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1724:34:1724:36 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1724:45:1727:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1725:13:1725:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1725:13:1725:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1725:13:1725:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1725:13:1725:27 | ... %= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1725:23:1725:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1725:23:1725:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1726:13:1726:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1726:13:1726:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1726:13:1726:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1726:13:1726:27 | ... %= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1726:23:1726:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1726:23:1726:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1732:19:1732:22 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1732:25:1732:27 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1732:44:1737:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1733:13:1736:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1734:20:1734:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1734:20:1734:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1734:20:1734:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1734:29:1734:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1734:29:1734:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1735:20:1735:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1735:20:1735:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1735:20:1735:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1735:29:1735:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1735:29:1735:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1741:26:1741:34 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1741:26:1741:34 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1741:37:1741:39 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1741:48:1744:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1742:13:1742:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1742:13:1742:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1742:13:1742:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1742:13:1742:27 | ... &= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1742:23:1742:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1742:23:1742:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1743:13:1743:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1743:13:1743:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1743:13:1743:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1743:13:1743:27 | ... &= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1743:23:1743:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1743:23:1743:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1749:18:1749:21 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1749:24:1749:26 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1749:43:1754:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1750:13:1753:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1751:20:1751:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1751:20:1751:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1751:20:1751:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1751:29:1751:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1751:29:1751:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1752:20:1752:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1752:20:1752:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1752:20:1752:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1752:29:1752:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1752:29:1752:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1758:25:1758:33 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1758:25:1758:33 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1758:36:1758:38 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1758:47:1761:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1759:13:1759:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1759:13:1759:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1759:13:1759:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1759:13:1759:27 | ... \|= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1759:23:1759:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1759:23:1759:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1760:13:1760:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1760:13:1760:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1760:13:1760:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1760:13:1760:27 | ... \|= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1760:23:1760:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1760:23:1760:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1766:19:1766:22 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1766:25:1766:27 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1766:44:1771:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1767:13:1770:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1768:20:1768:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1768:20:1768:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1768:20:1768:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1768:29:1768:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1768:29:1768:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1769:20:1769:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1769:20:1769:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1769:20:1769:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1769:29:1769:31 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1769:29:1769:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1775:26:1775:34 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1775:26:1775:34 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1775:37:1775:39 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1775:48:1778:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1776:13:1776:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1776:13:1776:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1776:13:1776:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1776:13:1776:27 | ... ^= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1776:23:1776:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1776:23:1776:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1777:13:1777:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1777:13:1777:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1777:13:1777:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1777:13:1777:27 | ... ^= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1777:23:1777:25 | rhs | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1777:23:1777:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1783:16:1783:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1783:22:1783:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1783:40:1788:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1784:13:1787:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1785:20:1785:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1785:20:1785:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1785:20:1785:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1785:30:1785:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1786:20:1786:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1786:20:1786:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1786:20:1786:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1786:30:1786:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1792:23:1792:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1792:23:1792:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1792:34:1792:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1792:44:1795:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1793:13:1793:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1793:13:1793:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1793:13:1793:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1793:13:1793:26 | ... <<= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1793:24:1793:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1794:13:1794:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1794:13:1794:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1794:13:1794:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1794:13:1794:26 | ... <<= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1794:24:1794:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1800:16:1800:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1800:22:1800:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1800:40:1805:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1801:13:1804:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1802:20:1802:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1802:20:1802:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1802:20:1802:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1802:30:1802:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1803:20:1803:23 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1803:20:1803:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1803:20:1803:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1803:30:1803:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1809:23:1809:31 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:1809:23:1809:31 | SelfParam | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1809:34:1809:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1809:44:1812:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1810:13:1810:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1810:13:1810:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1810:13:1810:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1810:13:1810:26 | ... >>= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1810:24:1810:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1811:13:1811:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:1811:13:1811:16 | self | TRefMut | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1811:13:1811:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1811:13:1811:26 | ... >>= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1811:24:1811:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1817:16:1817:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1817:30:1822:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1818:13:1821:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1819:20:1819:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1819:21:1819:24 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1819:21:1819:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1820:20:1820:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1820:21:1820:24 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1820:21:1820:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1827:16:1827:19 | SelfParam | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1827:30:1832:9 | { ... } | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1828:13:1831:13 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1829:20:1829:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1829:21:1829:24 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1829:21:1829:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1830:20:1830:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1830:21:1830:24 | self | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1830:21:1830:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1836:15:1836:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1836:15:1836:19 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1836:22:1836:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1836:22:1836:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1836:44:1838:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1837:13:1837:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1837:13:1837:16 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1837:13:1837:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1837:13:1837:29 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1837:13:1837:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1837:23:1837:27 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1837:23:1837:27 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1837:23:1837:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1837:34:1837:37 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1837:34:1837:37 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1837:34:1837:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1837:34:1837:50 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1837:44:1837:48 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1837:44:1837:48 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1837:44:1837:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1840:15:1840:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1840:15:1840:19 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1840:22:1840:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1840:22:1840:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1840:44:1842:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1841:13:1841:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1841:13:1841:16 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1841:13:1841:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1841:13:1841:29 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1841:13:1841:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1841:23:1841:27 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1841:23:1841:27 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1841:23:1841:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1841:34:1841:37 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1841:34:1841:37 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1841:34:1841:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1841:34:1841:50 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1841:44:1841:48 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1841:44:1841:48 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1841:44:1841:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1846:24:1846:28 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1846:24:1846:28 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1846:31:1846:35 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1846:31:1846:35 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1846:75:1848:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:1846:75:1848:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1847:13:1847:29 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1847:13:1847:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:1847:13:1847:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1847:14:1847:17 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1847:14:1847:17 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1847:14:1847:19 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1847:14:1847:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1847:23:1847:26 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1847:23:1847:26 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1847:23:1847:28 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1847:43:1847:62 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1847:43:1847:62 | &... | TRef | {EXTERNAL LOCATION} | i64 | +| main.rs:1847:44:1847:62 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1847:45:1847:49 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1847:45:1847:49 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1847:45:1847:51 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1847:45:1847:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1847:55:1847:59 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1847:55:1847:59 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1847:55:1847:61 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1850:15:1850:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1850:15:1850:19 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1850:22:1850:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1850:22:1850:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1850:44:1852:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1851:13:1851:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1851:13:1851:16 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1851:13:1851:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1851:13:1851:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1851:13:1851:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1851:22:1851:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1851:22:1851:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1851:22:1851:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1851:33:1851:36 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1851:33:1851:36 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1851:33:1851:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1851:33:1851:48 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1851:42:1851:46 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1851:42:1851:46 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1851:42:1851:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1854:15:1854:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1854:15:1854:19 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1854:22:1854:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1854:22:1854:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1854:44:1856:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1855:13:1855:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1855:13:1855:16 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1855:13:1855:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1855:13:1855:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1855:13:1855:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1855:23:1855:27 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1855:23:1855:27 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1855:23:1855:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1855:34:1855:37 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1855:34:1855:37 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1855:34:1855:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1855:34:1855:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1855:44:1855:48 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1855:44:1855:48 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1855:44:1855:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1858:15:1858:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1858:15:1858:19 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1858:22:1858:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1858:22:1858:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1858:44:1860:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1859:13:1859:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1859:13:1859:16 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1859:13:1859:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1859:13:1859:28 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1859:13:1859:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1859:22:1859:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1859:22:1859:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1859:22:1859:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1859:33:1859:36 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1859:33:1859:36 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1859:33:1859:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1859:33:1859:48 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1859:42:1859:46 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1859:42:1859:46 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1859:42:1859:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1862:15:1862:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1862:15:1862:19 | SelfParam | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1862:22:1862:26 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1862:22:1862:26 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1862:44:1864:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1863:13:1863:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1863:13:1863:16 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1863:13:1863:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1863:13:1863:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1863:13:1863:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1863:23:1863:27 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1863:23:1863:27 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1863:23:1863:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1863:34:1863:37 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1863:34:1863:37 | self | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1863:34:1863:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1863:34:1863:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1863:44:1863:48 | other | | {EXTERNAL LOCATION} | & | +| main.rs:1863:44:1863:48 | other | TRef | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1863:44:1863:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1867:26:1867:26 | a | | main.rs:1867:18:1867:23 | T | +| main.rs:1867:32:1867:32 | b | | main.rs:1867:18:1867:23 | T | +| main.rs:1868:9:1868:9 | a | | main.rs:1867:18:1867:23 | T | +| main.rs:1868:13:1868:13 | b | | main.rs:1867:18:1867:23 | T | +| main.rs:1871:16:2002:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1875:13:1875:18 | i64_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1875:22:1875:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1875:23:1875:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1875:23:1875:34 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1875:31:1875:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1876:13:1876:18 | i64_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1876:22:1876:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1876:23:1876:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1876:23:1876:34 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1876:31:1876:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1877:13:1877:18 | i64_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1877:22:1877:34 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1877:23:1877:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1877:23:1877:33 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1877:30:1877:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1878:13:1878:18 | i64_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1878:22:1878:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1878:23:1878:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1878:23:1878:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1878:31:1878:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1879:13:1879:18 | i64_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1879:22:1879:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1879:23:1879:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1879:23:1879:34 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1879:30:1879:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1880:13:1880:18 | i64_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1880:22:1880:37 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1880:23:1880:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1880:23:1880:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1880:32:1880:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1883:13:1883:19 | i64_add | | {EXTERNAL LOCATION} | i64 | +| main.rs:1883:23:1883:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1883:23:1883:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1883:31:1883:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1884:13:1884:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | +| main.rs:1884:23:1884:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1884:23:1884:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1884:31:1884:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1885:13:1885:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | +| main.rs:1885:23:1885:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1885:23:1885:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1885:31:1885:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1886:13:1886:19 | i64_div | | {EXTERNAL LOCATION} | i64 | +| main.rs:1886:23:1886:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1886:23:1886:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1886:31:1886:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1887:13:1887:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | +| main.rs:1887:23:1887:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1887:23:1887:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1887:31:1887:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1888:39:1888:42 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1888:45:1888:48 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1891:17:1891:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1891:34:1891:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1892:9:1892:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1892:9:1892:31 | ... += ... | | {EXTERNAL LOCATION} | () | +| main.rs:1892:27:1892:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1894:17:1894:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1894:34:1894:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1895:9:1895:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1895:9:1895:31 | ... -= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1895:27:1895:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1897:17:1897:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1897:34:1897:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1898:9:1898:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1898:9:1898:31 | ... *= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1898:27:1898:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1900:17:1900:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1900:34:1900:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1901:9:1901:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1901:9:1901:31 | ... /= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1901:27:1901:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1903:17:1903:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1903:34:1903:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1904:9:1904:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1904:9:1904:31 | ... %= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1904:27:1904:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1907:13:1907:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | +| main.rs:1907:26:1907:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1907:26:1907:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1907:34:1907:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1908:13:1908:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1908:25:1908:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1908:25:1908:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1908:33:1908:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1909:13:1909:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1909:26:1909:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1909:26:1909:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1909:34:1909:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1910:13:1910:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | +| main.rs:1910:23:1910:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1910:23:1910:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1910:32:1910:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1911:13:1911:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | +| main.rs:1911:23:1911:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1911:23:1911:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1911:32:1911:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1914:17:1914:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1914:37:1914:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1915:9:1915:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1915:9:1915:34 | ... &= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1915:30:1915:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1917:17:1917:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1917:36:1917:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1918:9:1918:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1918:9:1918:33 | ... \|= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1918:29:1918:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1920:17:1920:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1920:37:1920:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1921:9:1921:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1921:9:1921:34 | ... ^= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1921:30:1921:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1923:17:1923:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1923:34:1923:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1924:9:1924:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1924:9:1924:32 | ... <<= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1924:28:1924:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1926:17:1926:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1926:34:1926:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1927:9:1927:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1927:9:1927:32 | ... >>= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1927:28:1927:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1929:13:1929:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | +| main.rs:1929:23:1929:28 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1929:24:1929:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1930:13:1930:19 | i64_not | | {EXTERNAL LOCATION} | i64 | +| main.rs:1930:23:1930:28 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1930:24:1930:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1933:13:1933:14 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1933:18:1933:36 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1933:28:1933:28 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1933:34:1933:34 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1934:13:1934:14 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1934:18:1934:36 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1934:28:1934:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1934:34:1934:34 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1937:13:1937:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1937:23:1937:24 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1937:23:1937:30 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1937:29:1937:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1938:13:1938:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1938:23:1938:24 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1938:23:1938:30 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1938:29:1938:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1939:13:1939:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1939:23:1939:24 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1939:23:1939:29 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1939:28:1939:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1940:13:1940:19 | vec2_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1940:23:1940:24 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1940:23:1940:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1940:29:1940:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1941:13:1941:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1941:23:1941:24 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1941:23:1941:29 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1941:28:1941:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1942:13:1942:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1942:23:1942:24 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1942:23:1942:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1942:29:1942:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1945:13:1945:20 | vec2_add | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1945:24:1945:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1945:24:1945:30 | ... + ... | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1945:29:1945:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1946:13:1946:20 | vec2_sub | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1946:24:1946:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1946:24:1946:30 | ... - ... | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1946:29:1946:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1947:13:1947:20 | vec2_mul | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1947:24:1947:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1947:24:1947:30 | ... * ... | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1947:29:1947:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1948:13:1948:20 | vec2_div | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1948:24:1948:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1948:24:1948:30 | ... / ... | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1948:29:1948:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1949:13:1949:20 | vec2_rem | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1949:24:1949:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1949:24:1949:30 | ... % ... | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1949:29:1949:30 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1952:17:1952:31 | vec2_add_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1952:35:1952:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1953:9:1953:23 | vec2_add_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1953:9:1953:29 | ... += ... | | {EXTERNAL LOCATION} | () | +| main.rs:1953:28:1953:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1955:17:1955:31 | vec2_sub_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1955:35:1955:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1956:9:1956:23 | vec2_sub_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1956:9:1956:29 | ... -= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1956:28:1956:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1958:17:1958:31 | vec2_mul_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1958:35:1958:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1959:9:1959:23 | vec2_mul_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1959:9:1959:29 | ... *= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1959:28:1959:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1961:17:1961:31 | vec2_div_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1961:35:1961:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1962:9:1962:23 | vec2_div_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1962:9:1962:29 | ... /= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1962:28:1962:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1964:17:1964:31 | vec2_rem_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1964:35:1964:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1965:9:1965:23 | vec2_rem_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1965:9:1965:29 | ... %= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1965:28:1965:29 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1968:13:1968:23 | vec2_bitand | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1968:27:1968:28 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1968:27:1968:33 | ... & ... | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1968:32:1968:33 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1969:13:1969:22 | vec2_bitor | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1969:26:1969:27 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1969:26:1969:32 | ... \| ... | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1969:31:1969:32 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1970:13:1970:23 | vec2_bitxor | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1970:27:1970:28 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1970:27:1970:33 | ... ^ ... | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1970:32:1970:33 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1971:13:1971:20 | vec2_shl | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1971:24:1971:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1971:24:1971:33 | ... << ... | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1971:30:1971:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1972:13:1972:20 | vec2_shr | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1972:24:1972:25 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1972:24:1972:33 | ... >> ... | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1972:30:1972:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1975:17:1975:34 | vec2_bitand_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1975:38:1975:39 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1976:9:1976:26 | vec2_bitand_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1976:9:1976:32 | ... &= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1976:31:1976:32 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1978:17:1978:33 | vec2_bitor_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1978:37:1978:38 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1979:9:1979:25 | vec2_bitor_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1979:9:1979:31 | ... \|= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1979:30:1979:31 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1981:17:1981:34 | vec2_bitxor_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1981:38:1981:39 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1982:9:1982:26 | vec2_bitxor_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1982:9:1982:32 | ... ^= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1982:31:1982:32 | v2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1984:17:1984:31 | vec2_shl_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1984:35:1984:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1985:9:1985:23 | vec2_shl_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1985:9:1985:32 | ... <<= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1985:29:1985:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1987:17:1987:31 | vec2_shr_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1987:35:1987:36 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1988:9:1988:23 | vec2_shr_assign | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1988:9:1988:32 | ... >>= ... | | {EXTERNAL LOCATION} | () | +| main.rs:1988:29:1988:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1991:13:1991:20 | vec2_neg | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1991:24:1991:26 | - ... | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1991:25:1991:26 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1992:13:1992:20 | vec2_not | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1992:24:1992:26 | ! ... | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1992:25:1992:26 | v1 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1995:13:1995:24 | default_vec2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1995:28:1995:45 | ...::default(...) | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1996:13:1996:26 | vec2_zero_plus | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1996:30:1996:48 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1996:30:1996:63 | ... + ... | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:1996:40:1996:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1996:46:1996:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1996:52:1996:63 | default_vec2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:2000:13:2000:24 | default_vec2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:2000:28:2000:45 | ...::default(...) | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:2001:13:2001:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | +| main.rs:2001:30:2001:48 | Vec2 {...} | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:2001:30:2001:64 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2001:40:2001:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2001:46:2001:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2001:53:2001:64 | default_vec2 | | main.rs:1630:5:1635:5 | Vec2 | +| main.rs:2011:18:2011:21 | SelfParam | | main.rs:2008:5:2008:14 | S1 | +| main.rs:2011:24:2011:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2014:25:2016:5 | { ... } | | main.rs:2008:5:2008:14 | S1 | +| main.rs:2015:9:2015:10 | S1 | | main.rs:2008:5:2008:14 | S1 | +| main.rs:2018:41:2020:5 | { ... } | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2018:41:2020:5 | { ... } | dyn(Output) | main.rs:2008:5:2008:14 | S1 | +| main.rs:2019:9:2019:20 | { ... } | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2019:9:2019:20 | { ... } | dyn(Output) | main.rs:2008:5:2008:14 | S1 | +| main.rs:2019:17:2019:18 | S1 | | main.rs:2008:5:2008:14 | S1 | +| main.rs:2022:41:2024:5 | { ... } | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2022:41:2024:5 | { ... } | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2023:9:2023:16 | { ... } | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2023:9:2023:16 | { ... } | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2032:13:2032:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | +| main.rs:2032:13:2032:42 | SelfParam | Ptr | {EXTERNAL LOCATION} | &mut | +| main.rs:2032:13:2032:42 | SelfParam | Ptr.TRefMut | main.rs:2026:5:2026:14 | S2 | +| main.rs:2033:13:2033:15 | _cx | | {EXTERNAL LOCATION} | &mut | +| main.rs:2033:13:2033:15 | _cx | TRefMut | {EXTERNAL LOCATION} | Context | +| main.rs:2034:44:2036:9 | { ... } | | {EXTERNAL LOCATION} | Poll | +| main.rs:2034:44:2036:9 | { ... } | T | main.rs:2008:5:2008:14 | S1 | +| main.rs:2035:13:2035:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | +| main.rs:2035:13:2035:38 | ...::Ready(...) | T | main.rs:2008:5:2008:14 | S1 | +| main.rs:2035:36:2035:37 | S1 | | main.rs:2008:5:2008:14 | S1 | +| main.rs:2039:41:2041:5 | { ... } | | main.rs:2026:5:2026:14 | S2 | +| main.rs:2040:9:2040:10 | S2 | | main.rs:2026:5:2026:14 | S2 | +| main.rs:2043:22:2051:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2044:9:2044:12 | f1(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2044:9:2044:12 | f1(...) | dyn(Output) | main.rs:2008:5:2008:14 | S1 | +| main.rs:2044:9:2044:18 | await ... | | main.rs:2008:5:2008:14 | S1 | +| main.rs:2044:9:2044:22 | ... .f() | | {EXTERNAL LOCATION} | () | +| main.rs:2045:9:2045:12 | f2(...) | | main.rs:2018:16:2018:39 | impl ... | +| main.rs:2045:9:2045:18 | await ... | | main.rs:2008:5:2008:14 | S1 | +| main.rs:2045:9:2045:22 | ... .f() | | {EXTERNAL LOCATION} | () | +| main.rs:2046:9:2046:12 | f3(...) | | main.rs:2022:16:2022:39 | impl ... | +| main.rs:2046:9:2046:18 | await ... | | {EXTERNAL LOCATION} | () | +| main.rs:2047:9:2047:12 | f4(...) | | main.rs:2039:16:2039:39 | impl ... | +| main.rs:2047:9:2047:18 | await ... | | main.rs:2008:5:2008:14 | S1 | +| main.rs:2047:9:2047:22 | ... .f() | | {EXTERNAL LOCATION} | () | +| main.rs:2048:9:2048:10 | S2 | | main.rs:2026:5:2026:14 | S2 | +| main.rs:2048:9:2048:16 | await S2 | | main.rs:2008:5:2008:14 | S1 | +| main.rs:2048:9:2048:20 | ... .f() | | {EXTERNAL LOCATION} | () | +| main.rs:2049:13:2049:13 | b | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2049:13:2049:13 | b | dyn(Output) | main.rs:2008:5:2008:14 | S1 | +| main.rs:2049:17:2049:28 | { ... } | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2049:17:2049:28 | { ... } | dyn(Output) | main.rs:2008:5:2008:14 | S1 | +| main.rs:2049:25:2049:26 | S1 | | main.rs:2008:5:2008:14 | S1 | +| main.rs:2050:9:2050:9 | b | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2050:9:2050:9 | b | dyn(Output) | main.rs:2008:5:2008:14 | S1 | +| main.rs:2050:9:2050:15 | await b | | main.rs:2008:5:2008:14 | S1 | +| main.rs:2050:9:2050:19 | ... .f() | | {EXTERNAL LOCATION} | () | +| main.rs:2061:15:2061:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2061:15:2061:19 | SelfParam | TRef | main.rs:2060:5:2062:5 | Self [trait Trait1] | +| main.rs:2061:22:2061:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2065:15:2065:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2065:15:2065:19 | SelfParam | TRef | main.rs:2064:5:2066:5 | Self [trait Trait2] | +| main.rs:2065:22:2065:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2069:15:2069:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2069:15:2069:19 | SelfParam | TRef | main.rs:2055:5:2056:14 | S1 | +| main.rs:2069:22:2069:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2073:15:2073:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2073:15:2073:19 | SelfParam | TRef | main.rs:2055:5:2056:14 | S1 | +| main.rs:2073:22:2073:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2076:37:2078:5 | { ... } | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2077:9:2077:10 | S1 | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2081:18:2081:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2081:18:2081:22 | SelfParam | TRef | main.rs:2080:5:2082:5 | Self [trait MyTrait] | +| main.rs:2085:18:2085:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2085:18:2085:22 | SelfParam | TRef | main.rs:2055:5:2056:14 | S1 | +| main.rs:2085:31:2087:9 | { ... } | | main.rs:2057:5:2057:14 | S2 | +| main.rs:2086:13:2086:14 | S2 | | main.rs:2057:5:2057:14 | S2 | +| main.rs:2091:18:2091:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2091:18:2091:22 | SelfParam | TRef | main.rs:2058:5:2058:22 | S3 | +| main.rs:2091:18:2091:22 | SelfParam | TRef.T3 | main.rs:2090:10:2090:17 | T | +| main.rs:2091:30:2094:9 | { ... } | | main.rs:2090:10:2090:17 | T | +| main.rs:2092:17:2092:21 | S3(...) | | {EXTERNAL LOCATION} | & | +| main.rs:2092:17:2092:21 | S3(...) | | main.rs:2058:5:2058:22 | S3 | +| main.rs:2092:17:2092:21 | S3(...) | TRef | main.rs:2058:5:2058:22 | S3 | +| main.rs:2092:17:2092:21 | S3(...) | TRef.T3 | main.rs:2090:10:2090:17 | T | +| main.rs:2092:25:2092:28 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2092:25:2092:28 | self | TRef | main.rs:2058:5:2058:22 | S3 | +| main.rs:2092:25:2092:28 | self | TRef.T3 | main.rs:2090:10:2090:17 | T | +| main.rs:2093:13:2093:21 | t.clone() | | main.rs:2090:10:2090:17 | T | +| main.rs:2097:45:2099:5 | { ... } | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2098:9:2098:10 | S1 | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2101:41:2101:41 | t | | main.rs:2101:26:2101:38 | B | +| main.rs:2101:52:2103:5 | { ... } | | main.rs:2101:23:2101:23 | A | +| main.rs:2102:9:2102:9 | t | | main.rs:2101:26:2101:38 | B | +| main.rs:2102:9:2102:17 | t.get_a() | | main.rs:2101:23:2101:23 | A | +| main.rs:2105:34:2105:34 | x | | main.rs:2105:24:2105:31 | T | +| main.rs:2105:59:2107:5 | { ... } | | main.rs:2105:43:2105:57 | impl ... | +| main.rs:2105:59:2107:5 | { ... } | impl(T) | main.rs:2105:24:2105:31 | T | +| main.rs:2106:9:2106:13 | S3(...) | | main.rs:2058:5:2058:22 | S3 | +| main.rs:2106:9:2106:13 | S3(...) | | main.rs:2105:43:2105:57 | impl ... | +| main.rs:2106:9:2106:13 | S3(...) | T3 | main.rs:2105:24:2105:31 | T | +| main.rs:2106:9:2106:13 | S3(...) | impl(T) | main.rs:2105:24:2105:31 | T | +| main.rs:2106:12:2106:12 | x | | main.rs:2105:24:2105:31 | T | +| main.rs:2109:34:2109:34 | x | | main.rs:2109:24:2109:31 | T | +| main.rs:2109:67:2111:5 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2109:67:2111:5 | { ... } | T | main.rs:2109:50:2109:64 | impl ... | +| main.rs:2109:67:2111:5 | { ... } | T.impl(T) | main.rs:2109:24:2109:31 | T | +| main.rs:2110:9:2110:19 | Some(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2110:9:2110:19 | Some(...) | T | main.rs:2058:5:2058:22 | S3 | +| main.rs:2110:9:2110:19 | Some(...) | T | main.rs:2109:50:2109:64 | impl ... | +| main.rs:2110:9:2110:19 | Some(...) | T.T3 | main.rs:2109:24:2109:31 | T | +| main.rs:2110:9:2110:19 | Some(...) | T.impl(T) | main.rs:2109:24:2109:31 | T | +| main.rs:2110:14:2110:18 | S3(...) | | main.rs:2058:5:2058:22 | S3 | +| main.rs:2110:14:2110:18 | S3(...) | T3 | main.rs:2109:24:2109:31 | T | +| main.rs:2110:17:2110:17 | x | | main.rs:2109:24:2109:31 | T | +| main.rs:2113:34:2113:34 | x | | main.rs:2113:24:2113:31 | T | +| main.rs:2113:78:2115:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2113:78:2115:5 | { ... } | T0 | main.rs:2113:44:2113:58 | impl ... | +| main.rs:2113:78:2115:5 | { ... } | T0.impl(T) | main.rs:2113:24:2113:31 | T | +| main.rs:2113:78:2115:5 | { ... } | T1 | main.rs:2113:61:2113:75 | impl ... | +| main.rs:2113:78:2115:5 | { ... } | T1.impl(T) | main.rs:2113:24:2113:31 | T | +| main.rs:2114:9:2114:30 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2114:9:2114:30 | TupleExpr | T0 | main.rs:2058:5:2058:22 | S3 | +| main.rs:2114:9:2114:30 | TupleExpr | T0 | main.rs:2113:44:2113:58 | impl ... | +| main.rs:2114:9:2114:30 | TupleExpr | T0.T3 | main.rs:2113:24:2113:31 | T | +| main.rs:2114:9:2114:30 | TupleExpr | T0.impl(T) | main.rs:2113:24:2113:31 | T | +| main.rs:2114:9:2114:30 | TupleExpr | T1 | main.rs:2058:5:2058:22 | S3 | +| main.rs:2114:9:2114:30 | TupleExpr | T1 | main.rs:2113:61:2113:75 | impl ... | +| main.rs:2114:9:2114:30 | TupleExpr | T1.T3 | main.rs:2113:24:2113:31 | T | +| main.rs:2114:9:2114:30 | TupleExpr | T1.impl(T) | main.rs:2113:24:2113:31 | T | +| main.rs:2114:10:2114:22 | S3(...) | | main.rs:2058:5:2058:22 | S3 | +| main.rs:2114:10:2114:22 | S3(...) | | main.rs:2113:44:2113:58 | impl ... | +| main.rs:2114:10:2114:22 | S3(...) | T3 | main.rs:2113:24:2113:31 | T | +| main.rs:2114:10:2114:22 | S3(...) | impl(T) | main.rs:2113:24:2113:31 | T | +| main.rs:2114:13:2114:13 | x | | main.rs:2113:24:2113:31 | T | +| main.rs:2114:13:2114:21 | x.clone() | | main.rs:2113:24:2113:31 | T | +| main.rs:2114:25:2114:29 | S3(...) | | main.rs:2058:5:2058:22 | S3 | +| main.rs:2114:25:2114:29 | S3(...) | | main.rs:2113:61:2113:75 | impl ... | +| main.rs:2114:25:2114:29 | S3(...) | T3 | main.rs:2113:24:2113:31 | T | +| main.rs:2114:25:2114:29 | S3(...) | impl(T) | main.rs:2113:24:2113:31 | T | +| main.rs:2114:28:2114:28 | x | | main.rs:2113:24:2113:31 | T | +| main.rs:2117:26:2117:26 | t | | main.rs:2117:29:2117:43 | impl ... | +| main.rs:2117:51:2119:5 | { ... } | | main.rs:2117:23:2117:23 | A | +| main.rs:2118:9:2118:9 | t | | main.rs:2117:29:2117:43 | impl ... | +| main.rs:2118:9:2118:17 | t.get_a() | | main.rs:2117:23:2117:23 | A | +| main.rs:2121:16:2135:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2122:13:2122:13 | x | | main.rs:2076:16:2076:35 | impl ... + ... | +| main.rs:2122:17:2122:20 | f1(...) | | main.rs:2076:16:2076:35 | impl ... + ... | +| main.rs:2123:9:2123:9 | x | | main.rs:2076:16:2076:35 | impl ... + ... | +| main.rs:2123:9:2123:14 | x.f1() | | {EXTERNAL LOCATION} | () | +| main.rs:2124:9:2124:9 | x | | main.rs:2076:16:2076:35 | impl ... + ... | +| main.rs:2124:9:2124:14 | x.f2() | | {EXTERNAL LOCATION} | () | +| main.rs:2125:13:2125:13 | a | | main.rs:2097:28:2097:43 | impl ... | +| main.rs:2125:17:2125:32 | get_a_my_trait(...) | | main.rs:2097:28:2097:43 | impl ... | +| main.rs:2126:13:2126:13 | b | | main.rs:2057:5:2057:14 | S2 | +| main.rs:2126:17:2126:33 | uses_my_trait1(...) | | main.rs:2057:5:2057:14 | S2 | +| main.rs:2126:32:2126:32 | a | | main.rs:2097:28:2097:43 | impl ... | +| main.rs:2127:13:2127:13 | a | | main.rs:2097:28:2097:43 | impl ... | +| main.rs:2127:17:2127:32 | get_a_my_trait(...) | | main.rs:2097:28:2097:43 | impl ... | +| main.rs:2128:13:2128:13 | c | | main.rs:2057:5:2057:14 | S2 | +| main.rs:2128:17:2128:33 | uses_my_trait2(...) | | main.rs:2057:5:2057:14 | S2 | +| main.rs:2128:32:2128:32 | a | | main.rs:2097:28:2097:43 | impl ... | +| main.rs:2129:13:2129:13 | d | | main.rs:2057:5:2057:14 | S2 | +| main.rs:2129:17:2129:34 | uses_my_trait2(...) | | main.rs:2057:5:2057:14 | S2 | +| main.rs:2129:32:2129:33 | S1 | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2130:13:2130:13 | e | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2130:17:2130:35 | get_a_my_trait2(...) | | main.rs:2105:43:2105:57 | impl ... | +| main.rs:2130:17:2130:35 | get_a_my_trait2(...) | impl(T) | main.rs:2055:5:2056:14 | S1 | +| main.rs:2130:17:2130:43 | ... .get_a() | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2130:33:2130:34 | S1 | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2133:13:2133:13 | f | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2133:17:2133:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2133:17:2133:35 | get_a_my_trait3(...) | T | main.rs:2109:50:2109:64 | impl ... | +| main.rs:2133:17:2133:35 | get_a_my_trait3(...) | T.impl(T) | main.rs:2055:5:2056:14 | S1 | +| main.rs:2133:17:2133:44 | ... .unwrap() | | main.rs:2109:50:2109:64 | impl ... | +| main.rs:2133:17:2133:44 | ... .unwrap() | impl(T) | main.rs:2055:5:2056:14 | S1 | +| main.rs:2133:17:2133:52 | ... .get_a() | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2133:33:2133:34 | S1 | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2134:13:2134:13 | g | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2134:17:2134:35 | get_a_my_trait4(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2134:17:2134:35 | get_a_my_trait4(...) | T0 | main.rs:2113:44:2113:58 | impl ... | +| main.rs:2134:17:2134:35 | get_a_my_trait4(...) | T0.impl(T) | main.rs:2055:5:2056:14 | S1 | +| main.rs:2134:17:2134:35 | get_a_my_trait4(...) | T1 | main.rs:2113:61:2113:75 | impl ... | +| main.rs:2134:17:2134:35 | get_a_my_trait4(...) | T1.impl(T) | main.rs:2055:5:2056:14 | S1 | +| main.rs:2134:17:2134:37 | ... .0 | | main.rs:2113:44:2113:58 | impl ... | +| main.rs:2134:17:2134:37 | ... .0 | impl(T) | main.rs:2055:5:2056:14 | S1 | +| main.rs:2134:17:2134:45 | ... .get_a() | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2134:33:2134:34 | S1 | | main.rs:2055:5:2056:14 | S1 | +| main.rs:2145:16:2145:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2145:16:2145:20 | SelfParam | TRef | main.rs:2141:5:2142:13 | S | +| main.rs:2145:31:2147:9 | { ... } | | main.rs:2141:5:2142:13 | S | +| main.rs:2146:13:2146:13 | S | | main.rs:2141:5:2142:13 | S | +| main.rs:2156:26:2158:9 | { ... } | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2156:26:2158:9 | { ... } | T | main.rs:2155:10:2155:10 | T | +| main.rs:2157:13:2157:38 | MyVec {...} | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2157:13:2157:38 | MyVec {...} | T | main.rs:2155:10:2155:10 | T | +| main.rs:2157:27:2157:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2157:27:2157:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2157:27:2157:36 | ...::new(...) | T | main.rs:2155:10:2155:10 | T | +| main.rs:2160:17:2160:25 | SelfParam | | {EXTERNAL LOCATION} | &mut | +| main.rs:2160:17:2160:25 | SelfParam | TRefMut | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2160:17:2160:25 | SelfParam | TRefMut.T | main.rs:2155:10:2155:10 | T | +| main.rs:2160:28:2160:32 | value | | main.rs:2155:10:2155:10 | T | +| main.rs:2160:38:2162:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2161:13:2161:16 | self | | {EXTERNAL LOCATION} | &mut | +| main.rs:2161:13:2161:16 | self | TRefMut | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2161:13:2161:16 | self | TRefMut.T | main.rs:2155:10:2155:10 | T | +| main.rs:2161:13:2161:21 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:2161:13:2161:21 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:2161:13:2161:21 | self.data | T | main.rs:2155:10:2155:10 | T | +| main.rs:2161:13:2161:33 | ... .push(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2161:28:2161:32 | value | | main.rs:2155:10:2155:10 | T | +| main.rs:2169:18:2169:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2169:18:2169:22 | SelfParam | TRef | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2169:18:2169:22 | SelfParam | TRef.T | main.rs:2165:10:2165:10 | T | +| main.rs:2169:25:2169:29 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2169:56:2171:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2169:56:2171:9 | { ... } | TRef | main.rs:2165:10:2165:10 | T | +| main.rs:2170:13:2170:29 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2170:13:2170:29 | &... | TRef | main.rs:2165:10:2165:10 | T | +| main.rs:2170:14:2170:17 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2170:14:2170:17 | self | TRef | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2170:14:2170:17 | self | TRef.T | main.rs:2165:10:2165:10 | T | +| main.rs:2170:14:2170:22 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:2170:14:2170:22 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:2170:14:2170:22 | self.data | T | main.rs:2165:10:2165:10 | T | +| main.rs:2170:14:2170:29 | ...[index] | | main.rs:2165:10:2165:10 | T | +| main.rs:2170:24:2170:28 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2174:22:2174:26 | slice | | {EXTERNAL LOCATION} | & | +| main.rs:2174:22:2174:26 | slice | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:2174:22:2174:26 | slice | TRef.TSlice | main.rs:2141:5:2142:13 | S | +| main.rs:2174:35:2176:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2175:13:2175:13 | x | | main.rs:2141:5:2142:13 | S | +| main.rs:2175:17:2175:21 | slice | | {EXTERNAL LOCATION} | & | +| main.rs:2175:17:2175:21 | slice | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:2175:17:2175:21 | slice | TRef.TSlice | main.rs:2141:5:2142:13 | S | +| main.rs:2175:17:2175:24 | slice[0] | | main.rs:2141:5:2142:13 | S | +| main.rs:2175:17:2175:30 | ... .foo() | | main.rs:2141:5:2142:13 | S | +| main.rs:2175:23:2175:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2178:37:2178:37 | a | | main.rs:2178:20:2178:34 | T | +| main.rs:2178:43:2178:43 | b | | {EXTERNAL LOCATION} | usize | +| main.rs:2182:9:2182:9 | a | | main.rs:2178:20:2178:34 | T | +| main.rs:2182:11:2182:11 | b | | {EXTERNAL LOCATION} | usize | +| main.rs:2185:16:2196:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2186:17:2186:19 | vec | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2186:17:2186:19 | vec | T | main.rs:2141:5:2142:13 | S | +| main.rs:2186:23:2186:34 | ...::new(...) | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2186:23:2186:34 | ...::new(...) | T | main.rs:2141:5:2142:13 | S | +| main.rs:2187:9:2187:11 | vec | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2187:9:2187:11 | vec | T | main.rs:2141:5:2142:13 | S | +| main.rs:2187:9:2187:19 | vec.push(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2187:18:2187:18 | S | | main.rs:2141:5:2142:13 | S | +| main.rs:2188:9:2188:11 | vec | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2188:9:2188:11 | vec | T | main.rs:2141:5:2142:13 | S | +| main.rs:2188:9:2188:14 | vec[0] | | main.rs:2141:5:2142:13 | S | +| main.rs:2188:9:2188:20 | ... .foo() | | main.rs:2141:5:2142:13 | S | +| main.rs:2188:13:2188:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2190:13:2190:14 | xs | | {EXTERNAL LOCATION} | [;] | +| main.rs:2190:13:2190:14 | xs | TArray | main.rs:2141:5:2142:13 | S | +| main.rs:2190:21:2190:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2190:26:2190:28 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2190:26:2190:28 | [...] | TArray | main.rs:2141:5:2142:13 | S | +| main.rs:2190:27:2190:27 | S | | main.rs:2141:5:2142:13 | S | +| main.rs:2191:13:2191:13 | x | | main.rs:2141:5:2142:13 | S | +| main.rs:2191:17:2191:18 | xs | | {EXTERNAL LOCATION} | [;] | +| main.rs:2191:17:2191:18 | xs | TArray | main.rs:2141:5:2142:13 | S | +| main.rs:2191:17:2191:21 | xs[0] | | main.rs:2141:5:2142:13 | S | +| main.rs:2191:17:2191:27 | ... .foo() | | main.rs:2141:5:2142:13 | S | +| main.rs:2191:20:2191:20 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2193:29:2193:31 | vec | | main.rs:2150:5:2153:5 | MyVec | +| main.rs:2193:29:2193:31 | vec | T | main.rs:2141:5:2142:13 | S | +| main.rs:2193:34:2193:34 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2195:9:2195:26 | analyze_slice(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2195:23:2195:25 | &xs | | {EXTERNAL LOCATION} | & | +| main.rs:2195:23:2195:25 | &xs | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:2195:23:2195:25 | &xs | TRef.TArray | main.rs:2141:5:2142:13 | S | +| main.rs:2195:24:2195:25 | xs | | {EXTERNAL LOCATION} | [;] | +| main.rs:2195:24:2195:25 | xs | TArray | main.rs:2141:5:2142:13 | S | +| main.rs:2200:16:2202:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2201:13:2201:13 | x | | {EXTERNAL LOCATION} | String | +| main.rs:2201:17:2201:46 | MacroExpr | | {EXTERNAL LOCATION} | String | +| main.rs:2201:25:2201:35 | "Hello, {}" | | {EXTERNAL LOCATION} | & | +| main.rs:2201:25:2201:35 | "Hello, {}" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2201:25:2201:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2201:25:2201:45 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2201:25:2201:45 | { ... } | | {EXTERNAL LOCATION} | String | +| main.rs:2201:38:2201:45 | "World!" | | {EXTERNAL LOCATION} | & | +| main.rs:2201:38:2201:45 | "World!" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2210:19:2210:22 | SelfParam | | main.rs:2206:5:2211:5 | Self [trait MyAdd] | +| main.rs:2210:25:2210:27 | rhs | | main.rs:2206:17:2206:26 | Rhs | +| main.rs:2217:19:2217:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2217:25:2217:29 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2217:45:2219:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2218:13:2218:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2226:19:2226:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2226:25:2226:29 | value | | {EXTERNAL LOCATION} | & | +| main.rs:2226:25:2226:29 | value | TRef | {EXTERNAL LOCATION} | i64 | +| main.rs:2226:46:2228:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2227:13:2227:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2227:14:2227:18 | value | | {EXTERNAL LOCATION} | & | +| main.rs:2227:14:2227:18 | value | TRef | {EXTERNAL LOCATION} | i64 | +| main.rs:2235:19:2235:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2235:25:2235:29 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2235:46:2241:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2236:13:2240:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2236:13:2240:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| main.rs:2236:16:2236:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2236:22:2238:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2236:22:2238:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2237:17:2237:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2237:17:2237:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2238:20:2240:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2238:20:2240:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2239:17:2239:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2239:17:2239:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2250:19:2250:22 | SelfParam | | main.rs:2244:5:2244:19 | S | +| main.rs:2250:19:2250:22 | SelfParam | T | main.rs:2246:10:2246:17 | T | +| main.rs:2250:25:2250:29 | other | | main.rs:2244:5:2244:19 | S | +| main.rs:2250:25:2250:29 | other | T | main.rs:2246:10:2246:17 | T | +| main.rs:2250:54:2252:9 | { ... } | | main.rs:2244:5:2244:19 | S | +| main.rs:2251:13:2251:39 | S(...) | | main.rs:2244:5:2244:19 | S | +| main.rs:2251:15:2251:22 | (...) | | main.rs:2246:10:2246:17 | T | +| main.rs:2251:16:2251:19 | self | | main.rs:2244:5:2244:19 | S | +| main.rs:2251:16:2251:19 | self | T | main.rs:2246:10:2246:17 | T | +| main.rs:2251:16:2251:21 | self.0 | | main.rs:2246:10:2246:17 | T | +| main.rs:2251:31:2251:35 | other | | main.rs:2244:5:2244:19 | S | +| main.rs:2251:31:2251:35 | other | T | main.rs:2246:10:2246:17 | T | +| main.rs:2251:31:2251:37 | other.0 | | main.rs:2246:10:2246:17 | T | +| main.rs:2259:19:2259:22 | SelfParam | | main.rs:2244:5:2244:19 | S | +| main.rs:2259:19:2259:22 | SelfParam | T | main.rs:2255:10:2255:17 | T | +| main.rs:2259:25:2259:29 | other | | main.rs:2255:10:2255:17 | T | +| main.rs:2259:51:2261:9 | { ... } | | main.rs:2244:5:2244:19 | S | +| main.rs:2260:13:2260:37 | S(...) | | main.rs:2244:5:2244:19 | S | +| main.rs:2260:15:2260:22 | (...) | | main.rs:2255:10:2255:17 | T | +| main.rs:2260:16:2260:19 | self | | main.rs:2244:5:2244:19 | S | +| main.rs:2260:16:2260:19 | self | T | main.rs:2255:10:2255:17 | T | +| main.rs:2260:16:2260:21 | self.0 | | main.rs:2255:10:2255:17 | T | +| main.rs:2260:31:2260:35 | other | | main.rs:2255:10:2255:17 | T | +| main.rs:2271:19:2271:22 | SelfParam | | main.rs:2244:5:2244:19 | S | +| main.rs:2271:19:2271:22 | SelfParam | T | main.rs:2264:14:2264:14 | T | +| main.rs:2271:25:2271:29 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2271:25:2271:29 | other | TRef | main.rs:2264:14:2264:14 | T | +| main.rs:2271:55:2273:9 | { ... } | | main.rs:2244:5:2244:19 | S | +| main.rs:2272:13:2272:37 | S(...) | | main.rs:2244:5:2244:19 | S | +| main.rs:2272:15:2272:22 | (...) | | main.rs:2264:14:2264:14 | T | +| main.rs:2272:16:2272:19 | self | | main.rs:2244:5:2244:19 | S | +| main.rs:2272:16:2272:19 | self | T | main.rs:2264:14:2264:14 | T | +| main.rs:2272:16:2272:21 | self.0 | | main.rs:2264:14:2264:14 | T | +| main.rs:2272:31:2272:35 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2272:31:2272:35 | other | TRef | main.rs:2264:14:2264:14 | T | +| main.rs:2278:20:2278:24 | value | | main.rs:2276:18:2276:18 | T | +| main.rs:2283:20:2283:24 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2283:40:2285:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2284:13:2284:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2290:20:2290:24 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2290:41:2296:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2291:13:2295:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2291:13:2295:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| main.rs:2291:16:2291:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2291:22:2293:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2291:22:2293:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2292:17:2292:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2292:17:2292:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2293:20:2295:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2293:20:2295:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2294:17:2294:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2294:17:2294:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2301:21:2301:25 | value | | main.rs:2299:19:2299:19 | T | +| main.rs:2301:31:2301:31 | x | | main.rs:2299:5:2302:5 | Self [trait MyFrom2] | +| main.rs:2306:21:2306:25 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2306:33:2306:33 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2306:48:2308:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2307:13:2307:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2313:21:2313:25 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2313:34:2313:34 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2313:49:2319:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2314:13:2318:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2314:16:2314:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2314:22:2316:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2315:17:2315:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2316:20:2318:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2317:17:2317:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2324:15:2324:15 | x | | main.rs:2322:5:2328:5 | Self [trait MySelfTrait] | +| main.rs:2327:15:2327:15 | x | | main.rs:2322:5:2328:5 | Self [trait MySelfTrait] | +| main.rs:2332:15:2332:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2332:31:2334:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2333:13:2333:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2333:13:2333:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2333:17:2333:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2337:15:2337:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2337:32:2339:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2338:13:2338:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2338:13:2338:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2338:17:2338:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2344:15:2344:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2344:31:2346:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2345:13:2345:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2345:13:2345:13 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2349:15:2349:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2349:32:2351:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2350:13:2350:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2354:16:2379:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2355:13:2355:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2355:22:2355:23 | 73 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2355:22:2355:23 | 73 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2356:9:2356:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2356:9:2356:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2356:18:2356:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2357:9:2357:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2357:9:2357:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2357:18:2357:22 | &5i64 | | {EXTERNAL LOCATION} | & | +| main.rs:2357:18:2357:22 | &5i64 | TRef | {EXTERNAL LOCATION} | i64 | +| main.rs:2357:19:2357:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2358:9:2358:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2358:9:2358:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2358:18:2358:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2360:9:2360:15 | S(...) | | main.rs:2244:5:2244:19 | S | +| main.rs:2360:9:2360:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2360:9:2360:31 | ... .my_add(...) | | main.rs:2244:5:2244:19 | S | +| main.rs:2360:11:2360:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2360:24:2360:30 | S(...) | | main.rs:2244:5:2244:19 | S | +| main.rs:2360:24:2360:30 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2360:26:2360:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2361:9:2361:15 | S(...) | | main.rs:2244:5:2244:19 | S | +| main.rs:2361:9:2361:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2361:11:2361:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2361:24:2361:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2362:9:2362:15 | S(...) | | main.rs:2244:5:2244:19 | S | +| main.rs:2362:9:2362:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2362:9:2362:29 | ... .my_add(...) | | main.rs:2244:5:2244:19 | S | +| main.rs:2362:11:2362:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2362:24:2362:28 | &3i64 | | {EXTERNAL LOCATION} | & | +| main.rs:2362:24:2362:28 | &3i64 | TRef | {EXTERNAL LOCATION} | i64 | +| main.rs:2362:25:2362:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2364:13:2364:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2364:17:2364:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2364:30:2364:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2365:13:2365:13 | y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2365:17:2365:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2365:30:2365:33 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2366:13:2366:13 | z | | {EXTERNAL LOCATION} | i64 | +| main.rs:2366:22:2366:43 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2366:38:2366:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2367:9:2367:34 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2367:23:2367:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2367:30:2367:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2368:9:2368:33 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2368:23:2368:26 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2368:29:2368:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2369:9:2369:38 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2369:27:2369:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2369:34:2369:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2371:9:2371:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2371:17:2371:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2372:9:2372:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2372:17:2372:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2373:9:2373:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2373:18:2373:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2374:9:2374:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2374:18:2374:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2375:9:2375:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2375:25:2375:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2376:9:2376:30 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2376:25:2376:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2377:9:2377:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2377:25:2377:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2378:9:2378:29 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2378:25:2378:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2386:26:2388:9 | { ... } | | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2387:13:2387:25 | MyCallable {...} | | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2390:17:2390:21 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2390:17:2390:21 | SelfParam | TRef | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2390:31:2392:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2391:13:2391:13 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2391:13:2391:13 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2395:16:2502:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2398:9:2398:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2398:13:2398:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2398:18:2398:26 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2398:18:2398:26 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2398:19:2398:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2398:22:2398:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2398:25:2398:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2398:28:2398:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2399:9:2399:44 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2399:18:2399:26 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2399:18:2399:26 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2399:18:2399:41 | ... .map(...) | | {EXTERNAL LOCATION} | [;] | +| main.rs:2399:19:2399:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2399:22:2399:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2399:25:2399:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2399:32:2399:40 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | +| main.rs:2399:32:2399:40 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| main.rs:2399:40:2399:40 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2399:43:2399:44 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2400:9:2400:41 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2400:13:2400:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2400:18:2400:26 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2400:18:2400:26 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2400:18:2400:38 | ... .into_iter() | | {EXTERNAL LOCATION} | IntoIter | +| main.rs:2400:18:2400:38 | ... .into_iter() | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2400:19:2400:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2400:22:2400:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2400:25:2400:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2400:40:2400:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2402:13:2402:17 | vals1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2402:13:2402:17 | vals1 | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2402:13:2402:17 | vals1 | TArray | {EXTERNAL LOCATION} | u8 | +| main.rs:2402:21:2402:31 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2402:21:2402:31 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2402:21:2402:31 | [...] | TArray | {EXTERNAL LOCATION} | u8 | +| main.rs:2402:22:2402:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2402:27:2402:27 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2402:27:2402:27 | 2 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2402:30:2402:30 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2402:30:2402:30 | 3 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2403:9:2403:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2403:13:2403:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2403:13:2403:13 | u | | {EXTERNAL LOCATION} | u8 | +| main.rs:2403:18:2403:22 | vals1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2403:18:2403:22 | vals1 | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2403:18:2403:22 | vals1 | TArray | {EXTERNAL LOCATION} | u8 | +| main.rs:2403:24:2403:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2405:13:2405:17 | vals2 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2405:13:2405:17 | vals2 | TArray | {EXTERNAL LOCATION} | u16 | +| main.rs:2405:21:2405:29 | [1u16; 3] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2405:21:2405:29 | [1u16; 3] | TArray | {EXTERNAL LOCATION} | u16 | +| main.rs:2405:22:2405:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2405:28:2405:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2406:9:2406:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2406:13:2406:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2406:18:2406:22 | vals2 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2406:18:2406:22 | vals2 | TArray | {EXTERNAL LOCATION} | u16 | +| main.rs:2406:24:2406:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2408:13:2408:17 | vals3 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2408:13:2408:17 | vals3 | TArray | {EXTERNAL LOCATION} | u32 | +| main.rs:2408:26:2408:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2408:31:2408:39 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2408:31:2408:39 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2408:31:2408:39 | [...] | TArray | {EXTERNAL LOCATION} | u32 | +| main.rs:2408:32:2408:32 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2408:32:2408:32 | 1 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2408:35:2408:35 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2408:35:2408:35 | 2 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2408:38:2408:38 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2408:38:2408:38 | 3 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2409:9:2409:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2409:13:2409:13 | u | | {EXTERNAL LOCATION} | u32 | +| main.rs:2409:18:2409:22 | vals3 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2409:18:2409:22 | vals3 | TArray | {EXTERNAL LOCATION} | u32 | +| main.rs:2409:24:2409:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2411:13:2411:17 | vals4 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2411:13:2411:17 | vals4 | TArray | {EXTERNAL LOCATION} | u64 | +| main.rs:2411:26:2411:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2411:31:2411:36 | [1; 3] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2411:31:2411:36 | [1; 3] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2411:31:2411:36 | [1; 3] | TArray | {EXTERNAL LOCATION} | u64 | +| main.rs:2411:32:2411:32 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2411:32:2411:32 | 1 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2411:35:2411:35 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2412:9:2412:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2412:13:2412:13 | u | | {EXTERNAL LOCATION} | u64 | +| main.rs:2412:18:2412:22 | vals4 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2412:18:2412:22 | vals4 | TArray | {EXTERNAL LOCATION} | u64 | +| main.rs:2412:24:2412:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2414:17:2414:24 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2414:17:2414:24 | strings1 | TArray | {EXTERNAL LOCATION} | & | +| main.rs:2414:17:2414:24 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2414:28:2414:48 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2414:28:2414:48 | [...] | TArray | {EXTERNAL LOCATION} | & | +| main.rs:2414:28:2414:48 | [...] | TArray.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2414:29:2414:33 | "foo" | | {EXTERNAL LOCATION} | & | +| main.rs:2414:29:2414:33 | "foo" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2414:36:2414:40 | "bar" | | {EXTERNAL LOCATION} | & | +| main.rs:2414:36:2414:40 | "bar" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2414:43:2414:47 | "baz" | | {EXTERNAL LOCATION} | & | +| main.rs:2414:43:2414:47 | "baz" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2415:9:2415:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2415:13:2415:13 | s | | {EXTERNAL LOCATION} | & | +| main.rs:2415:13:2415:13 | s | TRef | {EXTERNAL LOCATION} | & | +| main.rs:2415:13:2415:13 | s | TRef.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2415:18:2415:26 | &strings1 | | {EXTERNAL LOCATION} | & | +| main.rs:2415:18:2415:26 | &strings1 | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:2415:18:2415:26 | &strings1 | TRef.TArray | {EXTERNAL LOCATION} | & | +| main.rs:2415:18:2415:26 | &strings1 | TRef.TArray.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2415:19:2415:26 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2415:19:2415:26 | strings1 | TArray | {EXTERNAL LOCATION} | & | +| main.rs:2415:19:2415:26 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2415:28:2415:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2416:9:2416:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2416:13:2416:13 | s | | {EXTERNAL LOCATION} | &mut | +| main.rs:2416:13:2416:13 | s | TRefMut | {EXTERNAL LOCATION} | & | +| main.rs:2416:13:2416:13 | s | TRefMut.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2416:18:2416:30 | &mut strings1 | | {EXTERNAL LOCATION} | &mut | +| main.rs:2416:18:2416:30 | &mut strings1 | TRefMut | {EXTERNAL LOCATION} | [;] | +| main.rs:2416:18:2416:30 | &mut strings1 | TRefMut.TArray | {EXTERNAL LOCATION} | & | +| main.rs:2416:18:2416:30 | &mut strings1 | TRefMut.TArray.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2416:23:2416:30 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2416:23:2416:30 | strings1 | TArray | {EXTERNAL LOCATION} | & | +| main.rs:2416:23:2416:30 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2416:32:2416:33 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2417:9:2417:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2417:13:2417:13 | s | | {EXTERNAL LOCATION} | & | +| main.rs:2417:13:2417:13 | s | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2417:18:2417:25 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2417:18:2417:25 | strings1 | TArray | {EXTERNAL LOCATION} | & | +| main.rs:2417:18:2417:25 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2417:27:2417:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2419:13:2419:20 | strings2 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2419:13:2419:20 | strings2 | TArray | {EXTERNAL LOCATION} | String | +| main.rs:2420:9:2424:9 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2420:9:2424:9 | [...] | TArray | {EXTERNAL LOCATION} | String | +| main.rs:2421:13:2421:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2421:26:2421:30 | "foo" | | {EXTERNAL LOCATION} | & | +| main.rs:2421:26:2421:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2422:13:2422:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2422:26:2422:30 | "bar" | | {EXTERNAL LOCATION} | & | +| main.rs:2422:26:2422:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2423:13:2423:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2423:26:2423:30 | "baz" | | {EXTERNAL LOCATION} | & | +| main.rs:2423:26:2423:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2425:9:2425:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2425:13:2425:13 | s | | {EXTERNAL LOCATION} | String | +| main.rs:2425:18:2425:25 | strings2 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2425:18:2425:25 | strings2 | TArray | {EXTERNAL LOCATION} | String | +| main.rs:2425:27:2425:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2427:13:2427:20 | strings3 | | {EXTERNAL LOCATION} | & | +| main.rs:2427:13:2427:20 | strings3 | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:2427:13:2427:20 | strings3 | TRef.TArray | {EXTERNAL LOCATION} | String | +| main.rs:2428:9:2432:9 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2428:9:2432:9 | &... | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:2428:9:2432:9 | &... | TRef.TArray | {EXTERNAL LOCATION} | String | +| main.rs:2428:10:2432:9 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2428:10:2432:9 | [...] | TArray | {EXTERNAL LOCATION} | String | +| main.rs:2429:13:2429:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2429:26:2429:30 | "foo" | | {EXTERNAL LOCATION} | & | +| main.rs:2429:26:2429:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2430:13:2430:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2430:26:2430:30 | "bar" | | {EXTERNAL LOCATION} | & | +| main.rs:2430:26:2430:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2431:13:2431:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2431:26:2431:30 | "baz" | | {EXTERNAL LOCATION} | & | +| main.rs:2431:26:2431:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2433:9:2433:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2433:13:2433:13 | s | | {EXTERNAL LOCATION} | & | +| main.rs:2433:13:2433:13 | s | TRef | {EXTERNAL LOCATION} | String | +| main.rs:2433:18:2433:25 | strings3 | | {EXTERNAL LOCATION} | & | +| main.rs:2433:18:2433:25 | strings3 | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:2433:18:2433:25 | strings3 | TRef.TArray | {EXTERNAL LOCATION} | String | +| main.rs:2433:27:2433:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2435:13:2435:21 | callables | | {EXTERNAL LOCATION} | [;] | +| main.rs:2435:13:2435:21 | callables | TArray | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2435:25:2435:81 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2435:25:2435:81 | [...] | TArray | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2435:26:2435:42 | ...::new(...) | | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2435:45:2435:61 | ...::new(...) | | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2435:64:2435:80 | ...::new(...) | | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2436:9:2440:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2436:13:2436:13 | c | | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2437:12:2437:20 | callables | | {EXTERNAL LOCATION} | [;] | +| main.rs:2437:12:2437:20 | callables | TArray | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2438:9:2440:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2439:17:2439:22 | result | | {EXTERNAL LOCATION} | i64 | +| main.rs:2439:26:2439:26 | c | | main.rs:2383:5:2383:24 | MyCallable | +| main.rs:2439:26:2439:33 | c.call() | | {EXTERNAL LOCATION} | i64 | +| main.rs:2444:9:2444:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2444:13:2444:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2444:18:2444:18 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2444:18:2444:22 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2444:18:2444:22 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2444:21:2444:22 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2444:24:2444:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2445:9:2445:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2445:13:2445:13 | u | | {EXTERNAL LOCATION} | Range | +| main.rs:2445:13:2445:13 | u | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2445:13:2445:13 | u | Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2445:18:2445:26 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2445:18:2445:26 | [...] | TArray | {EXTERNAL LOCATION} | Range | +| main.rs:2445:18:2445:26 | [...] | TArray.Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2445:18:2445:26 | [...] | TArray.Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2445:19:2445:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2445:19:2445:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2445:19:2445:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2445:19:2445:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2445:24:2445:25 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2445:24:2445:25 | 10 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2445:28:2445:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2446:13:2446:17 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2446:13:2446:17 | range | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2446:21:2446:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2446:21:2446:25 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2446:21:2446:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2446:24:2446:25 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2447:9:2447:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2447:13:2447:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2447:18:2447:22 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2447:18:2447:22 | range | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2447:24:2447:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2448:13:2448:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2448:26:2448:27 | .. | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2449:9:2449:51 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2449:18:2449:48 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2449:19:2449:36 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2449:19:2449:36 | [...] | TArray | {EXTERNAL LOCATION} | i64 | +| main.rs:2449:20:2449:23 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2449:26:2449:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2449:32:2449:35 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2449:38:2449:47 | range_full | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2449:50:2449:51 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2451:13:2451:18 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2451:13:2451:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2452:9:2455:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | +| main.rs:2452:9:2455:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2453:20:2453:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2454:18:2454:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2456:9:2456:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2456:13:2456:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2456:18:2456:23 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2456:18:2456:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2456:25:2456:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2460:13:2460:17 | vals3 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2460:21:2460:33 | MacroExpr | | {EXTERNAL LOCATION} | Vec | +| main.rs:2460:26:2460:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2460:29:2460:29 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2460:32:2460:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2461:9:2461:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2461:18:2461:22 | vals3 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2461:24:2461:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2463:13:2463:18 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2463:13:2463:18 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2463:13:2463:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2463:32:2463:43 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2463:32:2463:43 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2463:32:2463:43 | [...] | TArray | {EXTERNAL LOCATION} | u16 | +| main.rs:2463:32:2463:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | +| main.rs:2463:32:2463:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | +| main.rs:2463:32:2463:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2463:33:2463:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2463:39:2463:39 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2463:42:2463:42 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2464:9:2464:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2464:13:2464:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2464:18:2464:23 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2464:18:2464:23 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2464:18:2464:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2464:25:2464:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2466:22:2466:33 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2466:22:2466:33 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2466:22:2466:33 | [...] | TArray | {EXTERNAL LOCATION} | u16 | +| main.rs:2466:23:2466:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2466:29:2466:29 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2466:32:2466:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2467:9:2467:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2467:25:2467:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2469:13:2469:17 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2469:13:2469:17 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2469:13:2469:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2469:13:2469:17 | vals5 | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2469:21:2469:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2469:21:2469:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2469:21:2469:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2469:21:2469:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2469:31:2469:42 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2469:31:2469:42 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2469:31:2469:42 | [...] | TArray | {EXTERNAL LOCATION} | u32 | +| main.rs:2469:32:2469:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2469:38:2469:38 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2469:41:2469:41 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2470:9:2470:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2470:13:2470:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2470:13:2470:13 | u | | {EXTERNAL LOCATION} | u32 | +| main.rs:2470:18:2470:22 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2470:18:2470:22 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2470:18:2470:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2470:18:2470:22 | vals5 | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2470:24:2470:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2472:13:2472:17 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2472:13:2472:17 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2472:13:2472:17 | vals6 | T | {EXTERNAL LOCATION} | & | +| main.rs:2472:13:2472:17 | vals6 | T.TRef | {EXTERNAL LOCATION} | u64 | +| main.rs:2472:32:2472:43 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2472:32:2472:43 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2472:32:2472:43 | [...] | TArray | {EXTERNAL LOCATION} | u64 | +| main.rs:2472:32:2472:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | +| main.rs:2472:32:2472:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | +| main.rs:2472:32:2472:60 | ... .collect() | T | {EXTERNAL LOCATION} | & | +| main.rs:2472:32:2472:60 | ... .collect() | T.TRef | {EXTERNAL LOCATION} | u64 | +| main.rs:2472:33:2472:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2472:39:2472:39 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2472:42:2472:42 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2473:9:2473:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2473:13:2473:13 | u | | {EXTERNAL LOCATION} | & | +| main.rs:2473:13:2473:13 | u | TRef | {EXTERNAL LOCATION} | u64 | +| main.rs:2473:18:2473:22 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2473:18:2473:22 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2473:18:2473:22 | vals6 | T | {EXTERNAL LOCATION} | & | +| main.rs:2473:18:2473:22 | vals6 | T.TRef | {EXTERNAL LOCATION} | u64 | +| main.rs:2473:24:2473:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2475:17:2475:21 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2475:17:2475:21 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2475:17:2475:21 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2475:25:2475:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2475:25:2475:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2475:25:2475:34 | ...::new(...) | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2476:9:2476:13 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2476:9:2476:13 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2476:9:2476:13 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2476:9:2476:23 | vals7.push(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2476:20:2476:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2477:9:2477:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2477:13:2477:13 | u | | {EXTERNAL LOCATION} | u8 | +| main.rs:2477:18:2477:22 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2477:18:2477:22 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2477:18:2477:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2477:24:2477:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2479:13:2479:19 | matrix1 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2479:23:2479:50 | MacroExpr | | {EXTERNAL LOCATION} | Vec | +| main.rs:2479:28:2479:37 | (...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2479:28:2479:37 | MacroExpr | | {EXTERNAL LOCATION} | Vec | +| main.rs:2479:33:2479:33 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2479:36:2479:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2479:40:2479:49 | (...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2479:40:2479:49 | MacroExpr | | {EXTERNAL LOCATION} | Vec | +| main.rs:2479:45:2479:45 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2479:48:2479:48 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2481:13:2481:13 | _ | | {EXTERNAL LOCATION} | () | +| main.rs:2481:17:2484:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2481:28:2481:34 | matrix1 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2481:36:2484:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2482:13:2483:13 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2482:29:2483:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2486:17:2486:20 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2486:17:2486:20 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2486:17:2486:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2486:17:2486:20 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2486:17:2486:20 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2486:17:2486:20 | map1 | V.T | {EXTERNAL LOCATION} | & | +| main.rs:2486:17:2486:20 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2486:24:2486:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2486:24:2486:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2486:24:2486:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2486:24:2486:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | +| main.rs:2486:24:2486:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2486:24:2486:55 | ...::new(...) | V.T | {EXTERNAL LOCATION} | & | +| main.rs:2486:24:2486:55 | ...::new(...) | V.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2487:9:2487:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2487:9:2487:12 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2487:9:2487:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2487:9:2487:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2487:9:2487:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2487:9:2487:12 | map1 | V.T | {EXTERNAL LOCATION} | & | +| main.rs:2487:9:2487:12 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2487:9:2487:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2487:9:2487:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2487:9:2487:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2487:9:2487:39 | map1.insert(...) | T.T | {EXTERNAL LOCATION} | & | +| main.rs:2487:9:2487:39 | map1.insert(...) | T.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2487:21:2487:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2487:24:2487:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2487:24:2487:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2487:24:2487:38 | ...::new(...) | T | {EXTERNAL LOCATION} | & | +| main.rs:2487:24:2487:38 | ...::new(...) | T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2487:33:2487:37 | "one" | | {EXTERNAL LOCATION} | & | +| main.rs:2487:33:2487:37 | "one" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2488:9:2488:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2488:9:2488:12 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2488:9:2488:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2488:9:2488:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2488:9:2488:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2488:9:2488:12 | map1 | V.T | {EXTERNAL LOCATION} | & | +| main.rs:2488:9:2488:12 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2488:9:2488:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2488:9:2488:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2488:9:2488:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2488:9:2488:39 | map1.insert(...) | T.T | {EXTERNAL LOCATION} | & | +| main.rs:2488:9:2488:39 | map1.insert(...) | T.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2488:21:2488:21 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2488:24:2488:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2488:24:2488:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2488:24:2488:38 | ...::new(...) | T | {EXTERNAL LOCATION} | & | +| main.rs:2488:24:2488:38 | ...::new(...) | T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2488:33:2488:37 | "two" | | {EXTERNAL LOCATION} | & | +| main.rs:2488:33:2488:37 | "two" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2489:9:2489:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2489:13:2489:15 | key | | {EXTERNAL LOCATION} | & | +| main.rs:2489:13:2489:15 | key | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2489:20:2489:23 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2489:20:2489:23 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2489:20:2489:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2489:20:2489:23 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2489:20:2489:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2489:20:2489:23 | map1 | V.T | {EXTERNAL LOCATION} | & | +| main.rs:2489:20:2489:23 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2489:20:2489:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | +| main.rs:2489:20:2489:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2489:20:2489:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2489:20:2489:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2489:20:2489:30 | map1.keys() | V.T | {EXTERNAL LOCATION} | & | +| main.rs:2489:20:2489:30 | map1.keys() | V.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2489:32:2489:33 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2490:9:2490:37 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2490:13:2490:17 | value | | {EXTERNAL LOCATION} | & | +| main.rs:2490:13:2490:17 | value | TRef | {EXTERNAL LOCATION} | Box | +| main.rs:2490:13:2490:17 | value | TRef.A | {EXTERNAL LOCATION} | Global | +| main.rs:2490:13:2490:17 | value | TRef.T | {EXTERNAL LOCATION} | & | +| main.rs:2490:13:2490:17 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2490:22:2490:25 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2490:22:2490:25 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2490:22:2490:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2490:22:2490:25 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2490:22:2490:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2490:22:2490:25 | map1 | V.T | {EXTERNAL LOCATION} | & | +| main.rs:2490:22:2490:25 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2490:22:2490:34 | map1.values() | | {EXTERNAL LOCATION} | Values | +| main.rs:2490:22:2490:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2490:22:2490:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2490:22:2490:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2490:22:2490:34 | map1.values() | V.T | {EXTERNAL LOCATION} | & | +| main.rs:2490:22:2490:34 | map1.values() | V.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2490:36:2490:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2491:9:2491:42 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2491:13:2491:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2491:13:2491:24 | TuplePat | T0 | {EXTERNAL LOCATION} | & | +| main.rs:2491:13:2491:24 | TuplePat | T0.TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2491:13:2491:24 | TuplePat | T1 | {EXTERNAL LOCATION} | & | +| main.rs:2491:13:2491:24 | TuplePat | T1.TRef | {EXTERNAL LOCATION} | Box | +| main.rs:2491:13:2491:24 | TuplePat | T1.TRef.A | {EXTERNAL LOCATION} | Global | +| main.rs:2491:13:2491:24 | TuplePat | T1.TRef.T | {EXTERNAL LOCATION} | & | +| main.rs:2491:13:2491:24 | TuplePat | T1.TRef.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2491:14:2491:16 | key | | {EXTERNAL LOCATION} | & | +| main.rs:2491:14:2491:16 | key | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2491:19:2491:23 | value | | {EXTERNAL LOCATION} | & | +| main.rs:2491:19:2491:23 | value | TRef | {EXTERNAL LOCATION} | Box | +| main.rs:2491:19:2491:23 | value | TRef.A | {EXTERNAL LOCATION} | Global | +| main.rs:2491:19:2491:23 | value | TRef.T | {EXTERNAL LOCATION} | & | +| main.rs:2491:19:2491:23 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2491:29:2491:32 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2491:29:2491:32 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2491:29:2491:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2491:29:2491:32 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2491:29:2491:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2491:29:2491:32 | map1 | V.T | {EXTERNAL LOCATION} | & | +| main.rs:2491:29:2491:32 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2491:29:2491:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | +| main.rs:2491:29:2491:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2491:29:2491:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2491:29:2491:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2491:29:2491:39 | map1.iter() | V.T | {EXTERNAL LOCATION} | & | +| main.rs:2491:29:2491:39 | map1.iter() | V.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2491:41:2491:42 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2492:9:2492:36 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2492:13:2492:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2492:13:2492:24 | TuplePat | T0 | {EXTERNAL LOCATION} | & | +| main.rs:2492:13:2492:24 | TuplePat | T0.TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2492:13:2492:24 | TuplePat | T1 | {EXTERNAL LOCATION} | & | +| main.rs:2492:13:2492:24 | TuplePat | T1.TRef | {EXTERNAL LOCATION} | Box | +| main.rs:2492:13:2492:24 | TuplePat | T1.TRef.A | {EXTERNAL LOCATION} | Global | +| main.rs:2492:13:2492:24 | TuplePat | T1.TRef.T | {EXTERNAL LOCATION} | & | +| main.rs:2492:13:2492:24 | TuplePat | T1.TRef.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2492:14:2492:16 | key | | {EXTERNAL LOCATION} | & | +| main.rs:2492:14:2492:16 | key | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2492:19:2492:23 | value | | {EXTERNAL LOCATION} | & | +| main.rs:2492:19:2492:23 | value | TRef | {EXTERNAL LOCATION} | Box | +| main.rs:2492:19:2492:23 | value | TRef.A | {EXTERNAL LOCATION} | Global | +| main.rs:2492:19:2492:23 | value | TRef.T | {EXTERNAL LOCATION} | & | +| main.rs:2492:19:2492:23 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2492:29:2492:33 | &map1 | | {EXTERNAL LOCATION} | & | +| main.rs:2492:29:2492:33 | &map1 | TRef | {EXTERNAL LOCATION} | HashMap | +| main.rs:2492:29:2492:33 | &map1 | TRef.K | {EXTERNAL LOCATION} | i32 | +| main.rs:2492:29:2492:33 | &map1 | TRef.S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2492:29:2492:33 | &map1 | TRef.V | {EXTERNAL LOCATION} | Box | +| main.rs:2492:29:2492:33 | &map1 | TRef.V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2492:29:2492:33 | &map1 | TRef.V.T | {EXTERNAL LOCATION} | & | +| main.rs:2492:29:2492:33 | &map1 | TRef.V.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2492:30:2492:33 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2492:30:2492:33 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2492:30:2492:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2492:30:2492:33 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2492:30:2492:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2492:30:2492:33 | map1 | V.T | {EXTERNAL LOCATION} | & | +| main.rs:2492:30:2492:33 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | +| main.rs:2492:35:2492:36 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2496:17:2496:17 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2496:26:2496:26 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2496:26:2496:26 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2498:13:2498:13 | _ | | {EXTERNAL LOCATION} | () | +| main.rs:2498:17:2501:9 | while ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2498:23:2498:23 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2498:23:2498:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2498:27:2498:28 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2499:9:2501:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2500:13:2500:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2500:13:2500:18 | ... += ... | | {EXTERNAL LOCATION} | () | +| main.rs:2500:18:2500:18 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2512:40:2514:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2512:40:2514:9 | { ... } | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2512:40:2514:9 | { ... } | T.T | main.rs:2511:10:2511:19 | T | +| main.rs:2513:13:2513:16 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2513:13:2513:16 | None | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2513:13:2513:16 | None | T.T | main.rs:2511:10:2511:19 | T | +| main.rs:2516:30:2518:9 | { ... } | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2516:30:2518:9 | { ... } | T | main.rs:2511:10:2511:19 | T | +| main.rs:2517:13:2517:28 | S1(...) | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2517:13:2517:28 | S1(...) | T | main.rs:2511:10:2511:19 | T | +| main.rs:2517:16:2517:27 | ...::default(...) | | main.rs:2511:10:2511:19 | T | +| main.rs:2520:19:2520:22 | SelfParam | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2520:19:2520:22 | SelfParam | T | main.rs:2511:10:2511:19 | T | +| main.rs:2520:33:2522:9 | { ... } | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2520:33:2522:9 | { ... } | T | main.rs:2511:10:2511:19 | T | +| main.rs:2521:13:2521:16 | self | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2521:13:2521:16 | self | T | main.rs:2511:10:2511:19 | T | +| main.rs:2533:15:2533:15 | x | | main.rs:2533:12:2533:12 | T | +| main.rs:2533:26:2535:5 | { ... } | | main.rs:2533:12:2533:12 | T | +| main.rs:2534:9:2534:9 | x | | main.rs:2533:12:2533:12 | T | +| main.rs:2537:16:2559:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2538:13:2538:14 | x1 | | {EXTERNAL LOCATION} | Option | +| main.rs:2538:13:2538:14 | x1 | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2538:13:2538:14 | x1 | T.T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2538:34:2538:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2538:34:2538:48 | ...::assoc_fun(...) | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2538:34:2538:48 | ...::assoc_fun(...) | T.T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2539:13:2539:14 | x2 | | {EXTERNAL LOCATION} | Option | +| main.rs:2539:13:2539:14 | x2 | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2539:13:2539:14 | x2 | T.T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2539:18:2539:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2539:18:2539:38 | ...::assoc_fun(...) | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2539:18:2539:38 | ...::assoc_fun(...) | T.T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2540:13:2540:14 | x3 | | {EXTERNAL LOCATION} | Option | +| main.rs:2540:13:2540:14 | x3 | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2540:13:2540:14 | x3 | T.T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2540:18:2540:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2540:18:2540:32 | ...::assoc_fun(...) | T | main.rs:2506:5:2506:20 | S1 | +| main.rs:2540:18:2540:32 | ...::assoc_fun(...) | T.T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2541:13:2541:14 | x4 | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2541:13:2541:14 | x4 | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2541:18:2541:48 | ...::method(...) | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2541:18:2541:48 | ...::method(...) | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2541:35:2541:47 | ...::default(...) | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2541:35:2541:47 | ...::default(...) | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2542:13:2542:14 | x5 | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2542:13:2542:14 | x5 | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2542:18:2542:42 | ...::method(...) | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2542:18:2542:42 | ...::method(...) | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2542:29:2542:41 | ...::default(...) | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2542:29:2542:41 | ...::default(...) | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2543:13:2543:14 | x6 | | main.rs:2527:5:2527:27 | S4 | +| main.rs:2543:13:2543:14 | x6 | T4 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2543:18:2543:45 | S4::<...>(...) | | main.rs:2527:5:2527:27 | S4 | +| main.rs:2543:18:2543:45 | S4::<...>(...) | T4 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2543:27:2543:44 | ...::default(...) | | main.rs:2508:5:2509:14 | S2 | +| main.rs:2544:13:2544:14 | x7 | | main.rs:2527:5:2527:27 | S4 | +| main.rs:2544:13:2544:14 | x7 | T4 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2544:18:2544:23 | S4(...) | | main.rs:2527:5:2527:27 | S4 | +| main.rs:2544:18:2544:23 | S4(...) | T4 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2544:21:2544:22 | S2 | | main.rs:2508:5:2509:14 | S2 | +| main.rs:2545:13:2545:14 | x8 | | main.rs:2527:5:2527:27 | S4 | +| main.rs:2545:13:2545:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 | +| main.rs:2545:18:2545:22 | S4(...) | | main.rs:2527:5:2527:27 | S4 | +| main.rs:2545:18:2545:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 | +| main.rs:2545:21:2545:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2546:13:2546:14 | x9 | | main.rs:2527:5:2527:27 | S4 | +| main.rs:2546:13:2546:14 | x9 | T4 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2546:18:2546:34 | S4(...) | | main.rs:2527:5:2527:27 | S4 | +| main.rs:2546:18:2546:34 | S4(...) | T4 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2546:21:2546:33 | ...::default(...) | | main.rs:2508:5:2509:14 | S2 | +| main.rs:2547:13:2547:15 | x10 | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2547:13:2547:15 | x10 | T5 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2547:19:2550:9 | S5::<...> {...} | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2547:19:2550:9 | S5::<...> {...} | T5 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2549:20:2549:37 | ...::default(...) | | main.rs:2508:5:2509:14 | S2 | +| main.rs:2551:13:2551:15 | x11 | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2551:13:2551:15 | x11 | T5 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2551:19:2551:34 | S5 {...} | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2551:19:2551:34 | S5 {...} | T5 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2551:31:2551:32 | S2 | | main.rs:2508:5:2509:14 | S2 | +| main.rs:2552:13:2552:15 | x12 | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2552:13:2552:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:2552:19:2552:33 | S5 {...} | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2552:19:2552:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:2552:31:2552:31 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2553:13:2553:15 | x13 | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2553:13:2553:15 | x13 | T5 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2553:19:2556:9 | S5 {...} | | main.rs:2529:5:2531:5 | S5 | +| main.rs:2553:19:2556:9 | S5 {...} | T5 | main.rs:2508:5:2509:14 | S2 | +| main.rs:2555:20:2555:32 | ...::default(...) | | main.rs:2508:5:2509:14 | S2 | +| main.rs:2557:13:2557:15 | x14 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2557:19:2557:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2557:30:2557:47 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2558:13:2558:15 | x15 | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2558:13:2558:15 | x15 | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2558:19:2558:37 | ...::default(...) | | main.rs:2506:5:2506:20 | S1 | +| main.rs:2558:19:2558:37 | ...::default(...) | T | main.rs:2508:5:2509:14 | S2 | +| main.rs:2567:35:2569:9 | { ... } | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2567:35:2569:9 | { ... } | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2567:35:2569:9 | { ... } | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2568:13:2568:26 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2568:13:2568:26 | TupleExpr | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2568:13:2568:26 | TupleExpr | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2568:14:2568:18 | S1 {...} | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2568:21:2568:25 | S1 {...} | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2570:16:2570:19 | SelfParam | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2570:22:2570:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2573:16:2607:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2574:13:2574:13 | a | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2574:13:2574:13 | a | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2574:13:2574:13 | a | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2574:17:2574:30 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2574:17:2574:30 | ...::get_pair(...) | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2574:17:2574:30 | ...::get_pair(...) | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2575:17:2575:17 | b | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2575:17:2575:17 | b | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2575:17:2575:17 | b | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2575:21:2575:34 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2575:21:2575:34 | ...::get_pair(...) | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2575:21:2575:34 | ...::get_pair(...) | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2576:13:2576:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2576:13:2576:18 | TuplePat | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2576:13:2576:18 | TuplePat | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2576:14:2576:14 | c | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2576:17:2576:17 | d | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2576:22:2576:35 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2576:22:2576:35 | ...::get_pair(...) | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2576:22:2576:35 | ...::get_pair(...) | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2577:13:2577:22 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2577:13:2577:22 | TuplePat | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2577:13:2577:22 | TuplePat | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2577:18:2577:18 | e | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2577:21:2577:21 | f | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2577:26:2577:39 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2577:26:2577:39 | ...::get_pair(...) | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2577:26:2577:39 | ...::get_pair(...) | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2578:13:2578:26 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2578:13:2578:26 | TuplePat | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2578:13:2578:26 | TuplePat | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2578:18:2578:18 | g | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2578:25:2578:25 | h | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2578:30:2578:43 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2578:30:2578:43 | ...::get_pair(...) | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2578:30:2578:43 | ...::get_pair(...) | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2580:9:2580:9 | a | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2580:9:2580:9 | a | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2580:9:2580:9 | a | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2580:9:2580:11 | a.0 | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2580:9:2580:17 | ... .foo() | | {EXTERNAL LOCATION} | () | +| main.rs:2581:9:2581:9 | b | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2581:9:2581:9 | b | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2581:9:2581:9 | b | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2581:9:2581:11 | b.1 | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2581:9:2581:17 | ... .foo() | | {EXTERNAL LOCATION} | () | +| main.rs:2582:9:2582:9 | c | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2582:9:2582:15 | c.foo() | | {EXTERNAL LOCATION} | () | +| main.rs:2583:9:2583:9 | d | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2583:9:2583:15 | d.foo() | | {EXTERNAL LOCATION} | () | +| main.rs:2584:9:2584:9 | e | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2584:9:2584:15 | e.foo() | | {EXTERNAL LOCATION} | () | +| main.rs:2585:9:2585:9 | f | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2585:9:2585:15 | f.foo() | | {EXTERNAL LOCATION} | () | +| main.rs:2586:9:2586:9 | g | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2586:9:2586:15 | g.foo() | | {EXTERNAL LOCATION} | () | +| main.rs:2587:9:2587:9 | h | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2587:9:2587:15 | h.foo() | | {EXTERNAL LOCATION} | () | +| main.rs:2592:13:2592:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2592:17:2592:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2593:13:2593:13 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2593:17:2593:34 | ...::default(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2594:13:2594:16 | pair | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2594:13:2594:16 | pair | T0 | {EXTERNAL LOCATION} | i64 | +| main.rs:2594:13:2594:16 | pair | T1 | {EXTERNAL LOCATION} | bool | +| main.rs:2594:20:2594:25 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2594:20:2594:25 | TupleExpr | T0 | {EXTERNAL LOCATION} | i64 | +| main.rs:2594:20:2594:25 | TupleExpr | T1 | {EXTERNAL LOCATION} | bool | +| main.rs:2594:21:2594:21 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2594:24:2594:24 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2595:13:2595:13 | i | | {EXTERNAL LOCATION} | i64 | +| main.rs:2595:22:2595:25 | pair | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2595:22:2595:25 | pair | T0 | {EXTERNAL LOCATION} | i64 | +| main.rs:2595:22:2595:25 | pair | T1 | {EXTERNAL LOCATION} | bool | +| main.rs:2595:22:2595:27 | pair.0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2596:13:2596:13 | j | | {EXTERNAL LOCATION} | bool | +| main.rs:2596:23:2596:26 | pair | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2596:23:2596:26 | pair | T0 | {EXTERNAL LOCATION} | i64 | +| main.rs:2596:23:2596:26 | pair | T1 | {EXTERNAL LOCATION} | bool | +| main.rs:2596:23:2596:28 | pair.1 | | {EXTERNAL LOCATION} | bool | +| main.rs:2598:13:2598:16 | pair | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2598:13:2598:16 | pair | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:2598:13:2598:16 | pair | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2598:20:2598:25 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2598:20:2598:25 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2598:20:2598:32 | ... .into() | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2598:20:2598:32 | ... .into() | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:2598:20:2598:32 | ... .into() | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2598:21:2598:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2598:24:2598:24 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2599:9:2602:9 | match pair { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2599:15:2599:18 | pair | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2599:15:2599:18 | pair | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:2599:15:2599:18 | pair | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2600:13:2600:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2600:13:2600:18 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:2600:13:2600:18 | TuplePat | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2600:14:2600:14 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2600:17:2600:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2600:23:2600:42 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:2600:30:2600:41 | "unexpected" | | {EXTERNAL LOCATION} | & | +| main.rs:2600:30:2600:41 | "unexpected" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2600:30:2600:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2600:30:2600:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2601:13:2601:13 | _ | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2601:13:2601:13 | _ | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:2601:13:2601:13 | _ | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2601:18:2601:35 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:2601:25:2601:34 | "expected" | | {EXTERNAL LOCATION} | & | +| main.rs:2601:25:2601:34 | "expected" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2601:25:2601:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2601:25:2601:34 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2603:13:2603:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2603:17:2603:20 | pair | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2603:17:2603:20 | pair | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:2603:17:2603:20 | pair | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2603:17:2603:22 | pair.0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2605:13:2605:13 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2605:13:2605:13 | y | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2605:13:2605:13 | y | TRef.T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2605:13:2605:13 | y | TRef.T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2605:17:2605:31 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2605:17:2605:31 | &... | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2605:17:2605:31 | &... | TRef.T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2605:17:2605:31 | &... | TRef.T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2605:18:2605:31 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2605:18:2605:31 | ...::get_pair(...) | T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2605:18:2605:31 | ...::get_pair(...) | T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2606:9:2606:9 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2606:9:2606:9 | y | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2606:9:2606:9 | y | TRef.T0 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2606:9:2606:9 | y | TRef.T1 | main.rs:2563:5:2564:16 | S1 | +| main.rs:2606:9:2606:11 | y.0 | | main.rs:2563:5:2564:16 | S1 | +| main.rs:2606:9:2606:17 | ... .foo() | | {EXTERNAL LOCATION} | () | +| main.rs:2612:27:2634:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2613:13:2613:23 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2613:13:2613:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2613:13:2613:23 | boxed_value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2613:27:2613:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2613:27:2613:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2613:27:2613:42 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2613:36:2613:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2616:9:2624:9 | match boxed_value { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2616:15:2616:25 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2616:15:2616:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2616:15:2616:25 | boxed_value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2617:13:2617:19 | box 100 | | {EXTERNAL LOCATION} | Box | +| main.rs:2617:13:2617:19 | box 100 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2617:13:2617:19 | box 100 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2617:17:2617:19 | 100 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2617:24:2619:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2618:17:2618:37 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:2618:26:2618:36 | "Boxed 100\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2618:26:2618:36 | "Boxed 100\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2618:26:2618:36 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2618:26:2618:36 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2618:26:2618:36 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2620:13:2620:17 | box ... | | {EXTERNAL LOCATION} | Box | +| main.rs:2620:13:2620:17 | box ... | A | {EXTERNAL LOCATION} | Global | +| main.rs:2620:13:2620:17 | box ... | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2620:22:2623:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2622:17:2622:52 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:2622:26:2622:42 | "Boxed value: {}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2622:26:2622:42 | "Boxed value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2622:26:2622:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2622:26:2622:51 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2622:26:2622:51 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2627:13:2627:22 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2627:13:2627:22 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2627:13:2627:22 | nested_box | T | {EXTERNAL LOCATION} | Box | +| main.rs:2627:13:2627:22 | nested_box | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2627:13:2627:22 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2627:26:2627:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2627:26:2627:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2627:26:2627:50 | ...::new(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2627:26:2627:50 | ...::new(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2627:26:2627:50 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2627:35:2627:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2627:35:2627:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2627:35:2627:49 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2627:44:2627:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2628:9:2633:9 | match nested_box { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2628:15:2628:24 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2628:15:2628:24 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2628:15:2628:24 | nested_box | T | {EXTERNAL LOCATION} | Box | +| main.rs:2628:15:2628:24 | nested_box | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2628:15:2628:24 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2629:13:2629:21 | box ... | | {EXTERNAL LOCATION} | Box | +| main.rs:2629:13:2629:21 | box ... | A | {EXTERNAL LOCATION} | Global | +| main.rs:2629:13:2629:21 | box ... | T | {EXTERNAL LOCATION} | Box | +| main.rs:2629:13:2629:21 | box ... | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2629:13:2629:21 | box ... | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2629:26:2632:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2631:17:2631:60 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:2631:26:2631:43 | "Nested boxed: {}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2631:26:2631:43 | "Nested boxed: {}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2631:26:2631:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2631:26:2631:59 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2631:26:2631:59 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2643:36:2645:9 | { ... } | | main.rs:2640:5:2640:22 | Path | +| main.rs:2644:13:2644:19 | Path {...} | | main.rs:2640:5:2640:22 | Path | +| main.rs:2647:29:2647:33 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2647:29:2647:33 | SelfParam | TRef | main.rs:2640:5:2640:22 | Path | +| main.rs:2647:59:2649:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:2647:59:2649:9 | { ... } | E | {EXTERNAL LOCATION} | () | +| main.rs:2647:59:2649:9 | { ... } | T | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2648:13:2648:30 | Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2648:13:2648:30 | Ok(...) | E | {EXTERNAL LOCATION} | () | +| main.rs:2648:13:2648:30 | Ok(...) | T | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2648:16:2648:29 | ...::new(...) | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2655:39:2657:9 | { ... } | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2656:13:2656:22 | PathBuf {...} | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2665:18:2665:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2665:18:2665:22 | SelfParam | TRef | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2665:34:2669:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2665:34:2669:9 | { ... } | TRef | main.rs:2640:5:2640:22 | Path | +| main.rs:2667:33:2667:43 | ...::new(...) | | main.rs:2640:5:2640:22 | Path | +| main.rs:2668:13:2668:17 | &path | | {EXTERNAL LOCATION} | & | +| main.rs:2668:13:2668:17 | &path | TRef | main.rs:2640:5:2640:22 | Path | +| main.rs:2668:14:2668:17 | path | | main.rs:2640:5:2640:22 | Path | +| main.rs:2672:16:2680:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2673:13:2673:17 | path1 | | main.rs:2640:5:2640:22 | Path | +| main.rs:2673:21:2673:31 | ...::new(...) | | main.rs:2640:5:2640:22 | Path | +| main.rs:2674:13:2674:17 | path2 | | {EXTERNAL LOCATION} | Result | +| main.rs:2674:13:2674:17 | path2 | E | {EXTERNAL LOCATION} | () | +| main.rs:2674:13:2674:17 | path2 | T | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2674:21:2674:25 | path1 | | main.rs:2640:5:2640:22 | Path | +| main.rs:2674:21:2674:40 | path1.canonicalize() | | {EXTERNAL LOCATION} | Result | +| main.rs:2674:21:2674:40 | path1.canonicalize() | E | {EXTERNAL LOCATION} | () | +| main.rs:2674:21:2674:40 | path1.canonicalize() | T | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2675:13:2675:17 | path3 | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2675:21:2675:25 | path2 | | {EXTERNAL LOCATION} | Result | +| main.rs:2675:21:2675:25 | path2 | E | {EXTERNAL LOCATION} | () | +| main.rs:2675:21:2675:25 | path2 | T | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2675:21:2675:34 | path2.unwrap() | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2677:13:2677:20 | pathbuf1 | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2677:24:2677:37 | ...::new(...) | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2678:13:2678:20 | pathbuf2 | | {EXTERNAL LOCATION} | Result | +| main.rs:2678:13:2678:20 | pathbuf2 | E | {EXTERNAL LOCATION} | () | +| main.rs:2678:13:2678:20 | pathbuf2 | T | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2678:24:2678:31 | pathbuf1 | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2678:24:2678:46 | pathbuf1.canonicalize() | | {EXTERNAL LOCATION} | Result | +| main.rs:2678:24:2678:46 | pathbuf1.canonicalize() | E | {EXTERNAL LOCATION} | () | +| main.rs:2678:24:2678:46 | pathbuf1.canonicalize() | T | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2679:13:2679:20 | pathbuf3 | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2679:24:2679:31 | pathbuf2 | | {EXTERNAL LOCATION} | Result | +| main.rs:2679:24:2679:31 | pathbuf2 | E | {EXTERNAL LOCATION} | () | +| main.rs:2679:24:2679:31 | pathbuf2 | T | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2679:24:2679:40 | pathbuf2.unwrap() | | main.rs:2652:5:2652:25 | PathBuf | +| main.rs:2685:14:2685:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2685:14:2685:18 | SelfParam | TRef | main.rs:2684:5:2686:5 | Self [trait MyTrait] | +| main.rs:2692:14:2692:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2692:14:2692:18 | SelfParam | TRef | main.rs:2688:5:2689:19 | S | +| main.rs:2692:14:2692:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2692:28:2694:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2693:13:2693:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2693:13:2693:16 | self | TRef | main.rs:2688:5:2689:19 | S | +| main.rs:2693:13:2693:16 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2693:13:2693:18 | self.0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2698:14:2698:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2698:14:2698:18 | SelfParam | TRef | main.rs:2688:5:2689:19 | S | +| main.rs:2698:14:2698:18 | SelfParam | TRef.T | main.rs:2688:5:2689:19 | S | +| main.rs:2698:14:2698:18 | SelfParam | TRef.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2698:28:2700:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2699:13:2699:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2699:13:2699:16 | self | TRef | main.rs:2688:5:2689:19 | S | +| main.rs:2699:13:2699:16 | self | TRef.T | main.rs:2688:5:2689:19 | S | +| main.rs:2699:13:2699:16 | self | TRef.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2699:13:2699:18 | self.0 | | main.rs:2688:5:2689:19 | S | +| main.rs:2699:13:2699:18 | self.0 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2699:13:2699:21 | ... .0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2704:15:2704:19 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2704:15:2704:19 | SelfParam | TRef | main.rs:2688:5:2689:19 | S | +| main.rs:2704:15:2704:19 | SelfParam | TRef.T | main.rs:2703:10:2703:16 | T | +| main.rs:2704:33:2706:9 | { ... } | | main.rs:2688:5:2689:19 | S | +| main.rs:2704:33:2706:9 | { ... } | T | main.rs:2688:5:2689:19 | S | +| main.rs:2704:33:2706:9 | { ... } | T.T | main.rs:2703:10:2703:16 | T | +| main.rs:2705:13:2705:24 | S(...) | | main.rs:2688:5:2689:19 | S | +| main.rs:2705:13:2705:24 | S(...) | T | main.rs:2688:5:2689:19 | S | +| main.rs:2705:13:2705:24 | S(...) | T.T | main.rs:2703:10:2703:16 | T | +| main.rs:2705:15:2705:23 | S(...) | | main.rs:2688:5:2689:19 | S | +| main.rs:2705:15:2705:23 | S(...) | T | main.rs:2703:10:2703:16 | T | +| main.rs:2705:17:2705:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2705:17:2705:20 | self | TRef | main.rs:2688:5:2689:19 | S | +| main.rs:2705:17:2705:20 | self | TRef.T | main.rs:2703:10:2703:16 | T | +| main.rs:2705:17:2705:22 | self.0 | | main.rs:2703:10:2703:16 | T | +| main.rs:2709:14:2709:14 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2709:48:2726:5 | { ... } | | {EXTERNAL LOCATION} | Box | +| main.rs:2709:48:2726:5 | { ... } | A | {EXTERNAL LOCATION} | Global | +| main.rs:2709:48:2726:5 | { ... } | T | main.rs:2684:5:2686:5 | dyn MyTrait | +| main.rs:2709:48:2726:5 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2710:13:2710:13 | x | | main.rs:2688:5:2689:19 | S | +| main.rs:2710:13:2710:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2710:17:2715:9 | if b {...} else {...} | | main.rs:2688:5:2689:19 | S | +| main.rs:2710:17:2715:9 | if b {...} else {...} | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2710:20:2710:20 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2710:22:2713:9 | { ... } | | main.rs:2688:5:2689:19 | S | +| main.rs:2710:22:2713:9 | { ... } | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2711:17:2711:17 | y | | main.rs:2688:5:2689:19 | S | +| main.rs:2711:17:2711:17 | y | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2711:21:2711:38 | ...::default(...) | | main.rs:2688:5:2689:19 | S | +| main.rs:2711:21:2711:38 | ...::default(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2712:13:2712:13 | y | | main.rs:2688:5:2689:19 | S | +| main.rs:2712:13:2712:13 | y | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2713:16:2715:9 | { ... } | | main.rs:2688:5:2689:19 | S | +| main.rs:2713:16:2715:9 | { ... } | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2714:13:2714:16 | S(...) | | main.rs:2688:5:2689:19 | S | +| main.rs:2714:13:2714:16 | S(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2714:15:2714:15 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2719:13:2719:13 | x | | main.rs:2688:5:2689:19 | S | +| main.rs:2719:13:2719:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2719:17:2719:20 | S(...) | | main.rs:2688:5:2689:19 | S | +| main.rs:2719:17:2719:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2719:19:2719:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2720:9:2725:9 | if b {...} else {...} | | {EXTERNAL LOCATION} | Box | +| main.rs:2720:9:2725:9 | if b {...} else {...} | A | {EXTERNAL LOCATION} | Global | +| main.rs:2720:9:2725:9 | if b {...} else {...} | T | main.rs:2684:5:2686:5 | dyn MyTrait | +| main.rs:2720:9:2725:9 | if b {...} else {...} | T | main.rs:2688:5:2689:19 | S | +| main.rs:2720:9:2725:9 | if b {...} else {...} | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2720:9:2725:9 | if b {...} else {...} | T.T | main.rs:2688:5:2689:19 | S | +| main.rs:2720:9:2725:9 | if b {...} else {...} | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2720:9:2725:9 | if b {...} else {...} | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2720:12:2720:12 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2720:14:2723:9 | { ... } | | {EXTERNAL LOCATION} | Box | +| main.rs:2720:14:2723:9 | { ... } | A | {EXTERNAL LOCATION} | Global | +| main.rs:2720:14:2723:9 | { ... } | T | main.rs:2684:5:2686:5 | dyn MyTrait | +| main.rs:2720:14:2723:9 | { ... } | T | main.rs:2688:5:2689:19 | S | +| main.rs:2720:14:2723:9 | { ... } | T.T | main.rs:2688:5:2689:19 | S | +| main.rs:2720:14:2723:9 | { ... } | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2720:14:2723:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2721:17:2721:17 | x | | main.rs:2688:5:2689:19 | S | +| main.rs:2721:17:2721:17 | x | T | main.rs:2688:5:2689:19 | S | +| main.rs:2721:17:2721:17 | x | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2721:21:2721:21 | x | | main.rs:2688:5:2689:19 | S | +| main.rs:2721:21:2721:21 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2721:21:2721:26 | x.m2() | | main.rs:2688:5:2689:19 | S | +| main.rs:2721:21:2721:26 | x.m2() | T | main.rs:2688:5:2689:19 | S | +| main.rs:2721:21:2721:26 | x.m2() | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2722:13:2722:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2722:13:2722:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2722:13:2722:23 | ...::new(...) | T | main.rs:2684:5:2686:5 | dyn MyTrait | +| main.rs:2722:13:2722:23 | ...::new(...) | T | main.rs:2688:5:2689:19 | S | +| main.rs:2722:13:2722:23 | ...::new(...) | T.T | main.rs:2688:5:2689:19 | S | +| main.rs:2722:13:2722:23 | ...::new(...) | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2722:13:2722:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2722:22:2722:22 | x | | main.rs:2688:5:2689:19 | S | +| main.rs:2722:22:2722:22 | x | T | main.rs:2688:5:2689:19 | S | +| main.rs:2722:22:2722:22 | x | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2723:16:2725:9 | { ... } | | {EXTERNAL LOCATION} | Box | +| main.rs:2723:16:2725:9 | { ... } | A | {EXTERNAL LOCATION} | Global | +| main.rs:2723:16:2725:9 | { ... } | T | main.rs:2684:5:2686:5 | dyn MyTrait | +| main.rs:2723:16:2725:9 | { ... } | T | main.rs:2688:5:2689:19 | S | +| main.rs:2723:16:2725:9 | { ... } | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2723:16:2725:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2724:13:2724:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2724:13:2724:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2724:13:2724:23 | ...::new(...) | T | main.rs:2684:5:2686:5 | dyn MyTrait | +| main.rs:2724:13:2724:23 | ...::new(...) | T | main.rs:2688:5:2689:19 | S | +| main.rs:2724:13:2724:23 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2724:13:2724:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2724:22:2724:22 | x | | main.rs:2688:5:2689:19 | S | +| main.rs:2724:22:2724:22 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2730:22:2734:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2731:18:2731:18 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2731:33:2733:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2732:13:2732:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2732:13:2732:17 | ... + ... | | {EXTERNAL LOCATION} | i32 | +| main.rs:2732:17:2732:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:11:2739:14 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2739:30:2747:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2741:13:2741:13 | a | | {EXTERNAL LOCATION} | () | +| main.rs:2741:17:2745:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2742:13:2744:13 | if cond {...} | | {EXTERNAL LOCATION} | () | +| main.rs:2742:16:2742:19 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2742:21:2744:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2743:24:2743:25 | 12 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2746:9:2746:9 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2750:20:2757:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2753:26:2753:27 | 12 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2755:9:2755:30 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:2755:18:2755:26 | "b: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2755:18:2755:26 | "b: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2755:18:2755:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2755:18:2755:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2755:18:2755:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2756:9:2756:9 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2759:20:2761:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2760:16:2760:16 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2764:11:2764:14 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2764:30:2772:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2765:13:2765:13 | a | | {EXTERNAL LOCATION} | () | +| main.rs:2765:17:2769:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2766:13:2768:13 | if cond {...} | | {EXTERNAL LOCATION} | () | +| main.rs:2766:16:2766:19 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2766:21:2768:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2767:24:2767:25 | 12 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2770:9:2770:30 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:2770:18:2770:26 | "a: {:?}\\n" | | {EXTERNAL LOCATION} | & | +| main.rs:2770:18:2770:26 | "a: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | +| main.rs:2770:18:2770:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2770:18:2770:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2770:18:2770:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2770:29:2770:29 | a | | {EXTERNAL LOCATION} | () | +| main.rs:2771:9:2771:9 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2776:16:2823:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2777:13:2777:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2777:13:2777:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2777:17:2777:20 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2777:17:2777:20 | None | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2778:13:2778:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2778:13:2778:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2778:30:2778:30 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2778:30:2778:30 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2779:13:2779:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2779:13:2779:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2779:17:2779:35 | ...::None | | {EXTERNAL LOCATION} | Option | +| main.rs:2779:17:2779:35 | ...::None | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2780:13:2780:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2780:13:2780:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2780:17:2780:35 | ...::None::<...> | | {EXTERNAL LOCATION} | Option | +| main.rs:2780:17:2780:35 | ...::None::<...> | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2782:26:2782:28 | opt | | {EXTERNAL LOCATION} | Option | +| main.rs:2782:26:2782:28 | opt | T | main.rs:2782:23:2782:23 | T | +| main.rs:2782:42:2782:42 | x | | main.rs:2782:23:2782:23 | T | +| main.rs:2782:48:2782:49 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2784:13:2784:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2784:13:2784:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2784:17:2784:20 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2784:17:2784:20 | None | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2785:9:2785:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2785:20:2785:20 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2785:20:2785:20 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2785:23:2785:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2792:13:2792:13 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2792:13:2792:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2792:13:2792:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2792:17:2792:39 | ...::A {...} | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2792:17:2792:39 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2792:17:2792:39 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2792:37:2792:37 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2793:13:2793:13 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2793:13:2793:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2793:13:2793:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2793:40:2793:40 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2793:40:2793:40 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2793:40:2793:40 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2794:13:2794:13 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2794:13:2794:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2794:13:2794:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2794:17:2794:52 | ...::A {...} | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2794:17:2794:52 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2794:17:2794:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2794:50:2794:50 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2796:13:2796:13 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2796:13:2796:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2796:13:2796:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2796:17:2798:9 | ...::B::<...> {...} | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2796:17:2798:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2796:17:2798:9 | ...::B::<...> {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2797:20:2797:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2800:29:2800:29 | e | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2800:29:2800:29 | e | T1 | main.rs:2800:26:2800:26 | T | +| main.rs:2800:29:2800:29 | e | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2800:53:2800:53 | x | | main.rs:2800:26:2800:26 | T | +| main.rs:2800:59:2800:60 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2803:13:2803:13 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2803:13:2803:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2803:13:2803:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2803:17:2805:9 | ...::B {...} | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2803:17:2805:9 | ...::B {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2803:17:2805:9 | ...::B {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2804:20:2804:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2806:9:2806:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2806:23:2806:23 | x | | main.rs:2787:9:2790:9 | MyEither | +| main.rs:2806:23:2806:23 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2806:23:2806:23 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2806:26:2806:26 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2808:13:2808:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2808:13:2808:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2808:13:2808:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2808:17:2808:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2808:17:2808:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | +| main.rs:2808:17:2808:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2808:28:2808:28 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2809:13:2809:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2809:13:2809:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2809:13:2809:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2809:38:2809:38 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2809:38:2809:38 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2809:38:2809:38 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2810:13:2810:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2810:13:2810:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2810:13:2810:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2810:17:2810:44 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2810:17:2810:44 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | +| main.rs:2810:17:2810:44 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2810:43:2810:43 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:13:2811:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2811:13:2811:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2811:13:2811:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:17:2811:44 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2811:17:2811:44 | ...::Ok::<...>(...) | E | {EXTERNAL LOCATION} | String | +| main.rs:2811:17:2811:44 | ...::Ok::<...>(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:43:2811:43 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2813:29:2813:31 | res | | {EXTERNAL LOCATION} | Result | +| main.rs:2813:29:2813:31 | res | E | main.rs:2813:26:2813:26 | E | +| main.rs:2813:29:2813:31 | res | T | main.rs:2813:23:2813:23 | T | +| main.rs:2813:48:2813:48 | x | | main.rs:2813:26:2813:26 | E | +| main.rs:2813:54:2813:55 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2815:13:2815:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2815:13:2815:13 | x | E | {EXTERNAL LOCATION} | bool | +| main.rs:2815:13:2815:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2815:17:2815:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2815:17:2815:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | bool | +| main.rs:2815:17:2815:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2815:28:2815:28 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2816:9:2816:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2816:20:2816:20 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2816:20:2816:20 | x | E | {EXTERNAL LOCATION} | bool | +| main.rs:2816:20:2816:20 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2816:23:2816:27 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:2818:17:2818:17 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2818:17:2818:17 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2818:17:2818:17 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2818:21:2818:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2818:21:2818:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2818:21:2818:30 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2819:9:2819:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2819:9:2819:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2819:9:2819:9 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2819:9:2819:17 | x.push(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2819:16:2819:16 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2821:13:2821:13 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:2821:17:2821:34 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2822:9:2822:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2822:9:2822:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2822:9:2822:9 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2822:9:2822:17 | x.push(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2822:16:2822:16 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:2829:14:2829:17 | SelfParam | | main.rs:2827:5:2835:5 | Self [trait MyTrait] | +| main.rs:2832:14:2832:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2832:14:2832:18 | SelfParam | TRef | main.rs:2827:5:2835:5 | Self [trait MyTrait] | +| main.rs:2832:21:2832:25 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2832:21:2832:25 | other | TRef | main.rs:2827:5:2835:5 | Self [trait MyTrait] | +| main.rs:2832:44:2834:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2832:44:2834:9 | { ... } | TRef | main.rs:2827:5:2835:5 | Self [trait MyTrait] | +| main.rs:2833:13:2833:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2833:13:2833:16 | self | TRef | main.rs:2827:5:2835:5 | Self [trait MyTrait] | +| main.rs:2833:13:2833:20 | self.f() | | {EXTERNAL LOCATION} | & | +| main.rs:2833:13:2833:20 | self.f() | TRef | main.rs:2827:5:2835:5 | Self [trait MyTrait] | +| main.rs:2839:14:2839:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | +| main.rs:2839:28:2841:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2840:13:2840:16 | self | | {EXTERNAL LOCATION} | i32 | +| main.rs:2846:14:2846:17 | SelfParam | | {EXTERNAL LOCATION} | usize | +| main.rs:2846:28:2848:9 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:2847:13:2847:16 | self | | {EXTERNAL LOCATION} | usize | +| main.rs:2853:14:2853:17 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2853:14:2853:17 | SelfParam | TRef | main.rs:2851:10:2851:10 | T | +| main.rs:2853:28:2855:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2853:28:2855:9 | { ... } | TRef | main.rs:2851:10:2851:10 | T | +| main.rs:2854:13:2854:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2854:13:2854:16 | self | TRef | main.rs:2851:10:2851:10 | T | +| main.rs:2858:25:2862:5 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:2859:17:2859:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2859:17:2859:17 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2859:21:2859:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2859:21:2859:21 | 0 | | {EXTERNAL LOCATION} | usize | +| main.rs:2860:9:2860:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2860:9:2860:9 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2860:9:2860:17 | ... = ... | | {EXTERNAL LOCATION} | () | +| main.rs:2860:13:2860:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2860:13:2860:13 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2860:13:2860:17 | x.f() | | {EXTERNAL LOCATION} | i32 | +| main.rs:2860:13:2860:17 | x.f() | | {EXTERNAL LOCATION} | usize | +| main.rs:2861:9:2861:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2861:9:2861:9 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2864:12:2872:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2865:13:2865:13 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2865:24:2865:24 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2865:24:2865:24 | 0 | | {EXTERNAL LOCATION} | usize | +| main.rs:2866:13:2866:13 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2866:13:2866:13 | y | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2866:17:2866:18 | &1 | | {EXTERNAL LOCATION} | & | +| main.rs:2866:17:2866:18 | &1 | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2866:18:2866:18 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2867:13:2867:13 | z | | {EXTERNAL LOCATION} | & | +| main.rs:2867:13:2867:13 | z | TRef | {EXTERNAL LOCATION} | usize | +| main.rs:2867:17:2867:17 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2867:17:2867:22 | x.g(...) | | {EXTERNAL LOCATION} | & | +| main.rs:2867:17:2867:22 | x.g(...) | TRef | {EXTERNAL LOCATION} | usize | +| main.rs:2867:21:2867:21 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2867:21:2867:21 | y | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2869:13:2869:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2869:17:2869:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2870:13:2870:13 | y | | {EXTERNAL LOCATION} | usize | +| main.rs:2870:24:2870:24 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2870:24:2870:24 | 1 | | {EXTERNAL LOCATION} | usize | +| main.rs:2871:13:2871:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:2871:17:2871:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2871:17:2871:24 | x.max(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2871:23:2871:23 | y | | {EXTERNAL LOCATION} | usize | +| main.rs:2881:11:2916:1 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2882:5:2882:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2883:5:2883:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2884:5:2884:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2884:20:2884:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2884:41:2884:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2885:5:2885:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2886:5:2886:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2887:5:2887:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2888:5:2888:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2889:5:2889:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2890:5:2890:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2891:5:2891:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2892:5:2892:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2893:5:2893:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2894:5:2894:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2895:5:2895:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2896:5:2896:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2897:5:2897:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2898:5:2898:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2899:5:2899:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2900:5:2900:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2900:5:2900:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2901:5:2901:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2902:5:2902:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2903:5:2903:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2904:5:2904:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2905:5:2905:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2906:5:2906:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2907:5:2907:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2908:5:2908:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2909:5:2909:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2910:5:2910:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2911:5:2911:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2912:5:2912:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2913:5:2913:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2914:5:2914:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2914:5:2914:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2914:5:2914:20 | ...::f(...) | T | main.rs:2684:5:2686:5 | dyn MyTrait | +| main.rs:2914:5:2914:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2914:16:2914:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2915:5:2915:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () | | pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option | diff --git a/rust/tools/builtins/mentions.rs b/rust/tools/builtins/mentions.rs index a3731164893..11b3bda6a52 100644 --- a/rust/tools/builtins/mentions.rs +++ b/rust/tools/builtins/mentions.rs @@ -3,4 +3,4 @@ use std::future::Future; fn mention_dyn_future(f: &dyn Future) {} -fn mention_dyn_fn_once(f: &dyn FnOnce() -> F) {} +fn mention_dyn_fn(f: &dyn Fn() -> F) {} diff --git a/shared/concepts/CHANGELOG.md b/shared/concepts/CHANGELOG.md index 48b330cf5a1..161a5091515 100644 --- a/shared/concepts/CHANGELOG.md +++ b/shared/concepts/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.14 + +No user-facing changes. + ## 0.0.13 No user-facing changes. diff --git a/shared/concepts/change-notes/released/0.0.14.md b/shared/concepts/change-notes/released/0.0.14.md new file mode 100644 index 00000000000..63b4d50ca45 --- /dev/null +++ b/shared/concepts/change-notes/released/0.0.14.md @@ -0,0 +1,3 @@ +## 0.0.14 + +No user-facing changes. diff --git a/shared/concepts/codeql-pack.release.yml b/shared/concepts/codeql-pack.release.yml index 044e54e4f7e..ca29e45d0a6 100644 --- a/shared/concepts/codeql-pack.release.yml +++ b/shared/concepts/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.13 +lastReleaseVersion: 0.0.14 diff --git a/shared/concepts/qlpack.yml b/shared/concepts/qlpack.yml index 767770ce24a..0acc44a77e6 100644 --- a/shared/concepts/qlpack.yml +++ b/shared/concepts/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/concepts -version: 0.0.14-dev +version: 0.0.15-dev groups: shared library: true dependencies: diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index f5521a1d403..a0141238ede 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.24 + +No user-facing changes. + ## 2.0.23 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/2.0.24.md b/shared/controlflow/change-notes/released/2.0.24.md new file mode 100644 index 00000000000..6547901c334 --- /dev/null +++ b/shared/controlflow/change-notes/released/2.0.24.md @@ -0,0 +1,3 @@ +## 2.0.24 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 1bd7e296a34..1460df314d5 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.23 +lastReleaseVersion: 2.0.24 diff --git a/shared/controlflow/codeql/controlflow/Guards.qll b/shared/controlflow/codeql/controlflow/Guards.qll index b313afcdb6b..f6774db1eb9 100644 --- a/shared/controlflow/codeql/controlflow/Guards.qll +++ b/shared/controlflow/codeql/controlflow/Guards.qll @@ -1364,7 +1364,7 @@ module Make< /** * Holds if the guard `g` validates the expression `e` upon evaluating to `val`. */ - private predicate guardChecks(Guard g, Expr e, GuardValue val, P par) { + predicate guardChecks(Guard g, Expr e, GuardValue val, P par) { guardChecks0(g, e, val, par) or exists(NonOverridableMethodCall call, ParameterPosition ppos, ArgumentPosition apos | diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 4829cf18940..fe9c546bd4a 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.24-dev +version: 2.0.25-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index b8f8111a341..2190138e037 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.24 + +No user-facing changes. + ## 2.0.23 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/2.0.24.md b/shared/dataflow/change-notes/released/2.0.24.md new file mode 100644 index 00000000000..6547901c334 --- /dev/null +++ b/shared/dataflow/change-notes/released/2.0.24.md @@ -0,0 +1,3 @@ +## 2.0.24 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 1bd7e296a34..1460df314d5 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.23 +lastReleaseVersion: 2.0.24 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 88e3717ad91..f1c036d74df 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.24-dev +version: 2.0.25-dev groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 799b76d1aad..40e305bad35 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.40 + +No user-facing changes. + ## 1.0.39 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.40.md b/shared/mad/change-notes/released/1.0.40.md new file mode 100644 index 00000000000..3f2f101b3b7 --- /dev/null +++ b/shared/mad/change-notes/released/1.0.40.md @@ -0,0 +1,3 @@ +## 1.0.40 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index c310c9f1e78..326e4b5da67 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.39 +lastReleaseVersion: 1.0.40 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 3726498ddf2..f001129240f 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.40-dev +version: 1.0.41-dev groups: shared library: true dependencies: diff --git a/shared/quantum/CHANGELOG.md b/shared/quantum/CHANGELOG.md index 96dafca5768..172f2ee2b29 100644 --- a/shared/quantum/CHANGELOG.md +++ b/shared/quantum/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.18 + +No user-facing changes. + ## 0.0.17 No user-facing changes. diff --git a/shared/quantum/change-notes/released/0.0.18.md b/shared/quantum/change-notes/released/0.0.18.md new file mode 100644 index 00000000000..86c60b8abe7 --- /dev/null +++ b/shared/quantum/change-notes/released/0.0.18.md @@ -0,0 +1,3 @@ +## 0.0.18 + +No user-facing changes. diff --git a/shared/quantum/codeql-pack.release.yml b/shared/quantum/codeql-pack.release.yml index cbc3d3cd493..a0d2bc59d97 100644 --- a/shared/quantum/codeql-pack.release.yml +++ b/shared/quantum/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.17 +lastReleaseVersion: 0.0.18 diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index d9c5869107f..de32dad32f1 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.18-dev +version: 0.0.19-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index c9073a6a0d3..7c9e43f8ff3 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.40 + +No user-facing changes. + ## 1.0.39 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.40.md b/shared/rangeanalysis/change-notes/released/1.0.40.md new file mode 100644 index 00000000000..3f2f101b3b7 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.40.md @@ -0,0 +1,3 @@ +## 1.0.40 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index c310c9f1e78..326e4b5da67 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.39 +lastReleaseVersion: 1.0.40 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 1f3aa054b0f..5ecb12275e6 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.40-dev +version: 1.0.41-dev groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index bd4172a6f24..ecf8ebbe399 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.40 + +No user-facing changes. + ## 1.0.39 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.40.md b/shared/regex/change-notes/released/1.0.40.md new file mode 100644 index 00000000000..3f2f101b3b7 --- /dev/null +++ b/shared/regex/change-notes/released/1.0.40.md @@ -0,0 +1,3 @@ +## 1.0.40 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index c310c9f1e78..326e4b5da67 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.39 +lastReleaseVersion: 1.0.40 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 708ae7ee1b2..c57a3de5189 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.40-dev +version: 1.0.41-dev groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index e37d98b1dc1..03f338ad3e6 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.16 + +No user-facing changes. + ## 2.0.15 No user-facing changes. diff --git a/shared/ssa/change-notes/released/2.0.16.md b/shared/ssa/change-notes/released/2.0.16.md new file mode 100644 index 00000000000..221400d393f --- /dev/null +++ b/shared/ssa/change-notes/released/2.0.16.md @@ -0,0 +1,3 @@ +## 2.0.16 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 0377ae283a3..c10461a785c 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.15 +lastReleaseVersion: 2.0.16 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index f755bda3379..ac679f613ea 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.16-dev +version: 2.0.17-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index dd213e111b4..8718668249f 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.40 + +No user-facing changes. + ## 1.0.39 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.40.md b/shared/threat-models/change-notes/released/1.0.40.md new file mode 100644 index 00000000000..3f2f101b3b7 --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.40.md @@ -0,0 +1,3 @@ +## 1.0.40 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index c310c9f1e78..326e4b5da67 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.39 +lastReleaseVersion: 1.0.40 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 45e4e04f51c..f16ee329d00 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.40-dev +version: 1.0.41-dev library: true groups: shared dataExtensions: diff --git a/shared/tree-sitter-extractor/src/generator/mod.rs b/shared/tree-sitter-extractor/src/generator/mod.rs index c886ec98eeb..78e9e4a0b69 100644 --- a/shared/tree-sitter-extractor/src/generator/mod.rs +++ b/shared/tree-sitter-extractor/src/generator/mod.rs @@ -17,6 +17,7 @@ pub fn generate( languages: Vec, dbscheme_path: PathBuf, ql_library_path: PathBuf, + regenerate_instructions: &str, ) -> std::io::Result<()> { let dbscheme_file = File::create(dbscheme_path).map_err(|e| { tracing::error!("Failed to create dbscheme file: {}", e); @@ -26,8 +27,9 @@ pub fn generate( writeln!( dbscheme_writer, "// CodeQL database schema for {}\n\ - // Automatically generated from the tree-sitter grammar; do not edit\n", - languages[0].name + // Automatically generated from the tree-sitter grammar; do not edit\n\ + // To regenerate, {}\n", + languages[0].name, regenerate_instructions )?; writeln!(dbscheme_writer, include_str!("prefix.dbscheme"))?; diff --git a/shared/tree-sitter-extractor/src/generator/prefix.dbscheme b/shared/tree-sitter-extractor/src/generator/prefix.dbscheme index a52390bed1a..d59777f5e3d 100644 --- a/shared/tree-sitter-extractor/src/generator/prefix.dbscheme +++ b/shared/tree-sitter-extractor/src/generator/prefix.dbscheme @@ -106,11 +106,23 @@ yaml_locations(unique int locatable: @yaml_locatable ref, @yaml_locatable = @yaml_node | @yaml_error; /*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ databaseMetadata( string metadataKey: string ref, string value: string ref ); +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ overlayChangedFiles( string path: string ref ); diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 1e813c59b63..6a9afbe090a 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.40 + +No user-facing changes. + ## 1.0.39 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.40.md b/shared/tutorial/change-notes/released/1.0.40.md new file mode 100644 index 00000000000..3f2f101b3b7 --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.40.md @@ -0,0 +1,3 @@ +## 1.0.40 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index c310c9f1e78..326e4b5da67 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.39 +lastReleaseVersion: 1.0.40 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 651844a76ad..8ffe365de0a 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.40-dev +version: 1.0.41-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index e937ff6cb9e..37cada86362 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.40 + +No user-facing changes. + ## 1.0.39 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.40.md b/shared/typeflow/change-notes/released/1.0.40.md new file mode 100644 index 00000000000..3f2f101b3b7 --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.40.md @@ -0,0 +1,3 @@ +## 1.0.40 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index c310c9f1e78..326e4b5da67 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.39 +lastReleaseVersion: 1.0.40 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index eb199d36dee..773700f2ac1 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.40-dev +version: 1.0.41-dev groups: shared library: true dependencies: diff --git a/shared/typeinference/CHANGELOG.md b/shared/typeinference/CHANGELOG.md index 7ac497bdb32..2daa850c9cd 100644 --- a/shared/typeinference/CHANGELOG.md +++ b/shared/typeinference/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.21 + +No user-facing changes. + ## 0.0.20 No user-facing changes. diff --git a/shared/typeinference/change-notes/released/0.0.21.md b/shared/typeinference/change-notes/released/0.0.21.md new file mode 100644 index 00000000000..d32472e976d --- /dev/null +++ b/shared/typeinference/change-notes/released/0.0.21.md @@ -0,0 +1,3 @@ +## 0.0.21 + +No user-facing changes. diff --git a/shared/typeinference/codeql-pack.release.yml b/shared/typeinference/codeql-pack.release.yml index d2e86745bca..0c15c351db4 100644 --- a/shared/typeinference/codeql-pack.release.yml +++ b/shared/typeinference/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.20 +lastReleaseVersion: 0.0.21 diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 05a8d31ef87..5295048623e 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -841,15 +841,6 @@ module Make1 Input1> { signature module SatisfiesConstraintInputSig { /** Holds if it is relevant to know if `term` satisfies `constraint`. */ predicate relevantConstraint(HasTypeTree term, Type constraint); - - /** - * Holds if constraints that are satisfied through conditions that are - * universally quantified type parameters should be used. Such type - * parameters might have type parameter constraints, and these are _not_ - * checked. Hence using these represent a trade-off between too many - * constraints and too few constraints being satisfied. - */ - default predicate useUniversalConditions() { any() } } module SatisfiesConstraint< @@ -901,12 +892,14 @@ module Make1 Input1> { TypeMention constraintMention ) { exists(Type type | hasTypeConstraint(tt, type, constraint) | - useUniversalConditions() and // todo: remove, and instead check constraints - not exists(countConstraintImplementations(type, constraint)) and - conditionSatisfiesConstraintTypeAt(abs, condition, constraintMention, _, _) and - resolveTypeMentionRoot(condition) = abs.getATypeParameter() and - constraint = resolveTypeMentionRoot(constraintMention) - or + // TODO: Handle universal conditions properly, which means checking type parameter constraints + // Also remember to update logic in `hasNotConstraintMention` + // + // not exists(countConstraintImplementations(type, constraint)) and + // conditionSatisfiesConstraintTypeAt(abs, condition, constraintMention, _, _) and + // resolveTypeMentionRoot(condition) = abs.getATypeParameter() and + // constraint = resolveTypeMentionRoot(constraintMention) + // or countConstraintImplementations(type, constraint) > 0 and rootTypesSatisfaction(type, constraint, abs, condition, constraintMention) and // When there are multiple ways the type could implement the @@ -936,18 +929,17 @@ module Make1 Input1> { pragma[nomagic] private predicate hasNotConstraintMention(HasTypeTree tt, Type constraint) { exists(Type type | hasTypeConstraint(tt, type, constraint) | - ( - not useUniversalConditions() - or - exists(countConstraintImplementations(type, constraint)) - or - forall(TypeAbstraction abs, TypeMention condition, TypeMention constraintMention | - conditionSatisfiesConstraintTypeAt(abs, condition, constraintMention, _, _) and - resolveTypeMentionRoot(condition) = abs.getATypeParameter() - | - not constraint = resolveTypeMentionRoot(constraintMention) - ) - ) and + // TODO: Handle universal conditions properly, which means taking type parameter constraints into account + // ( + // exists(countConstraintImplementations(type, constraint)) + // or + // forall(TypeAbstraction abs, TypeMention condition, TypeMention constraintMention | + // conditionSatisfiesConstraintTypeAt(abs, condition, constraintMention, _, _) and + // resolveTypeMentionRoot(condition) = abs.getATypeParameter() + // | + // not constraint = resolveTypeMentionRoot(constraintMention) + // ) + // ) and ( countConstraintImplementations(type, constraint) = 0 or diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index 1c533ad3863..323af6d7d5d 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.21-dev +version: 0.0.22-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 7f86f9e8166..769f68dd3dd 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.24 + +No user-facing changes. + ## 2.0.23 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/2.0.24.md b/shared/typetracking/change-notes/released/2.0.24.md new file mode 100644 index 00000000000..6547901c334 --- /dev/null +++ b/shared/typetracking/change-notes/released/2.0.24.md @@ -0,0 +1,3 @@ +## 2.0.24 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 1bd7e296a34..1460df314d5 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.23 +lastReleaseVersion: 2.0.24 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 2a1ef48e92a..3c2758e0907 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.24-dev +version: 2.0.25-dev groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index c553f4c1f63..5ef65f8781d 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.40 + +No user-facing changes. + ## 1.0.39 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.40.md b/shared/typos/change-notes/released/1.0.40.md new file mode 100644 index 00000000000..3f2f101b3b7 --- /dev/null +++ b/shared/typos/change-notes/released/1.0.40.md @@ -0,0 +1,3 @@ +## 1.0.40 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index c310c9f1e78..326e4b5da67 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.39 +lastReleaseVersion: 1.0.40 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 6baa76ffa5c..07154ada547 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.40-dev +version: 1.0.41-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 3578e000170..1c818e1f21d 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.27 + +No user-facing changes. + ## 2.0.26 No user-facing changes. diff --git a/shared/util/change-notes/released/2.0.27.md b/shared/util/change-notes/released/2.0.27.md new file mode 100644 index 00000000000..639cf77090e --- /dev/null +++ b/shared/util/change-notes/released/2.0.27.md @@ -0,0 +1,3 @@ +## 2.0.27 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 63d57bef481..a047558f018 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.26 +lastReleaseVersion: 2.0.27 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index db3d6fb7f2d..0b10b300a47 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.27-dev +version: 2.0.28-dev groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index 5bb981adb8c..cb8550f886b 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.40 + +No user-facing changes. + ## 1.0.39 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.40.md b/shared/xml/change-notes/released/1.0.40.md new file mode 100644 index 00000000000..3f2f101b3b7 --- /dev/null +++ b/shared/xml/change-notes/released/1.0.40.md @@ -0,0 +1,3 @@ +## 1.0.40 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index c310c9f1e78..326e4b5da67 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.39 +lastReleaseVersion: 1.0.40 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index d31c816dafc..86ac177bdbf 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.40-dev +version: 1.0.41-dev groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index dd850460279..82c9137dbbf 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.40 + +No user-facing changes. + ## 1.0.39 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.40.md b/shared/yaml/change-notes/released/1.0.40.md new file mode 100644 index 00000000000..3f2f101b3b7 --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.40.md @@ -0,0 +1,3 @@ +## 1.0.40 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index c310c9f1e78..326e4b5da67 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.39 +lastReleaseVersion: 1.0.40 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index d154970377b..9e3dec90b6d 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.40-dev +version: 1.0.41-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index d1fa9e09fdd..efad17a8e8b 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 6.2.0 + +### Major Analysis Improvements + +* Upgraded to allow analysis of Swift 6.2.3. +* Upgraded to allow analysis of Swift 6.2.2. + ## 6.1.4 No user-facing changes. diff --git a/swift/ql/lib/change-notes/2025-12-11-swift-6.2.2.md b/swift/ql/lib/change-notes/2025-12-11-swift-6.2.2.md deleted file mode 100644 index 27927802dba..00000000000 --- a/swift/ql/lib/change-notes/2025-12-11-swift-6.2.2.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Upgraded to allow analysis of Swift 6.2.2. \ No newline at end of file diff --git a/swift/ql/lib/change-notes/2025-12-18-swift-6.2.3.md b/swift/ql/lib/change-notes/2025-12-18-swift-6.2.3.md deleted file mode 100644 index b8106460049..00000000000 --- a/swift/ql/lib/change-notes/2025-12-18-swift-6.2.3.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Upgraded to allow analysis of Swift 6.2.3. \ No newline at end of file diff --git a/swift/ql/lib/change-notes/released/6.2.0.md b/swift/ql/lib/change-notes/released/6.2.0.md new file mode 100644 index 00000000000..065e47507e9 --- /dev/null +++ b/swift/ql/lib/change-notes/released/6.2.0.md @@ -0,0 +1,6 @@ +## 6.2.0 + +### Major Analysis Improvements + +* Upgraded to allow analysis of Swift 6.2.3. +* Upgraded to allow analysis of Swift 6.2.2. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 7dbbf7fb553..35c46c599f0 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 6.1.4 +lastReleaseVersion: 6.2.0 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 77172d624e7..84482a72c80 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 6.1.5-dev +version: 6.2.1-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 093bfc1c99a..b555657d87a 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.2.14 + +No user-facing changes. + ## 1.2.13 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/1.2.14.md b/swift/ql/src/change-notes/released/1.2.14.md new file mode 100644 index 00000000000..a46ed3aa08f --- /dev/null +++ b/swift/ql/src/change-notes/released/1.2.14.md @@ -0,0 +1,3 @@ +## 1.2.14 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index f95a122f916..ef55ed9564a 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.13 +lastReleaseVersion: 1.2.14 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 15a1f6308dc..61ca00447b2 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.2.14-dev +version: 1.2.15-dev groups: - swift - queries