diff --git a/docs/query-help-style-guide.md b/docs/query-help-style-guide.md index 88b9844fc224..3ed9f439490b 100644 --- a/docs/query-help-style-guide.md +++ b/docs/query-help-style-guide.md @@ -16,11 +16,33 @@ When you contribute a new [supported query](supported-queries.md) to this reposi ### Location and file name -Query help files must have the same base name as the query they describe and must be located in the same directory. +Query help files must have the same base name as the query they describe and must be located in the same directory. ### File structure and layout -Query help files are written using a custom XML format, and stored in a file with a `.qhelp` extension. The basic structure is as follows: +Query help files can be written in either a custom XML format (with a `.qhelp` extension) or in Markdown (with a `.md` extension). Both formats are supported by the CodeQL documentation tooling. There are a few minor differences, noted in the section `Differences between XML and markdown formats` below. + +#### Markdown query help files + +A Markdown query help file should use the following structure and section order (note that the `Implementation notes` section is optional): + +``` +## Overview + +## Recommendation + +## Example + +## Implementation notes + +## References +``` + +Each section should be clearly marked with the appropriate heading. See the other Markdown files in this repository for examples. + +#### XML query help files + +Query help files can also be written using a custom XML format, and stored in a file with a `.qhelp` extension. The basic structure is as follows: ```xml <!DOCTYPE qhelp SYSTEM "qhelp.dtd"> @@ -33,7 +55,7 @@ The header and single top-level `<qhelp>` element are both mandatory. ### Section-level elements -Section-level elements are used to group the information within the query help file. All query help files should include at least the following section elements, in the order specified: +Section-level elements are used to group the information within the query help file. For both Markdown and XML formats, the following sections should be included, in the order specified: 1. `overview`—a short summary of the issue that the query identifies, including an explanation of how it could affect the behavior of the program. 2. `recommendation`—information on how to fix the issue highlighted by the query. @@ -42,10 +64,9 @@ Section-level elements are used to group the information within the query help f For further information about the other section-level, block, list and table elements supported by query help files, see [Query help files](https://codeql.github.com/docs/writing-codeql-queries/query-help-files/) on codeql.github.com. - ## English style -You should write the overview and recommendation elements in simple English that is easy to follow. You should: +You should write the overview and recommendation sections in simple English that is easy to follow. You should: * Use simple sentence structures and avoid complex or academic language. * Avoid colloquialisms and contractions. @@ -57,10 +78,11 @@ You should write the overview and recommendation elements in simple English that Whenever possible, you should include a code example that helps to explain the issue you are highlighting. Any code examples that you include should adhere to the following guidelines: * The example should be less than 20 lines, but it should still clearly illustrate the issue that the query identifies. If appropriate, then the example may also be runnable. -* Put the code example after the recommendation element where possible. Only include an example in the description element if absolutely necessary. +* Put the code example after the recommendation section where possible. Only include an example in the description section if absolutely necessary. * If you are using an example to illustrate the solution to a problem, and the change required is minor, avoid repeating the whole example. It is preferable to either describe the change required or to include a smaller snippet of the corrected code. * Clearly indicate which of the samples is an example of bad coding practice and which is recommended practice. -* Define the code examples in `src` files. The language is inferred from the file extension: +* For Markdown files, use fenced code blocks with the appropriate language identifier (for example, <code> ```java </code>). +* For XML files, define the code examples in `src` files. The language is inferred from the file extension: ```xml <example> @@ -74,11 +96,11 @@ Whenever possible, you should include a code example that helps to explain the i </example> ``` -Note, if any code words are included in the `overview` and `recommendation` sections, they should be formatted with `<code> ... </code>` for emphasis. +Note, if any code words are included in the `overview` and `recommendation` sections, in Markdown they should be formatted with backticks (<code>`...`</code>) and in XML they should be formatted with`<code> ... </code>` for emphasis. ## Including references -You should include one or more references, list formatted with `<li> ... </li>` for each item, to provide further information about the problem that your query is designed to find. References can be of the following types: +You should include one or more references, formatted as an unordered list (`- ...` or `* ...`) in Markdown or with `<li> ... </li>` for each item in XML, to provide further information about the problem that your query is designed to find. References can be of the following types: ### Books @@ -90,7 +112,7 @@ For example: >W. C. Wake, _Refactoring Workbook_, pp. 93 – 94, Addison-Wesley Professional, 2004. -Note, & symbols need to be replaced by \&. The symbol will be displayed correctly in the HTML files generated from the query help files. +Note, & symbols need to be replaced by \& in XML. The symbol will be displayed correctly in the HTML files generated from the query help files. ### Academic papers @@ -98,7 +120,6 @@ If you are citing an academic paper, we recommend adopting the reference style o >S. R. Chidamber and C. F. Kemerer, _A metrics suite for object-oriented design_. IEEE Transactions on Software Engineering, 20(6):476-493, 1994. - ### Websites If you are citing a website, please use the following format, without breadcrumb trails: @@ -111,28 +132,123 @@ For example: ### Referencing potential security weaknesses -If your query checks code for a CWE weakness, you should use the `@tags` element in the query file to reference the associated CWEs, as explained [here](query-metadata-style-guide.md). When you use these tags, a link to the appropriate entry from the [MITRE.org](https://cwe.mitre.org/scoring/index.html) site will automatically appear as a reference in the output HTML file. +If your query checks code for a CWE weakness, you should use the `@tags` element in the query file to reference the associated CWEs, as explained [here](query-metadata-style-guide.md). When you use these tags in a query help file in the custom XML format, a link to the appropriate entry from the [MITRE.org](https://cwe.mitre.org/scoring/index.html) site will automatically appear as a reference in the output HTML file. -## Validating qhelp files +## Validating query help files -Before making a pull request, please ensure the `.qhelp` files are well-formed and can be generated without errors. This can be done locally with the CodeQL CLI, as shown in the following example: +Before making a pull request, please ensure the `.qhelp` or `.md` files are well-formed and can be generated without errors. This can be done locally with the CodeQL CLI, as shown in the following example: ```bash # codeql generate query-help <path_to_your_qhelp_file> --format=<format> # For example: codeql generate query-help ./myCustomQuery.qhelp --format=markdown +codeql generate query-help ./myCustomQuery.md --format=markdown ``` +Please include the query help files (and any associated code snippets) in your pull request, but do not commit the generated Markdown. -Please include the `.qhelp` files (and any associated code snippets) in your pull request, but do not commit the generated Markdown. +More information on how to test your query help files can be found [within the documentation](https://docs.github.com/en/code-security/codeql-cli/using-the-codeql-cli/testing-query-help-files) -More information on how to test your `.qhelp` files can be found [within the documentation](https://docs.github.com/en/code-security/codeql-cli/using-the-codeql-cli/testing-query-help-files) +## Differences between XML and markdown formats + +1. The XML format allows for the contents of other files to be included in the output generated by processing the file, as mentioned in the section `Code examples`. This is not possible with the Markdown format. +2. When using the XML format, references are added to the output HTML file based on CWE tags, as mentioned in the section `Referencing potential security weaknesses`. +3. For custom queries and custom query packs, only the Markdown format is supported. ## Query help example -The following example is a query help file for a query from the standard query suite for Java: +The following example is a query help file for a query from the standard query suite for Java, shown in both Markdown and XML formats. -```xml +### Markdown example + +````markdown +# Overview + +A control structure (an `if` statement or a loop) has a body that is either a block +of statements surrounded by curly braces or a single statement. + +If you omit braces, it is particularly important to ensure that the indentation of the code +matches the control flow of the code. + +## Recommendation + +It is usually considered good practice to include braces for all control +structures in Java. This is because it makes it easier to maintain the code +later. For example, it's easy to see at a glance which part of the code is in the +scope of an `if` statement, and adding more statements to the body of the `if` +statement is less error-prone. + +You should also ensure that the indentation of the code is consistent with the actual flow of +control, so that it does not confuse programmers. + +## Example + +In the example below, the original version of `Cart` is missing braces. This means +that the code triggers a `NullPointerException` at runtime if `i` +is `null`. + +```java +class Cart { + Map<Integer, Integer> items = ... + public void addItem(Item i) { + // No braces and misleading indentation. + if (i != null) + log("Adding item: " + i); + // Indentation suggests that the following statements + // are in the body of the 'if'. + Integer curQuantity = items.get(i.getID()); + if (curQuantity == null) curQuantity = 0; + items.put(i.getID(), curQuantity+1); + } +} +``` + +The corrected version of `Cart` does include braces, so +that the code executes as the indentation suggests. + +```java +class Cart { + Map<Integer, Integer> items = ... + public void addItem(Item i) { + // Braces included. + if (i != null) { + log("Adding item: " + i); + Integer curQuantity = items.get(i.getID()); + if (curQuantity == null) curQuantity = 0; + items.put(i.getID(), curQuantity+1); + } + } +} +``` + +In the following example the indentation may or may not be misleading depending on your tab width +settings. As such, mixing tabs and spaces in this way is not recommended, since what looks fine in +one context can be very misleading in another. + +```java +// Tab width 8 + if (b) // Indentation: 1 tab + f(); // Indentation: 2 tabs + g(); // Indentation: 8 spaces + +// Tab width 4 + if (b) // Indentation: 1 tab + f(); // Indentation: 2 tabs + g(); // Indentation: 8 spaces +``` + +If you mix tabs and spaces in this way, then you might get seemingly false positives, since your +tab width settings cannot be taken into account. + +## References + +* Java SE Documentation: [Compound Statements](https://www.oracle.com/java/technologies/javase/codeconventions-statements.html#15395) +* Wikipedia: [Indentation style](https://en.wikipedia.org/wiki/Indentation_style) +```` + +### XML example + +````xml <!DOCTYPE qhelp PUBLIC "-//Semmle//qhelp//EN" "qhelp.dtd"> @@ -154,13 +270,13 @@ later. For example, it's easy to see at a glance which part of the code is in th scope of an <code>if</code> statement, and adding more statements to the body of the <code>if</code> statement is less error-prone.</p> -<p>You should also ensure that the indentation of the code is consistent with the actual flow of +<p>You should also ensure that the indentation of the code is consistent with the actual flow of control, so that it does not confuse programmers.</p> </recommendation> <example> -<p>In the example below, the original version of <code>Cart</code> is missing braces. This means +<p>In the example below, the original version of <code>Cart</code> is missing braces. This means that the code triggers a <code>NullPointerException</code> at runtime if <code>i</code> is <code>null</code>.</p> @@ -198,4 +314,4 @@ tab width settings cannot be taken into account. </references> </qhelp> -``` +```` diff --git a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java index 22d008637c9a..f96211bd5c41 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java +++ b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java @@ -39,6 +39,8 @@ import com.google.gson.Gson; import com.google.gson.JsonParseException; +import com.semmle.js.extractor.tsconfig.TsConfigJson; +import com.semmle.js.extractor.tsconfig.CompilerOptions; import com.semmle.js.dependencies.AsyncFetcher; import com.semmle.js.dependencies.DependencyResolver; import com.semmle.js.dependencies.packument.PackageJson; @@ -745,6 +747,26 @@ private CompletableFuture<?> extractSource() throws IOException { .filter(p -> !isFileTooLarge(p)) .sorted(PATH_ORDERING) .collect(Collectors.toCollection(() -> new LinkedHashSet<>())); + // gather all output directories specified in tsconfig.json files + final List<Path> outDirs = new ArrayList<>(); + for (Path cfg : tsconfigFiles) { + try { + String txt = new WholeIO().read(cfg); + TsConfigJson root = new Gson().fromJson(txt, TsConfigJson.class); + if (root != null && root.getCompilerOptions() != null) { + if (root.getCompilerOptions().getOutDir() == null) { + // no outDir specified, so skip this tsconfig.json + continue; + } + Path odir = cfg.getParent().resolve(root.getCompilerOptions().getOutDir()).toAbsolutePath().normalize(); + outDirs.add(odir); + } + } catch (Exception e) { + // ignore malformed tsconfig or missing fields + } + } + // exclude files in output directories as configured in tsconfig.json + filesToExtract.removeIf(f -> outDirs.stream().anyMatch(od -> f.startsWith(od))); DependencyInstallationResult dependencyInstallationResult = DependencyInstallationResult.empty; if (!tsconfigFiles.isEmpty()) { @@ -796,9 +818,19 @@ private CompletableFuture<?> extractFiles( */ private boolean isFileDerivedFromTypeScriptFile(Path path, Set<Path> extractedFiles) { String name = path.getFileName().toString(); - if (!name.endsWith(".js")) + // only skip JS variants when a corresponding TS/TSX file was already extracted + if (!(name.endsWith(".js") + || name.endsWith(".cjs") + || name.endsWith(".mjs") + || name.endsWith(".jsx") + || name.endsWith(".cjsx") + || name.endsWith(".mjsx"))) { return false; - String stem = name.substring(0, name.length() - ".js".length()); + } + // strip off extension + int dot = name.lastIndexOf('.'); + String stem = dot != -1 ? name.substring(0, dot) : name; + // if a TS/TSX file with same base name was extracted, skip this file for (String ext : FileType.TYPESCRIPT.getExtensions()) { if (extractedFiles.contains(path.getParent().resolve(stem + ext))) { return true; @@ -1154,7 +1186,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) } // extract TypeScript projects from 'tsconfig.json' - if (typeScriptMode == TypeScriptMode.FULL + if (typeScriptMode != TypeScriptMode.NONE && treatAsTSConfig(file.getFileName().toString()) && !excludes.contains(file) && isFileIncluded(file)) { diff --git a/javascript/extractor/src/com/semmle/js/extractor/tsconfig/CompilerOptions.java b/javascript/extractor/src/com/semmle/js/extractor/tsconfig/CompilerOptions.java new file mode 100644 index 000000000000..fa7b664f2eb0 --- /dev/null +++ b/javascript/extractor/src/com/semmle/js/extractor/tsconfig/CompilerOptions.java @@ -0,0 +1,13 @@ +package com.semmle.js.extractor.tsconfig; + +public class CompilerOptions { + private String outDir; + + public String getOutDir() { + return outDir; + } + + public void setOutDir(String outDir) { + this.outDir = outDir; + } +} diff --git a/javascript/extractor/src/com/semmle/js/extractor/tsconfig/TsConfigJson.java b/javascript/extractor/src/com/semmle/js/extractor/tsconfig/TsConfigJson.java new file mode 100644 index 000000000000..9e12d5cc0aa9 --- /dev/null +++ b/javascript/extractor/src/com/semmle/js/extractor/tsconfig/TsConfigJson.java @@ -0,0 +1,13 @@ +package com.semmle.js.extractor.tsconfig; + +public class TsConfigJson { + private CompilerOptions compilerOptions; + + public CompilerOptions getCompilerOptions() { + return compilerOptions; + } + + public void setCompilerOptions(CompilerOptions compilerOptions) { + this.compilerOptions = compilerOptions; + } +} diff --git a/javascript/extractor/test/com/semmle/js/extractor/test/AutoBuildTests.java b/javascript/extractor/test/com/semmle/js/extractor/test/AutoBuildTests.java index 0a924d54319a..28c8e593dcd1 100644 --- a/javascript/extractor/test/com/semmle/js/extractor/test/AutoBuildTests.java +++ b/javascript/extractor/test/com/semmle/js/extractor/test/AutoBuildTests.java @@ -135,6 +135,7 @@ public void extractTypeScriptFiles( FileExtractors extractors) { for (Path f : files) { actual.add(f.toString()); + extractedFiles.add(f); } } @@ -175,7 +176,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) @Test public void basicTest() throws IOException { - addFile(true, LGTM_SRC, "tst.js"); + addFile(false, LGTM_SRC, "tst.js"); addFile(true, LGTM_SRC, "tst.ts"); addFile(true, LGTM_SRC, "tst.html"); addFile(true, LGTM_SRC, "tst.xsjs"); @@ -203,6 +204,43 @@ public void typescriptWrongConfig() throws IOException { runTest(); } + @Test + public void skipJsFilesDerivedFromTypeScriptFiles() throws IOException { + // JS-derived files (.js, .cjs, .mjs, .jsx, .cjsx, .mjsx) should be skipped when TS indexing + envVars.put("LGTM_INDEX_TYPESCRIPT", "basic"); + // Add TypeScript sources + addFile(true, LGTM_SRC, "foo.ts"); + addFile(true, LGTM_SRC, "bar.tsx"); + // Add derived JS variants (should be skipped) + addFile(false, LGTM_SRC, "foo.js"); + addFile(false, LGTM_SRC, "bar.jsx"); + addFile(false, LGTM_SRC, "foo.cjs"); + addFile(false, LGTM_SRC, "foo.mjs"); + addFile(false, LGTM_SRC, "bar.cjsx"); + addFile(false, LGTM_SRC, "bar.mjsx"); + // A normal JS file without TS counterpart should be extracted + addFile(true, LGTM_SRC, "normal.js"); + runTest(); + } + + @Test + public void skipFilesInTsconfigOutDir() throws IOException { + envVars.put("LGTM_INDEX_TYPESCRIPT", "basic"); + // Files under outDir in tsconfig.json should be excluded + // Create tsconfig.json with outDir set to "dist" + addFile(true, LGTM_SRC, "tsconfig.json"); + Path config = Paths.get(LGTM_SRC.toString(), "tsconfig.json"); + Files.write(config, + "{\"compilerOptions\":{\"outDir\":\"dist\"}}".getBytes(StandardCharsets.UTF_8)); + // Add files outside outDir (should be extracted) + addFile(true, LGTM_SRC, "src", "app.ts"); + addFile(true, LGTM_SRC, "main.js"); + // Add files under dist/outDir (should be skipped) + addFile(false, LGTM_SRC, "dist", "generated.js"); + addFile(false, LGTM_SRC, "dist", "sub", "x.js"); + runTest(); + } + @Test public void includeFile() throws IOException { envVars.put("LGTM_INDEX_INCLUDE", "tst.js"); diff --git a/javascript/ql/integration-tests/query-suite/javascript-code-quality-extended.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-code-quality-extended.qls.expected index bf646822ddc4..6894a776b379 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-code-quality-extended.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-code-quality-extended.qls.expected @@ -1,9 +1,99 @@ +ql/javascript/ql/src/AngularJS/DependencyMismatch.ql +ql/javascript/ql/src/AngularJS/DuplicateDependency.ql +ql/javascript/ql/src/AngularJS/IncompatibleService.ql +ql/javascript/ql/src/AngularJS/MissingExplicitInjection.ql +ql/javascript/ql/src/AngularJS/RepeatedInjection.ql +ql/javascript/ql/src/AngularJS/UseNgSrc.ql +ql/javascript/ql/src/DOM/DuplicateAttributes.ql +ql/javascript/ql/src/DOM/MalformedIdAttribute.ql +ql/javascript/ql/src/DOM/PseudoEval.ql +ql/javascript/ql/src/Declarations/ArgumentsRedefined.ql +ql/javascript/ql/src/Declarations/AssignmentToConst.ql +ql/javascript/ql/src/Declarations/ClobberingVarInit.ql +ql/javascript/ql/src/Declarations/ConflictingFunctions.ql +ql/javascript/ql/src/Declarations/DeadStoreOfLocal.ql +ql/javascript/ql/src/Declarations/DeadStoreOfProperty.ql +ql/javascript/ql/src/Declarations/DeclBeforeUse.ql +ql/javascript/ql/src/Declarations/DefaultArgumentReferencesNestedFunction.ql +ql/javascript/ql/src/Declarations/DuplicateVarDecl.ql ql/javascript/ql/src/Declarations/IneffectiveParameterType.ql +ql/javascript/ql/src/Declarations/MissingThisQualifier.ql +ql/javascript/ql/src/Declarations/MissingVarDecl.ql +ql/javascript/ql/src/Declarations/MixedStaticInstanceThisAccess.ql ql/javascript/ql/src/Declarations/SuspiciousMethodNameDeclaration.ql +ql/javascript/ql/src/Declarations/TemporalDeadZone.ql +ql/javascript/ql/src/Declarations/UniqueParameterNames.ql +ql/javascript/ql/src/Declarations/UniquePropertyNames.ql +ql/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql +ql/javascript/ql/src/Declarations/UnusedVariable.ql +ql/javascript/ql/src/Expressions/ComparisonWithNaN.ql +ql/javascript/ql/src/Expressions/DuplicateCondition.ql +ql/javascript/ql/src/Expressions/DuplicateProperty.ql +ql/javascript/ql/src/Expressions/DuplicateSwitchCase.ql ql/javascript/ql/src/Expressions/ExprHasNoEffect.ql +ql/javascript/ql/src/Expressions/HeterogeneousComparison.ql +ql/javascript/ql/src/Expressions/ImplicitOperandConversion.ql ql/javascript/ql/src/Expressions/MissingAwait.ql +ql/javascript/ql/src/Expressions/MissingDotLengthInComparison.ql +ql/javascript/ql/src/Expressions/MissingSpaceInAppend.ql +ql/javascript/ql/src/Expressions/MisspelledVariableName.ql +ql/javascript/ql/src/Expressions/RedundantExpression.ql +ql/javascript/ql/src/Expressions/SelfAssignment.ql +ql/javascript/ql/src/Expressions/ShiftOutOfRange.ql +ql/javascript/ql/src/Expressions/StringInsteadOfRegex.ql +ql/javascript/ql/src/Expressions/SuspiciousInvocation.ql +ql/javascript/ql/src/Expressions/SuspiciousPropAccess.ql +ql/javascript/ql/src/Expressions/UnboundEventHandlerReceiver.ql +ql/javascript/ql/src/Expressions/UnclearOperatorPrecedence.ql +ql/javascript/ql/src/Expressions/UnknownDirective.ql +ql/javascript/ql/src/Expressions/UnneededDefensiveProgramming.ql +ql/javascript/ql/src/Expressions/WhitespaceContradictsPrecedence.ql +ql/javascript/ql/src/LanguageFeatures/BadTypeof.ql +ql/javascript/ql/src/LanguageFeatures/ConditionalComments.ql +ql/javascript/ql/src/LanguageFeatures/DeleteVar.ql +ql/javascript/ql/src/LanguageFeatures/ExpressionClosures.ql +ql/javascript/ql/src/LanguageFeatures/ForInComprehensionBlocks.ql +ql/javascript/ql/src/LanguageFeatures/IllegalInvocation.ql +ql/javascript/ql/src/LanguageFeatures/InconsistentNew.ql +ql/javascript/ql/src/LanguageFeatures/InvalidPrototype.ql +ql/javascript/ql/src/LanguageFeatures/LengthComparisonOffByOne.ql +ql/javascript/ql/src/LanguageFeatures/NonLinearPattern.ql +ql/javascript/ql/src/LanguageFeatures/PropertyWriteOnPrimitive.ql +ql/javascript/ql/src/LanguageFeatures/SemicolonInsertion.ql +ql/javascript/ql/src/LanguageFeatures/SetterReturn.ql ql/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql +ql/javascript/ql/src/LanguageFeatures/StrictModeCallStackIntrospection.ql +ql/javascript/ql/src/LanguageFeatures/SyntaxError.ql ql/javascript/ql/src/LanguageFeatures/TemplateSyntaxInStringLiteral.ql +ql/javascript/ql/src/LanguageFeatures/ThisBeforeSuper.ql +ql/javascript/ql/src/LanguageFeatures/UnusedIndexVariable.ql +ql/javascript/ql/src/LanguageFeatures/WithStatement.ql +ql/javascript/ql/src/LanguageFeatures/YieldInNonGenerator.ql +ql/javascript/ql/src/NodeJS/InvalidExport.ql +ql/javascript/ql/src/NodeJS/MissingExports.ql ql/javascript/ql/src/Quality/UnhandledErrorInStreamPipeline.ql +ql/javascript/ql/src/React/DirectStateMutation.ql +ql/javascript/ql/src/React/InconsistentStateUpdate.ql +ql/javascript/ql/src/React/UnsupportedStateUpdateInLifecycleMethod.ql +ql/javascript/ql/src/React/UnusedOrUndefinedStateProperty.ql +ql/javascript/ql/src/RegExp/BackrefBeforeGroup.ql +ql/javascript/ql/src/RegExp/BackrefIntoNegativeLookahead.ql ql/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.ql +ql/javascript/ql/src/RegExp/EmptyCharacterClass.ql ql/javascript/ql/src/RegExp/RegExpAlwaysMatches.ql +ql/javascript/ql/src/RegExp/UnboundBackref.ql +ql/javascript/ql/src/RegExp/UnmatchableCaret.ql +ql/javascript/ql/src/RegExp/UnmatchableDollar.ql +ql/javascript/ql/src/Statements/DanglingElse.ql +ql/javascript/ql/src/Statements/IgnoreArrayResult.ql +ql/javascript/ql/src/Statements/InconsistentLoopOrientation.ql +ql/javascript/ql/src/Statements/LabelInCase.ql +ql/javascript/ql/src/Statements/LoopIterationSkippedDueToShifting.ql +ql/javascript/ql/src/Statements/MisleadingIndentationAfterControlStmt.ql +ql/javascript/ql/src/Statements/ReturnAssignsLocal.ql +ql/javascript/ql/src/Statements/SuspiciousUnusedLoopIterationVariable.ql +ql/javascript/ql/src/Statements/UnreachableStatement.ql +ql/javascript/ql/src/Statements/UseOfReturnlessFunction.ql +ql/javascript/ql/src/Statements/UselessComparisonTest.ql +ql/javascript/ql/src/Statements/UselessConditional.ql +ql/javascript/ql/src/Vue/ArrowMethodOnVueInstance.ql diff --git a/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected index bf646822ddc4..6894a776b379 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected @@ -1,9 +1,99 @@ +ql/javascript/ql/src/AngularJS/DependencyMismatch.ql +ql/javascript/ql/src/AngularJS/DuplicateDependency.ql +ql/javascript/ql/src/AngularJS/IncompatibleService.ql +ql/javascript/ql/src/AngularJS/MissingExplicitInjection.ql +ql/javascript/ql/src/AngularJS/RepeatedInjection.ql +ql/javascript/ql/src/AngularJS/UseNgSrc.ql +ql/javascript/ql/src/DOM/DuplicateAttributes.ql +ql/javascript/ql/src/DOM/MalformedIdAttribute.ql +ql/javascript/ql/src/DOM/PseudoEval.ql +ql/javascript/ql/src/Declarations/ArgumentsRedefined.ql +ql/javascript/ql/src/Declarations/AssignmentToConst.ql +ql/javascript/ql/src/Declarations/ClobberingVarInit.ql +ql/javascript/ql/src/Declarations/ConflictingFunctions.ql +ql/javascript/ql/src/Declarations/DeadStoreOfLocal.ql +ql/javascript/ql/src/Declarations/DeadStoreOfProperty.ql +ql/javascript/ql/src/Declarations/DeclBeforeUse.ql +ql/javascript/ql/src/Declarations/DefaultArgumentReferencesNestedFunction.ql +ql/javascript/ql/src/Declarations/DuplicateVarDecl.ql ql/javascript/ql/src/Declarations/IneffectiveParameterType.ql +ql/javascript/ql/src/Declarations/MissingThisQualifier.ql +ql/javascript/ql/src/Declarations/MissingVarDecl.ql +ql/javascript/ql/src/Declarations/MixedStaticInstanceThisAccess.ql ql/javascript/ql/src/Declarations/SuspiciousMethodNameDeclaration.ql +ql/javascript/ql/src/Declarations/TemporalDeadZone.ql +ql/javascript/ql/src/Declarations/UniqueParameterNames.ql +ql/javascript/ql/src/Declarations/UniquePropertyNames.ql +ql/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql +ql/javascript/ql/src/Declarations/UnusedVariable.ql +ql/javascript/ql/src/Expressions/ComparisonWithNaN.ql +ql/javascript/ql/src/Expressions/DuplicateCondition.ql +ql/javascript/ql/src/Expressions/DuplicateProperty.ql +ql/javascript/ql/src/Expressions/DuplicateSwitchCase.ql ql/javascript/ql/src/Expressions/ExprHasNoEffect.ql +ql/javascript/ql/src/Expressions/HeterogeneousComparison.ql +ql/javascript/ql/src/Expressions/ImplicitOperandConversion.ql ql/javascript/ql/src/Expressions/MissingAwait.ql +ql/javascript/ql/src/Expressions/MissingDotLengthInComparison.ql +ql/javascript/ql/src/Expressions/MissingSpaceInAppend.ql +ql/javascript/ql/src/Expressions/MisspelledVariableName.ql +ql/javascript/ql/src/Expressions/RedundantExpression.ql +ql/javascript/ql/src/Expressions/SelfAssignment.ql +ql/javascript/ql/src/Expressions/ShiftOutOfRange.ql +ql/javascript/ql/src/Expressions/StringInsteadOfRegex.ql +ql/javascript/ql/src/Expressions/SuspiciousInvocation.ql +ql/javascript/ql/src/Expressions/SuspiciousPropAccess.ql +ql/javascript/ql/src/Expressions/UnboundEventHandlerReceiver.ql +ql/javascript/ql/src/Expressions/UnclearOperatorPrecedence.ql +ql/javascript/ql/src/Expressions/UnknownDirective.ql +ql/javascript/ql/src/Expressions/UnneededDefensiveProgramming.ql +ql/javascript/ql/src/Expressions/WhitespaceContradictsPrecedence.ql +ql/javascript/ql/src/LanguageFeatures/BadTypeof.ql +ql/javascript/ql/src/LanguageFeatures/ConditionalComments.ql +ql/javascript/ql/src/LanguageFeatures/DeleteVar.ql +ql/javascript/ql/src/LanguageFeatures/ExpressionClosures.ql +ql/javascript/ql/src/LanguageFeatures/ForInComprehensionBlocks.ql +ql/javascript/ql/src/LanguageFeatures/IllegalInvocation.ql +ql/javascript/ql/src/LanguageFeatures/InconsistentNew.ql +ql/javascript/ql/src/LanguageFeatures/InvalidPrototype.ql +ql/javascript/ql/src/LanguageFeatures/LengthComparisonOffByOne.ql +ql/javascript/ql/src/LanguageFeatures/NonLinearPattern.ql +ql/javascript/ql/src/LanguageFeatures/PropertyWriteOnPrimitive.ql +ql/javascript/ql/src/LanguageFeatures/SemicolonInsertion.ql +ql/javascript/ql/src/LanguageFeatures/SetterReturn.ql ql/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql +ql/javascript/ql/src/LanguageFeatures/StrictModeCallStackIntrospection.ql +ql/javascript/ql/src/LanguageFeatures/SyntaxError.ql ql/javascript/ql/src/LanguageFeatures/TemplateSyntaxInStringLiteral.ql +ql/javascript/ql/src/LanguageFeatures/ThisBeforeSuper.ql +ql/javascript/ql/src/LanguageFeatures/UnusedIndexVariable.ql +ql/javascript/ql/src/LanguageFeatures/WithStatement.ql +ql/javascript/ql/src/LanguageFeatures/YieldInNonGenerator.ql +ql/javascript/ql/src/NodeJS/InvalidExport.ql +ql/javascript/ql/src/NodeJS/MissingExports.ql ql/javascript/ql/src/Quality/UnhandledErrorInStreamPipeline.ql +ql/javascript/ql/src/React/DirectStateMutation.ql +ql/javascript/ql/src/React/InconsistentStateUpdate.ql +ql/javascript/ql/src/React/UnsupportedStateUpdateInLifecycleMethod.ql +ql/javascript/ql/src/React/UnusedOrUndefinedStateProperty.ql +ql/javascript/ql/src/RegExp/BackrefBeforeGroup.ql +ql/javascript/ql/src/RegExp/BackrefIntoNegativeLookahead.ql ql/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.ql +ql/javascript/ql/src/RegExp/EmptyCharacterClass.ql ql/javascript/ql/src/RegExp/RegExpAlwaysMatches.ql +ql/javascript/ql/src/RegExp/UnboundBackref.ql +ql/javascript/ql/src/RegExp/UnmatchableCaret.ql +ql/javascript/ql/src/RegExp/UnmatchableDollar.ql +ql/javascript/ql/src/Statements/DanglingElse.ql +ql/javascript/ql/src/Statements/IgnoreArrayResult.ql +ql/javascript/ql/src/Statements/InconsistentLoopOrientation.ql +ql/javascript/ql/src/Statements/LabelInCase.ql +ql/javascript/ql/src/Statements/LoopIterationSkippedDueToShifting.ql +ql/javascript/ql/src/Statements/MisleadingIndentationAfterControlStmt.ql +ql/javascript/ql/src/Statements/ReturnAssignsLocal.ql +ql/javascript/ql/src/Statements/SuspiciousUnusedLoopIterationVariable.ql +ql/javascript/ql/src/Statements/UnreachableStatement.ql +ql/javascript/ql/src/Statements/UseOfReturnlessFunction.ql +ql/javascript/ql/src/Statements/UselessComparisonTest.ql +ql/javascript/ql/src/Statements/UselessConditional.ql +ql/javascript/ql/src/Vue/ArrowMethodOnVueInstance.ql diff --git a/javascript/ql/lib/change-notes/2025-06-05-skip-obviously-generated-files.md b/javascript/ql/lib/change-notes/2025-06-05-skip-obviously-generated-files.md new file mode 100644 index 000000000000..16d81cb4cc30 --- /dev/null +++ b/javascript/ql/lib/change-notes/2025-06-05-skip-obviously-generated-files.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The JavaScript extractor now skips generated JavaScript files if the original TypeScript files are already present. It also skips any files in the output directory specified in the `compilerOptions` part of the `tsconfig.json` file. diff --git a/javascript/ql/lib/change-notes/2025-06-16-middleware-express.md b/javascript/ql/lib/change-notes/2025-06-16-middleware-express.md new file mode 100644 index 000000000000..600aad8bafcf --- /dev/null +++ b/javascript/ql/lib/change-notes/2025-06-16-middleware-express.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* Improved data flow tracking through middleware to handle default value and similar patterns. +* Added `req._parsedUrl` as a remote input source. diff --git a/javascript/ql/lib/semmle/javascript/Routing.qll b/javascript/ql/lib/semmle/javascript/Routing.qll index 530322a2d2c4..8fe9f79d8623 100644 --- a/javascript/ql/lib/semmle/javascript/Routing.qll +++ b/javascript/ql/lib/semmle/javascript/Routing.qll @@ -925,7 +925,7 @@ module Routing { private DataFlow::Node getAnAccessPathRhs(Node base, int n, string path) { // Assigned in the body of a route handler function, which is a middleware exists(RouteHandler handler | base = handler | - result = AccessPath::getAnAssignmentTo(handler.getParameter(n).ref(), path) and + result = AccessPath::getAnAssignmentTo(handler.getParameter(n).ref(), path).getALocalSource() and ( exists(handler.getAContinuationInvocation()) or diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Express.qll b/javascript/ql/lib/semmle/javascript/frameworks/Express.qll index ffeee7df73ee..bcfcffb82a0f 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Express.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Express.qll @@ -618,9 +618,9 @@ module Express { kind = "body" and this = ref.getAPropertyRead("body") or - // `req.path` + // `req.path` and `req._parsedUrl` kind = "url" and - this = ref.getAPropertyRead("path") + this = ref.getAPropertyRead(["path", "_parsedUrl"]) ) } diff --git a/javascript/ql/src/AngularJS/DependencyMismatch.ql b/javascript/ql/src/AngularJS/DependencyMismatch.ql index 83f9b1cb73ac..a6990a444779 100644 --- a/javascript/ql/src/AngularJS/DependencyMismatch.ql +++ b/javascript/ql/src/AngularJS/DependencyMismatch.ql @@ -7,8 +7,9 @@ * @problem.severity warning * @precision very-high * @id js/angular/dependency-injection-mismatch - * @tags correctness - * maintainability + * @tags quality + * reliability + * correctness * frameworks/angularjs */ diff --git a/javascript/ql/src/AngularJS/DuplicateDependency.ql b/javascript/ql/src/AngularJS/DuplicateDependency.ql index 12036e03339a..38f46d8acf96 100644 --- a/javascript/ql/src/AngularJS/DuplicateDependency.ql +++ b/javascript/ql/src/AngularJS/DuplicateDependency.ql @@ -5,7 +5,9 @@ * @problem.severity warning * @precision very-high * @id js/angular/duplicate-dependency - * @tags maintainability + * @tags quality + * maintainability + * readability * frameworks/angularjs */ diff --git a/javascript/ql/src/AngularJS/IncompatibleService.ql b/javascript/ql/src/AngularJS/IncompatibleService.ql index c22eccc2dd43..511f5c72cdc5 100644 --- a/javascript/ql/src/AngularJS/IncompatibleService.ql +++ b/javascript/ql/src/AngularJS/IncompatibleService.ql @@ -5,7 +5,9 @@ * @problem.severity error * @precision high * @id js/angular/incompatible-service - * @tags correctness + * @tags quality + * reliability + * correctness * frameworks/angularjs */ diff --git a/javascript/ql/src/AngularJS/MissingExplicitInjection.ql b/javascript/ql/src/AngularJS/MissingExplicitInjection.ql index f7ff51fb5475..4b007974bcfe 100644 --- a/javascript/ql/src/AngularJS/MissingExplicitInjection.ql +++ b/javascript/ql/src/AngularJS/MissingExplicitInjection.ql @@ -6,8 +6,9 @@ * @problem.severity warning * @precision high * @id js/angular/missing-explicit-injection - * @tags correctness - * maintainability + * @tags quality + * reliability + * correctness * frameworks/angularjs */ diff --git a/javascript/ql/src/AngularJS/RepeatedInjection.ql b/javascript/ql/src/AngularJS/RepeatedInjection.ql index 27fb0dc2f621..8c1d1379893e 100644 --- a/javascript/ql/src/AngularJS/RepeatedInjection.ql +++ b/javascript/ql/src/AngularJS/RepeatedInjection.ql @@ -5,7 +5,9 @@ * @problem.severity warning * @precision high * @id js/angular/repeated-dependency-injection - * @tags maintainability + * @tags quality + * maintainability + * readability * frameworks/angularjs */ diff --git a/javascript/ql/src/AngularJS/UseNgSrc.ql b/javascript/ql/src/AngularJS/UseNgSrc.ql index 333b36722f53..51255af80710 100644 --- a/javascript/ql/src/AngularJS/UseNgSrc.ql +++ b/javascript/ql/src/AngularJS/UseNgSrc.ql @@ -7,7 +7,9 @@ * @problem.severity warning * @precision very-high * @id js/angular/expression-in-url-attribute - * @tags maintainability + * @tags quality + * reliability + * correctness * frameworks/angularjs */ diff --git a/javascript/ql/src/DOM/DuplicateAttributes.ql b/javascript/ql/src/DOM/DuplicateAttributes.ql index 77c1ddea93bd..a6f73982f73f 100644 --- a/javascript/ql/src/DOM/DuplicateAttributes.ql +++ b/javascript/ql/src/DOM/DuplicateAttributes.ql @@ -5,7 +5,8 @@ * @kind problem * @problem.severity warning * @id js/duplicate-html-attribute - * @tags maintainability + * @tags quality + * maintainability * readability * @precision very-high */ diff --git a/javascript/ql/src/DOM/MalformedIdAttribute.ql b/javascript/ql/src/DOM/MalformedIdAttribute.ql index d9a99aa1937e..dea9d25f9179 100644 --- a/javascript/ql/src/DOM/MalformedIdAttribute.ql +++ b/javascript/ql/src/DOM/MalformedIdAttribute.ql @@ -5,7 +5,8 @@ * @kind problem * @problem.severity warning * @id js/malformed-html-id - * @tags maintainability + * @tags quality + * reliability * correctness * external/cwe/cwe-758 * @precision very-high diff --git a/javascript/ql/src/DOM/PseudoEval.ql b/javascript/ql/src/DOM/PseudoEval.ql index c6bed6ed75bf..9ea1e9d2fb40 100644 --- a/javascript/ql/src/DOM/PseudoEval.ql +++ b/javascript/ql/src/DOM/PseudoEval.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity recommendation * @id js/eval-like-call - * @tags maintainability + * @tags quality + * maintainability + * readability * external/cwe/cwe-676 * @precision very-high */ diff --git a/javascript/ql/src/Declarations/ArgumentsRedefined.ql b/javascript/ql/src/Declarations/ArgumentsRedefined.ql index dc1ca153062f..01d0451d6f41 100644 --- a/javascript/ql/src/Declarations/ArgumentsRedefined.ql +++ b/javascript/ql/src/Declarations/ArgumentsRedefined.ql @@ -6,8 +6,9 @@ * @kind problem * @problem.severity recommendation * @id js/arguments-redefinition - * @tags efficiency - * maintainability + * @tags quality + * reliability + * performance * @precision very-high */ diff --git a/javascript/ql/src/Declarations/AssignmentToConst.ql b/javascript/ql/src/Declarations/AssignmentToConst.ql index f2a24832c6a3..2aebfad0054e 100644 --- a/javascript/ql/src/Declarations/AssignmentToConst.ql +++ b/javascript/ql/src/Declarations/AssignmentToConst.ql @@ -5,7 +5,8 @@ * @kind problem * @problem.severity error * @id js/assignment-to-constant - * @tags reliability + * @tags quality + * reliability * correctness * @precision very-high */ diff --git a/javascript/ql/src/Declarations/ClobberingVarInit.ql b/javascript/ql/src/Declarations/ClobberingVarInit.ql index 2ae7a8910354..5a3fe406d7e0 100644 --- a/javascript/ql/src/Declarations/ClobberingVarInit.ql +++ b/javascript/ql/src/Declarations/ClobberingVarInit.ql @@ -5,7 +5,8 @@ * @kind problem * @problem.severity error * @id js/variable-initialization-conflict - * @tags reliability + * @tags quality + * reliability * correctness * external/cwe/cwe-563 * @precision very-high diff --git a/javascript/ql/src/Declarations/ConflictingFunctions.ql b/javascript/ql/src/Declarations/ConflictingFunctions.ql index 60f3200c369f..e15f49acd93f 100644 --- a/javascript/ql/src/Declarations/ConflictingFunctions.ql +++ b/javascript/ql/src/Declarations/ConflictingFunctions.ql @@ -6,7 +6,8 @@ * @kind problem * @problem.severity error * @id js/function-declaration-conflict - * @tags reliability + * @tags quality + * reliability * correctness * external/cwe/cwe-563 * @precision high diff --git a/javascript/ql/src/Declarations/DeadStoreOfLocal.ql b/javascript/ql/src/Declarations/DeadStoreOfLocal.ql index 70b3ba0e2e2b..b09e1435739f 100644 --- a/javascript/ql/src/Declarations/DeadStoreOfLocal.ql +++ b/javascript/ql/src/Declarations/DeadStoreOfLocal.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity warning * @id js/useless-assignment-to-local - * @tags maintainability + * @tags quality + * maintainability + * useless-code * external/cwe/cwe-563 * @precision very-high */ diff --git a/javascript/ql/src/Declarations/DeadStoreOfProperty.ql b/javascript/ql/src/Declarations/DeadStoreOfProperty.ql index c8cb0d8536e8..8930a13dfa4e 100644 --- a/javascript/ql/src/Declarations/DeadStoreOfProperty.ql +++ b/javascript/ql/src/Declarations/DeadStoreOfProperty.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity warning * @id js/useless-assignment-to-property - * @tags maintainability + * @tags quality + * maintainability + * useless-code * @precision high */ diff --git a/javascript/ql/src/Declarations/DeclBeforeUse.ql b/javascript/ql/src/Declarations/DeclBeforeUse.ql index b58fab9e465f..ddf715cefdb9 100644 --- a/javascript/ql/src/Declarations/DeclBeforeUse.ql +++ b/javascript/ql/src/Declarations/DeclBeforeUse.ql @@ -4,7 +4,8 @@ * @kind problem * @problem.severity warning * @id js/use-before-declaration - * @tags maintainability + * @tags quality + * maintainability * readability * @precision very-high */ diff --git a/javascript/ql/src/Declarations/DefaultArgumentReferencesNestedFunction.ql b/javascript/ql/src/Declarations/DefaultArgumentReferencesNestedFunction.ql index cd13314095c1..934d2d6ddd3b 100644 --- a/javascript/ql/src/Declarations/DefaultArgumentReferencesNestedFunction.ql +++ b/javascript/ql/src/Declarations/DefaultArgumentReferencesNestedFunction.ql @@ -6,7 +6,8 @@ * @kind problem * @problem.severity error * @id js/nested-function-reference-in-default-parameter - * @tags reliability + * @tags quality + * reliability * correctness * @precision very-high */ diff --git a/javascript/ql/src/Declarations/DuplicateVarDecl.ql b/javascript/ql/src/Declarations/DuplicateVarDecl.ql index 4a1c1bdb38fc..03dd4bb75173 100644 --- a/javascript/ql/src/Declarations/DuplicateVarDecl.ql +++ b/javascript/ql/src/Declarations/DuplicateVarDecl.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity recommendation * @id js/duplicate-variable-declaration - * @tags maintainability + * @tags quality + * maintainability + * readability * @precision very-high */ diff --git a/javascript/ql/src/Declarations/IneffectiveParameterType.ql b/javascript/ql/src/Declarations/IneffectiveParameterType.ql index 18899bd0c4e6..58480a84bf21 100644 --- a/javascript/ql/src/Declarations/IneffectiveParameterType.ql +++ b/javascript/ql/src/Declarations/IneffectiveParameterType.ql @@ -5,9 +5,10 @@ * @problem.severity warning * @id js/ineffective-parameter-type * @precision high - * @tags correctness + * @tags quality + * reliability + * correctness * typescript - * quality */ import javascript diff --git a/javascript/ql/src/Declarations/MissingThisQualifier.ql b/javascript/ql/src/Declarations/MissingThisQualifier.ql index 0d41cf19b19a..3bdf1080b11e 100644 --- a/javascript/ql/src/Declarations/MissingThisQualifier.ql +++ b/javascript/ql/src/Declarations/MissingThisQualifier.ql @@ -4,7 +4,8 @@ * @kind problem * @problem.severity error * @id js/missing-this-qualifier - * @tags maintainability + * @tags quality + * reliability * correctness * methods * @precision high diff --git a/javascript/ql/src/Declarations/MissingVarDecl.ql b/javascript/ql/src/Declarations/MissingVarDecl.ql index 8dd40cb064a2..390fc0af51cd 100644 --- a/javascript/ql/src/Declarations/MissingVarDecl.ql +++ b/javascript/ql/src/Declarations/MissingVarDecl.ql @@ -5,8 +5,9 @@ * @kind problem * @problem.severity warning * @id js/missing-variable-declaration - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness * @precision high */ diff --git a/javascript/ql/src/Declarations/MixedStaticInstanceThisAccess.ql b/javascript/ql/src/Declarations/MixedStaticInstanceThisAccess.ql index a8f771706f17..5941e51d3b03 100644 --- a/javascript/ql/src/Declarations/MixedStaticInstanceThisAccess.ql +++ b/javascript/ql/src/Declarations/MixedStaticInstanceThisAccess.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity error * @id js/mixed-static-instance-this-access - * @tags correctness + * @tags quality + * reliability + * correctness * methods * @precision high */ diff --git a/javascript/ql/src/Declarations/TemporalDeadZone.ql b/javascript/ql/src/Declarations/TemporalDeadZone.ql index dbb5f7275d35..f51303ee3921 100644 --- a/javascript/ql/src/Declarations/TemporalDeadZone.ql +++ b/javascript/ql/src/Declarations/TemporalDeadZone.ql @@ -5,8 +5,10 @@ * @kind problem * @problem.severity error * @id js/variable-use-in-temporal-dead-zone - * @tags portability + * @tags quality + * reliability * correctness + * portability * @precision very-high */ diff --git a/javascript/ql/src/Declarations/UniqueParameterNames.ql b/javascript/ql/src/Declarations/UniqueParameterNames.ql index bb595cbe6070..53b3657b9661 100644 --- a/javascript/ql/src/Declarations/UniqueParameterNames.ql +++ b/javascript/ql/src/Declarations/UniqueParameterNames.ql @@ -5,7 +5,8 @@ * @kind problem * @problem.severity error * @id js/duplicate-parameter-name - * @tags reliability + * @tags quality + * reliability * correctness * @precision very-high */ diff --git a/javascript/ql/src/Declarations/UniquePropertyNames.ql b/javascript/ql/src/Declarations/UniquePropertyNames.ql index e98857945ad8..f168b46c54ec 100644 --- a/javascript/ql/src/Declarations/UniquePropertyNames.ql +++ b/javascript/ql/src/Declarations/UniquePropertyNames.ql @@ -6,7 +6,8 @@ * @kind problem * @problem.severity error * @id js/overwritten-property - * @tags reliability + * @tags quality + * reliability * correctness * external/cwe/cwe-563 * @precision very-high diff --git a/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql b/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql index 23406eb0b72a..a68617ea2f11 100644 --- a/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql +++ b/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql @@ -7,7 +7,9 @@ * @problem.severity warning * @id js/unreachable-method-overloads * @precision high - * @tags correctness + * @tags quality + * reliability + * correctness * typescript */ diff --git a/javascript/ql/src/Declarations/UnusedVariable.ql b/javascript/ql/src/Declarations/UnusedVariable.ql index 7346b58c0494..66e15cdbf81a 100644 --- a/javascript/ql/src/Declarations/UnusedVariable.ql +++ b/javascript/ql/src/Declarations/UnusedVariable.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity recommendation * @id js/unused-local-variable - * @tags maintainability + * @tags quality + * maintainability + * useless-code * @precision very-high */ diff --git a/javascript/ql/src/Expressions/ComparisonWithNaN.ql b/javascript/ql/src/Expressions/ComparisonWithNaN.ql index 82a45a3a5629..1fb61b489651 100644 --- a/javascript/ql/src/Expressions/ComparisonWithNaN.ql +++ b/javascript/ql/src/Expressions/ComparisonWithNaN.ql @@ -5,7 +5,8 @@ * @kind problem * @problem.severity error * @id js/comparison-with-nan - * @tags reliability + * @tags quality + * reliability * correctness * external/cwe/cwe-570 * external/cwe/cwe-571 diff --git a/javascript/ql/src/Expressions/DuplicateCondition.ql b/javascript/ql/src/Expressions/DuplicateCondition.ql index a13a0f158104..1f58d9d200a3 100644 --- a/javascript/ql/src/Expressions/DuplicateCondition.ql +++ b/javascript/ql/src/Expressions/DuplicateCondition.ql @@ -5,7 +5,8 @@ * @kind problem * @problem.severity warning * @id js/duplicate-condition - * @tags maintainability + * @tags quality + * reliability * correctness * external/cwe/cwe-561 * @precision very-high diff --git a/javascript/ql/src/Expressions/DuplicateProperty.ql b/javascript/ql/src/Expressions/DuplicateProperty.ql index af518842a618..febdfe5b8826 100644 --- a/javascript/ql/src/Expressions/DuplicateProperty.ql +++ b/javascript/ql/src/Expressions/DuplicateProperty.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity warning * @id js/duplicate-property - * @tags maintainability + * @tags quality + * maintainability + * readability * external/cwe/cwe-563 * @precision very-high */ diff --git a/javascript/ql/src/Expressions/DuplicateSwitchCase.ql b/javascript/ql/src/Expressions/DuplicateSwitchCase.ql index 56cb848dba14..1ef8aa76a4ba 100644 --- a/javascript/ql/src/Expressions/DuplicateSwitchCase.ql +++ b/javascript/ql/src/Expressions/DuplicateSwitchCase.ql @@ -5,7 +5,8 @@ * @kind problem * @problem.severity warning * @id js/duplicate-switch-case - * @tags maintainability + * @tags quality + * reliability * correctness * external/cwe/cwe-561 * @precision very-high diff --git a/javascript/ql/src/Expressions/ExprHasNoEffect.ql b/javascript/ql/src/Expressions/ExprHasNoEffect.ql index 9cdb22b8ecf0..fd613d3aa9f8 100644 --- a/javascript/ql/src/Expressions/ExprHasNoEffect.ql +++ b/javascript/ql/src/Expressions/ExprHasNoEffect.ql @@ -7,10 +7,9 @@ * @id js/useless-expression * @tags quality * maintainability - * correctness + * useless-code * external/cwe/cwe-480 * external/cwe/cwe-561 - * useless-code * @precision very-high */ diff --git a/javascript/ql/src/Expressions/HeterogeneousComparison.ql b/javascript/ql/src/Expressions/HeterogeneousComparison.ql index 3b4c59f08b68..e99adad21cdb 100644 --- a/javascript/ql/src/Expressions/HeterogeneousComparison.ql +++ b/javascript/ql/src/Expressions/HeterogeneousComparison.ql @@ -6,7 +6,8 @@ * @kind problem * @problem.severity warning * @id js/comparison-between-incompatible-types - * @tags reliability + * @tags quality + * reliability * correctness * external/cwe/cwe-570 * external/cwe/cwe-571 diff --git a/javascript/ql/src/Expressions/ImplicitOperandConversion.ql b/javascript/ql/src/Expressions/ImplicitOperandConversion.ql index 5d3f16e0eb8b..eda12e9d98b3 100644 --- a/javascript/ql/src/Expressions/ImplicitOperandConversion.ql +++ b/javascript/ql/src/Expressions/ImplicitOperandConversion.ql @@ -5,8 +5,9 @@ * @kind problem * @problem.severity warning * @id js/implicit-operand-conversion - * @tags reliability - * readability + * @tags quality + * reliability + * correctness * external/cwe/cwe-704 * @precision very-high */ diff --git a/javascript/ql/src/Expressions/MissingAwait.ql b/javascript/ql/src/Expressions/MissingAwait.ql index a16d31ee2a57..a537156da015 100644 --- a/javascript/ql/src/Expressions/MissingAwait.ql +++ b/javascript/ql/src/Expressions/MissingAwait.ql @@ -4,8 +4,9 @@ * @kind problem * @problem.severity warning * @id js/missing-await - * @tags correctness - * quality + * @tags quality + * reliability + * correctness * @precision high */ diff --git a/javascript/ql/src/Expressions/MissingDotLengthInComparison.ql b/javascript/ql/src/Expressions/MissingDotLengthInComparison.ql index 705b3eedfc07..1d16bb346fc7 100644 --- a/javascript/ql/src/Expressions/MissingDotLengthInComparison.ql +++ b/javascript/ql/src/Expressions/MissingDotLengthInComparison.ql @@ -6,7 +6,9 @@ * @problem.severity warning * @id js/missing-dot-length-in-comparison * @precision high - * @tags correctness + * @tags quality + * reliability + * correctness */ import javascript diff --git a/javascript/ql/src/Expressions/MissingSpaceInAppend.ql b/javascript/ql/src/Expressions/MissingSpaceInAppend.ql index 7589c0d54f32..d4c2bcb18ac6 100644 --- a/javascript/ql/src/Expressions/MissingSpaceInAppend.ql +++ b/javascript/ql/src/Expressions/MissingSpaceInAppend.ql @@ -7,7 +7,9 @@ * @problem.severity warning * @precision very-high * @id js/missing-space-in-concatenation - * @tags readability + * @tags quality + * maintainability + * readability */ import javascript diff --git a/javascript/ql/src/Expressions/MisspelledVariableName.ql b/javascript/ql/src/Expressions/MisspelledVariableName.ql index b6f0ad88e3ed..7444ba3a5d92 100644 --- a/javascript/ql/src/Expressions/MisspelledVariableName.ql +++ b/javascript/ql/src/Expressions/MisspelledVariableName.ql @@ -6,8 +6,8 @@ * @kind problem * @problem.severity warning * @id js/misspelled-variable-name - * @tags maintainability - * readability + * @tags quality + * reliability * correctness * @precision very-high */ diff --git a/javascript/ql/src/Expressions/RedundantExpression.ql b/javascript/ql/src/Expressions/RedundantExpression.ql index bf668bd649f1..35b86a9f0256 100644 --- a/javascript/ql/src/Expressions/RedundantExpression.ql +++ b/javascript/ql/src/Expressions/RedundantExpression.ql @@ -6,7 +6,8 @@ * @kind problem * @problem.severity warning * @id js/redundant-operation - * @tags reliability + * @tags quality + * reliability * correctness * external/cwe/cwe-480 * external/cwe/cwe-561 diff --git a/javascript/ql/src/Expressions/SelfAssignment.ql b/javascript/ql/src/Expressions/SelfAssignment.ql index 784f01fa7426..603762b5952f 100644 --- a/javascript/ql/src/Expressions/SelfAssignment.ql +++ b/javascript/ql/src/Expressions/SelfAssignment.ql @@ -4,7 +4,8 @@ * @kind problem * @problem.severity warning * @id js/redundant-assignment - * @tags reliability + * @tags quality + * reliability * correctness * external/cwe/cwe-480 * external/cwe/cwe-561 diff --git a/javascript/ql/src/Expressions/ShiftOutOfRange.ql b/javascript/ql/src/Expressions/ShiftOutOfRange.ql index ec8b801cbe67..395baaff11f5 100644 --- a/javascript/ql/src/Expressions/ShiftOutOfRange.ql +++ b/javascript/ql/src/Expressions/ShiftOutOfRange.ql @@ -5,7 +5,8 @@ * @kind problem * @problem.severity error * @id js/shift-out-of-range - * @tags reliability + * @tags quality + * reliability * correctness * external/cwe/cwe-197 * @precision very-high diff --git a/javascript/ql/src/Expressions/StringInsteadOfRegex.ql b/javascript/ql/src/Expressions/StringInsteadOfRegex.ql index c00088abcd91..44d07ee98e6a 100644 --- a/javascript/ql/src/Expressions/StringInsteadOfRegex.ql +++ b/javascript/ql/src/Expressions/StringInsteadOfRegex.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity warning * @id js/string-instead-of-regex - * @tags correctness + * @tags quality + * reliability + * correctness * @precision high */ diff --git a/javascript/ql/src/Expressions/SuspiciousInvocation.ql b/javascript/ql/src/Expressions/SuspiciousInvocation.ql index ca7281eba5cd..1472e2dbe2ff 100644 --- a/javascript/ql/src/Expressions/SuspiciousInvocation.ql +++ b/javascript/ql/src/Expressions/SuspiciousInvocation.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity error * @id js/call-to-non-callable - * @tags correctness + * @tags quality + * reliability + * correctness * external/cwe/cwe-476 * @precision high */ diff --git a/javascript/ql/src/Expressions/SuspiciousPropAccess.ql b/javascript/ql/src/Expressions/SuspiciousPropAccess.ql index f51674a04187..88ce9dda7c43 100644 --- a/javascript/ql/src/Expressions/SuspiciousPropAccess.ql +++ b/javascript/ql/src/Expressions/SuspiciousPropAccess.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity error * @id js/property-access-on-non-object - * @tags correctness + * @tags quality + * reliability + * correctness * external/cwe/cwe-476 * @precision high */ diff --git a/javascript/ql/src/Expressions/UnboundEventHandlerReceiver.ql b/javascript/ql/src/Expressions/UnboundEventHandlerReceiver.ql index fa10e4786c46..4cc94c5852b1 100644 --- a/javascript/ql/src/Expressions/UnboundEventHandlerReceiver.ql +++ b/javascript/ql/src/Expressions/UnboundEventHandlerReceiver.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity error * @id js/unbound-event-handler-receiver - * @tags correctness + * @tags quality + * reliability + * correctness * @precision high */ diff --git a/javascript/ql/src/Expressions/UnclearOperatorPrecedence.ql b/javascript/ql/src/Expressions/UnclearOperatorPrecedence.ql index 869971f5f1fb..104e7188e7e7 100644 --- a/javascript/ql/src/Expressions/UnclearOperatorPrecedence.ql +++ b/javascript/ql/src/Expressions/UnclearOperatorPrecedence.ql @@ -5,8 +5,9 @@ * @kind problem * @problem.severity recommendation * @id js/unclear-operator-precedence - * @tags maintainability - * correctness + * @tags quality + * maintainability + * readability * statistical * non-attributable * external/cwe/cwe-783 diff --git a/javascript/ql/src/Expressions/UnknownDirective.ql b/javascript/ql/src/Expressions/UnknownDirective.ql index 331b61cafda9..be91cf5ff896 100644 --- a/javascript/ql/src/Expressions/UnknownDirective.ql +++ b/javascript/ql/src/Expressions/UnknownDirective.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity warning * @id js/unknown-directive - * @tags correctness + * @tags quality + * reliability + * correctness * @precision high */ diff --git a/javascript/ql/src/Expressions/UnneededDefensiveProgramming.ql b/javascript/ql/src/Expressions/UnneededDefensiveProgramming.ql index 8e5cd8cf431e..3b06187a2074 100644 --- a/javascript/ql/src/Expressions/UnneededDefensiveProgramming.ql +++ b/javascript/ql/src/Expressions/UnneededDefensiveProgramming.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity recommendation * @id js/unneeded-defensive-code - * @tags correctness + * @tags quality + * maintainability + * useless-code * external/cwe/cwe-570 * external/cwe/cwe-571 * @precision very-high diff --git a/javascript/ql/src/Expressions/WhitespaceContradictsPrecedence.ql b/javascript/ql/src/Expressions/WhitespaceContradictsPrecedence.ql index 36d9f7737083..bb3d14846588 100644 --- a/javascript/ql/src/Expressions/WhitespaceContradictsPrecedence.ql +++ b/javascript/ql/src/Expressions/WhitespaceContradictsPrecedence.ql @@ -5,7 +5,8 @@ * @kind problem * @problem.severity warning * @id js/whitespace-contradicts-precedence - * @tags maintainability + * @tags quality + * reliability * correctness * statistical * non-attributable diff --git a/javascript/ql/src/LanguageFeatures/BadTypeof.ql b/javascript/ql/src/LanguageFeatures/BadTypeof.ql index d287a0a1b6d2..97492d3562ad 100644 --- a/javascript/ql/src/LanguageFeatures/BadTypeof.ql +++ b/javascript/ql/src/LanguageFeatures/BadTypeof.ql @@ -6,7 +6,8 @@ * @kind problem * @problem.severity error * @id js/useless-type-test - * @tags maintainability + * @tags quality + * reliability * correctness * language-features * external/cwe/cwe-570 diff --git a/javascript/ql/src/LanguageFeatures/ConditionalComments.ql b/javascript/ql/src/LanguageFeatures/ConditionalComments.ql index 255415c05640..8ded33afe59c 100644 --- a/javascript/ql/src/LanguageFeatures/ConditionalComments.ql +++ b/javascript/ql/src/LanguageFeatures/ConditionalComments.ql @@ -4,8 +4,10 @@ * @kind problem * @problem.severity warning * @id js/conditional-comment - * @tags portability - * maintainability + * @tags quality + * reliability + * correctness + * portability * language-features * external/cwe/cwe-758 * @precision very-high diff --git a/javascript/ql/src/LanguageFeatures/DeleteVar.ql b/javascript/ql/src/LanguageFeatures/DeleteVar.ql index ed3940a1c70c..715f314381b1 100644 --- a/javascript/ql/src/LanguageFeatures/DeleteVar.ql +++ b/javascript/ql/src/LanguageFeatures/DeleteVar.ql @@ -4,8 +4,9 @@ * @kind problem * @problem.severity warning * @id js/deletion-of-non-property - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness * language-features * external/cwe/cwe-480 * @precision very-high diff --git a/javascript/ql/src/LanguageFeatures/ExpressionClosures.ql b/javascript/ql/src/LanguageFeatures/ExpressionClosures.ql index db33566a7585..2e67bfb6e2b9 100644 --- a/javascript/ql/src/LanguageFeatures/ExpressionClosures.ql +++ b/javascript/ql/src/LanguageFeatures/ExpressionClosures.ql @@ -5,8 +5,10 @@ * @kind problem * @problem.severity warning * @id js/non-standard-language-feature - * @tags portability + * @tags quality * maintainability + * readability + * portability * language-features * external/cwe/cwe-758 * @precision very-high diff --git a/javascript/ql/src/LanguageFeatures/ForInComprehensionBlocks.ql b/javascript/ql/src/LanguageFeatures/ForInComprehensionBlocks.ql index 0c13ff724371..c5f5e8bfe12a 100644 --- a/javascript/ql/src/LanguageFeatures/ForInComprehensionBlocks.ql +++ b/javascript/ql/src/LanguageFeatures/ForInComprehensionBlocks.ql @@ -5,8 +5,10 @@ * @kind problem * @problem.severity error * @id js/for-in-comprehension - * @tags portability + * @tags quality * maintainability + * readability + * portability * language-features * external/cwe/cwe-758 * @precision very-high diff --git a/javascript/ql/src/LanguageFeatures/IllegalInvocation.ql b/javascript/ql/src/LanguageFeatures/IllegalInvocation.ql index 4c8939c41804..06f50bb60dc7 100644 --- a/javascript/ql/src/LanguageFeatures/IllegalInvocation.ql +++ b/javascript/ql/src/LanguageFeatures/IllegalInvocation.ql @@ -6,7 +6,9 @@ * @kind problem * @problem.severity error * @id js/illegal-invocation - * @tags correctness + * @tags quality + * reliability + * correctness * language-features * @precision high */ diff --git a/javascript/ql/src/LanguageFeatures/InconsistentNew.ql b/javascript/ql/src/LanguageFeatures/InconsistentNew.ql index 8a14dbe37c19..9044e851496d 100644 --- a/javascript/ql/src/LanguageFeatures/InconsistentNew.ql +++ b/javascript/ql/src/LanguageFeatures/InconsistentNew.ql @@ -6,7 +6,8 @@ * @kind problem * @problem.severity warning * @id js/inconsistent-use-of-new - * @tags reliability + * @tags quality + * reliability * correctness * language-features * @precision very-high diff --git a/javascript/ql/src/LanguageFeatures/InvalidPrototype.ql b/javascript/ql/src/LanguageFeatures/InvalidPrototype.ql index 89dc7535c60b..8770d8dc2713 100644 --- a/javascript/ql/src/LanguageFeatures/InvalidPrototype.ql +++ b/javascript/ql/src/LanguageFeatures/InvalidPrototype.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity error * @id js/invalid-prototype-value - * @tags correctness + * @tags quality + * reliability + * correctness * language-features * external/cwe/cwe-704 * @precision high diff --git a/javascript/ql/src/LanguageFeatures/LengthComparisonOffByOne.ql b/javascript/ql/src/LanguageFeatures/LengthComparisonOffByOne.ql index e3935386289a..4f3815d6fc6b 100644 --- a/javascript/ql/src/LanguageFeatures/LengthComparisonOffByOne.ql +++ b/javascript/ql/src/LanguageFeatures/LengthComparisonOffByOne.ql @@ -5,9 +5,11 @@ * @kind problem * @problem.severity warning * @id js/index-out-of-bounds - * @tags reliability + * @tags quality + * reliability * correctness * logic + * language-features * external/cwe/cwe-193 * @precision high */ diff --git a/javascript/ql/src/LanguageFeatures/NonLinearPattern.ql b/javascript/ql/src/LanguageFeatures/NonLinearPattern.ql index 9e3c42353506..090f6b078456 100644 --- a/javascript/ql/src/LanguageFeatures/NonLinearPattern.ql +++ b/javascript/ql/src/LanguageFeatures/NonLinearPattern.ql @@ -6,7 +6,8 @@ * @kind problem * @problem.severity error * @id js/non-linear-pattern - * @tags reliability + * @tags quality + * reliability * correctness * language-features * @precision very-high diff --git a/javascript/ql/src/LanguageFeatures/PropertyWriteOnPrimitive.ql b/javascript/ql/src/LanguageFeatures/PropertyWriteOnPrimitive.ql index 19d372f65290..cb5446256487 100644 --- a/javascript/ql/src/LanguageFeatures/PropertyWriteOnPrimitive.ql +++ b/javascript/ql/src/LanguageFeatures/PropertyWriteOnPrimitive.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity error * @id js/property-assignment-on-primitive - * @tags correctness + * @tags quality + * reliability + * correctness * language-features * external/cwe/cwe-704 * @precision high diff --git a/javascript/ql/src/LanguageFeatures/SemicolonInsertion.ql b/javascript/ql/src/LanguageFeatures/SemicolonInsertion.ql index 3f99062112da..17a9da64cc0a 100644 --- a/javascript/ql/src/LanguageFeatures/SemicolonInsertion.ql +++ b/javascript/ql/src/LanguageFeatures/SemicolonInsertion.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity recommendation * @id js/automatic-semicolon-insertion - * @tags maintainability + * @tags quality + * maintainability + * readability * language-features * statistical * non-attributable diff --git a/javascript/ql/src/LanguageFeatures/SetterReturn.ql b/javascript/ql/src/LanguageFeatures/SetterReturn.ql index 0333246a4391..b90541d39129 100644 --- a/javascript/ql/src/LanguageFeatures/SetterReturn.ql +++ b/javascript/ql/src/LanguageFeatures/SetterReturn.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity warning * @id js/setter-return - * @tags maintainability + * @tags quality + * maintainability + * useless-code * language-features * @precision very-high */ diff --git a/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql b/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql index fd493a247a4c..82c69a1732a3 100644 --- a/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql +++ b/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql @@ -4,10 +4,10 @@ * @kind problem * @problem.severity warning * @id js/superfluous-trailing-arguments - * @tags maintainability + * @tags quality + * reliability * correctness * language-features - * quality * external/cwe/cwe-685 * @precision very-high */ diff --git a/javascript/ql/src/LanguageFeatures/StrictModeCallStackIntrospection.ql b/javascript/ql/src/LanguageFeatures/StrictModeCallStackIntrospection.ql index b29844d90b97..7c285c45ec70 100644 --- a/javascript/ql/src/LanguageFeatures/StrictModeCallStackIntrospection.ql +++ b/javascript/ql/src/LanguageFeatures/StrictModeCallStackIntrospection.ql @@ -6,7 +6,9 @@ * @kind problem * @problem.severity error * @id js/strict-mode-call-stack-introspection - * @tags correctness + * @tags quality + * reliability + * correctness * language-features * @precision high */ diff --git a/javascript/ql/src/LanguageFeatures/SyntaxError.ql b/javascript/ql/src/LanguageFeatures/SyntaxError.ql index d4428c75774e..0c9a69490f7c 100644 --- a/javascript/ql/src/LanguageFeatures/SyntaxError.ql +++ b/javascript/ql/src/LanguageFeatures/SyntaxError.ql @@ -4,7 +4,8 @@ * @kind problem * @problem.severity recommendation * @id js/syntax-error - * @tags reliability + * @tags quality + * reliability * correctness * language-features * @precision very-high diff --git a/javascript/ql/src/LanguageFeatures/ThisBeforeSuper.ql b/javascript/ql/src/LanguageFeatures/ThisBeforeSuper.ql index 77ce3e5e8587..e93700bdccf9 100644 --- a/javascript/ql/src/LanguageFeatures/ThisBeforeSuper.ql +++ b/javascript/ql/src/LanguageFeatures/ThisBeforeSuper.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity error * @id js/incomplete-object-initialization - * @tags correctness + * @tags quality + * reliability + * correctness * language-features * @precision high */ diff --git a/javascript/ql/src/LanguageFeatures/UnusedIndexVariable.ql b/javascript/ql/src/LanguageFeatures/UnusedIndexVariable.ql index ba39738a7774..7a8f3bdf948f 100644 --- a/javascript/ql/src/LanguageFeatures/UnusedIndexVariable.ql +++ b/javascript/ql/src/LanguageFeatures/UnusedIndexVariable.ql @@ -6,7 +6,9 @@ * @problem.severity warning * @id js/unused-index-variable * @precision high - * @tags correctness + * @tags quality + * reliability + * correctness */ import javascript diff --git a/javascript/ql/src/LanguageFeatures/WithStatement.ql b/javascript/ql/src/LanguageFeatures/WithStatement.ql index cb2cfc728d8b..25f6c4e8fc46 100644 --- a/javascript/ql/src/LanguageFeatures/WithStatement.ql +++ b/javascript/ql/src/LanguageFeatures/WithStatement.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity warning * @id js/with-statement - * @tags maintainability + * @tags quality + * maintainability + * complexity * language-features * @precision very-high */ diff --git a/javascript/ql/src/LanguageFeatures/YieldInNonGenerator.ql b/javascript/ql/src/LanguageFeatures/YieldInNonGenerator.ql index 4f9241e7303f..8cd18991d02a 100644 --- a/javascript/ql/src/LanguageFeatures/YieldInNonGenerator.ql +++ b/javascript/ql/src/LanguageFeatures/YieldInNonGenerator.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity error * @id js/yield-outside-generator - * @tags maintainability + * @tags quality + * reliability + * correctness * language-features * external/cwe/cwe-758 * @precision very-high diff --git a/javascript/ql/src/NodeJS/InvalidExport.ql b/javascript/ql/src/NodeJS/InvalidExport.ql index e0b4a73fd69d..95d945bc0483 100644 --- a/javascript/ql/src/NodeJS/InvalidExport.ql +++ b/javascript/ql/src/NodeJS/InvalidExport.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity warning * @id js/node/assignment-to-exports-variable - * @tags maintainability + * @tags quality + * reliability + * correctness * frameworks/node.js * external/cwe/cwe-563 * @precision very-high diff --git a/javascript/ql/src/NodeJS/MissingExports.ql b/javascript/ql/src/NodeJS/MissingExports.ql index 15badce359ff..f10fac15b7a3 100644 --- a/javascript/ql/src/NodeJS/MissingExports.ql +++ b/javascript/ql/src/NodeJS/MissingExports.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity error * @id js/node/missing-exports-qualifier - * @tags maintainability + * @tags quality + * reliability + * correctness * frameworks/node.js * @precision high */ diff --git a/javascript/ql/src/React/DirectStateMutation.ql b/javascript/ql/src/React/DirectStateMutation.ql index 6e3d63a52148..a00f55524cd1 100644 --- a/javascript/ql/src/React/DirectStateMutation.ql +++ b/javascript/ql/src/React/DirectStateMutation.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity warning * @id js/react/direct-state-mutation - * @tags reliability + * @tags quality + * reliability + * correctness * frameworks/react * @precision very-high */ diff --git a/javascript/ql/src/React/InconsistentStateUpdate.ql b/javascript/ql/src/React/InconsistentStateUpdate.ql index 31625b2187af..f46427b9c595 100644 --- a/javascript/ql/src/React/InconsistentStateUpdate.ql +++ b/javascript/ql/src/React/InconsistentStateUpdate.ql @@ -6,7 +6,9 @@ * @kind problem * @problem.severity warning * @id js/react/inconsistent-state-update - * @tags reliability + * @tags quality + * reliability + * correctness * frameworks/react * @precision very-high */ diff --git a/javascript/ql/src/React/UnsupportedStateUpdateInLifecycleMethod.ql b/javascript/ql/src/React/UnsupportedStateUpdateInLifecycleMethod.ql index e14b880b1b11..da49bd43ab90 100644 --- a/javascript/ql/src/React/UnsupportedStateUpdateInLifecycleMethod.ql +++ b/javascript/ql/src/React/UnsupportedStateUpdateInLifecycleMethod.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity warning * @id js/react/unsupported-state-update-in-lifecycle-method - * @tags reliability + * @tags quality + * reliability + * correctness * frameworks/react * @precision high */ diff --git a/javascript/ql/src/React/UnusedOrUndefinedStateProperty.ql b/javascript/ql/src/React/UnusedOrUndefinedStateProperty.ql index 721d6639ac7e..24d5590185ba 100644 --- a/javascript/ql/src/React/UnusedOrUndefinedStateProperty.ql +++ b/javascript/ql/src/React/UnusedOrUndefinedStateProperty.ql @@ -4,8 +4,9 @@ * @kind problem * @problem.severity warning * @id js/react/unused-or-undefined-state-property - * @tags correctness + * @tags quality * reliability + * correctness * frameworks/react * @precision high */ diff --git a/javascript/ql/src/RegExp/BackrefBeforeGroup.ql b/javascript/ql/src/RegExp/BackrefBeforeGroup.ql index abbc95e40b94..3572bf2cbc6e 100644 --- a/javascript/ql/src/RegExp/BackrefBeforeGroup.ql +++ b/javascript/ql/src/RegExp/BackrefBeforeGroup.ql @@ -5,7 +5,8 @@ * @kind problem * @problem.severity error * @id js/regex/back-reference-before-group - * @tags reliability + * @tags quality + * reliability * correctness * regular-expressions * @precision very-high diff --git a/javascript/ql/src/RegExp/BackrefIntoNegativeLookahead.ql b/javascript/ql/src/RegExp/BackrefIntoNegativeLookahead.ql index b2ad4722011b..6a5e1528d6d5 100644 --- a/javascript/ql/src/RegExp/BackrefIntoNegativeLookahead.ql +++ b/javascript/ql/src/RegExp/BackrefIntoNegativeLookahead.ql @@ -5,7 +5,8 @@ * @kind problem * @problem.severity error * @id js/regex/back-reference-to-negative-lookahead - * @tags reliability + * @tags quality + * reliability * correctness * regular-expressions * @precision very-high diff --git a/javascript/ql/src/RegExp/EmptyCharacterClass.ql b/javascript/ql/src/RegExp/EmptyCharacterClass.ql index f991de9759d2..fb336c3fbe8b 100644 --- a/javascript/ql/src/RegExp/EmptyCharacterClass.ql +++ b/javascript/ql/src/RegExp/EmptyCharacterClass.ql @@ -4,7 +4,8 @@ * @kind problem * @problem.severity warning * @id js/regex/empty-character-class - * @tags reliability + * @tags quality + * reliability * correctness * regular-expressions * @precision very-high diff --git a/javascript/ql/src/RegExp/RegExpAlwaysMatches.ql b/javascript/ql/src/RegExp/RegExpAlwaysMatches.ql index 1d063534903e..0a9a37120d76 100644 --- a/javascript/ql/src/RegExp/RegExpAlwaysMatches.ql +++ b/javascript/ql/src/RegExp/RegExpAlwaysMatches.ql @@ -4,9 +4,10 @@ * @kind problem * @problem.severity warning * @id js/regex/always-matches - * @tags correctness + * @tags quality + * reliability + * correctness * regular-expressions - * quality * @precision high */ diff --git a/javascript/ql/src/RegExp/UnboundBackref.ql b/javascript/ql/src/RegExp/UnboundBackref.ql index 00cc9536f12b..026c5472fb5e 100644 --- a/javascript/ql/src/RegExp/UnboundBackref.ql +++ b/javascript/ql/src/RegExp/UnboundBackref.ql @@ -6,7 +6,8 @@ * @kind problem * @problem.severity warning * @id js/regex/unbound-back-reference - * @tags reliability + * @tags quality + * reliability * correctness * regular-expressions * @precision very-high diff --git a/javascript/ql/src/RegExp/UnmatchableCaret.ql b/javascript/ql/src/RegExp/UnmatchableCaret.ql index 4dd5a6dc26b0..401b8db73c5b 100644 --- a/javascript/ql/src/RegExp/UnmatchableCaret.ql +++ b/javascript/ql/src/RegExp/UnmatchableCaret.ql @@ -6,7 +6,8 @@ * @kind problem * @problem.severity error * @id js/regex/unmatchable-caret - * @tags reliability + * @tags quality + * reliability * correctness * regular-expressions * external/cwe/cwe-561 diff --git a/javascript/ql/src/RegExp/UnmatchableDollar.ql b/javascript/ql/src/RegExp/UnmatchableDollar.ql index 59005b454107..c5b8cd9781f9 100644 --- a/javascript/ql/src/RegExp/UnmatchableDollar.ql +++ b/javascript/ql/src/RegExp/UnmatchableDollar.ql @@ -6,7 +6,8 @@ * @kind problem * @problem.severity error * @id js/regex/unmatchable-dollar - * @tags reliability + * @tags quality + * reliability * correctness * regular-expressions * external/cwe/cwe-561 diff --git a/javascript/ql/src/Statements/DanglingElse.ql b/javascript/ql/src/Statements/DanglingElse.ql index bd9ea782db78..fdea5f67a863 100644 --- a/javascript/ql/src/Statements/DanglingElse.ql +++ b/javascript/ql/src/Statements/DanglingElse.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity warning * @id js/misleading-indentation-of-dangling-else - * @tags readability + * @tags quality + * maintainability + * readability * statistical * non-attributable * external/cwe/cwe-483 diff --git a/javascript/ql/src/Statements/IgnoreArrayResult.ql b/javascript/ql/src/Statements/IgnoreArrayResult.ql index 9123b520f6f6..dbf035cdb647 100644 --- a/javascript/ql/src/Statements/IgnoreArrayResult.ql +++ b/javascript/ql/src/Statements/IgnoreArrayResult.ql @@ -4,7 +4,8 @@ * @kind problem * @problem.severity warning * @id js/ignore-array-result - * @tags maintainability + * @tags quality + * reliability * correctness * @precision high */ diff --git a/javascript/ql/src/Statements/InconsistentLoopOrientation.ql b/javascript/ql/src/Statements/InconsistentLoopOrientation.ql index 7692a9d3d201..42d8912e0154 100644 --- a/javascript/ql/src/Statements/InconsistentLoopOrientation.ql +++ b/javascript/ql/src/Statements/InconsistentLoopOrientation.ql @@ -8,7 +8,9 @@ * @kind problem * @problem.severity error * @id js/inconsistent-loop-direction - * @tags correctness + * @tags quality + * reliability + * correctness * external/cwe/cwe-835 * @precision very-high */ diff --git a/javascript/ql/src/Statements/LabelInCase.ql b/javascript/ql/src/Statements/LabelInCase.ql index e88d366136f6..15690c83bcc3 100644 --- a/javascript/ql/src/Statements/LabelInCase.ql +++ b/javascript/ql/src/Statements/LabelInCase.ql @@ -5,8 +5,9 @@ * @kind problem * @problem.severity warning * @id js/label-in-switch - * @tags reliability - * readability + * @tags quality + * reliability + * correctness * @precision very-high */ diff --git a/javascript/ql/src/Statements/LoopIterationSkippedDueToShifting.ql b/javascript/ql/src/Statements/LoopIterationSkippedDueToShifting.ql index 08ed90777467..d36884e15a32 100644 --- a/javascript/ql/src/Statements/LoopIterationSkippedDueToShifting.ql +++ b/javascript/ql/src/Statements/LoopIterationSkippedDueToShifting.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity warning * @id js/loop-iteration-skipped-due-to-shifting - * @tags correctness + * @tags quality + * reliability + * correctness * @precision high */ @@ -146,7 +148,12 @@ class ArrayIterationLoop extends ForStmt { or this.hasPathThrough(splice, cfg.getAPredecessor()) and this.getLoopEntry().dominates(cfg.getBasicBlock()) and - not this.hasIndexingManipulation(cfg) + not this.hasIndexingManipulation(cfg) and + // Don't continue through a branch that tests the splice call's return value + not exists(ConditionGuardNode guard | cfg = guard | + guard.getTest() = splice.asExpr() and + guard.getOutcome() = false + ) } } diff --git a/javascript/ql/src/Statements/MisleadingIndentationAfterControlStmt.ql b/javascript/ql/src/Statements/MisleadingIndentationAfterControlStmt.ql index 91ee1bd4c005..abfd9cde4ac9 100644 --- a/javascript/ql/src/Statements/MisleadingIndentationAfterControlStmt.ql +++ b/javascript/ql/src/Statements/MisleadingIndentationAfterControlStmt.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity warning * @id js/misleading-indentation-after-control-statement - * @tags correctness + * @tags quality + * maintainability + * readability * statistical * non-attributable * external/cwe/cwe-483 diff --git a/javascript/ql/src/Statements/ReturnAssignsLocal.ql b/javascript/ql/src/Statements/ReturnAssignsLocal.ql index 6056914fd80a..e0e60e689a37 100644 --- a/javascript/ql/src/Statements/ReturnAssignsLocal.ql +++ b/javascript/ql/src/Statements/ReturnAssignsLocal.ql @@ -5,8 +5,9 @@ * @kind problem * @problem.severity warning * @id js/useless-assignment-in-return - * @tags maintainability - * readability + * @tags quality + * reliability + * correctness * external/cwe/cwe-563 * @precision very-high */ diff --git a/javascript/ql/src/Statements/SuspiciousUnusedLoopIterationVariable.ql b/javascript/ql/src/Statements/SuspiciousUnusedLoopIterationVariable.ql index ba0d523ae752..e472c8e0dcec 100644 --- a/javascript/ql/src/Statements/SuspiciousUnusedLoopIterationVariable.ql +++ b/javascript/ql/src/Statements/SuspiciousUnusedLoopIterationVariable.ql @@ -4,7 +4,8 @@ * @kind problem * @problem.severity error * @id js/unused-loop-variable - * @tags maintainability + * @tags quality + * reliability * correctness * @precision high */ diff --git a/javascript/ql/src/Statements/UnreachableStatement.ql b/javascript/ql/src/Statements/UnreachableStatement.ql index 092189609c02..b7d8e48980b1 100644 --- a/javascript/ql/src/Statements/UnreachableStatement.ql +++ b/javascript/ql/src/Statements/UnreachableStatement.ql @@ -4,7 +4,8 @@ * @kind problem * @problem.severity warning * @id js/unreachable-statement - * @tags maintainability + * @tags quality + * reliability * correctness * external/cwe/cwe-561 * @precision very-high diff --git a/javascript/ql/src/Statements/UseOfReturnlessFunction.ql b/javascript/ql/src/Statements/UseOfReturnlessFunction.ql index 818f0d922d48..4a381f4c2df5 100644 --- a/javascript/ql/src/Statements/UseOfReturnlessFunction.ql +++ b/javascript/ql/src/Statements/UseOfReturnlessFunction.ql @@ -4,7 +4,8 @@ * @kind problem * @problem.severity warning * @id js/use-of-returnless-function - * @tags maintainability + * @tags quality + * reliability * correctness * @precision high */ diff --git a/javascript/ql/src/Statements/UselessComparisonTest.ql b/javascript/ql/src/Statements/UselessComparisonTest.ql index 6066d7c4329b..dd87ed42b14c 100644 --- a/javascript/ql/src/Statements/UselessComparisonTest.ql +++ b/javascript/ql/src/Statements/UselessComparisonTest.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity warning * @id js/useless-comparison-test - * @tags correctness + * @tags quality + * reliability + * correctness * @precision high */ diff --git a/javascript/ql/src/Statements/UselessConditional.ql b/javascript/ql/src/Statements/UselessConditional.ql index cc70defa7b22..210f27bb1db3 100644 --- a/javascript/ql/src/Statements/UselessConditional.ql +++ b/javascript/ql/src/Statements/UselessConditional.ql @@ -6,7 +6,9 @@ * @kind problem * @problem.severity warning * @id js/trivial-conditional - * @tags correctness + * @tags quality + * reliability + * correctness * external/cwe/cwe-570 * external/cwe/cwe-571 * @precision very-high diff --git a/javascript/ql/src/Vue/ArrowMethodOnVueInstance.ql b/javascript/ql/src/Vue/ArrowMethodOnVueInstance.ql index 828ee373696f..c7c97173d8bd 100644 --- a/javascript/ql/src/Vue/ArrowMethodOnVueInstance.ql +++ b/javascript/ql/src/Vue/ArrowMethodOnVueInstance.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity warning * @id js/vue/arrow-method-on-vue-instance - * @tags reliability + * @tags quality + * reliability + * correctness * frameworks/vue * @precision high */ diff --git a/javascript/ql/src/change-notes/2025-06-12-loop-iteration-fix.md b/javascript/ql/src/change-notes/2025-06-12-loop-iteration-fix.md new file mode 100644 index 000000000000..2716069fb711 --- /dev/null +++ b/javascript/ql/src/change-notes/2025-06-12-loop-iteration-fix.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed false positives in the `js/loop-iteration-skipped-due-to-shifting` query when the return value of `splice` is used to decide whether to adjust the loop counter. diff --git a/javascript/ql/src/change-notes/2025-06-12-loop-iteration.md b/javascript/ql/src/change-notes/2025-06-12-loop-iteration.md new file mode 100644 index 000000000000..13b9fcf592aa --- /dev/null +++ b/javascript/ql/src/change-notes/2025-06-12-loop-iteration.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The `js/loop-iteration-skipped-due-to-shifting` query now has the `reliability` tag. diff --git a/javascript/ql/src/change-notes/2025-06-16-mass-promotion.md b/javascript/ql/src/change-notes/2025-06-16-mass-promotion.md new file mode 100644 index 000000000000..dedaba09d1d6 --- /dev/null +++ b/javascript/ql/src/change-notes/2025-06-16-mass-promotion.md @@ -0,0 +1,4 @@ +--- +category: queryMetadata +--- +* The `quality` tag has been added to multiple JavaScript quality queries, with tags for `reliability` or `maintainability` categories and their sub-categories. See [Query file metadata and alert message style guide](https://github.com/github/codeql/blob/main/docs/query-metadata-style-guide.md#quality-query-sub-category-tags) for more information about these categories. diff --git a/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected b/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected index 58762ae23d70..f7ff324b4018 100644 --- a/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected +++ b/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected @@ -6,6 +6,10 @@ | apollo.serverSide.ts:8:39:8:64 | get(fil ... => {}) | apollo.serverSide.ts:7:36:7:44 | { files } | apollo.serverSide.ts:8:43:8:50 | file.url | The $@ of this request depends on a $@. | apollo.serverSide.ts:8:43:8:50 | file.url | URL | apollo.serverSide.ts:7:36:7:44 | { files } | user-provided value | | apollo.serverSide.ts:18:37:18:62 | get(fil ... => {}) | apollo.serverSide.ts:17:34:17:42 | { files } | apollo.serverSide.ts:18:41:18:48 | file.url | The $@ of this request depends on a $@. | apollo.serverSide.ts:18:41:18:48 | file.url | URL | apollo.serverSide.ts:17:34:17:42 | { files } | user-provided value | | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | axiosInterceptors.serverSide.js:19:21:19:28 | req.body | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | The $@ of this request depends on a $@. | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | endpoint | axiosInterceptors.serverSide.js:19:21:19:28 | req.body | user-provided value | +| serverSide2.js:17:28:17:47 | axios.get(targetUrl) | serverSide2.js:10:25:10:31 | req.url | serverSide2.js:17:38:17:46 | targetUrl | The $@ of this request depends on a $@. | serverSide2.js:17:38:17:46 | targetUrl | URL | serverSide2.js:10:25:10:31 | req.url | user-provided value | +| serverSide2.js:20:29:20:49 | axios.g ... etUrl1) | serverSide2.js:9:43:9:56 | req._parsedUrl | serverSide2.js:20:39:20:48 | targetUrl1 | The $@ of this request depends on a $@. | serverSide2.js:20:39:20:48 | targetUrl1 | URL | serverSide2.js:9:43:9:56 | req._parsedUrl | user-provided value | +| serverSide2.js:23:29:23:49 | axios.g ... etUrl2) | serverSide2.js:22:24:22:30 | req.url | serverSide2.js:23:39:23:48 | targetUrl2 | The $@ of this request depends on a $@. | serverSide2.js:23:39:23:48 | targetUrl2 | URL | serverSide2.js:22:24:22:30 | req.url | user-provided value | +| serverSide2.js:26:29:26:49 | axios.g ... etUrl3) | serverSide2.js:11:24:11:30 | req.url | serverSide2.js:26:39:26:48 | targetUrl3 | The $@ of this request depends on a $@. | serverSide2.js:26:39:26:48 | targetUrl3 | URL | serverSide2.js:11:24:11:30 | req.url | user-provided value | | serverSide.js:18:5:18:20 | request(tainted) | serverSide.js:14:29:14:35 | req.url | serverSide.js:18:13:18:19 | tainted | The $@ of this request depends on a $@. | serverSide.js:18:13:18:19 | tainted | URL | serverSide.js:14:29:14:35 | req.url | user-provided value | | serverSide.js:20:5:20:24 | request.get(tainted) | serverSide.js:14:29:14:35 | req.url | serverSide.js:20:17:20:23 | tainted | The $@ of this request depends on a $@. | serverSide.js:20:17:20:23 | tainted | URL | serverSide.js:14:29:14:35 | req.url | user-provided value | | serverSide.js:24:5:24:20 | request(options) | serverSide.js:14:29:14:35 | req.url | serverSide.js:23:19:23:25 | tainted | The $@ of this request depends on a $@. | serverSide.js:23:19:23:25 | tainted | URL | serverSide.js:14:29:14:35 | req.url | user-provided value | @@ -63,6 +67,18 @@ edges | axiosInterceptors.serverSide.js:19:21:19:28 | req.body | axiosInterceptors.serverSide.js:19:11:19:17 | { url } | provenance | | | axiosInterceptors.serverSide.js:20:5:20:25 | userProvidedUrl | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | provenance | | | axiosInterceptors.serverSide.js:20:23:20:25 | url | axiosInterceptors.serverSide.js:20:5:20:25 | userProvidedUrl | provenance | | +| serverSide2.js:9:34:9:63 | qs.pars ... .query) | serverSide2.js:19:24:19:51 | req.par ... rsedUrl | provenance | | +| serverSide2.js:9:43:9:56 | req._parsedUrl | serverSide2.js:9:34:9:63 | qs.pars ... .query) | provenance | | +| serverSide2.js:10:25:10:31 | req.url | serverSide2.js:16:23:16:41 | req.parsedQuery.url | provenance | | +| serverSide2.js:11:24:11:30 | req.url | serverSide2.js:25:24:25:41 | req.SomeObject.url | provenance | | +| serverSide2.js:16:11:16:41 | targetUrl | serverSide2.js:17:38:17:46 | targetUrl | provenance | | +| serverSide2.js:16:23:16:41 | req.parsedQuery.url | serverSide2.js:16:11:16:41 | targetUrl | provenance | | +| serverSide2.js:19:11:19:55 | targetUrl1 | serverSide2.js:20:39:20:48 | targetUrl1 | provenance | | +| serverSide2.js:19:24:19:51 | req.par ... rsedUrl | serverSide2.js:19:11:19:55 | targetUrl1 | provenance | | +| serverSide2.js:22:11:22:36 | targetUrl2 | serverSide2.js:23:39:23:48 | targetUrl2 | provenance | | +| serverSide2.js:22:24:22:30 | req.url | serverSide2.js:22:11:22:36 | targetUrl2 | provenance | | +| serverSide2.js:25:11:25:47 | targetUrl3 | serverSide2.js:26:39:26:48 | targetUrl3 | provenance | | +| serverSide2.js:25:24:25:41 | req.SomeObject.url | serverSide2.js:25:11:25:47 | targetUrl3 | provenance | | | serverSide.js:14:9:14:52 | tainted | serverSide.js:18:13:18:19 | tainted | provenance | | | serverSide.js:14:9:14:52 | tainted | serverSide.js:20:17:20:23 | tainted | provenance | | | serverSide.js:14:9:14:52 | tainted | serverSide.js:23:19:23:25 | tainted | provenance | | @@ -163,6 +179,22 @@ nodes | axiosInterceptors.serverSide.js:19:21:19:28 | req.body | semmle.label | req.body | | axiosInterceptors.serverSide.js:20:5:20:25 | userProvidedUrl | semmle.label | userProvidedUrl | | axiosInterceptors.serverSide.js:20:23:20:25 | url | semmle.label | url | +| serverSide2.js:9:34:9:63 | qs.pars ... .query) | semmle.label | qs.pars ... .query) | +| serverSide2.js:9:43:9:56 | req._parsedUrl | semmle.label | req._parsedUrl | +| serverSide2.js:10:25:10:31 | req.url | semmle.label | req.url | +| serverSide2.js:11:24:11:30 | req.url | semmle.label | req.url | +| serverSide2.js:16:11:16:41 | targetUrl | semmle.label | targetUrl | +| serverSide2.js:16:23:16:41 | req.parsedQuery.url | semmle.label | req.parsedQuery.url | +| serverSide2.js:17:38:17:46 | targetUrl | semmle.label | targetUrl | +| serverSide2.js:19:11:19:55 | targetUrl1 | semmle.label | targetUrl1 | +| serverSide2.js:19:24:19:51 | req.par ... rsedUrl | semmle.label | req.par ... rsedUrl | +| serverSide2.js:20:39:20:48 | targetUrl1 | semmle.label | targetUrl1 | +| serverSide2.js:22:11:22:36 | targetUrl2 | semmle.label | targetUrl2 | +| serverSide2.js:22:24:22:30 | req.url | semmle.label | req.url | +| serverSide2.js:23:39:23:48 | targetUrl2 | semmle.label | targetUrl2 | +| serverSide2.js:25:11:25:47 | targetUrl3 | semmle.label | targetUrl3 | +| serverSide2.js:25:24:25:41 | req.SomeObject.url | semmle.label | req.SomeObject.url | +| serverSide2.js:26:39:26:48 | targetUrl3 | semmle.label | targetUrl3 | | serverSide.js:14:9:14:52 | tainted | semmle.label | tainted | | serverSide.js:14:19:14:42 | url.par ... , true) | semmle.label | url.par ... , true) | | serverSide.js:14:29:14:35 | req.url | semmle.label | req.url | diff --git a/javascript/ql/test/query-tests/Security/CWE-918/serverSide2.js b/javascript/ql/test/query-tests/Security/CWE-918/serverSide2.js new file mode 100644 index 000000000000..7743d0eec38d --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-918/serverSide2.js @@ -0,0 +1,27 @@ +const express = require('express'); +const axios = require('axios'); +const qs = require('qs'); + +const app = express(); +const PORT = 3000; + +app.use((req, res, next) => { + req.parsedQueryFromParsedUrl = qs.parse(req._parsedUrl.query); // $Source[js/request-forgery] + req.parsedQuery.url = req.url || {}; // $Source[js/request-forgery] + req.SomeObject.url = req.url; // $Source[js/request-forgery] + next(); +}); + +app.get('/proxy', async (req, res) => { + const targetUrl = req.parsedQuery.url; + const response = await axios.get(targetUrl); // $Alert[js/request-forgery] + + const targetUrl1 = req.parsedQueryFromParsedUrl.url; + const response1 = await axios.get(targetUrl1); // $Alert[js/request-forgery] + + const targetUrl2 = req.url || {}; // $Source[js/request-forgery] + const response2 = await axios.get(targetUrl2); // $Alert[js/request-forgery] + + const targetUrl3 = req.SomeObject.url || {}; + const response3 = await axios.get(targetUrl3); // $Alert[js/request-forgery] +}); diff --git a/javascript/ql/test/query-tests/Statements/LoopIterationSkippedDueToShifting/LoopIterationSkippedDueToShifting.expected b/javascript/ql/test/query-tests/Statements/LoopIterationSkippedDueToShifting/LoopIterationSkippedDueToShifting.expected index 4b7becd8e163..cfe2b5f4f58d 100644 --- a/javascript/ql/test/query-tests/Statements/LoopIterationSkippedDueToShifting/LoopIterationSkippedDueToShifting.expected +++ b/javascript/ql/test/query-tests/Statements/LoopIterationSkippedDueToShifting/LoopIterationSkippedDueToShifting.expected @@ -1,3 +1,5 @@ | tst.js:4:27:4:44 | parts.splice(i, 1) | Removing an array item without adjusting the loop index 'i' causes the subsequent array item to be skipped. | | tst.js:13:29:13:46 | parts.splice(i, 1) | Removing an array item without adjusting the loop index 'i' causes the subsequent array item to be skipped. | | tst.js:24:9:24:26 | parts.splice(i, 1) | Removing an array item without adjusting the loop index 'i' causes the subsequent array item to be skipped. | +| tst.js:128:11:128:33 | pending ... e(i, 1) | Removing an array item without adjusting the loop index 'i' causes the subsequent array item to be skipped. | +| tst.js:153:11:153:26 | toc.splice(i, 1) | Removing an array item without adjusting the loop index 'i' causes the subsequent array item to be skipped. | diff --git a/javascript/ql/test/query-tests/Statements/LoopIterationSkippedDueToShifting/tst.js b/javascript/ql/test/query-tests/Statements/LoopIterationSkippedDueToShifting/tst.js index 68c50516da04..01f046d1c1e2 100644 --- a/javascript/ql/test/query-tests/Statements/LoopIterationSkippedDueToShifting/tst.js +++ b/javascript/ql/test/query-tests/Statements/LoopIterationSkippedDueToShifting/tst.js @@ -121,3 +121,38 @@ function inspectNextElement(string) { } return parts.join('/'); } + +function withTryCatch(pendingCSS) { + for (let i = 0; i < pendingCSS.length; ++i) { + try { + pendingCSS.splice(i, 1); // $ SPURIOUS:Alert + i -= 1; + } catch (ex) {} + } +} + +function andOperand(toc) { + for (let i = 0; i < toc.length; i++) { + toc[i].ignoreSubHeading && toc.splice(i, 1) && i--; + } +} + +function ifStatement(toc) { + for (let i = 0; i < toc.length; i++) { + if(toc[i].ignoreSubHeading){ + if(toc.splice(i, 1)){ + i--; + } + } + } +} + +function ifStatement2(toc) { + for (let i = 0; i < toc.length; i++) { + if(toc[i].ignoreSubHeading){ + if(!toc.splice(i, 1)){ // $Alert + i--; + } + } + } +} diff --git a/rust/extractor/src/config.rs b/rust/extractor/src/config.rs index a2a74420b5d8..8108dec032fb 100644 --- a/rust/extractor/src/config.rs +++ b/rust/extractor/src/config.rs @@ -62,6 +62,7 @@ pub struct Config { pub qltest: bool, pub qltest_cargo_check: bool, pub qltest_dependencies: Vec<String>, + pub qltest_use_nightly: bool, pub sysroot: Option<PathBuf>, pub sysroot_src: Option<PathBuf>, pub rustc_src: Option<PathBuf>, diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index bae83c99fbfc..6832019870ce 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -103,6 +103,7 @@ impl<'a> Extractor<'a> { } } translator.emit_source_file(&ast); + translator.emit_truncated_diagnostics_message(); translator.trap.commit().unwrap_or_else(|err| { error!( "Failed to write trap file for: {}: {}", diff --git a/rust/extractor/src/qltest.rs b/rust/extractor/src/qltest.rs index d21e1d816f2c..f989ecf2eaa6 100644 --- a/rust/extractor/src/qltest.rs +++ b/rust/extractor/src/qltest.rs @@ -8,6 +8,9 @@ use std::path::Path; use std::process::Command; use tracing::info; +const EDITION: &str = "2021"; +const NIGHTLY: &str = "nightly-2025-06-01"; + fn dump_lib() -> anyhow::Result<()> { let path_iterator = glob("*.rs").context("globbing test sources")?; let paths = path_iterator @@ -29,8 +32,11 @@ enum TestCargoManifest<'a> { uses_proc_macro: bool, uses_main: bool, dependencies: &'a [String], + edition: &'a str, + }, + Macro { + edition: &'a str, }, - Macro {}, } impl TestCargoManifest<'_> { @@ -56,16 +62,26 @@ fn dump_cargo_manifest(dependencies: &[String]) -> anyhow::Result<()> { uses_proc_macro, uses_main: fs::exists("main.rs").context("checking existence of main.rs")?, dependencies, + edition: EDITION, }; if uses_proc_macro { TestCargoManifest::Workspace {}.dump("")?; lib_manifest.dump(".lib")?; - TestCargoManifest::Macro {}.dump(".proc_macro") + TestCargoManifest::Macro { edition: EDITION }.dump(".proc_macro") } else { lib_manifest.dump("") } } +fn dump_nightly_toolchain() -> anyhow::Result<()> { + fs::write( + "rust-toolchain.toml", + format!("[toolchain]\nchannel = \"{NIGHTLY}\"\n"), + ) + .context("writing rust-toolchain.toml")?; + Ok(()) +} + fn set_sources(config: &mut Config) -> anyhow::Result<()> { let path_iterator = glob("**/*.rs").context("globbing test sources")?; config.inputs = path_iterator @@ -79,6 +95,9 @@ pub(crate) fn prepare(config: &mut Config) -> anyhow::Result<()> { dump_lib()?; set_sources(config)?; dump_cargo_manifest(&config.qltest_dependencies)?; + if config.qltest_use_nightly { + dump_nightly_toolchain()?; + } if config.qltest_cargo_check { let status = Command::new("cargo") .env("RUSTFLAGS", "-Awarnings") diff --git a/rust/extractor/src/qltest_cargo.mustache b/rust/extractor/src/qltest_cargo.mustache index 38db2ca02bf1..ed405bae05d6 100644 --- a/rust/extractor/src/qltest_cargo.mustache +++ b/rust/extractor/src/qltest_cargo.mustache @@ -11,7 +11,7 @@ members = [".lib", ".proc_macro"] [package] name = "test" version = "0.0.1" -edition = "2021" +edition = "{{ edition }}" [lib] path = "{{#uses_proc_macro}}../{{/uses_proc_macro}}lib.rs" {{#uses_main}} @@ -32,7 +32,7 @@ proc_macro = { path = "../.proc_macro" } [package] name = "proc_macro" version = "0.0.1" -edition = "2021" +edition = "{{ edition }}" [lib] path = "../proc_macro.rs" proc_macro = true diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 9e9123c45709..3ceef6de28a9 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -26,12 +26,38 @@ use ra_ap_syntax::{ macro_rules! pre_emit { (Item, $self:ident, $node:ident) => { if let Some(label) = $self.prepare_item_expansion($node) { - return Some(label); + return Some(label.into()); + } + }; + (AssocItem, $self:ident, $node:ident) => { + if let Some(label) = $self.prepare_item_expansion(&$node.clone().into()) { + return Some(label.into()); + } + }; + (ExternItem, $self:ident, $node:ident) => { + if let Some(label) = $self.prepare_item_expansion(&$node.clone().into()) { + return Some(label.into()); } }; ($($_:tt)*) => {}; } +// TODO: remove the mannually written Label conversions. These can be auto-generated by +// changing the base class of AssocItem from AstNode to Item +impl From<crate::trap::Label<generated::AssocItem>> for crate::trap::Label<generated::Item> { + fn from(value: crate::trap::Label<generated::AssocItem>) -> Self { + // SAFETY: this is safe because every concrete instance of `@assoc_item` is also an instance of `@item` + unsafe { Self::from_untyped(value.as_untyped()) } + } +} +// TODO: remove the mannually written Label conversions. These can be auto-generated by +// changing the base class of ExternItem from AstNode to Item +impl From<crate::trap::Label<generated::ExternItem>> for crate::trap::Label<generated::Item> { + fn from(value: crate::trap::Label<generated::ExternItem>) -> Self { + // SAFETY: this is safe because every concrete instance of `@extern_item` is also an instance of `@item` + unsafe { Self::from_untyped(value.as_untyped()) } + } +} #[macro_export] macro_rules! post_emit { (MacroCall, $self:ident, $node:ident, $label:ident) => { @@ -62,6 +88,18 @@ macro_rules! post_emit { (Item, $self:ident, $node:ident, $label:ident) => { $self.emit_item_expansion($node, $label); }; + (AssocItem, $self:ident, $node:ident, $label:ident) => { + $self.emit_item_expansion( + &$node.clone().into(), + From::<Label<generated::AssocItem>>::from($label), + ); + }; + (ExternItem, $self:ident, $node:ident, $label:ident) => { + $self.emit_item_expansion( + &$node.clone().into(), + From::<Label<generated::ExternItem>>::from($label), + ); + }; // TODO canonical origin of other items (PathExpr, $self:ident, $node:ident, $label:ident) => { $self.extract_path_canonical_destination($node, $label.into()); @@ -123,11 +161,14 @@ pub struct Translator<'a> { resolve_paths: bool, source_kind: SourceKind, macro_context_depth: usize, + diagnostic_count: usize, } const UNKNOWN_LOCATION: (LineCol, LineCol) = (LineCol { line: 0, col: 0 }, LineCol { line: 0, col: 0 }); +const DIAGNOSTIC_LIMIT_PER_FILE: usize = 100; + impl<'a> Translator<'a> { pub fn new( trap: TrapFile, @@ -148,6 +189,7 @@ impl<'a> Translator<'a> { resolve_paths: resolve_paths == ResolvePaths::Yes, source_kind, macro_context_depth: 0, + diagnostic_count: 0, } } fn location(&self, range: TextRange) -> Option<(LineCol, LineCol)> { @@ -234,6 +276,36 @@ impl<'a> Translator<'a> { } else { severity }; + if severity > DiagnosticSeverity::Debug { + self.diagnostic_count += 1; + if self.diagnostic_count > DIAGNOSTIC_LIMIT_PER_FILE { + return; + } + } + self.emit_diagnostic_unchecked(severity, tag, message, full_message, location); + } + pub fn emit_truncated_diagnostics_message(&mut self) { + if self.diagnostic_count > DIAGNOSTIC_LIMIT_PER_FILE { + let count = self.diagnostic_count - DIAGNOSTIC_LIMIT_PER_FILE; + self.emit_diagnostic_unchecked( + DiagnosticSeverity::Warning, + "diagnostics".to_owned(), + "Too many diagnostic messages".to_owned(), + format!( + "Too many diagnostic messages, {count} diagnostic messages were suppressed" + ), + UNKNOWN_LOCATION, + ); + } + } + fn emit_diagnostic_unchecked( + &mut self, + severity: DiagnosticSeverity, + tag: String, + message: String, + full_message: String, + location: (LineCol, LineCol), + ) { let (start, end) = location; dispatch_to_tracing!( severity, @@ -694,10 +766,21 @@ impl<'a> Translator<'a> { } } + fn is_attribute_macro_target(&self, node: &ast::Item) -> bool { + // rust-analyzer considers as an `attr_macro_call` also a plain macro call, but we want to + // process that differently (in `extract_macro_call_expanded`) + !matches!(node, ast::Item::MacroCall(_)) + && self.semantics.is_some_and(|semantics| { + let file = semantics.hir_file_for(node.syntax()); + let node = InFile::new(file, node); + semantics.is_attr_macro_call(node) + }) + } + pub(crate) fn prepare_item_expansion( &mut self, node: &ast::Item, - ) -> Option<Label<generated::Item>> { + ) -> Option<Label<generated::MacroCall>> { if self.source_kind == SourceKind::Library { // if the item expands via an attribute macro, we want to only emit the expansion if let Some(expanded) = self.emit_attribute_macro_expansion(node) { @@ -714,13 +797,10 @@ impl<'a> Translator<'a> { expanded.into(), &mut self.trap.writer, ); - return Some(label.into()); + return Some(label); } } - let semantics = self.semantics.as_ref()?; - let file = semantics.hir_file_for(node.syntax()); - let node = InFile::new(file, node); - if semantics.is_attr_macro_call(node) { + if self.is_attribute_macro_target(node) { self.macro_context_depth += 1; } None @@ -730,10 +810,7 @@ impl<'a> Translator<'a> { &mut self, node: &ast::Item, ) -> Option<Label<generated::MacroItems>> { - let semantics = self.semantics?; - let file = semantics.hir_file_for(node.syntax()); - let infile_node = InFile::new(file, node); - if !semantics.is_attr_macro_call(infile_node) { + if !self.is_attribute_macro_target(node) { return None; } self.macro_context_depth -= 1; @@ -743,7 +820,7 @@ impl<'a> Translator<'a> { } let ExpandResult { value: expanded, .. - } = semantics.expand_attr_macro(node)?; + } = self.semantics.and_then(|s| s.expand_attr_macro(node))?; self.emit_macro_expansion_parse_errors(node, &expanded); let macro_items = ast::MacroItems::cast(expanded).or_else(|| { let message = "attribute macro expansion cannot be cast to MacroItems".to_owned(); diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll index 84d9aaab5ef1..f350e88efad8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll @@ -35,7 +35,7 @@ module Impl { */ abstract class Call extends ExprImpl::Expr { /** Holds if the receiver of this call is implicitly borrowed. */ - predicate receiverImplicitlyBorrowed() { this.implicitBorrowAt(TSelfArgumentPosition()) } + predicate receiverImplicitlyBorrowed() { this.implicitBorrowAt(TSelfArgumentPosition(), _) } /** Gets the trait targeted by this call, if any. */ abstract Trait getTrait(); @@ -47,7 +47,7 @@ module Impl { abstract Expr getArgument(ArgumentPosition pos); /** Holds if the argument at `pos` might be implicitly borrowed. */ - abstract predicate implicitBorrowAt(ArgumentPosition pos); + abstract predicate implicitBorrowAt(ArgumentPosition pos, boolean certain); /** Gets the number of arguments _excluding_ any `self` argument. */ int getNumberOfArguments() { result = count(this.getArgument(TPositionalArgumentPosition(_))) } @@ -85,7 +85,7 @@ module Impl { override Trait getTrait() { none() } - override predicate implicitBorrowAt(ArgumentPosition pos) { none() } + override predicate implicitBorrowAt(ArgumentPosition pos, boolean certain) { none() } override Expr getArgument(ArgumentPosition pos) { result = super.getArgList().getArg(pos.asPosition()) @@ -109,7 +109,7 @@ module Impl { qualifier.toString() != "Self" } - override predicate implicitBorrowAt(ArgumentPosition pos) { none() } + override predicate implicitBorrowAt(ArgumentPosition pos, boolean certain) { none() } override Expr getArgument(ArgumentPosition pos) { pos.isSelf() and result = super.getArgList().getArg(0) @@ -123,7 +123,9 @@ module Impl { override Trait getTrait() { none() } - override predicate implicitBorrowAt(ArgumentPosition pos) { pos.isSelf() } + override predicate implicitBorrowAt(ArgumentPosition pos, boolean certain) { + pos.isSelf() and certain = false + } override Expr getArgument(ArgumentPosition pos) { pos.isSelf() and result = this.(MethodCallExpr).getReceiver() @@ -143,10 +145,13 @@ module Impl { override Trait getTrait() { result = trait } - override predicate implicitBorrowAt(ArgumentPosition pos) { - pos.isSelf() and borrows >= 1 - or - pos.asPosition() = 0 and borrows = 2 + override predicate implicitBorrowAt(ArgumentPosition pos, boolean certain) { + ( + pos.isSelf() and borrows >= 1 + or + pos.asPosition() = 0 and borrows = 2 + ) and + certain = true } override Expr getArgument(ArgumentPosition pos) { diff --git a/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll index a65f99f7952b..ea76293a1bd9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll @@ -22,7 +22,7 @@ private predicate isOverloaded(string op, int arity, string path, string method, op = "!" and path = "core::ops::bit::Not" and method = "not" and borrows = 0 or // Dereference - op = "*" and path = "core::ops::deref::Deref" and method = "deref" and borrows = 0 + op = "*" and path = "core::ops::deref::Deref" and method = "deref" and borrows = 1 ) or arity = 2 and diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index c10cdc0140eb..f2c487598de6 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -205,7 +205,11 @@ abstract class ItemNode extends Locatable { else result = this.getImmediateParentModule().getImmediateParentModule() or name = "self" and - if this instanceof Module or this instanceof Enum or this instanceof Struct + if + this instanceof Module or + this instanceof Enum or + this instanceof Struct or + this instanceof Crate then result = this else result = this.getImmediateParentModule() or diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 34fce3082396..b560ac5ec8c1 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -273,10 +273,6 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat prefix1.isEmpty() and prefix2 = TypePath::singleton(TRefTypeParameter()) or - n1 = n2.(DerefExpr).getExpr() and - prefix1 = TypePath::singleton(TRefTypeParameter()) and - prefix2.isEmpty() - or exists(BlockExpr be | n1 = be and n2 = be.getStmtList().getTailExpr() and @@ -640,20 +636,20 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { } private newtype TAccessPosition = - TArgumentAccessPosition(ArgumentPosition pos, Boolean borrowed) or + TArgumentAccessPosition(ArgumentPosition pos, Boolean borrowed, Boolean certain) or TReturnAccessPosition() class AccessPosition extends TAccessPosition { - ArgumentPosition getArgumentPosition() { this = TArgumentAccessPosition(result, _) } + ArgumentPosition getArgumentPosition() { this = TArgumentAccessPosition(result, _, _) } - predicate isBorrowed() { this = TArgumentAccessPosition(_, true) } + predicate isBorrowed(boolean certain) { this = TArgumentAccessPosition(_, true, certain) } predicate isReturn() { this = TReturnAccessPosition() } string toString() { - exists(ArgumentPosition pos, boolean borrowed | - this = TArgumentAccessPosition(pos, borrowed) and - result = pos + ":" + borrowed + exists(ArgumentPosition pos, boolean borrowed, boolean certain | + this = TArgumentAccessPosition(pos, borrowed, certain) and + result = pos + ":" + borrowed + ":" + certain ) or this.isReturn() and @@ -674,10 +670,15 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { } AstNode getNodeAt(AccessPosition apos) { - exists(ArgumentPosition pos, boolean borrowed | - apos = TArgumentAccessPosition(pos, borrowed) and - result = this.getArgument(pos) and - if this.implicitBorrowAt(pos) then borrowed = true else borrowed = false + exists(ArgumentPosition pos, boolean borrowed, boolean certain | + apos = TArgumentAccessPosition(pos, borrowed, certain) and + result = this.getArgument(pos) + | + if this.implicitBorrowAt(pos, _) + then borrowed = true and this.implicitBorrowAt(pos, certain) + else ( + borrowed = false and certain = true + ) ) or result = this and apos.isReturn() @@ -705,51 +706,54 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { predicate adjustAccessType( AccessPosition apos, Declaration target, TypePath path, Type t, TypePath pathAdj, Type tAdj ) { - if apos.isBorrowed() - then - exists(Type selfParamType | - selfParamType = - target - .getParameterType(TArgumentDeclarationPosition(apos.getArgumentPosition()), - TypePath::nil()) - | - if selfParamType = TRefType() + apos.isBorrowed(true) and + pathAdj = TypePath::cons(TRefTypeParameter(), path) and + tAdj = t + or + apos.isBorrowed(false) and + exists(Type selfParamType | + selfParamType = + target + .getParameterType(TArgumentDeclarationPosition(apos.getArgumentPosition()), + TypePath::nil()) + | + if selfParamType = TRefType() + then + if t != TRefType() and path.isEmpty() then - if t != TRefType() and path.isEmpty() + // adjust for implicit borrow + pathAdj.isEmpty() and + tAdj = TRefType() + or + // adjust for implicit borrow + pathAdj = TypePath::singleton(TRefTypeParameter()) and + tAdj = t + else + if path.isCons(TRefTypeParameter(), _) then + pathAdj = path and + tAdj = t + else ( // adjust for implicit borrow - pathAdj.isEmpty() and - tAdj = TRefType() - or - // adjust for implicit borrow - pathAdj = TypePath::singleton(TRefTypeParameter()) and + not (t = TRefType() and path.isEmpty()) and + pathAdj = TypePath::cons(TRefTypeParameter(), path) and tAdj = t - else - if path.isCons(TRefTypeParameter(), _) - then - pathAdj = path and - tAdj = t - else ( - // adjust for implicit borrow - not (t = TRefType() and path.isEmpty()) and - pathAdj = TypePath::cons(TRefTypeParameter(), path) and - tAdj = t - ) - else ( - // adjust for implicit deref - path.isCons(TRefTypeParameter(), pathAdj) and - tAdj = t - or - not path.isCons(TRefTypeParameter(), _) and - not (t = TRefType() and path.isEmpty()) and - pathAdj = path and - tAdj = t - ) + ) + else ( + // adjust for implicit deref + path.isCons(TRefTypeParameter(), pathAdj) and + tAdj = t + or + not path.isCons(TRefTypeParameter(), _) and + not (t = TRefType() and path.isEmpty()) and + pathAdj = path and + tAdj = t ) - else ( - pathAdj = path and - tAdj = t ) + or + not apos.isBorrowed(_) and + pathAdj = path and + tAdj = t } } @@ -766,35 +770,47 @@ private Type inferCallExprBaseType(AstNode n, TypePath path) { TypePath path0 | n = a.getNodeAt(apos) and - result = CallExprBaseMatching::inferAccessType(a, apos, path0) and - if apos.isBorrowed() - then - exists(Type argType | argType = inferType(n) | - if argType = TRefType() - then - path = path0 and - path0.isCons(TRefTypeParameter(), _) - or - // adjust for implicit deref + result = CallExprBaseMatching::inferAccessType(a, apos, path0) + | + ( + apos.isBorrowed(true) + or + // The desugaring of the unary `*e` is `*Deref::deref(&e)`. To handle the + // deref expression after the call we must strip a `&` from the type at + // the return position. + apos.isReturn() and a instanceof DerefExpr + ) and + path0.isCons(TRefTypeParameter(), path) + or + apos.isBorrowed(false) and + exists(Type argType | argType = inferType(n) | + if argType = TRefType() + then + path = path0 and + path0.isCons(TRefTypeParameter(), _) + or + // adjust for implicit deref + not path0.isCons(TRefTypeParameter(), _) and + not (path0.isEmpty() and result = TRefType()) and + path = TypePath::cons(TRefTypeParameter(), path0) + else ( + not ( + argType.(StructType).asItemNode() instanceof StringStruct and + result.(StructType).asItemNode() instanceof Builtins::Str + ) and + ( not path0.isCons(TRefTypeParameter(), _) and not (path0.isEmpty() and result = TRefType()) and - path = TypePath::cons(TRefTypeParameter(), path0) - else ( - not ( - argType.(StructType).asItemNode() instanceof StringStruct and - result.(StructType).asItemNode() instanceof Builtins::Str - ) and - ( - not path0.isCons(TRefTypeParameter(), _) and - not (path0.isEmpty() and result = TRefType()) and - path = path0 - or - // adjust for implicit borrow - path0.isCons(TRefTypeParameter(), path) - ) + path = path0 + or + // adjust for implicit borrow + path0.isCons(TRefTypeParameter(), path) ) ) - else path = path0 + ) + or + not apos.isBorrowed(_) and + path = path0 ) } @@ -1141,8 +1157,15 @@ final class MethodCall extends Call { ( path0.isCons(TRefTypeParameter(), path) or - not path0.isCons(TRefTypeParameter(), _) and - not (path0.isEmpty() and result = TRefType()) and + ( + not path0.isCons(TRefTypeParameter(), _) and + not (path0.isEmpty() and result = TRefType()) + or + // Ideally we should find all methods on reference types, but as + // that currently causes a blowup we limit this to the `deref` + // method in order to make dereferencing work. + this.getMethodName() = "deref" + ) and path = path0 ) | @@ -1389,7 +1412,7 @@ private module Cached { predicate receiverHasImplicitDeref(AstNode receiver) { exists(CallExprBaseMatchingInput::Access a, CallExprBaseMatchingInput::AccessPosition apos | apos.getArgumentPosition().isSelf() and - apos.isBorrowed() and + apos.isBorrowed(_) and receiver = a.getNodeAt(apos) and inferType(receiver) = TRefType() and CallExprBaseMatching::inferAccessType(a, apos, TypePath::nil()) != TRefType() @@ -1401,7 +1424,7 @@ private module Cached { predicate receiverHasImplicitBorrow(AstNode receiver) { exists(CallExprBaseMatchingInput::Access a, CallExprBaseMatchingInput::AccessPosition apos | apos.getArgumentPosition().isSelf() and - apos.isBorrowed() and + apos.isBorrowed(_) and receiver = a.getNodeAt(apos) and CallExprBaseMatching::inferAccessType(a, apos, TypePath::nil()) = TRefType() and inferType(receiver) != TRefType() diff --git a/rust/ql/test/.gitignore b/rust/ql/test/.gitignore index 3c36d8c77974..65baed5837a4 100644 --- a/rust/ql/test/.gitignore +++ b/rust/ql/test/.gitignore @@ -1,6 +1,9 @@ +target/ + +# these are all generated, see `rust/extractor/src/qltest.rs` for details Cargo.toml +rust-toolchain.toml lib.rs -target/ .proc_macro/ .lib/ diff --git a/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected b/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected index 092c26051d65..a89072531ccc 100644 --- a/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected +++ b/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected @@ -406,6 +406,151 @@ macro_expansion.rs: # 30| getItem(6): [Impl] impl S { ... } # 30| getAssocItemList(): [AssocItemList] AssocItemList # 31| getAssocItem(0): [Function] fn bzz +# 32| getAttributeMacroExpansion(): [MacroItems] MacroItems +# 32| getItem(0): [Function] fn bzz_0 +# 32| getParamList(): [ParamList] ParamList +# 32| getBody(): [BlockExpr] { ... } +# 32| getStmtList(): [StmtList] StmtList +# 33| getStatement(0): [ExprStmt] ExprStmt +# 33| getExpr(): [MacroExpr] MacroExpr +# 33| getMacroCall(): [MacroCall] hello!... +# 33| getPath(): [Path] hello +# 33| getSegment(): [PathSegment] hello +# 33| getIdentifier(): [NameRef] hello +# 33| getTokenTree(): [TokenTree] TokenTree +# 31| getMacroCallExpansion(): [MacroBlockExpr] MacroBlockExpr +# 31| getStatement(0): [ExprStmt] ExprStmt +# 31| getExpr(): [MacroExpr] MacroExpr +# 31| getMacroCall(): [MacroCall] println!... +# 31| getPath(): [Path] println +# 31| getSegment(): [PathSegment] println +# 31| getIdentifier(): [NameRef] println +# 31| getTokenTree(): [TokenTree] TokenTree +# 31| getMacroCallExpansion(): [MacroBlockExpr] MacroBlockExpr +# 31| getTailExpr(): [BlockExpr] { ... } +# 31| getStmtList(): [StmtList] StmtList +# 31| getStatement(0): [ExprStmt] ExprStmt +# 31| getExpr(): [CallExpr] ...::_print(...) +# 31| getArgList(): [ArgList] ArgList +# 31| getArg(0): [MacroExpr] MacroExpr +# 31| getMacroCall(): [MacroCall] ...::format_args_nl!... +# 31| getPath(): [Path] ...::format_args_nl +# 31| getQualifier(): [Path] $crate +# 31| getSegment(): [PathSegment] $crate +# 31| getIdentifier(): [NameRef] $crate +# 31| getSegment(): [PathSegment] format_args_nl +# 31| getIdentifier(): [NameRef] format_args_nl +# 31| getTokenTree(): [TokenTree] TokenTree +# 31| getMacroCallExpansion(): [FormatArgsExpr] FormatArgsExpr +# 31| getTemplate(): [StringLiteralExpr] "hello!\n" +# 31| getFunction(): [PathExpr] ...::_print +# 31| getPath(): [Path] ...::_print +# 31| getQualifier(): [Path] ...::io +# 31| getQualifier(): [Path] $crate +# 31| getSegment(): [PathSegment] $crate +# 31| getIdentifier(): [NameRef] $crate +# 31| getSegment(): [PathSegment] io +# 31| getIdentifier(): [NameRef] io +# 31| getSegment(): [PathSegment] _print +# 31| getIdentifier(): [NameRef] _print +# 32| getName(): [Name] bzz_0 +# 32| getVisibility(): [Visibility] Visibility +# 32| getItem(1): [Function] fn bzz_1 +# 32| getParamList(): [ParamList] ParamList +# 32| getBody(): [BlockExpr] { ... } +# 32| getStmtList(): [StmtList] StmtList +# 33| getStatement(0): [ExprStmt] ExprStmt +# 33| getExpr(): [MacroExpr] MacroExpr +# 33| getMacroCall(): [MacroCall] hello!... +# 33| getPath(): [Path] hello +# 33| getSegment(): [PathSegment] hello +# 33| getIdentifier(): [NameRef] hello +# 33| getTokenTree(): [TokenTree] TokenTree +# 31| getMacroCallExpansion(): [MacroBlockExpr] MacroBlockExpr +# 31| getStatement(0): [ExprStmt] ExprStmt +# 31| getExpr(): [MacroExpr] MacroExpr +# 31| getMacroCall(): [MacroCall] println!... +# 31| getPath(): [Path] println +# 31| getSegment(): [PathSegment] println +# 31| getIdentifier(): [NameRef] println +# 31| getTokenTree(): [TokenTree] TokenTree +# 31| getMacroCallExpansion(): [MacroBlockExpr] MacroBlockExpr +# 31| getTailExpr(): [BlockExpr] { ... } +# 31| getStmtList(): [StmtList] StmtList +# 31| getStatement(0): [ExprStmt] ExprStmt +# 31| getExpr(): [CallExpr] ...::_print(...) +# 31| getArgList(): [ArgList] ArgList +# 31| getArg(0): [MacroExpr] MacroExpr +# 31| getMacroCall(): [MacroCall] ...::format_args_nl!... +# 31| getPath(): [Path] ...::format_args_nl +# 31| getQualifier(): [Path] $crate +# 31| getSegment(): [PathSegment] $crate +# 31| getIdentifier(): [NameRef] $crate +# 31| getSegment(): [PathSegment] format_args_nl +# 31| getIdentifier(): [NameRef] format_args_nl +# 31| getTokenTree(): [TokenTree] TokenTree +# 31| getMacroCallExpansion(): [FormatArgsExpr] FormatArgsExpr +# 31| getTemplate(): [StringLiteralExpr] "hello!\n" +# 31| getFunction(): [PathExpr] ...::_print +# 31| getPath(): [Path] ...::_print +# 31| getQualifier(): [Path] ...::io +# 31| getQualifier(): [Path] $crate +# 31| getSegment(): [PathSegment] $crate +# 31| getIdentifier(): [NameRef] $crate +# 31| getSegment(): [PathSegment] io +# 31| getIdentifier(): [NameRef] io +# 31| getSegment(): [PathSegment] _print +# 31| getIdentifier(): [NameRef] _print +# 32| getName(): [Name] bzz_1 +# 32| getVisibility(): [Visibility] Visibility +# 32| getItem(2): [Function] fn bzz_2 +# 32| getParamList(): [ParamList] ParamList +# 32| getBody(): [BlockExpr] { ... } +# 32| getStmtList(): [StmtList] StmtList +# 33| getStatement(0): [ExprStmt] ExprStmt +# 33| getExpr(): [MacroExpr] MacroExpr +# 33| getMacroCall(): [MacroCall] hello!... +# 33| getPath(): [Path] hello +# 33| getSegment(): [PathSegment] hello +# 33| getIdentifier(): [NameRef] hello +# 33| getTokenTree(): [TokenTree] TokenTree +# 31| getMacroCallExpansion(): [MacroBlockExpr] MacroBlockExpr +# 31| getStatement(0): [ExprStmt] ExprStmt +# 31| getExpr(): [MacroExpr] MacroExpr +# 31| getMacroCall(): [MacroCall] println!... +# 31| getPath(): [Path] println +# 31| getSegment(): [PathSegment] println +# 31| getIdentifier(): [NameRef] println +# 31| getTokenTree(): [TokenTree] TokenTree +# 31| getMacroCallExpansion(): [MacroBlockExpr] MacroBlockExpr +# 31| getTailExpr(): [BlockExpr] { ... } +# 31| getStmtList(): [StmtList] StmtList +# 31| getStatement(0): [ExprStmt] ExprStmt +# 31| getExpr(): [CallExpr] ...::_print(...) +# 31| getArgList(): [ArgList] ArgList +# 31| getArg(0): [MacroExpr] MacroExpr +# 31| getMacroCall(): [MacroCall] ...::format_args_nl!... +# 31| getPath(): [Path] ...::format_args_nl +# 31| getQualifier(): [Path] $crate +# 31| getSegment(): [PathSegment] $crate +# 31| getIdentifier(): [NameRef] $crate +# 31| getSegment(): [PathSegment] format_args_nl +# 31| getIdentifier(): [NameRef] format_args_nl +# 31| getTokenTree(): [TokenTree] TokenTree +# 31| getMacroCallExpansion(): [FormatArgsExpr] FormatArgsExpr +# 31| getTemplate(): [StringLiteralExpr] "hello!\n" +# 31| getFunction(): [PathExpr] ...::_print +# 31| getPath(): [Path] ...::_print +# 31| getQualifier(): [Path] ...::io +# 31| getQualifier(): [Path] $crate +# 31| getSegment(): [PathSegment] $crate +# 31| getIdentifier(): [NameRef] $crate +# 31| getSegment(): [PathSegment] io +# 31| getIdentifier(): [NameRef] io +# 31| getSegment(): [PathSegment] _print +# 31| getIdentifier(): [NameRef] _print +# 32| getName(): [Name] bzz_2 +# 32| getVisibility(): [Visibility] Visibility # 32| getParamList(): [ParamList] ParamList # 31| getAttr(0): [Attr] Attr # 31| getMeta(): [Meta] Meta @@ -422,41 +567,6 @@ macro_expansion.rs: # 33| getSegment(): [PathSegment] hello # 33| getIdentifier(): [NameRef] hello # 33| getTokenTree(): [TokenTree] TokenTree -# 33| getMacroCallExpansion(): [MacroBlockExpr] MacroBlockExpr -# 33| getStatement(0): [ExprStmt] ExprStmt -# 33| getExpr(): [MacroExpr] MacroExpr -# 33| getMacroCall(): [MacroCall] println!... -# 33| getPath(): [Path] println -# 33| getSegment(): [PathSegment] println -# 33| getIdentifier(): [NameRef] println -# 33| getTokenTree(): [TokenTree] TokenTree -# 33| getMacroCallExpansion(): [MacroBlockExpr] MacroBlockExpr -# 33| getTailExpr(): [BlockExpr] { ... } -# 33| getStmtList(): [StmtList] StmtList -# 33| getStatement(0): [ExprStmt] ExprStmt -# 33| getExpr(): [CallExpr] ...::_print(...) -# 33| getArgList(): [ArgList] ArgList -# 33| getArg(0): [MacroExpr] MacroExpr -# 33| getMacroCall(): [MacroCall] ...::format_args_nl!... -# 33| getPath(): [Path] ...::format_args_nl -# 33| getQualifier(): [Path] $crate -# 33| getSegment(): [PathSegment] $crate -# 33| getIdentifier(): [NameRef] $crate -# 33| getSegment(): [PathSegment] format_args_nl -# 33| getIdentifier(): [NameRef] format_args_nl -# 33| getTokenTree(): [TokenTree] TokenTree -# 33| getMacroCallExpansion(): [FormatArgsExpr] FormatArgsExpr -# 33| getTemplate(): [StringLiteralExpr] "hello!\n" -# 33| getFunction(): [PathExpr] ...::_print -# 33| getPath(): [Path] ...::_print -# 33| getQualifier(): [Path] ...::io -# 33| getQualifier(): [Path] $crate -# 33| getSegment(): [PathSegment] $crate -# 33| getIdentifier(): [NameRef] $crate -# 33| getSegment(): [PathSegment] io -# 33| getIdentifier(): [NameRef] io -# 33| getSegment(): [PathSegment] _print -# 33| getIdentifier(): [NameRef] _print # 32| getName(): [Name] bzz # 32| getVisibility(): [Visibility] Visibility # 30| getSelfTy(): [PathTypeRepr] S diff --git a/rust/ql/test/extractor-tests/macro-expansion/test.expected b/rust/ql/test/extractor-tests/macro-expansion/test.expected index 10a73fd947c8..5940c63da2b4 100644 --- a/rust/ql/test/extractor-tests/macro-expansion/test.expected +++ b/rust/ql/test/extractor-tests/macro-expansion/test.expected @@ -11,13 +11,22 @@ attribute_macros | macro_expansion.rs:15:1:16:14 | fn bar_0 | 1 | macro_expansion.rs:16:1:16:14 | fn bar_0_new | | macro_expansion.rs:15:1:16:14 | fn bar_1 | 0 | macro_expansion.rs:16:1:16:14 | fn bar_1 | | macro_expansion.rs:15:1:16:14 | fn bar_1 | 1 | macro_expansion.rs:16:1:16:14 | fn bar_1_new | +| macro_expansion.rs:31:5:34:5 | fn bzz | 0 | macro_expansion.rs:32:5:33:17 | fn bzz_0 | +| macro_expansion.rs:31:5:34:5 | fn bzz | 1 | macro_expansion.rs:32:5:33:17 | fn bzz_1 | +| macro_expansion.rs:31:5:34:5 | fn bzz | 2 | macro_expansion.rs:32:5:33:17 | fn bzz_2 | macro_calls | included/included.rs:2:9:2:39 | concat!... | included/included.rs:2:17:2:38 | "Hello world!" | | macro_expansion.rs:5:9:5:34 | concat!... | macro_expansion.rs:5:17:5:34 | "Hello world!" | | macro_expansion.rs:5:9:5:34 | concat!... | macro_expansion.rs:5:17:5:34 | "Hello world!" | -| macro_expansion.rs:33:9:33:16 | ...::format_args_nl!... | macro_expansion.rs:33:9:33:16 | FormatArgsExpr | -| macro_expansion.rs:33:9:33:16 | hello!... | macro_expansion.rs:33:9:33:16 | MacroBlockExpr | -| macro_expansion.rs:33:9:33:16 | println!... | macro_expansion.rs:33:9:33:16 | MacroBlockExpr | +| macro_expansion.rs:31:5:31:16 | ...::format_args_nl!... | macro_expansion.rs:31:5:31:16 | FormatArgsExpr | +| macro_expansion.rs:31:5:31:16 | ...::format_args_nl!... | macro_expansion.rs:31:5:31:16 | FormatArgsExpr | +| macro_expansion.rs:31:5:31:16 | ...::format_args_nl!... | macro_expansion.rs:31:5:31:16 | FormatArgsExpr | +| macro_expansion.rs:31:5:31:16 | println!... | macro_expansion.rs:31:5:31:16 | MacroBlockExpr | +| macro_expansion.rs:31:5:31:16 | println!... | macro_expansion.rs:31:5:31:16 | MacroBlockExpr | +| macro_expansion.rs:31:5:31:16 | println!... | macro_expansion.rs:31:5:31:16 | MacroBlockExpr | +| macro_expansion.rs:33:9:33:15 | hello!... | macro_expansion.rs:31:5:31:16 | MacroBlockExpr | +| macro_expansion.rs:33:9:33:15 | hello!... | macro_expansion.rs:31:5:31:16 | MacroBlockExpr | +| macro_expansion.rs:33:9:33:15 | hello!... | macro_expansion.rs:31:5:31:16 | MacroBlockExpr | | macro_expansion.rs:44:5:44:13 | def_x!... | macro_expansion.rs:44:5:44:13 | MacroItems | | macro_expansion.rs:53:9:53:25 | concat!... | macro_expansion.rs:53:17:53:24 | "xy" | | macro_expansion.rs:55:9:58:5 | my_macro!... | macro_expansion.rs:56:9:57:13 | MacroExpr | @@ -34,4 +43,5 @@ macro_calls | macro_expansion.rs:79:12:79:20 | my_int!... | macro_expansion.rs:79:12:79:20 | i32 | unexpanded_macro_calls | macro_expansion.rs:5:9:5:35 | concat!... | +| macro_expansion.rs:33:9:33:16 | hello!... | warnings diff --git a/rust/ql/test/library-tests/dataflow/global/main.rs b/rust/ql/test/library-tests/dataflow/global/main.rs index 6ca8f20f027c..fb5acfb7c606 100644 --- a/rust/ql/test/library-tests/dataflow/global/main.rs +++ b/rust/ql/test/library-tests/dataflow/global/main.rs @@ -227,7 +227,7 @@ fn test_operator_overloading() { let a = MyInt { value: source(28) }; let c = *a; - sink(c); // $ MISSING: hasValueFlow=28 + sink(c); // $ hasTaintFlow=28 MISSING: hasValueFlow=28 } trait MyTrait { diff --git a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected index be147a36ed3f..6fdac9700b6c 100644 --- a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected +++ b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected @@ -40,6 +40,8 @@ | main.rs:165:13:165:34 | ...::new(...) | main.rs:158:5:161:5 | fn new | | main.rs:165:24:165:33 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:167:5:167:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:181:10:181:14 | * ... | main.rs:188:5:190:5 | fn deref | +| main.rs:189:11:189:15 | * ... | main.rs:188:5:190:5 | fn deref | | main.rs:195:28:195:36 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:197:13:197:17 | ... + ... | main.rs:173:5:176:5 | fn add | | main.rs:198:5:198:17 | sink(...) | main.rs:5:1:7:1 | fn sink | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index dd9bb4ae810e..10fe084f0a2b 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -114,6 +114,8 @@ localStep | main.rs:89:9:89:9 | i | main.rs:89:9:89:9 | [SSA] i | | main.rs:89:9:89:9 | i | main.rs:89:9:89:9 | i | | main.rs:89:13:89:31 | ...::new(...) | main.rs:89:9:89:9 | i | +| main.rs:90:11:90:11 | [post] receiver for i | main.rs:90:11:90:11 | [post] i | +| main.rs:90:11:90:11 | i | main.rs:90:11:90:11 | receiver for i | | main.rs:97:9:97:9 | [SSA] a | main.rs:98:10:98:10 | a | | main.rs:97:9:97:9 | a | main.rs:97:9:97:9 | [SSA] a | | main.rs:97:9:97:9 | a | main.rs:97:9:97:9 | a | @@ -732,6 +734,8 @@ localStep | main.rs:482:11:482:19 | vs.iter() | main.rs:482:11:482:19 | receiver for vs.iter() | | main.rs:482:11:482:26 | ... .next() | main.rs:482:11:482:26 | receiver for ... .next() | | main.rs:482:11:482:26 | [post] receiver for ... .next() | main.rs:482:11:482:26 | [post] ... .next() | +| main.rs:482:11:482:35 | ... .unwrap() | main.rs:482:11:482:35 | receiver for ... .unwrap() | +| main.rs:482:11:482:35 | [post] receiver for ... .unwrap() | main.rs:482:11:482:35 | [post] ... .unwrap() | | main.rs:483:11:483:12 | [post] receiver for vs | main.rs:483:11:483:12 | [post] vs | | main.rs:483:11:483:12 | [post] vs | main.rs:485:14:485:15 | vs | | main.rs:483:11:483:12 | vs | main.rs:483:11:483:12 | receiver for vs | @@ -740,6 +744,8 @@ localStep | main.rs:483:11:483:19 | vs.iter() | main.rs:483:11:483:19 | receiver for vs.iter() | | main.rs:483:11:483:26 | ... .nth(...) | main.rs:483:11:483:26 | receiver for ... .nth(...) | | main.rs:483:11:483:26 | [post] receiver for ... .nth(...) | main.rs:483:11:483:26 | [post] ... .nth(...) | +| main.rs:483:11:483:35 | ... .unwrap() | main.rs:483:11:483:35 | receiver for ... .unwrap() | +| main.rs:483:11:483:35 | [post] receiver for ... .unwrap() | main.rs:483:11:483:35 | [post] ... .unwrap() | | main.rs:485:9:485:9 | [SSA] v | main.rs:486:14:486:14 | v | | main.rs:485:9:485:9 | v | main.rs:485:9:485:9 | [SSA] v | | main.rs:485:9:485:9 | v | main.rs:485:9:485:9 | v | @@ -774,6 +780,8 @@ localStep | main.rs:497:20:497:20 | [SSA] x | main.rs:497:29:497:29 | x | | main.rs:497:20:497:20 | x | main.rs:497:20:497:20 | [SSA] x | | main.rs:497:20:497:20 | x | main.rs:497:20:497:20 | x | +| main.rs:497:29:497:29 | [post] receiver for x | main.rs:497:29:497:29 | [post] x | +| main.rs:497:29:497:29 | x | main.rs:497:29:497:29 | receiver for x | | main.rs:498:5:498:6 | [post] receiver for vs | main.rs:498:5:498:6 | [post] vs | | main.rs:498:5:498:6 | [post] vs | main.rs:500:14:500:15 | vs | | main.rs:498:5:498:6 | vs | main.rs:498:5:498:6 | receiver for vs | @@ -784,6 +792,8 @@ localStep | main.rs:498:25:498:25 | [SSA] x | main.rs:498:34:498:34 | x | | main.rs:498:25:498:25 | x | main.rs:498:25:498:25 | [SSA] x | | main.rs:498:25:498:25 | x | main.rs:498:25:498:25 | x | +| main.rs:498:34:498:34 | [post] receiver for x | main.rs:498:34:498:34 | [post] x | +| main.rs:498:34:498:34 | x | main.rs:498:34:498:34 | receiver for x | | main.rs:500:9:500:9 | [SSA] v | main.rs:501:14:501:14 | v | | main.rs:500:9:500:9 | v | main.rs:500:9:500:9 | [SSA] v | | main.rs:500:9:500:9 | v | main.rs:500:9:500:9 | v | @@ -809,6 +819,8 @@ localStep | main.rs:507:11:507:23 | vs_mut.iter() | main.rs:507:11:507:23 | receiver for vs_mut.iter() | | main.rs:507:11:507:30 | ... .next() | main.rs:507:11:507:30 | receiver for ... .next() | | main.rs:507:11:507:30 | [post] receiver for ... .next() | main.rs:507:11:507:30 | [post] ... .next() | +| main.rs:507:11:507:39 | ... .unwrap() | main.rs:507:11:507:39 | receiver for ... .unwrap() | +| main.rs:507:11:507:39 | [post] receiver for ... .unwrap() | main.rs:507:11:507:39 | [post] ... .unwrap() | | main.rs:508:11:508:16 | [SSA] vs_mut | main.rs:510:19:510:24 | vs_mut | | main.rs:508:11:508:16 | [post] receiver for vs_mut | main.rs:508:11:508:16 | [post] vs_mut | | main.rs:508:11:508:16 | [post] vs_mut | main.rs:510:19:510:24 | vs_mut | @@ -818,6 +830,8 @@ localStep | main.rs:508:11:508:23 | vs_mut.iter() | main.rs:508:11:508:23 | receiver for vs_mut.iter() | | main.rs:508:11:508:30 | ... .nth(...) | main.rs:508:11:508:30 | receiver for ... .nth(...) | | main.rs:508:11:508:30 | [post] receiver for ... .nth(...) | main.rs:508:11:508:30 | [post] ... .nth(...) | +| main.rs:508:11:508:39 | ... .unwrap() | main.rs:508:11:508:39 | receiver for ... .unwrap() | +| main.rs:508:11:508:39 | [post] receiver for ... .unwrap() | main.rs:508:11:508:39 | [post] ... .unwrap() | | main.rs:510:5:512:5 | for ... in ... { ... } | main.rs:478:16:513:1 | { ... } | | main.rs:510:14:510:14 | [SSA] v | main.rs:511:14:511:14 | v | | main.rs:510:14:510:14 | v | main.rs:510:14:510:14 | [SSA] v | @@ -842,6 +856,8 @@ localStep | main.rs:519:17:519:18 | &c | main.rs:519:9:519:13 | c_ref | | main.rs:523:14:523:18 | [post] c_ref | main.rs:524:11:524:15 | c_ref | | main.rs:523:14:523:18 | c_ref | main.rs:524:11:524:15 | c_ref | +| main.rs:524:11:524:15 | [post] receiver for c_ref | main.rs:524:11:524:15 | [post] c_ref | +| main.rs:524:11:524:15 | c_ref | main.rs:524:11:524:15 | receiver for c_ref | | main.rs:528:9:528:9 | [SSA] a | main.rs:530:10:530:10 | a | | main.rs:528:9:528:9 | a | main.rs:528:9:528:9 | [SSA] a | | main.rs:528:9:528:9 | a | main.rs:528:9:528:9 | a | @@ -867,6 +883,7 @@ localStep | main.rs:577:36:577:41 | [post] MacroExpr | main.rs:577:36:577:41 | [post] ...::new(...) | readStep | main.rs:36:9:36:15 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:36:14:36:14 | _ | +| main.rs:90:11:90:11 | [post] receiver for i | file://:0:0:0:0 | &ref | main.rs:90:11:90:11 | [post] i | | main.rs:90:11:90:11 | i | file://:0:0:0:0 | &ref | main.rs:90:10:90:11 | * ... | | main.rs:98:10:98:10 | a | file://:0:0:0:0 | tuple.0 | main.rs:98:10:98:12 | a.0 | | main.rs:99:10:99:10 | a | file://:0:0:0:0 | tuple.1 | main.rs:99:10:99:12 | a.1 | @@ -981,6 +998,7 @@ readStep | main.rs:510:19:510:35 | vs_mut.iter_mut() | file://:0:0:0:0 | element | main.rs:510:9:510:14 | &mut ... | | main.rs:524:11:524:15 | c_ref | file://:0:0:0:0 | &ref | main.rs:524:10:524:15 | * ... | storeStep +| main.rs:90:11:90:11 | i | file://:0:0:0:0 | &ref | main.rs:90:11:90:11 | receiver for i | | main.rs:97:14:97:22 | source(...) | file://:0:0:0:0 | tuple.0 | main.rs:97:13:97:26 | TupleExpr | | main.rs:97:25:97:25 | 2 | file://:0:0:0:0 | tuple.1 | main.rs:97:13:97:26 | TupleExpr | | main.rs:103:14:103:14 | 2 | file://:0:0:0:0 | tuple.0 | main.rs:103:13:103:30 | TupleExpr | diff --git a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected index d242a227c11d..c6d80a4c3959 100644 --- a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected @@ -3,7 +3,7 @@ multiplePathResolutions | main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f | | main.rs:626:3:626:12 | proc_macro | file://:0:0:0:0 | Crate(proc_macro@0.0.0) | | main.rs:626:3:626:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:631:7:631:16 | proc_macro | file://:0:0:0:0 | Crate(proc_macro@0.0.0) | -| main.rs:631:7:631:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:634:7:634:16 | proc_macro | file://:0:0:0:0 | Crate(proc_macro@0.0.0) | -| main.rs:634:7:634:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:632:7:632:16 | proc_macro | file://:0:0:0:0 | Crate(proc_macro@0.0.0) | +| main.rs:632:7:632:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:635:7:635:16 | proc_macro | file://:0:0:0:0 | Crate(proc_macro@0.0.0) | +| main.rs:635:7:635:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index c8c6f36ac3f0..cf848ba26876 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -627,7 +627,8 @@ extern crate self as zelf; fn z() {} // I122 struct AStruct {} //I123 -impl AStruct { // $ item=I123 +impl AStruct // $ item=I123 +{ #[proc_macro::add_suffix("on_type")] // $ item=add_suffix pub fn z() {} // I124 @@ -635,6 +636,10 @@ impl AStruct { // $ item=I123 pub fn z(&self) {} // I125 } +use std::{self as ztd}; // $ item=std + +fn use_ztd(x: ztd::string::String) {} // $ item=String + fn main() { my::nested::nested1::nested2::f(); // $ item=I4 my::f(); // $ item=I38 @@ -667,6 +672,6 @@ fn main() { zelf::h(); // $ item=I25 z_changed(); // $ MISSING: item=I122 AStruct::z_on_type(); // $ MISSING: item=I124 - AStruct{} // $ item=I123 + AStruct {} // $ item=I123 .z_on_instance(); // MISSING: item=I125 } diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index fd712596821b..164852626dbe 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -61,7 +61,7 @@ resolvePath | main.rs:30:17:30:21 | super | main.rs:18:5:36:5 | mod m2 | | main.rs:30:17:30:24 | ...::f | main.rs:19:9:21:9 | fn f | | main.rs:33:17:33:17 | f | main.rs:19:9:21:9 | fn f | -| main.rs:40:9:40:13 | super | main.rs:1:1:672:2 | SourceFile | +| main.rs:40:9:40:13 | super | main.rs:1:1:677:2 | SourceFile | | main.rs:40:9:40:17 | ...::m1 | main.rs:13:1:37:1 | mod m1 | | main.rs:40:9:40:21 | ...::m2 | main.rs:18:5:36:5 | mod m2 | | main.rs:40:9:40:24 | ...::g | main.rs:23:9:27:9 | fn g | @@ -73,7 +73,7 @@ resolvePath | main.rs:61:17:61:19 | Foo | main.rs:59:9:59:21 | struct Foo | | main.rs:64:13:64:15 | Foo | main.rs:53:5:53:17 | struct Foo | | main.rs:66:5:66:5 | f | main.rs:55:5:62:5 | fn f | -| main.rs:68:5:68:8 | self | main.rs:1:1:672:2 | SourceFile | +| main.rs:68:5:68:8 | self | main.rs:1:1:677:2 | SourceFile | | main.rs:68:5:68:11 | ...::i | main.rs:71:1:83:1 | fn i | | main.rs:74:13:74:15 | Foo | main.rs:48:1:48:13 | struct Foo | | main.rs:78:16:78:18 | i32 | {EXTERNAL LOCATION} | struct i32 | @@ -88,7 +88,7 @@ resolvePath | main.rs:87:57:87:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g | | main.rs:87:80:87:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | | main.rs:100:5:100:22 | f_defined_in_macro | main.rs:99:18:99:42 | fn f_defined_in_macro | -| main.rs:117:13:117:17 | super | main.rs:1:1:672:2 | SourceFile | +| main.rs:117:13:117:17 | super | main.rs:1:1:677:2 | SourceFile | | main.rs:117:13:117:21 | ...::m5 | main.rs:103:1:107:1 | mod m5 | | main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f | | main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f | @@ -270,75 +270,80 @@ resolvePath | main.rs:626:3:626:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | | main.rs:626:3:626:24 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | | main.rs:630:6:630:12 | AStruct | main.rs:629:1:629:17 | struct AStruct | -| main.rs:631:7:631:16 | proc_macro | {EXTERNAL LOCATION} | Crate(proc_macro@0.0.0) | -| main.rs:631:7:631:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:631:7:631:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | -| main.rs:634:7:634:16 | proc_macro | {EXTERNAL LOCATION} | Crate(proc_macro@0.0.0) | -| main.rs:634:7:634:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:634:7:634:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | -| main.rs:639:5:639:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:639:5:639:14 | ...::nested | my.rs:1:1:1:15 | mod nested | -| main.rs:639:5:639:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | -| main.rs:639:5:639:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | -| main.rs:639:5:639:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | -| main.rs:640:5:640:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:640:5:640:9 | ...::f | my.rs:5:1:7:1 | fn f | -| main.rs:641:5:641:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:641:5:641:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | -| main.rs:641:5:641:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:641:5:641:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:642:5:642:5 | f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:643:5:643:5 | g | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:644:5:644:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:644:5:644:12 | ...::h | main.rs:50:1:69:1 | fn h | -| main.rs:645:5:645:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:645:5:645:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:645:5:645:13 | ...::g | main.rs:23:9:27:9 | fn g | -| main.rs:646:5:646:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:646:5:646:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:646:5:646:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | -| main.rs:646:5:646:17 | ...::h | main.rs:30:27:34:13 | fn h | -| main.rs:647:5:647:6 | m4 | main.rs:39:1:46:1 | mod m4 | -| main.rs:647:5:647:9 | ...::i | main.rs:42:5:45:5 | fn i | -| main.rs:648:5:648:5 | h | main.rs:50:1:69:1 | fn h | -| main.rs:649:5:649:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:650:5:650:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:651:5:651:5 | j | main.rs:97:1:101:1 | fn j | -| main.rs:652:5:652:6 | m6 | main.rs:109:1:120:1 | mod m6 | -| main.rs:652:5:652:9 | ...::g | main.rs:114:5:119:5 | fn g | -| main.rs:653:5:653:6 | m7 | main.rs:122:1:141:1 | mod m7 | -| main.rs:653:5:653:9 | ...::f | main.rs:133:5:140:5 | fn f | -| main.rs:654:5:654:6 | m8 | main.rs:143:1:197:1 | mod m8 | -| main.rs:654:5:654:9 | ...::g | main.rs:181:5:196:5 | fn g | -| main.rs:655:5:655:6 | m9 | main.rs:199:1:207:1 | mod m9 | -| main.rs:655:5:655:9 | ...::f | main.rs:202:5:206:5 | fn f | -| main.rs:656:5:656:7 | m11 | main.rs:230:1:267:1 | mod m11 | -| main.rs:656:5:656:10 | ...::f | main.rs:235:5:238:5 | fn f | -| main.rs:657:5:657:7 | m15 | main.rs:298:1:352:1 | mod m15 | -| main.rs:657:5:657:10 | ...::f | main.rs:339:5:351:5 | fn f | -| main.rs:658:5:658:7 | m16 | main.rs:354:1:446:1 | mod m16 | -| main.rs:658:5:658:10 | ...::f | main.rs:421:5:445:5 | fn f | -| main.rs:659:5:659:7 | m17 | main.rs:448:1:478:1 | mod m17 | -| main.rs:659:5:659:10 | ...::f | main.rs:472:5:477:5 | fn f | -| main.rs:660:5:660:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | -| main.rs:660:5:660:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | -| main.rs:661:5:661:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | -| main.rs:661:5:661:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | -| main.rs:662:5:662:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | -| main.rs:662:5:662:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | -| main.rs:663:5:663:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | -| main.rs:664:5:664:7 | m18 | main.rs:480:1:498:1 | mod m18 | -| main.rs:664:5:664:12 | ...::m19 | main.rs:485:5:497:5 | mod m19 | -| main.rs:664:5:664:17 | ...::m20 | main.rs:490:9:496:9 | mod m20 | -| main.rs:664:5:664:20 | ...::g | main.rs:491:13:495:13 | fn g | -| main.rs:665:5:665:7 | m23 | main.rs:527:1:552:1 | mod m23 | -| main.rs:665:5:665:10 | ...::f | main.rs:547:5:551:5 | fn f | -| main.rs:666:5:666:7 | m24 | main.rs:554:1:622:1 | mod m24 | -| main.rs:666:5:666:10 | ...::f | main.rs:608:5:621:5 | fn f | -| main.rs:667:5:667:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:667:5:667:11 | ...::h | main.rs:50:1:69:1 | fn h | -| main.rs:669:5:669:11 | AStruct | main.rs:629:1:629:17 | struct AStruct | -| main.rs:670:5:670:11 | AStruct | main.rs:629:1:629:17 | struct AStruct | +| main.rs:632:7:632:16 | proc_macro | {EXTERNAL LOCATION} | Crate(proc_macro@0.0.0) | +| main.rs:632:7:632:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:632:7:632:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:635:7:635:16 | proc_macro | {EXTERNAL LOCATION} | Crate(proc_macro@0.0.0) | +| main.rs:635:7:635:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:635:7:635:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:639:5:639:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:639:11:639:14 | self | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:641:15:641:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:641:15:641:25 | ...::string | {EXTERNAL LOCATION} | mod string | +| main.rs:641:15:641:33 | ...::String | {EXTERNAL LOCATION} | struct String | +| main.rs:644:5:644:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:644:5:644:14 | ...::nested | my.rs:1:1:1:15 | mod nested | +| main.rs:644:5:644:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | +| main.rs:644:5:644:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | +| main.rs:644:5:644:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | +| main.rs:645:5:645:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:645:5:645:9 | ...::f | my.rs:5:1:7:1 | fn f | +| main.rs:646:5:646:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:646:5:646:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | +| main.rs:646:5:646:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:646:5:646:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:647:5:647:5 | f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:648:5:648:5 | g | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:649:5:649:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:649:5:649:12 | ...::h | main.rs:50:1:69:1 | fn h | +| main.rs:650:5:650:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:650:5:650:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:650:5:650:13 | ...::g | main.rs:23:9:27:9 | fn g | +| main.rs:651:5:651:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:651:5:651:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:651:5:651:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | +| main.rs:651:5:651:17 | ...::h | main.rs:30:27:34:13 | fn h | +| main.rs:652:5:652:6 | m4 | main.rs:39:1:46:1 | mod m4 | +| main.rs:652:5:652:9 | ...::i | main.rs:42:5:45:5 | fn i | +| main.rs:653:5:653:5 | h | main.rs:50:1:69:1 | fn h | +| main.rs:654:5:654:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:655:5:655:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:656:5:656:5 | j | main.rs:97:1:101:1 | fn j | +| main.rs:657:5:657:6 | m6 | main.rs:109:1:120:1 | mod m6 | +| main.rs:657:5:657:9 | ...::g | main.rs:114:5:119:5 | fn g | +| main.rs:658:5:658:6 | m7 | main.rs:122:1:141:1 | mod m7 | +| main.rs:658:5:658:9 | ...::f | main.rs:133:5:140:5 | fn f | +| main.rs:659:5:659:6 | m8 | main.rs:143:1:197:1 | mod m8 | +| main.rs:659:5:659:9 | ...::g | main.rs:181:5:196:5 | fn g | +| main.rs:660:5:660:6 | m9 | main.rs:199:1:207:1 | mod m9 | +| main.rs:660:5:660:9 | ...::f | main.rs:202:5:206:5 | fn f | +| main.rs:661:5:661:7 | m11 | main.rs:230:1:267:1 | mod m11 | +| main.rs:661:5:661:10 | ...::f | main.rs:235:5:238:5 | fn f | +| main.rs:662:5:662:7 | m15 | main.rs:298:1:352:1 | mod m15 | +| main.rs:662:5:662:10 | ...::f | main.rs:339:5:351:5 | fn f | +| main.rs:663:5:663:7 | m16 | main.rs:354:1:446:1 | mod m16 | +| main.rs:663:5:663:10 | ...::f | main.rs:421:5:445:5 | fn f | +| main.rs:664:5:664:7 | m17 | main.rs:448:1:478:1 | mod m17 | +| main.rs:664:5:664:10 | ...::f | main.rs:472:5:477:5 | fn f | +| main.rs:665:5:665:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | +| main.rs:665:5:665:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | +| main.rs:666:5:666:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | +| main.rs:666:5:666:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | +| main.rs:667:5:667:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | +| main.rs:667:5:667:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | +| main.rs:668:5:668:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | +| main.rs:669:5:669:7 | m18 | main.rs:480:1:498:1 | mod m18 | +| main.rs:669:5:669:12 | ...::m19 | main.rs:485:5:497:5 | mod m19 | +| main.rs:669:5:669:17 | ...::m20 | main.rs:490:9:496:9 | mod m20 | +| main.rs:669:5:669:20 | ...::g | main.rs:491:13:495:13 | fn g | +| main.rs:670:5:670:7 | m23 | main.rs:527:1:552:1 | mod m23 | +| main.rs:670:5:670:10 | ...::f | main.rs:547:5:551:5 | fn f | +| main.rs:671:5:671:7 | m24 | main.rs:554:1:622:1 | mod m24 | +| main.rs:671:5:671:10 | ...::f | main.rs:608:5:621:5 | fn f | +| main.rs:672:5:672:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:672:5:672:11 | ...::h | main.rs:50:1:69:1 | fn h | +| main.rs:674:5:674:11 | AStruct | main.rs:629:1:629:17 | struct AStruct | +| main.rs:675:5:675:11 | AStruct | main.rs:629:1:629:17 | struct AStruct | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | | my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | @@ -354,7 +359,7 @@ resolvePath | my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g | | my2/my3/mod.rs:4:5:4:5 | h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:17:30 | SourceFile | -| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:672:2 | SourceFile | +| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:677:2 | SourceFile | | my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:17:30 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..81551e369e2f --- /dev/null +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,3 @@ +multipleMethodCallTargets +| dereference.rs:61:15:61:24 | e1.deref() | file://:0:0:0:0 | fn deref | +| dereference.rs:61:15:61:24 | e1.deref() | file://:0:0:0:0 | fn deref | diff --git a/rust/ql/test/library-tests/type-inference/dereference.rs b/rust/ql/test/library-tests/type-inference/dereference.rs new file mode 100644 index 000000000000..fb16eb00cf3d --- /dev/null +++ b/rust/ql/test/library-tests/type-inference/dereference.rs @@ -0,0 +1,102 @@ +/// This file contains tests for dereferencing with through the `Deref` trait. +use std::ops::Deref; + +struct MyIntPointer { + value: i64, +} + +impl Deref for MyIntPointer { + type Target = i64; + + // MyIntPointer::deref + fn deref(&self) -> &i64 { + &self.value // $ fieldof=MyIntPointer + } +} + +struct MySmartPointer<T> { + value: T, +} + +impl<T> Deref for MySmartPointer<T> { + type Target = T; + + // MySmartPointer::deref + fn deref(&self) -> &T { + &self.value // $ fieldof=MySmartPointer + } +} + +fn explicit_monomorphic_dereference() { + // Dereference with method call + let a1 = MyIntPointer { value: 34i64 }; + let _b1 = a1.deref(); // $ method=MyIntPointer::deref type=_b1:&T.i64 + + // Dereference with overloaded dereference operator + let a2 = MyIntPointer { value: 34i64 }; + let _b2 = *a2; // $ method=MyIntPointer::deref type=_b2:i64 + + // Call method on explicitly dereferenced value + let a3 = MyIntPointer { value: 34i64 }; + let _b3 = (*a3).is_positive(); // $ method=MyIntPointer::deref method=is_positive type=_b3:bool +} + +fn explicit_polymorphic_dereference() { + // Explicit dereference with type parameter + let c1 = MySmartPointer { value: 'a' }; + let _d1 = c1.deref(); // $ method=MySmartPointer::deref type=_d1:&T.char + + // Explicit dereference with type parameter + let c2 = MySmartPointer { value: 'a' }; + let _d2 = *c2; // $ method=MySmartPointer::deref type=_d2:char + + // Call method on explicitly dereferenced value with type parameter + let c3 = MySmartPointer { value: 34i64 }; + let _d3 = (*c3).is_positive(); // $ method=MySmartPointer::deref method=is_positive type=_d3:bool +} + +fn explicit_ref_dereference() { + // Explicit dereference with type parameter + let e1 = &'a'; + let _f1 = e1.deref(); // $ method=deref MISSING: type=_f1:&T.char + + // Explicit dereference with type parameter + let e2 = &'a'; + let _f2 = *e2; // $ method=deref type=_f2:char + + // Call method on explicitly dereferenced value with type parameter + let e3 = &34i64; + let _f3 = (*e3).is_positive(); // $ method=deref method=is_positive type=_f3:bool +} + +fn explicit_box_dereference() { + // Explicit dereference with type parameter + let g1: Box<char> = Box::new('a'); + let _h1 = g1.deref(); // $ method=deref type=_h1:&T.char + + // Explicit dereference with type parameter + let g2: Box<char> = Box::new('a'); + let _h2 = *g2; // $ method=deref type=_h2:char + + // Call method on explicitly dereferenced value with type parameter + let g3: Box<i64> = Box::new(34i64); + let _h3 = (*g3).is_positive(); // $ method=deref method=is_positive type=_h3:bool +} + +fn implicit_dereference() { + // Call method on implicitly dereferenced value + let x = MyIntPointer { value: 34i64 }; + let _y = x.is_positive(); // $ MISSING: method=is_positive type=_y:bool + + // Call method on implicitly dereferenced value + let x = MySmartPointer { value: 34i64 }; + let _y = x.is_positive(); // $ MISSING: method=is_positive type=_y:bool +} + +pub fn test() { + explicit_monomorphic_dereference(); + explicit_polymorphic_dereference(); + explicit_ref_dereference(); + explicit_box_dereference(); + implicit_dereference(); +} diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 5b7232ae8494..109581588a58 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1079,6 +1079,11 @@ mod method_call_type_conversion { #[derive(Debug, Copy, Clone)] struct S2; + #[derive(Debug, Copy, Clone, Default)] + struct MyInt { + a: i64, + } + impl<T> S<T> { fn m1(self) -> T { self.0 // $ fieldof=S @@ -1093,6 +1098,24 @@ mod method_call_type_conversion { } } + trait ATrait { + fn method_on_borrow(&self) -> i64; + fn method_not_on_borrow(self) -> i64; + } + + // Trait implementation on a borrow. + impl ATrait for &MyInt { + // MyInt::method_on_borrow + fn method_on_borrow(&self) -> i64 { + (*(*self)).a // $ method=deref fieldof=MyInt + } + + // MyInt::method_not_on_borrow + fn method_not_on_borrow(self) -> i64 { + (*self).a // $ method=deref fieldof=MyInt + } + } + pub fn f() { let x1 = S(S2); println!("{:?}", x1.m1()); // $ method=m1 @@ -1117,7 +1140,7 @@ mod method_call_type_conversion { println!("{:?}", x5.m1()); // $ method=m1 println!("{:?}", x5.0); // $ fieldof=S - let x6 = &S(S2); // $ SPURIOUS: type=x6:&T.&T.S + let x6 = &S(S2); // explicit dereference println!("{:?}", (*x6).m1()); // $ method=m1 method=deref @@ -1128,10 +1151,21 @@ mod method_call_type_conversion { let t = x7.m1(); // $ method=m1 type=t:& type=t:&T.S2 println!("{:?}", x7); - let x9 : String = "Hello".to_string(); // $ type=x9:String + let x9: String = "Hello".to_string(); // $ type=x9:String + // Implicit `String` -> `str` conversion happens via the `Deref` trait: // https://doc.rust-lang.org/std/string/struct.String.html#deref. let u = x9.parse::<u32>(); // $ method=parse type=u:T.u32 + + let my_thing = &MyInt { a: 37 }; + // implicit borrow of a `&` + let a = my_thing.method_on_borrow(); // $ MISSING: method=MyInt::method_on_borrow + println!("{:?}", a); + + // no implicit borrow + let my_thing = &MyInt { a: 38 }; + let a = my_thing.method_not_on_borrow(); // $ MISSING: method=MyInt::method_not_on_borrow + println!("{:?}", a); } } @@ -1680,6 +1714,11 @@ mod overloadable_operators { // Here the type of `default_vec2` must be inferred from the `+` call. let default_vec2 = Default::default(); // $ type=default_vec2:Vec2 let vec2_zero_plus = Vec2 { x: 0, y: 0 } + default_vec2; // $ method=Vec2::add + + // Here the type of `default_vec2` must be inferred from the `==` call + // and the type of the borrowed second argument is unknown at the call. + let default_vec2 = Default::default(); // $ type=default_vec2:Vec2 + let vec2_zero_plus = Vec2 { x: 0, y: 0 } == default_vec2; // $ method=Vec2::eq } } @@ -1881,6 +1920,8 @@ mod method_determined_by_argument_type { } } +mod dereference; + fn main() { field_access::f(); method_impl::f(); @@ -1905,4 +1946,5 @@ fn main() { indexers::f(); macros::f(); method_determined_by_argument_type::f(); + dereference::test(); } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 758882f52d84..fdbe769eba8e 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,193 @@ inferType +| dereference.rs:12:14:12:18 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:12:14:12:18 | SelfParam | &T | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:12:29:14:5 | { ... } | | file://:0:0:0:0 | & | +| dereference.rs:12:29:14:5 | { ... } | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:13:9:13:19 | &... | | file://:0:0:0:0 | & | +| dereference.rs:13:9:13:19 | &... | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:13:10:13:13 | self | | file://:0:0:0:0 | & | +| dereference.rs:13:10:13:13 | self | &T | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:13:10:13:19 | self.value | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:25:14:25:18 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:25:14:25:18 | SelfParam | &T | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:25:14:25:18 | SelfParam | &T.T | dereference.rs:21:6:21:6 | T | +| dereference.rs:25:27:27:5 | { ... } | | file://:0:0:0:0 | & | +| dereference.rs:25:27:27:5 | { ... } | &T | dereference.rs:21:6:21:6 | T | +| dereference.rs:26:9:26:19 | &... | | file://:0:0:0:0 | & | +| dereference.rs:26:9:26:19 | &... | &T | dereference.rs:21:6:21:6 | T | +| dereference.rs:26:10:26:13 | self | | file://:0:0:0:0 | & | +| dereference.rs:26:10:26:13 | self | &T | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:26:10:26:13 | self | &T.T | dereference.rs:21:6:21:6 | T | +| dereference.rs:26:10:26:19 | self.value | | dereference.rs:21:6:21:6 | T | +| dereference.rs:32:9:32:10 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:32:14:32:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:32:36:32:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:33:9:33:11 | _b1 | | file://:0:0:0:0 | & | +| dereference.rs:33:9:33:11 | _b1 | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:33:15:33:16 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:33:15:33:24 | a1.deref() | | file://:0:0:0:0 | & | +| dereference.rs:33:15:33:24 | a1.deref() | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:36:9:36:10 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:36:14:36:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:36:36:36:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:37:9:37:11 | _b2 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:37:9:37:11 | _b2 | | file://:0:0:0:0 | & | +| dereference.rs:37:9:37:11 | _b2 | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:37:15:37:17 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:37:15:37:17 | * ... | | file://:0:0:0:0 | & | +| dereference.rs:37:15:37:17 | * ... | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:37:16:37:17 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:40:9:40:10 | a3 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:40:14:40:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:40:36:40:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:41:9:41:11 | _b3 | | {EXTERNAL LOCATION} | bool | +| dereference.rs:41:15:41:19 | (...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:41:15:41:19 | (...) | | file://:0:0:0:0 | & | +| dereference.rs:41:15:41:19 | (...) | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:41:15:41:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:41:16:41:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:41:16:41:18 | * ... | | file://:0:0:0:0 | & | +| dereference.rs:41:16:41:18 | * ... | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:41:17:41:18 | a3 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:46:9:46:10 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:46:9:46:10 | c1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:46:14:46:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:46:14:46:42 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | char | +| dereference.rs:46:38:46:40 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:47:9:47:11 | _d1 | | file://:0:0:0:0 | & | +| dereference.rs:47:9:47:11 | _d1 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:47:15:47:16 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:47:15:47:16 | c1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:47:15:47:24 | c1.deref() | | file://:0:0:0:0 | & | +| dereference.rs:47:15:47:24 | c1.deref() | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:50:9:50:10 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:50:9:50:10 | c2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:50:14:50:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:50:14:50:42 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | char | +| dereference.rs:50:38:50:40 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:51:9:51:11 | _d2 | | {EXTERNAL LOCATION} | char | +| dereference.rs:51:9:51:11 | _d2 | | file://:0:0:0:0 | & | +| dereference.rs:51:9:51:11 | _d2 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:51:15:51:17 | * ... | | {EXTERNAL LOCATION} | char | +| dereference.rs:51:15:51:17 | * ... | | file://:0:0:0:0 | & | +| dereference.rs:51:15:51:17 | * ... | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:51:16:51:17 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:51:16:51:17 | c2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:54:9:54:10 | c3 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:54:9:54:10 | c3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:54:14:54:44 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:54:14:54:44 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:54:38:54:42 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:55:9:55:11 | _d3 | | {EXTERNAL LOCATION} | bool | +| dereference.rs:55:15:55:19 | (...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:55:15:55:19 | (...) | | file://:0:0:0:0 | & | +| dereference.rs:55:15:55:19 | (...) | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:55:15:55:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:55:16:55:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:55:16:55:18 | * ... | | file://:0:0:0:0 | & | +| dereference.rs:55:16:55:18 | * ... | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:55:17:55:18 | c3 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:55:17:55:18 | c3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:60:9:60:10 | e1 | | file://:0:0:0:0 | & | +| dereference.rs:60:9:60:10 | e1 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:60:9:60:10 | e1 | &T | file://:0:0:0:0 | & | +| dereference.rs:60:14:60:17 | &'a' | | file://:0:0:0:0 | & | +| dereference.rs:60:14:60:17 | &'a' | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:60:14:60:17 | &'a' | &T | file://:0:0:0:0 | & | +| dereference.rs:60:15:60:17 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:60:15:60:17 | 'a' | | file://:0:0:0:0 | & | +| dereference.rs:61:9:61:11 | _f1 | | file://:0:0:0:0 | & | +| dereference.rs:61:15:61:16 | e1 | | file://:0:0:0:0 | & | +| dereference.rs:61:15:61:16 | e1 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:61:15:61:16 | e1 | &T | file://:0:0:0:0 | & | +| dereference.rs:61:15:61:24 | e1.deref() | | file://:0:0:0:0 | & | +| dereference.rs:64:9:64:10 | e2 | | file://:0:0:0:0 | & | +| dereference.rs:64:9:64:10 | e2 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:64:14:64:17 | &'a' | | file://:0:0:0:0 | & | +| dereference.rs:64:14:64:17 | &'a' | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:64:15:64:17 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:65:9:65:11 | _f2 | | {EXTERNAL LOCATION} | char | +| dereference.rs:65:9:65:11 | _f2 | | file://:0:0:0:0 | & | +| dereference.rs:65:9:65:11 | _f2 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:65:15:65:17 | * ... | | {EXTERNAL LOCATION} | char | +| dereference.rs:65:15:65:17 | * ... | | file://:0:0:0:0 | & | +| dereference.rs:65:15:65:17 | * ... | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:65:16:65:17 | e2 | | file://:0:0:0:0 | & | +| dereference.rs:65:16:65:17 | e2 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:68:9:68:10 | e3 | | file://:0:0:0:0 | & | +| dereference.rs:68:9:68:10 | e3 | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:68:14:68:19 | &34i64 | | file://:0:0:0:0 | & | +| dereference.rs:68:14:68:19 | &34i64 | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:68:15:68:19 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:69:9:69:11 | _f3 | | {EXTERNAL LOCATION} | bool | +| dereference.rs:69:15:69:19 | (...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:69:15:69:19 | (...) | | file://:0:0:0:0 | & | +| dereference.rs:69:15:69:19 | (...) | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:69:15:69:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:69:16:69:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:69:16:69:18 | * ... | | file://:0:0:0:0 | & | +| dereference.rs:69:16:69:18 | * ... | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:69:17:69:18 | e3 | | file://:0:0:0:0 | & | +| dereference.rs:69:17:69:18 | e3 | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:74:9:74:10 | g1 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:74:9:74:10 | g1 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:74:9:74:10 | g1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:74:25:74:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:74:25:74:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:74:25:74:37 | ...::new(...) | T | {EXTERNAL LOCATION} | char | +| dereference.rs:74:34:74:36 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:75:9:75:11 | _h1 | | file://:0:0:0:0 | & | +| dereference.rs:75:9:75:11 | _h1 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:75:15:75:16 | g1 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:75:15:75:16 | g1 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:75:15:75:16 | g1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:75:15:75:24 | g1.deref() | | file://:0:0:0:0 | & | +| dereference.rs:75:15:75:24 | g1.deref() | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:78:9:78:10 | g2 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:78:9:78:10 | g2 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:78:9:78:10 | g2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:78:25:78:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:78:25:78:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:78:25:78:37 | ...::new(...) | T | {EXTERNAL LOCATION} | char | +| dereference.rs:78:34:78:36 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:79:9:79:11 | _h2 | | {EXTERNAL LOCATION} | char | +| dereference.rs:79:9:79:11 | _h2 | | file://:0:0:0:0 | & | +| dereference.rs:79:9:79:11 | _h2 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:79:15:79:17 | * ... | | {EXTERNAL LOCATION} | char | +| dereference.rs:79:15:79:17 | * ... | | file://:0:0:0:0 | & | +| dereference.rs:79:15:79:17 | * ... | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:79:16:79:17 | g2 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:79:16:79:17 | g2 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:79:16:79:17 | g2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:82:9:82:10 | g3 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:82:9:82:10 | g3 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:82:9:82:10 | g3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:82:24:82:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:82:24:82:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:82:24:82:38 | ...::new(...) | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:82:33:82:37 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:83:9:83:11 | _h3 | | {EXTERNAL LOCATION} | bool | +| dereference.rs:83:15:83:19 | (...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:83:15:83:19 | (...) | | file://:0:0:0:0 | & | +| dereference.rs:83:15:83:19 | (...) | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:83:15:83:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:83:16:83:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:83:16:83:18 | * ... | | file://:0:0:0:0 | & | +| dereference.rs:83:16:83:18 | * ... | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:83:17:83:18 | g3 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:83:17:83:18 | g3 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:83:17:83:18 | g3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:88:9:88:9 | x | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:88:13:88:41 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:88:35:88:39 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:89:14:89:14 | x | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:92:9:92:9 | x | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:92:9:92:9 | x | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:92:13:92:43 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:92:13:92:43 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:92:37:92:41 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:93:14:93:14 | x | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:93:14:93:14 | x | T | {EXTERNAL LOCATION} | i64 | | loop/main.rs:7:12:7:15 | SelfParam | | loop/main.rs:6:1:8:1 | Self [trait T1] | | loop/main.rs:11:12:11:15 | SelfParam | | loop/main.rs:10:1:14:1 | Self [trait T2] | | loop/main.rs:12:9:12:12 | self | | loop/main.rs:10:1:14:1 | Self [trait T2] | @@ -1275,1439 +1464,1509 @@ inferType | main.rs:1070:18:1070:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | | main.rs:1070:26:1070:34 | from_loop | | main.rs:988:5:992:5 | MyOption | | main.rs:1070:26:1070:34 | from_loop | T | main.rs:1023:5:1024:13 | S | -| main.rs:1083:15:1083:18 | SelfParam | | main.rs:1076:5:1077:19 | S | -| main.rs:1083:15:1083:18 | SelfParam | T | main.rs:1082:10:1082:10 | T | -| main.rs:1083:26:1085:9 | { ... } | | main.rs:1082:10:1082:10 | T | -| main.rs:1084:13:1084:16 | self | | main.rs:1076:5:1077:19 | S | -| main.rs:1084:13:1084:16 | self | T | main.rs:1082:10:1082:10 | T | -| main.rs:1084:13:1084:18 | self.0 | | main.rs:1082:10:1082:10 | T | -| main.rs:1087:15:1087:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1087:15:1087:19 | SelfParam | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1087:15:1087:19 | SelfParam | &T.T | main.rs:1082:10:1082:10 | T | -| main.rs:1087:28:1089:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1087:28:1089:9 | { ... } | &T | main.rs:1082:10:1082:10 | T | -| main.rs:1088:13:1088:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1088:13:1088:19 | &... | &T | main.rs:1082:10:1082:10 | T | -| main.rs:1088:14:1088:17 | self | | file://:0:0:0:0 | & | -| main.rs:1088:14:1088:17 | self | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1088:14:1088:17 | self | &T.T | main.rs:1082:10:1082:10 | T | -| main.rs:1088:14:1088:19 | self.0 | | main.rs:1082:10:1082:10 | T | -| main.rs:1091:15:1091:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1091:15:1091:25 | SelfParam | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1091:15:1091:25 | SelfParam | &T.T | main.rs:1082:10:1082:10 | T | -| main.rs:1091:34:1093:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1091:34:1093:9 | { ... } | &T | main.rs:1082:10:1082:10 | T | -| main.rs:1092:13:1092:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1092:13:1092:19 | &... | &T | main.rs:1082:10:1082:10 | T | -| main.rs:1092:14:1092:17 | self | | file://:0:0:0:0 | & | -| main.rs:1092:14:1092:17 | self | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1092:14:1092:17 | self | &T.T | main.rs:1082:10:1082:10 | T | -| main.rs:1092:14:1092:19 | self.0 | | main.rs:1082:10:1082:10 | T | -| main.rs:1097:13:1097:14 | x1 | | main.rs:1076:5:1077:19 | S | -| main.rs:1097:13:1097:14 | x1 | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1097:18:1097:22 | S(...) | | main.rs:1076:5:1077:19 | S | -| main.rs:1097:18:1097:22 | S(...) | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1097:20:1097:21 | S2 | | main.rs:1079:5:1080:14 | S2 | -| main.rs:1098:18:1098:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1098:26:1098:27 | x1 | | main.rs:1076:5:1077:19 | S | -| main.rs:1098:26:1098:27 | x1 | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1098:26:1098:32 | x1.m1() | | main.rs:1079:5:1080:14 | S2 | -| main.rs:1100:13:1100:14 | x2 | | main.rs:1076:5:1077:19 | S | -| main.rs:1100:13:1100:14 | x2 | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1100:18:1100:22 | S(...) | | main.rs:1076:5:1077:19 | S | -| main.rs:1100:18:1100:22 | S(...) | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1100:20:1100:21 | S2 | | main.rs:1079:5:1080:14 | S2 | -| main.rs:1102:18:1102:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1102:26:1102:27 | x2 | | main.rs:1076:5:1077:19 | S | -| main.rs:1102:26:1102:27 | x2 | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1102:26:1102:32 | x2.m2() | | file://:0:0:0:0 | & | -| main.rs:1102:26:1102:32 | x2.m2() | &T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1103:18:1103:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1103:26:1103:27 | x2 | | main.rs:1076:5:1077:19 | S | -| main.rs:1103:26:1103:27 | x2 | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1103:26:1103:32 | x2.m3() | | file://:0:0:0:0 | & | -| main.rs:1103:26:1103:32 | x2.m3() | &T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1105:13:1105:14 | x3 | | main.rs:1076:5:1077:19 | S | -| main.rs:1105:13:1105:14 | x3 | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1105:18:1105:22 | S(...) | | main.rs:1076:5:1077:19 | S | -| main.rs:1105:18:1105:22 | S(...) | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1105:20:1105:21 | S2 | | main.rs:1079:5:1080:14 | S2 | -| main.rs:1107:18:1107:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1107:26:1107:41 | ...::m2(...) | | file://:0:0:0:0 | & | -| main.rs:1107:26:1107:41 | ...::m2(...) | &T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1107:38:1107:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:1107:38:1107:40 | &x3 | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1107:38:1107:40 | &x3 | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1107:39:1107:40 | x3 | | main.rs:1076:5:1077:19 | S | -| main.rs:1107:39:1107:40 | x3 | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1108:18:1108:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1108:26:1108:41 | ...::m3(...) | | file://:0:0:0:0 | & | -| main.rs:1108:26:1108:41 | ...::m3(...) | &T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1108:38:1108:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:1108:38:1108:40 | &x3 | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1108:38:1108:40 | &x3 | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1108:39:1108:40 | x3 | | main.rs:1076:5:1077:19 | S | -| main.rs:1108:39:1108:40 | x3 | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1110:13:1110:14 | x4 | | file://:0:0:0:0 | & | -| main.rs:1110:13:1110:14 | x4 | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1110:13:1110:14 | x4 | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1110:18:1110:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1110:18:1110:23 | &... | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1110:18:1110:23 | &... | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1110:19:1110:23 | S(...) | | main.rs:1076:5:1077:19 | S | -| main.rs:1110:19:1110:23 | S(...) | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1110:21:1110:22 | S2 | | main.rs:1079:5:1080:14 | S2 | -| main.rs:1112:18:1112:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1112:26:1112:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:1112:26:1112:27 | x4 | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1112:26:1112:27 | x4 | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1112:26:1112:32 | x4.m2() | | file://:0:0:0:0 | & | -| main.rs:1112:26:1112:32 | x4.m2() | &T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1113:18:1113:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1113:26:1113:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:1113:26:1113:27 | x4 | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1113:26:1113:27 | x4 | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1113:26:1113:32 | x4.m3() | | file://:0:0:0:0 | & | -| main.rs:1113:26:1113:32 | x4.m3() | &T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1115:13:1115:14 | x5 | | file://:0:0:0:0 | & | -| main.rs:1115:13:1115:14 | x5 | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1115:13:1115:14 | x5 | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1115:18:1115:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1115:18:1115:23 | &... | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1115:18:1115:23 | &... | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1115:19:1115:23 | S(...) | | main.rs:1076:5:1077:19 | S | -| main.rs:1115:19:1115:23 | S(...) | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1115:21:1115:22 | S2 | | main.rs:1079:5:1080:14 | S2 | -| main.rs:1117:18:1117:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1117:26:1117:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:1117:26:1117:27 | x5 | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1117:26:1117:27 | x5 | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1117:26:1117:32 | x5.m1() | | main.rs:1079:5:1080:14 | S2 | -| main.rs:1118:18:1118:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1118:26:1118:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:1118:26:1118:27 | x5 | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1118:26:1118:27 | x5 | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1118:26:1118:29 | x5.0 | | main.rs:1079:5:1080:14 | S2 | -| main.rs:1120:13:1120:14 | x6 | | file://:0:0:0:0 | & | -| main.rs:1120:13:1120:14 | x6 | &T | file://:0:0:0:0 | & | -| main.rs:1120:13:1120:14 | x6 | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1120:13:1120:14 | x6 | &T.&T | main.rs:1076:5:1077:19 | S | -| main.rs:1120:13:1120:14 | x6 | &T.&T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1120:13:1120:14 | x6 | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1120:18:1120:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1120:18:1120:23 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1120:18:1120:23 | &... | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1120:18:1120:23 | &... | &T.&T | main.rs:1076:5:1077:19 | S | -| main.rs:1120:18:1120:23 | &... | &T.&T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1120:18:1120:23 | &... | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1120:19:1120:23 | S(...) | | file://:0:0:0:0 | & | -| main.rs:1120:19:1120:23 | S(...) | | main.rs:1076:5:1077:19 | S | -| main.rs:1120:19:1120:23 | S(...) | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1120:19:1120:23 | S(...) | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1120:19:1120:23 | S(...) | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1120:21:1120:22 | S2 | | main.rs:1079:5:1080:14 | S2 | -| main.rs:1123:18:1123:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1123:26:1123:30 | (...) | | file://:0:0:0:0 | & | -| main.rs:1123:26:1123:30 | (...) | | main.rs:1076:5:1077:19 | S | -| main.rs:1123:26:1123:30 | (...) | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1123:26:1123:30 | (...) | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1123:26:1123:30 | (...) | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1123:26:1123:35 | ... .m1() | | main.rs:1079:5:1080:14 | S2 | -| main.rs:1123:27:1123:29 | * ... | | file://:0:0:0:0 | & | -| main.rs:1123:27:1123:29 | * ... | | main.rs:1076:5:1077:19 | S | -| main.rs:1123:27:1123:29 | * ... | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1123:27:1123:29 | * ... | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1123:27:1123:29 | * ... | T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1123:28:1123:29 | x6 | | file://:0:0:0:0 | & | -| main.rs:1123:28:1123:29 | x6 | &T | file://:0:0:0:0 | & | -| main.rs:1123:28:1123:29 | x6 | &T | main.rs:1076:5:1077:19 | S | -| main.rs:1123:28:1123:29 | x6 | &T.&T | main.rs:1076:5:1077:19 | S | -| main.rs:1123:28:1123:29 | x6 | &T.&T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1123:28:1123:29 | x6 | &T.T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1125:13:1125:14 | x7 | | main.rs:1076:5:1077:19 | S | -| main.rs:1125:13:1125:14 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1125:13:1125:14 | x7 | T.&T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1125:18:1125:23 | S(...) | | main.rs:1076:5:1077:19 | S | -| main.rs:1125:18:1125:23 | S(...) | T | file://:0:0:0:0 | & | -| main.rs:1125:18:1125:23 | S(...) | T.&T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1125:20:1125:22 | &S2 | | file://:0:0:0:0 | & | -| main.rs:1125:20:1125:22 | &S2 | &T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1125:21:1125:22 | S2 | | main.rs:1079:5:1080:14 | S2 | -| main.rs:1128:13:1128:13 | t | | file://:0:0:0:0 | & | -| main.rs:1128:13:1128:13 | t | &T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1128:17:1128:18 | x7 | | main.rs:1076:5:1077:19 | S | -| main.rs:1128:17:1128:18 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1128:17:1128:18 | x7 | T.&T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1128:17:1128:23 | x7.m1() | | file://:0:0:0:0 | & | -| main.rs:1128:17:1128:23 | x7.m1() | &T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1129:18:1129:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1129:26:1129:27 | x7 | | main.rs:1076:5:1077:19 | S | -| main.rs:1129:26:1129:27 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1129:26:1129:27 | x7 | T.&T | main.rs:1079:5:1080:14 | S2 | -| main.rs:1131:13:1131:14 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1131:27:1131:33 | "Hello" | | {EXTERNAL LOCATION} | str | -| main.rs:1131:27:1131:45 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | -| main.rs:1134:13:1134:13 | u | | {EXTERNAL LOCATION} | Result | -| main.rs:1134:13:1134:13 | u | T | {EXTERNAL LOCATION} | u32 | -| main.rs:1134:17:1134:18 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1134:17:1134:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | -| main.rs:1134:17:1134:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | -| main.rs:1141:16:1141:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1141:16:1141:20 | SelfParam | &T | main.rs:1139:5:1147:5 | Self [trait MyTrait] | -| main.rs:1144:16:1144:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1144:16:1144:20 | SelfParam | &T | main.rs:1139:5:1147:5 | Self [trait MyTrait] | -| main.rs:1144:32:1146:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1144:32:1146:9 | { ... } | &T | main.rs:1139:5:1147:5 | Self [trait MyTrait] | -| main.rs:1145:13:1145:16 | self | | file://:0:0:0:0 | & | -| main.rs:1145:13:1145:16 | self | &T | main.rs:1139:5:1147:5 | Self [trait MyTrait] | -| main.rs:1145:13:1145:22 | self.foo() | | file://:0:0:0:0 | & | -| main.rs:1145:13:1145:22 | self.foo() | &T | main.rs:1139:5:1147:5 | Self [trait MyTrait] | -| main.rs:1153:16:1153:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1153:16:1153:20 | SelfParam | &T | main.rs:1149:5:1149:20 | MyStruct | -| main.rs:1153:36:1155:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1153:36:1155:9 | { ... } | &T | main.rs:1149:5:1149:20 | MyStruct | -| main.rs:1154:13:1154:16 | self | | file://:0:0:0:0 | & | -| main.rs:1154:13:1154:16 | self | &T | main.rs:1149:5:1149:20 | MyStruct | -| main.rs:1159:13:1159:13 | x | | main.rs:1149:5:1149:20 | MyStruct | -| main.rs:1159:17:1159:24 | MyStruct | | main.rs:1149:5:1149:20 | MyStruct | -| main.rs:1160:9:1160:9 | x | | main.rs:1149:5:1149:20 | MyStruct | -| main.rs:1160:9:1160:15 | x.bar() | | file://:0:0:0:0 | & | -| main.rs:1160:9:1160:15 | x.bar() | &T | main.rs:1149:5:1149:20 | MyStruct | -| main.rs:1170:16:1170:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1170:16:1170:20 | SelfParam | &T | main.rs:1167:5:1167:26 | MyStruct | -| main.rs:1170:16:1170:20 | SelfParam | &T.T | main.rs:1169:10:1169:10 | T | -| main.rs:1170:32:1172:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1170:32:1172:9 | { ... } | &T | main.rs:1167:5:1167:26 | MyStruct | -| main.rs:1170:32:1172:9 | { ... } | &T.T | main.rs:1169:10:1169:10 | T | -| main.rs:1171:13:1171:16 | self | | file://:0:0:0:0 | & | -| main.rs:1171:13:1171:16 | self | &T | main.rs:1167:5:1167:26 | MyStruct | -| main.rs:1171:13:1171:16 | self | &T.T | main.rs:1169:10:1169:10 | T | -| main.rs:1176:13:1176:13 | x | | main.rs:1167:5:1167:26 | MyStruct | -| main.rs:1176:13:1176:13 | x | T | main.rs:1165:5:1165:13 | S | -| main.rs:1176:17:1176:27 | MyStruct(...) | | main.rs:1167:5:1167:26 | MyStruct | -| main.rs:1176:17:1176:27 | MyStruct(...) | T | main.rs:1165:5:1165:13 | S | -| main.rs:1176:26:1176:26 | S | | main.rs:1165:5:1165:13 | S | -| main.rs:1177:9:1177:9 | x | | main.rs:1167:5:1167:26 | MyStruct | -| main.rs:1177:9:1177:9 | x | T | main.rs:1165:5:1165:13 | S | -| main.rs:1177:9:1177:15 | x.foo() | | file://:0:0:0:0 | & | -| main.rs:1177:9:1177:15 | x.foo() | &T | main.rs:1167:5:1167:26 | MyStruct | -| main.rs:1177:9:1177:15 | x.foo() | &T.T | main.rs:1165:5:1165:13 | S | -| main.rs:1188:17:1188:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1188:17:1188:25 | SelfParam | &T | main.rs:1182:5:1185:5 | MyFlag | -| main.rs:1189:13:1189:16 | self | | file://:0:0:0:0 | & | -| main.rs:1189:13:1189:16 | self | &T | main.rs:1182:5:1185:5 | MyFlag | -| main.rs:1189:13:1189:21 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1189:13:1189:34 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1189:25:1189:34 | ! ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1189:26:1189:29 | self | | file://:0:0:0:0 | & | -| main.rs:1189:26:1189:29 | self | &T | main.rs:1182:5:1185:5 | MyFlag | -| main.rs:1189:26:1189:34 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1196:15:1196:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1196:15:1196:19 | SelfParam | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1196:31:1198:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1196:31:1198:9 | { ... } | &T | file://:0:0:0:0 | & | -| main.rs:1196:31:1198:9 | { ... } | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1196:31:1198:9 | { ... } | &T.&T | file://:0:0:0:0 | & | -| main.rs:1196:31:1198:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1196:31:1198:9 | { ... } | &T.&T.&T.&T | main.rs:1193:5:1193:13 | S | -| main.rs:1197:13:1197:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1197:13:1197:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1197:13:1197:19 | &... | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1197:13:1197:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1197:13:1197:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1197:13:1197:19 | &... | &T.&T.&T.&T | main.rs:1193:5:1193:13 | S | -| main.rs:1197:14:1197:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1197:14:1197:19 | &... | | main.rs:1193:5:1193:13 | S | -| main.rs:1197:14:1197:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1197:14:1197:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1197:14:1197:19 | &... | &T.&T.&T | main.rs:1193:5:1193:13 | S | -| main.rs:1197:15:1197:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1197:15:1197:19 | &self | &T | file://:0:0:0:0 | & | -| main.rs:1197:15:1197:19 | &self | &T.&T | main.rs:1193:5:1193:13 | S | -| main.rs:1197:16:1197:19 | self | | file://:0:0:0:0 | & | -| main.rs:1197:16:1197:19 | self | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1200:15:1200:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1200:15:1200:25 | SelfParam | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1200:37:1202:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1200:37:1202:9 | { ... } | &T | file://:0:0:0:0 | & | -| main.rs:1200:37:1202:9 | { ... } | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1200:37:1202:9 | { ... } | &T.&T | file://:0:0:0:0 | & | -| main.rs:1200:37:1202:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1200:37:1202:9 | { ... } | &T.&T.&T.&T | main.rs:1193:5:1193:13 | S | -| main.rs:1201:13:1201:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1201:13:1201:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1201:13:1201:19 | &... | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1201:13:1201:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1201:13:1201:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1201:13:1201:19 | &... | &T.&T.&T.&T | main.rs:1193:5:1193:13 | S | -| main.rs:1201:14:1201:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1201:14:1201:19 | &... | | main.rs:1193:5:1193:13 | S | -| main.rs:1201:14:1201:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1201:14:1201:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1201:14:1201:19 | &... | &T.&T.&T | main.rs:1193:5:1193:13 | S | -| main.rs:1201:15:1201:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1201:15:1201:19 | &self | &T | file://:0:0:0:0 | & | -| main.rs:1201:15:1201:19 | &self | &T.&T | main.rs:1193:5:1193:13 | S | -| main.rs:1201:16:1201:19 | self | | file://:0:0:0:0 | & | -| main.rs:1201:16:1201:19 | self | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1204:15:1204:15 | x | | file://:0:0:0:0 | & | -| main.rs:1204:15:1204:15 | x | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1204:34:1206:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1204:34:1206:9 | { ... } | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1205:13:1205:13 | x | | file://:0:0:0:0 | & | -| main.rs:1205:13:1205:13 | x | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1208:15:1208:15 | x | | file://:0:0:0:0 | & | -| main.rs:1208:15:1208:15 | x | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1208:34:1210:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1208:34:1210:9 | { ... } | &T | file://:0:0:0:0 | & | -| main.rs:1208:34:1210:9 | { ... } | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1208:34:1210:9 | { ... } | &T.&T | file://:0:0:0:0 | & | -| main.rs:1208:34:1210:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1208:34:1210:9 | { ... } | &T.&T.&T.&T | main.rs:1193:5:1193:13 | S | -| main.rs:1209:13:1209:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1209:13:1209:16 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1209:13:1209:16 | &... | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1209:13:1209:16 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1209:13:1209:16 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1209:13:1209:16 | &... | &T.&T.&T.&T | main.rs:1193:5:1193:13 | S | -| main.rs:1209:14:1209:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1209:14:1209:16 | &... | | main.rs:1193:5:1193:13 | S | -| main.rs:1209:14:1209:16 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1209:14:1209:16 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1209:14:1209:16 | &... | &T.&T.&T | main.rs:1193:5:1193:13 | S | -| main.rs:1209:15:1209:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1209:15:1209:16 | &x | &T | file://:0:0:0:0 | & | -| main.rs:1209:15:1209:16 | &x | &T.&T | main.rs:1193:5:1193:13 | S | -| main.rs:1209:16:1209:16 | x | | file://:0:0:0:0 | & | -| main.rs:1209:16:1209:16 | x | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1214:13:1214:13 | x | | main.rs:1193:5:1193:13 | S | -| main.rs:1214:17:1214:20 | S {...} | | main.rs:1193:5:1193:13 | S | -| main.rs:1215:9:1215:9 | x | | main.rs:1193:5:1193:13 | S | -| main.rs:1215:9:1215:14 | x.f1() | | file://:0:0:0:0 | & | -| main.rs:1215:9:1215:14 | x.f1() | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1216:9:1216:9 | x | | main.rs:1193:5:1193:13 | S | -| main.rs:1216:9:1216:14 | x.f2() | | file://:0:0:0:0 | & | -| main.rs:1216:9:1216:14 | x.f2() | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1217:9:1217:17 | ...::f3(...) | | file://:0:0:0:0 | & | -| main.rs:1217:9:1217:17 | ...::f3(...) | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1217:15:1217:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1217:15:1217:16 | &x | &T | main.rs:1193:5:1193:13 | S | -| main.rs:1217:16:1217:16 | x | | main.rs:1193:5:1193:13 | S | -| main.rs:1219:13:1219:13 | n | | {EXTERNAL LOCATION} | bool | -| main.rs:1219:13:1219:13 | n | | file://:0:0:0:0 | & | -| main.rs:1219:17:1219:24 | * ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1219:17:1219:24 | * ... | | file://:0:0:0:0 | & | -| main.rs:1219:18:1219:24 | * ... | | file://:0:0:0:0 | & | -| main.rs:1219:18:1219:24 | * ... | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1219:18:1219:24 | * ... | &T | file://:0:0:0:0 | & | -| main.rs:1219:19:1219:24 | &... | | file://:0:0:0:0 | & | -| main.rs:1219:19:1219:24 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1219:19:1219:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | -| main.rs:1219:19:1219:24 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1219:20:1219:24 | &true | | file://:0:0:0:0 | & | -| main.rs:1219:20:1219:24 | &true | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1219:20:1219:24 | &true | &T | file://:0:0:0:0 | & | -| main.rs:1219:21:1219:24 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1219:21:1219:24 | true | | file://:0:0:0:0 | & | -| main.rs:1223:13:1223:20 | mut flag | | main.rs:1182:5:1185:5 | MyFlag | -| main.rs:1223:24:1223:41 | ...::default(...) | | main.rs:1182:5:1185:5 | MyFlag | -| main.rs:1224:22:1224:30 | &mut flag | | file://:0:0:0:0 | & | -| main.rs:1224:22:1224:30 | &mut flag | &T | main.rs:1182:5:1185:5 | MyFlag | -| main.rs:1224:27:1224:30 | flag | | main.rs:1182:5:1185:5 | MyFlag | -| main.rs:1225:18:1225:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1225:26:1225:29 | flag | | main.rs:1182:5:1185:5 | MyFlag | -| main.rs:1239:43:1242:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1239:43:1242:5 | { ... } | E | main.rs:1232:5:1233:14 | S1 | -| main.rs:1239:43:1242:5 | { ... } | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1240:13:1240:13 | x | | main.rs:1232:5:1233:14 | S1 | -| main.rs:1240:17:1240:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1240:17:1240:30 | ...::Ok(...) | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1240:17:1240:31 | TryExpr | | main.rs:1232:5:1233:14 | S1 | -| main.rs:1240:28:1240:29 | S1 | | main.rs:1232:5:1233:14 | S1 | -| main.rs:1241:9:1241:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1241:9:1241:22 | ...::Ok(...) | E | main.rs:1232:5:1233:14 | S1 | -| main.rs:1241:9:1241:22 | ...::Ok(...) | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1241:20:1241:21 | S1 | | main.rs:1232:5:1233:14 | S1 | -| main.rs:1245:46:1249:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1245:46:1249:5 | { ... } | E | main.rs:1235:5:1236:14 | S2 | -| main.rs:1245:46:1249:5 | { ... } | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1246:13:1246:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1246:13:1246:13 | x | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1246:17:1246:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1246:17:1246:30 | ...::Ok(...) | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1246:28:1246:29 | S1 | | main.rs:1232:5:1233:14 | S1 | -| main.rs:1247:13:1247:13 | y | | main.rs:1232:5:1233:14 | S1 | -| main.rs:1247:17:1247:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1247:17:1247:17 | x | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1247:17:1247:18 | TryExpr | | main.rs:1232:5:1233:14 | S1 | -| main.rs:1248:9:1248:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1248:9:1248:22 | ...::Ok(...) | E | main.rs:1235:5:1236:14 | S2 | -| main.rs:1248:9:1248:22 | ...::Ok(...) | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1248:20:1248:21 | S1 | | main.rs:1232:5:1233:14 | S1 | -| main.rs:1252:40:1257:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1252:40:1257:5 | { ... } | E | main.rs:1235:5:1236:14 | S2 | -| main.rs:1252:40:1257:5 | { ... } | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1253:13:1253:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1253:13:1253:13 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1253:13:1253:13 | x | T.T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1253:17:1253:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1253:17:1253:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | -| main.rs:1253:17:1253:42 | ...::Ok(...) | T.T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1253:28:1253:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1253:28:1253:41 | ...::Ok(...) | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1253:39:1253:40 | S1 | | main.rs:1232:5:1233:14 | S1 | -| main.rs:1255:17:1255:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1255:17:1255:17 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1255:17:1255:17 | x | T.T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1255:17:1255:18 | TryExpr | | {EXTERNAL LOCATION} | Result | -| main.rs:1255:17:1255:18 | TryExpr | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1255:17:1255:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1256:9:1256:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1256:9:1256:22 | ...::Ok(...) | E | main.rs:1235:5:1236:14 | S2 | -| main.rs:1256:9:1256:22 | ...::Ok(...) | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1256:20:1256:21 | S1 | | main.rs:1232:5:1233:14 | S1 | -| main.rs:1260:30:1260:34 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1260:30:1260:34 | input | E | main.rs:1232:5:1233:14 | S1 | -| main.rs:1260:30:1260:34 | input | T | main.rs:1260:20:1260:27 | T | -| main.rs:1260:69:1267:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1260:69:1267:5 | { ... } | E | main.rs:1232:5:1233:14 | S1 | -| main.rs:1260:69:1267:5 | { ... } | T | main.rs:1260:20:1260:27 | T | -| main.rs:1261:13:1261:17 | value | | main.rs:1260:20:1260:27 | T | -| main.rs:1261:21:1261:25 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1261:21:1261:25 | input | E | main.rs:1232:5:1233:14 | S1 | -| main.rs:1261:21:1261:25 | input | T | main.rs:1260:20:1260:27 | T | -| main.rs:1261:21:1261:26 | TryExpr | | main.rs:1260:20:1260:27 | T | -| main.rs:1262:22:1262:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1262:22:1262:38 | ...::Ok(...) | T | main.rs:1260:20:1260:27 | T | -| main.rs:1262:22:1265:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1262:33:1262:37 | value | | main.rs:1260:20:1260:27 | T | -| main.rs:1262:53:1265:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1262:53:1265:9 | { ... } | E | main.rs:1232:5:1233:14 | S1 | -| main.rs:1263:22:1263:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1264:13:1264:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1264:13:1264:34 | ...::Ok::<...>(...) | E | main.rs:1232:5:1233:14 | S1 | -| main.rs:1266:9:1266:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1266:9:1266:23 | ...::Err(...) | E | main.rs:1232:5:1233:14 | S1 | -| main.rs:1266:9:1266:23 | ...::Err(...) | T | main.rs:1260:20:1260:27 | T | -| main.rs:1266:21:1266:22 | S1 | | main.rs:1232:5:1233:14 | S1 | -| main.rs:1270:37:1270:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1270:37:1270:52 | try_same_error(...) | E | main.rs:1232:5:1233:14 | S1 | -| main.rs:1270:37:1270:52 | try_same_error(...) | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1271:22:1271:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1274:37:1274:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1274:37:1274:55 | try_convert_error(...) | E | main.rs:1235:5:1236:14 | S2 | -| main.rs:1274:37:1274:55 | try_convert_error(...) | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1275:22:1275:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1278:37:1278:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1278:37:1278:49 | try_chained(...) | E | main.rs:1235:5:1236:14 | S2 | -| main.rs:1278:37:1278:49 | try_chained(...) | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1279:22:1279:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1282:37:1282:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1282:37:1282:63 | try_complex(...) | E | main.rs:1232:5:1233:14 | S1 | -| main.rs:1282:37:1282:63 | try_complex(...) | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1282:49:1282:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1282:49:1282:62 | ...::Ok(...) | E | main.rs:1232:5:1233:14 | S1 | -| main.rs:1282:49:1282:62 | ...::Ok(...) | T | main.rs:1232:5:1233:14 | S1 | -| main.rs:1282:60:1282:61 | S1 | | main.rs:1232:5:1233:14 | S1 | -| main.rs:1283:22:1283:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1290:13:1290:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1290:22:1290:22 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1291:13:1291:13 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1291:17:1291:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1292:13:1292:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1292:17:1292:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1292:17:1292:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | -| main.rs:1292:21:1292:21 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1293:13:1293:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1293:17:1293:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1293:17:1293:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | -| main.rs:1294:13:1294:13 | c | | {EXTERNAL LOCATION} | char | -| main.rs:1294:17:1294:19 | 'c' | | {EXTERNAL LOCATION} | char | -| main.rs:1295:13:1295:17 | hello | | {EXTERNAL LOCATION} | str | -| main.rs:1295:21:1295:27 | "Hello" | | {EXTERNAL LOCATION} | str | -| main.rs:1296:13:1296:13 | f | | {EXTERNAL LOCATION} | f64 | -| main.rs:1296:17:1296:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | -| main.rs:1297:13:1297:13 | t | | {EXTERNAL LOCATION} | bool | -| main.rs:1297:17:1297:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1298:13:1298:13 | f | | {EXTERNAL LOCATION} | bool | -| main.rs:1298:17:1298:21 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1305:13:1305:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:1305:17:1305:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1305:17:1305:29 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1305:25:1305:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1306:13:1306:13 | y | | {EXTERNAL LOCATION} | bool | -| main.rs:1306:17:1306:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1306:17:1306:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1306:25:1306:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1308:13:1308:17 | mut a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1309:13:1309:16 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1309:20:1309:21 | 34 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1309:20:1309:27 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1309:26:1309:27 | 33 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1310:12:1310:15 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1311:17:1311:17 | z | | file://:0:0:0:0 | () | -| main.rs:1311:21:1311:27 | (...) | | file://:0:0:0:0 | () | -| main.rs:1311:22:1311:22 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1311:22:1311:26 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1311:26:1311:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1313:13:1313:13 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1313:13:1313:17 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1313:17:1313:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1315:9:1315:9 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1329:30:1331:9 | { ... } | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1330:13:1330:31 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1330:23:1330:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1330:23:1330:23 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1330:29:1330:29 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1330:29:1330:29 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1337:16:1337:19 | SelfParam | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1337:22:1337:24 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1337:41:1342:9 | { ... } | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1338:13:1341:13 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1339:20:1339:23 | self | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1339:20:1339:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1339:20:1339:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1339:29:1339:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1339:29:1339:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1340:20:1340:23 | self | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1340:20:1340:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1340:20:1340:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1340:29:1340:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1340:29:1340:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1347:23:1347:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1347:23:1347:31 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1347:34:1347:36 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1348:13:1348:16 | self | | file://:0:0:0:0 | & | -| main.rs:1348:13:1348:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1348:13:1348:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1348:13:1348:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1348:23:1348:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1348:23:1348:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1349:13:1349:16 | self | | file://:0:0:0:0 | & | -| main.rs:1349:13:1349:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1349:13:1349:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1349:13:1349:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1349:23:1349:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1349:23:1349:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1355:16:1355:19 | SelfParam | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1355:22:1355:24 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1355:41:1360:9 | { ... } | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1356:13:1359:13 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1357:20:1357:23 | self | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1357:20:1357:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1357:20:1357:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1357:29:1357:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1357:29:1357:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1358:20:1358:23 | self | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1358:20:1358:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1358:20:1358:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1358:29:1358:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1358:29:1358:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1365:23:1365:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1365:23:1365:31 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1365:34:1365:36 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1366:13:1366:16 | self | | file://:0:0:0:0 | & | -| main.rs:1366:13:1366:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1366:13:1366:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1366:13:1366:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1366:23:1366:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1366:23:1366:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1367:13:1367:16 | self | | file://:0:0:0:0 | & | -| main.rs:1367:13:1367:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1367:13:1367:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1367:13:1367:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1367:23:1367:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1367:23:1367:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1373:16:1373:19 | SelfParam | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1373:22:1373:24 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1373:41:1378:9 | { ... } | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1374:13:1377:13 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1375:20:1375:23 | self | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1375:20:1375:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1375:20:1375:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1375:29:1375:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1375:29:1375:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1376:20:1376:23 | self | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1376:20:1376:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1376:20:1376:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1376:29:1376:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1376:29:1376:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1382:23:1382:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1382:23:1382:31 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1382:34:1382:36 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1088:15:1088:18 | SelfParam | | main.rs:1076:5:1077:19 | S | +| main.rs:1088:15:1088:18 | SelfParam | T | main.rs:1087:10:1087:10 | T | +| main.rs:1088:26:1090:9 | { ... } | | main.rs:1087:10:1087:10 | T | +| main.rs:1089:13:1089:16 | self | | main.rs:1076:5:1077:19 | S | +| main.rs:1089:13:1089:16 | self | T | main.rs:1087:10:1087:10 | T | +| main.rs:1089:13:1089:18 | self.0 | | main.rs:1087:10:1087:10 | T | +| main.rs:1092:15:1092:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1092:15:1092:19 | SelfParam | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1092:15:1092:19 | SelfParam | &T.T | main.rs:1087:10:1087:10 | T | +| main.rs:1092:28:1094:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1092:28:1094:9 | { ... } | &T | main.rs:1087:10:1087:10 | T | +| main.rs:1093:13:1093:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1093:13:1093:19 | &... | &T | main.rs:1087:10:1087:10 | T | +| main.rs:1093:14:1093:17 | self | | file://:0:0:0:0 | & | +| main.rs:1093:14:1093:17 | self | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1093:14:1093:17 | self | &T.T | main.rs:1087:10:1087:10 | T | +| main.rs:1093:14:1093:19 | self.0 | | main.rs:1087:10:1087:10 | T | +| main.rs:1096:15:1096:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1096:15:1096:25 | SelfParam | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1096:15:1096:25 | SelfParam | &T.T | main.rs:1087:10:1087:10 | T | +| main.rs:1096:34:1098:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1096:34:1098:9 | { ... } | &T | main.rs:1087:10:1087:10 | T | +| main.rs:1097:13:1097:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1097:13:1097:19 | &... | &T | main.rs:1087:10:1087:10 | T | +| main.rs:1097:14:1097:17 | self | | file://:0:0:0:0 | & | +| main.rs:1097:14:1097:17 | self | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1097:14:1097:17 | self | &T.T | main.rs:1087:10:1087:10 | T | +| main.rs:1097:14:1097:19 | self.0 | | main.rs:1087:10:1087:10 | T | +| main.rs:1102:29:1102:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1102:29:1102:33 | SelfParam | &T | main.rs:1101:5:1104:5 | Self [trait ATrait] | +| main.rs:1103:33:1103:36 | SelfParam | | main.rs:1101:5:1104:5 | Self [trait ATrait] | +| main.rs:1109:29:1109:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1109:29:1109:33 | SelfParam | &T | file://:0:0:0:0 | & | +| main.rs:1109:29:1109:33 | SelfParam | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1109:29:1109:33 | SelfParam | &T.&T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1109:43:1111:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1110:13:1110:22 | (...) | | file://:0:0:0:0 | & | +| main.rs:1110:13:1110:22 | (...) | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:13:1110:22 | (...) | &T | file://:0:0:0:0 | & | +| main.rs:1110:13:1110:22 | (...) | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:13:1110:22 | (...) | &T.&T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:13:1110:24 | ... .a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1110:14:1110:21 | * ... | | file://:0:0:0:0 | & | +| main.rs:1110:14:1110:21 | * ... | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:14:1110:21 | * ... | &T | file://:0:0:0:0 | & | +| main.rs:1110:14:1110:21 | * ... | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:14:1110:21 | * ... | &T.&T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:15:1110:21 | (...) | | file://:0:0:0:0 | & | +| main.rs:1110:15:1110:21 | (...) | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:15:1110:21 | (...) | &T | file://:0:0:0:0 | & | +| main.rs:1110:15:1110:21 | (...) | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:15:1110:21 | (...) | &T.&T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:16:1110:20 | * ... | | file://:0:0:0:0 | & | +| main.rs:1110:16:1110:20 | * ... | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:16:1110:20 | * ... | &T | file://:0:0:0:0 | & | +| main.rs:1110:16:1110:20 | * ... | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:16:1110:20 | * ... | &T.&T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:17:1110:20 | self | | file://:0:0:0:0 | & | +| main.rs:1110:17:1110:20 | self | &T | file://:0:0:0:0 | & | +| main.rs:1110:17:1110:20 | self | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:17:1110:20 | self | &T.&T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1114:33:1114:36 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1114:33:1114:36 | SelfParam | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1114:46:1116:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1115:13:1115:19 | (...) | | file://:0:0:0:0 | & | +| main.rs:1115:13:1115:19 | (...) | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1115:13:1115:19 | (...) | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1115:13:1115:21 | ... .a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1115:14:1115:18 | * ... | | file://:0:0:0:0 | & | +| main.rs:1115:14:1115:18 | * ... | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1115:14:1115:18 | * ... | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1115:15:1115:18 | self | | file://:0:0:0:0 | & | +| main.rs:1115:15:1115:18 | self | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1120:13:1120:14 | x1 | | main.rs:1076:5:1077:19 | S | +| main.rs:1120:13:1120:14 | x1 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1120:18:1120:22 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1120:18:1120:22 | S(...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1120:20:1120:21 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1121:18:1121:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1121:26:1121:27 | x1 | | main.rs:1076:5:1077:19 | S | +| main.rs:1121:26:1121:27 | x1 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1121:26:1121:32 | x1.m1() | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1123:13:1123:14 | x2 | | main.rs:1076:5:1077:19 | S | +| main.rs:1123:13:1123:14 | x2 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1123:18:1123:22 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1123:18:1123:22 | S(...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1123:20:1123:21 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1125:18:1125:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1125:26:1125:27 | x2 | | main.rs:1076:5:1077:19 | S | +| main.rs:1125:26:1125:27 | x2 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1125:26:1125:32 | x2.m2() | | file://:0:0:0:0 | & | +| main.rs:1125:26:1125:32 | x2.m2() | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1126:18:1126:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1126:26:1126:27 | x2 | | main.rs:1076:5:1077:19 | S | +| main.rs:1126:26:1126:27 | x2 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1126:26:1126:32 | x2.m3() | | file://:0:0:0:0 | & | +| main.rs:1126:26:1126:32 | x2.m3() | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1128:13:1128:14 | x3 | | main.rs:1076:5:1077:19 | S | +| main.rs:1128:13:1128:14 | x3 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1128:18:1128:22 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1128:18:1128:22 | S(...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1128:20:1128:21 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1130:18:1130:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1130:26:1130:41 | ...::m2(...) | | file://:0:0:0:0 | & | +| main.rs:1130:26:1130:41 | ...::m2(...) | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1130:38:1130:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1130:38:1130:40 | &x3 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1130:38:1130:40 | &x3 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1130:39:1130:40 | x3 | | main.rs:1076:5:1077:19 | S | +| main.rs:1130:39:1130:40 | x3 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1131:18:1131:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1131:26:1131:41 | ...::m3(...) | | file://:0:0:0:0 | & | +| main.rs:1131:26:1131:41 | ...::m3(...) | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1131:38:1131:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1131:38:1131:40 | &x3 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1131:38:1131:40 | &x3 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1131:39:1131:40 | x3 | | main.rs:1076:5:1077:19 | S | +| main.rs:1131:39:1131:40 | x3 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1133:13:1133:14 | x4 | | file://:0:0:0:0 | & | +| main.rs:1133:13:1133:14 | x4 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1133:13:1133:14 | x4 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1133:18:1133:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1133:18:1133:23 | &... | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1133:18:1133:23 | &... | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1133:19:1133:23 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1133:19:1133:23 | S(...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1133:21:1133:22 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1135:18:1135:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1135:26:1135:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1135:26:1135:27 | x4 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1135:26:1135:27 | x4 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1135:26:1135:32 | x4.m2() | | file://:0:0:0:0 | & | +| main.rs:1135:26:1135:32 | x4.m2() | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1136:18:1136:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1136:26:1136:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1136:26:1136:27 | x4 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1136:26:1136:27 | x4 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1136:26:1136:32 | x4.m3() | | file://:0:0:0:0 | & | +| main.rs:1136:26:1136:32 | x4.m3() | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1138:13:1138:14 | x5 | | file://:0:0:0:0 | & | +| main.rs:1138:13:1138:14 | x5 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1138:13:1138:14 | x5 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1138:18:1138:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1138:18:1138:23 | &... | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1138:18:1138:23 | &... | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1138:19:1138:23 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1138:19:1138:23 | S(...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1138:21:1138:22 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1140:18:1140:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1140:26:1140:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1140:26:1140:27 | x5 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1140:26:1140:27 | x5 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1140:26:1140:32 | x5.m1() | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1141:18:1141:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1141:26:1141:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1141:26:1141:27 | x5 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1141:26:1141:27 | x5 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1141:26:1141:29 | x5.0 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1143:13:1143:14 | x6 | | file://:0:0:0:0 | & | +| main.rs:1143:13:1143:14 | x6 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1143:13:1143:14 | x6 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1143:18:1143:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1143:18:1143:23 | &... | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1143:18:1143:23 | &... | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1143:19:1143:23 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1143:19:1143:23 | S(...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1143:21:1143:22 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1146:18:1146:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1146:26:1146:30 | (...) | | file://:0:0:0:0 | & | +| main.rs:1146:26:1146:30 | (...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1146:26:1146:30 | (...) | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1146:26:1146:30 | (...) | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1146:26:1146:30 | (...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1146:26:1146:35 | ... .m1() | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1146:27:1146:29 | * ... | | file://:0:0:0:0 | & | +| main.rs:1146:27:1146:29 | * ... | | main.rs:1076:5:1077:19 | S | +| main.rs:1146:27:1146:29 | * ... | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1146:27:1146:29 | * ... | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1146:27:1146:29 | * ... | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1146:28:1146:29 | x6 | | file://:0:0:0:0 | & | +| main.rs:1146:28:1146:29 | x6 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1146:28:1146:29 | x6 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1148:13:1148:14 | x7 | | main.rs:1076:5:1077:19 | S | +| main.rs:1148:13:1148:14 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1148:13:1148:14 | x7 | T.&T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1148:18:1148:23 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1148:18:1148:23 | S(...) | T | file://:0:0:0:0 | & | +| main.rs:1148:18:1148:23 | S(...) | T.&T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1148:20:1148:22 | &S2 | | file://:0:0:0:0 | & | +| main.rs:1148:20:1148:22 | &S2 | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1148:21:1148:22 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1151:13:1151:13 | t | | file://:0:0:0:0 | & | +| main.rs:1151:13:1151:13 | t | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1151:17:1151:18 | x7 | | main.rs:1076:5:1077:19 | S | +| main.rs:1151:17:1151:18 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1151:17:1151:18 | x7 | T.&T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1151:17:1151:23 | x7.m1() | | file://:0:0:0:0 | & | +| main.rs:1151:17:1151:23 | x7.m1() | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1152:18:1152:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1152:26:1152:27 | x7 | | main.rs:1076:5:1077:19 | S | +| main.rs:1152:26:1152:27 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1152:26:1152:27 | x7 | T.&T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1154:13:1154:14 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1154:26:1154:32 | "Hello" | | {EXTERNAL LOCATION} | str | +| main.rs:1154:26:1154:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | +| main.rs:1158:13:1158:13 | u | | {EXTERNAL LOCATION} | Result | +| main.rs:1158:13:1158:13 | u | T | {EXTERNAL LOCATION} | u32 | +| main.rs:1158:17:1158:18 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1158:17:1158:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | +| main.rs:1158:17:1158:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | +| main.rs:1160:13:1160:20 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1160:13:1160:20 | my_thing | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1160:24:1160:39 | &... | | file://:0:0:0:0 | & | +| main.rs:1160:24:1160:39 | &... | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1160:25:1160:39 | MyInt {...} | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1160:36:1160:37 | 37 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1160:36:1160:37 | 37 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1162:17:1162:24 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1162:17:1162:24 | my_thing | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1163:18:1163:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1166:13:1166:20 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1166:13:1166:20 | my_thing | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1166:24:1166:39 | &... | | file://:0:0:0:0 | & | +| main.rs:1166:24:1166:39 | &... | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1166:25:1166:39 | MyInt {...} | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1166:36:1166:37 | 38 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1166:36:1166:37 | 38 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1167:17:1167:24 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1167:17:1167:24 | my_thing | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1168:18:1168:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1175:16:1175:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1175:16:1175:20 | SelfParam | &T | main.rs:1173:5:1181:5 | Self [trait MyTrait] | +| main.rs:1178:16:1178:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1178:16:1178:20 | SelfParam | &T | main.rs:1173:5:1181:5 | Self [trait MyTrait] | +| main.rs:1178:32:1180:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1178:32:1180:9 | { ... } | &T | main.rs:1173:5:1181:5 | Self [trait MyTrait] | +| main.rs:1179:13:1179:16 | self | | file://:0:0:0:0 | & | +| main.rs:1179:13:1179:16 | self | &T | main.rs:1173:5:1181:5 | Self [trait MyTrait] | +| main.rs:1179:13:1179:22 | self.foo() | | file://:0:0:0:0 | & | +| main.rs:1179:13:1179:22 | self.foo() | &T | main.rs:1173:5:1181:5 | Self [trait MyTrait] | +| main.rs:1187:16:1187:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1187:16:1187:20 | SelfParam | &T | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1187:36:1189:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1187:36:1189:9 | { ... } | &T | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1188:13:1188:16 | self | | file://:0:0:0:0 | & | +| main.rs:1188:13:1188:16 | self | &T | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1193:13:1193:13 | x | | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1193:17:1193:24 | MyStruct | | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1194:9:1194:9 | x | | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1194:9:1194:15 | x.bar() | | file://:0:0:0:0 | & | +| main.rs:1194:9:1194:15 | x.bar() | &T | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1204:16:1204:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1204:16:1204:20 | SelfParam | &T | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1204:16:1204:20 | SelfParam | &T.T | main.rs:1203:10:1203:10 | T | +| main.rs:1204:32:1206:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1204:32:1206:9 | { ... } | &T | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1204:32:1206:9 | { ... } | &T.T | main.rs:1203:10:1203:10 | T | +| main.rs:1205:13:1205:16 | self | | file://:0:0:0:0 | & | +| main.rs:1205:13:1205:16 | self | &T | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1205:13:1205:16 | self | &T.T | main.rs:1203:10:1203:10 | T | +| main.rs:1210:13:1210:13 | x | | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1210:13:1210:13 | x | T | main.rs:1199:5:1199:13 | S | +| main.rs:1210:17:1210:27 | MyStruct(...) | | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1210:17:1210:27 | MyStruct(...) | T | main.rs:1199:5:1199:13 | S | +| main.rs:1210:26:1210:26 | S | | main.rs:1199:5:1199:13 | S | +| main.rs:1211:9:1211:9 | x | | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1211:9:1211:9 | x | T | main.rs:1199:5:1199:13 | S | +| main.rs:1211:9:1211:15 | x.foo() | | file://:0:0:0:0 | & | +| main.rs:1211:9:1211:15 | x.foo() | &T | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1211:9:1211:15 | x.foo() | &T.T | main.rs:1199:5:1199:13 | S | +| main.rs:1222:17:1222:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1222:17:1222:25 | SelfParam | &T | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1223:13:1223:16 | self | | file://:0:0:0:0 | & | +| main.rs:1223:13:1223:16 | self | &T | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1223:13:1223:21 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1223:13:1223:34 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1223:25:1223:34 | ! ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1223:26:1223:29 | self | | file://:0:0:0:0 | & | +| main.rs:1223:26:1223:29 | self | &T | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1223:26:1223:34 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1230:15:1230:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1230:15:1230:19 | SelfParam | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1230:31:1232:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1230:31:1232:9 | { ... } | &T | file://:0:0:0:0 | & | +| main.rs:1230:31:1232:9 | { ... } | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1230:31:1232:9 | { ... } | &T.&T | file://:0:0:0:0 | & | +| main.rs:1230:31:1232:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1230:31:1232:9 | { ... } | &T.&T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1231:13:1231:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1231:13:1231:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1231:13:1231:19 | &... | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1231:13:1231:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1231:13:1231:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1231:13:1231:19 | &... | &T.&T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1231:14:1231:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1231:14:1231:19 | &... | | main.rs:1227:5:1227:13 | S | +| main.rs:1231:14:1231:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1231:14:1231:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1231:14:1231:19 | &... | &T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1231:15:1231:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1231:15:1231:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1231:15:1231:19 | &self | &T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1231:16:1231:19 | self | | file://:0:0:0:0 | & | +| main.rs:1231:16:1231:19 | self | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1234:15:1234:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1234:15:1234:25 | SelfParam | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1234:37:1236:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1234:37:1236:9 | { ... } | &T | file://:0:0:0:0 | & | +| main.rs:1234:37:1236:9 | { ... } | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1234:37:1236:9 | { ... } | &T.&T | file://:0:0:0:0 | & | +| main.rs:1234:37:1236:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1234:37:1236:9 | { ... } | &T.&T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1235:13:1235:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1235:13:1235:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1235:13:1235:19 | &... | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1235:13:1235:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1235:13:1235:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1235:13:1235:19 | &... | &T.&T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1235:14:1235:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1235:14:1235:19 | &... | | main.rs:1227:5:1227:13 | S | +| main.rs:1235:14:1235:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1235:14:1235:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1235:14:1235:19 | &... | &T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1235:15:1235:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1235:15:1235:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1235:15:1235:19 | &self | &T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1235:16:1235:19 | self | | file://:0:0:0:0 | & | +| main.rs:1235:16:1235:19 | self | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1238:15:1238:15 | x | | file://:0:0:0:0 | & | +| main.rs:1238:15:1238:15 | x | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1238:34:1240:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1238:34:1240:9 | { ... } | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1239:13:1239:13 | x | | file://:0:0:0:0 | & | +| main.rs:1239:13:1239:13 | x | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1242:15:1242:15 | x | | file://:0:0:0:0 | & | +| main.rs:1242:15:1242:15 | x | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1242:34:1244:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1242:34:1244:9 | { ... } | &T | file://:0:0:0:0 | & | +| main.rs:1242:34:1244:9 | { ... } | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1242:34:1244:9 | { ... } | &T.&T | file://:0:0:0:0 | & | +| main.rs:1242:34:1244:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1242:34:1244:9 | { ... } | &T.&T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1243:13:1243:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1243:13:1243:16 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1243:13:1243:16 | &... | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1243:13:1243:16 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1243:13:1243:16 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1243:13:1243:16 | &... | &T.&T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1243:14:1243:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1243:14:1243:16 | &... | | main.rs:1227:5:1227:13 | S | +| main.rs:1243:14:1243:16 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1243:14:1243:16 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1243:14:1243:16 | &... | &T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1243:15:1243:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1243:15:1243:16 | &x | &T | file://:0:0:0:0 | & | +| main.rs:1243:15:1243:16 | &x | &T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1243:16:1243:16 | x | | file://:0:0:0:0 | & | +| main.rs:1243:16:1243:16 | x | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1248:13:1248:13 | x | | main.rs:1227:5:1227:13 | S | +| main.rs:1248:17:1248:20 | S {...} | | main.rs:1227:5:1227:13 | S | +| main.rs:1249:9:1249:9 | x | | main.rs:1227:5:1227:13 | S | +| main.rs:1249:9:1249:14 | x.f1() | | file://:0:0:0:0 | & | +| main.rs:1249:9:1249:14 | x.f1() | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1250:9:1250:9 | x | | main.rs:1227:5:1227:13 | S | +| main.rs:1250:9:1250:14 | x.f2() | | file://:0:0:0:0 | & | +| main.rs:1250:9:1250:14 | x.f2() | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1251:9:1251:17 | ...::f3(...) | | file://:0:0:0:0 | & | +| main.rs:1251:9:1251:17 | ...::f3(...) | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1251:15:1251:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1251:15:1251:16 | &x | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1251:16:1251:16 | x | | main.rs:1227:5:1227:13 | S | +| main.rs:1253:13:1253:13 | n | | {EXTERNAL LOCATION} | bool | +| main.rs:1253:13:1253:13 | n | | file://:0:0:0:0 | & | +| main.rs:1253:13:1253:13 | n | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1253:13:1253:13 | n | &T | file://:0:0:0:0 | & | +| main.rs:1253:13:1253:13 | n | &T.&T | {EXTERNAL LOCATION} | bool | +| main.rs:1253:17:1253:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1253:17:1253:24 | * ... | | file://:0:0:0:0 | & | +| main.rs:1253:17:1253:24 | * ... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1253:17:1253:24 | * ... | &T | file://:0:0:0:0 | & | +| main.rs:1253:17:1253:24 | * ... | &T.&T | {EXTERNAL LOCATION} | bool | +| main.rs:1253:18:1253:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1253:18:1253:24 | * ... | | file://:0:0:0:0 | & | +| main.rs:1253:18:1253:24 | * ... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1253:18:1253:24 | * ... | &T | file://:0:0:0:0 | & | +| main.rs:1253:18:1253:24 | * ... | &T.&T | {EXTERNAL LOCATION} | bool | +| main.rs:1253:19:1253:24 | &... | | file://:0:0:0:0 | & | +| main.rs:1253:19:1253:24 | &... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1253:19:1253:24 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1253:19:1253:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | +| main.rs:1253:20:1253:24 | &true | | {EXTERNAL LOCATION} | bool | +| main.rs:1253:20:1253:24 | &true | | file://:0:0:0:0 | & | +| main.rs:1253:20:1253:24 | &true | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1253:21:1253:24 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1257:13:1257:20 | mut flag | | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1257:24:1257:41 | ...::default(...) | | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1258:22:1258:30 | &mut flag | | file://:0:0:0:0 | & | +| main.rs:1258:22:1258:30 | &mut flag | &T | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1258:27:1258:30 | flag | | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1259:18:1259:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1259:26:1259:29 | flag | | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1273:43:1276:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1273:43:1276:5 | { ... } | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1273:43:1276:5 | { ... } | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1274:13:1274:13 | x | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1274:17:1274:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1274:17:1274:30 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1274:17:1274:31 | TryExpr | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1274:28:1274:29 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1275:9:1275:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1275:9:1275:22 | ...::Ok(...) | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1275:9:1275:22 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1275:20:1275:21 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1279:46:1283:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1279:46:1283:5 | { ... } | E | main.rs:1269:5:1270:14 | S2 | +| main.rs:1279:46:1283:5 | { ... } | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1280:13:1280:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1280:13:1280:13 | x | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1280:17:1280:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1280:17:1280:30 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1280:28:1280:29 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1281:13:1281:13 | y | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1281:17:1281:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1281:17:1281:17 | x | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1281:17:1281:18 | TryExpr | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1282:9:1282:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1282:9:1282:22 | ...::Ok(...) | E | main.rs:1269:5:1270:14 | S2 | +| main.rs:1282:9:1282:22 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1282:20:1282:21 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1286:40:1291:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1286:40:1291:5 | { ... } | E | main.rs:1269:5:1270:14 | S2 | +| main.rs:1286:40:1291:5 | { ... } | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1287:13:1287:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1287:13:1287:13 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1287:13:1287:13 | x | T.T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1287:17:1287:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1287:17:1287:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | +| main.rs:1287:17:1287:42 | ...::Ok(...) | T.T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1287:28:1287:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1287:28:1287:41 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1287:39:1287:40 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1289:17:1289:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1289:17:1289:17 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1289:17:1289:17 | x | T.T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1289:17:1289:18 | TryExpr | | {EXTERNAL LOCATION} | Result | +| main.rs:1289:17:1289:18 | TryExpr | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1289:17:1289:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1290:9:1290:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1290:9:1290:22 | ...::Ok(...) | E | main.rs:1269:5:1270:14 | S2 | +| main.rs:1290:9:1290:22 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1290:20:1290:21 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1294:30:1294:34 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1294:30:1294:34 | input | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1294:30:1294:34 | input | T | main.rs:1294:20:1294:27 | T | +| main.rs:1294:69:1301:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1294:69:1301:5 | { ... } | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1294:69:1301:5 | { ... } | T | main.rs:1294:20:1294:27 | T | +| main.rs:1295:13:1295:17 | value | | main.rs:1294:20:1294:27 | T | +| main.rs:1295:21:1295:25 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1295:21:1295:25 | input | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1295:21:1295:25 | input | T | main.rs:1294:20:1294:27 | T | +| main.rs:1295:21:1295:26 | TryExpr | | main.rs:1294:20:1294:27 | T | +| main.rs:1296:22:1296:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1296:22:1296:38 | ...::Ok(...) | T | main.rs:1294:20:1294:27 | T | +| main.rs:1296:22:1299:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1296:33:1296:37 | value | | main.rs:1294:20:1294:27 | T | +| main.rs:1296:53:1299:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1296:53:1299:9 | { ... } | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1297:22:1297:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1298:13:1298:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1298:13:1298:34 | ...::Ok::<...>(...) | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1300:9:1300:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1300:9:1300:23 | ...::Err(...) | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1300:9:1300:23 | ...::Err(...) | T | main.rs:1294:20:1294:27 | T | +| main.rs:1300:21:1300:22 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1304:37:1304:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1304:37:1304:52 | try_same_error(...) | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1304:37:1304:52 | try_same_error(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1305:22:1305:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1308:37:1308:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1308:37:1308:55 | try_convert_error(...) | E | main.rs:1269:5:1270:14 | S2 | +| main.rs:1308:37:1308:55 | try_convert_error(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1309:22:1309:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1312:37:1312:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1312:37:1312:49 | try_chained(...) | E | main.rs:1269:5:1270:14 | S2 | +| main.rs:1312:37:1312:49 | try_chained(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1313:22:1313:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1316:37:1316:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1316:37:1316:63 | try_complex(...) | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1316:37:1316:63 | try_complex(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1316:49:1316:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1316:49:1316:62 | ...::Ok(...) | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1316:49:1316:62 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1316:60:1316:61 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1317:22:1317:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1324:13:1324:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1324:22:1324:22 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1325:13:1325:13 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1325:17:1325:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1326:13:1326:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1326:17:1326:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1326:17:1326:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | +| main.rs:1326:21:1326:21 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1327:13:1327:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1327:17:1327:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1327:17:1327:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | +| main.rs:1328:13:1328:13 | c | | {EXTERNAL LOCATION} | char | +| main.rs:1328:17:1328:19 | 'c' | | {EXTERNAL LOCATION} | char | +| main.rs:1329:13:1329:17 | hello | | {EXTERNAL LOCATION} | str | +| main.rs:1329:21:1329:27 | "Hello" | | {EXTERNAL LOCATION} | str | +| main.rs:1330:13:1330:13 | f | | {EXTERNAL LOCATION} | f64 | +| main.rs:1330:17:1330:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | +| main.rs:1331:13:1331:13 | t | | {EXTERNAL LOCATION} | bool | +| main.rs:1331:17:1331:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1332:13:1332:13 | f | | {EXTERNAL LOCATION} | bool | +| main.rs:1332:17:1332:21 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1339:13:1339:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:1339:17:1339:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1339:17:1339:29 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1339:25:1339:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1340:13:1340:13 | y | | {EXTERNAL LOCATION} | bool | +| main.rs:1340:17:1340:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1340:17:1340:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1340:25:1340:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1342:13:1342:17 | mut a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1343:13:1343:16 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1343:20:1343:21 | 34 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1343:20:1343:27 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1343:26:1343:27 | 33 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1344:12:1344:15 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1345:17:1345:17 | z | | file://:0:0:0:0 | () | +| main.rs:1345:21:1345:27 | (...) | | file://:0:0:0:0 | () | +| main.rs:1345:22:1345:22 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1345:22:1345:26 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1345:26:1345:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1347:13:1347:13 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1347:13:1347:17 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1347:17:1347:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1349:9:1349:9 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1363:30:1365:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1364:13:1364:31 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1364:23:1364:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1364:23:1364:23 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1364:29:1364:29 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1364:29:1364:29 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1371:16:1371:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1371:22:1371:24 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1371:41:1376:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1372:13:1375:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1373:20:1373:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1373:20:1373:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1373:20:1373:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1373:29:1373:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1373:29:1373:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1374:20:1374:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1374:20:1374:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1374:20:1374:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1374:29:1374:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1374:29:1374:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1381:23:1381:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1381:23:1381:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1381:34:1381:36 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1382:13:1382:16 | self | | file://:0:0:0:0 | & | +| main.rs:1382:13:1382:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1382:13:1382:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1382:13:1382:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1382:23:1382:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1382:23:1382:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1383:13:1383:16 | self | | file://:0:0:0:0 | & | -| main.rs:1383:13:1383:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1383:13:1383:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1383:13:1383:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1383:23:1383:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1383:23:1383:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1384:13:1384:16 | self | | file://:0:0:0:0 | & | -| main.rs:1384:13:1384:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1384:13:1384:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1384:13:1384:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1384:23:1384:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1384:23:1384:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1390:16:1390:19 | SelfParam | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1390:22:1390:24 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1390:41:1395:9 | { ... } | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1391:13:1394:13 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1392:20:1392:23 | self | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1392:20:1392:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1392:20:1392:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1392:29:1392:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1392:29:1392:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1393:20:1393:23 | self | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1393:20:1393:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1393:20:1393:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1393:29:1393:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1393:29:1393:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1383:13:1383:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1383:13:1383:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1383:13:1383:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1383:23:1383:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1383:23:1383:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1389:16:1389:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1389:22:1389:24 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1389:41:1394:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1390:13:1393:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1391:20:1391:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1391:20:1391:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1391:20:1391:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1391:29:1391:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1391:29:1391:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1392:20:1392:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1392:20:1392:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1392:20:1392:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1392:29:1392:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1392:29:1392:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1399:23:1399:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1399:23:1399:31 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1399:34:1399:36 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1399:23:1399:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1399:34:1399:36 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1400:13:1400:16 | self | | file://:0:0:0:0 | & | -| main.rs:1400:13:1400:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1400:13:1400:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1400:13:1400:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1400:13:1400:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1400:23:1400:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1400:13:1400:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1400:23:1400:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1400:23:1400:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1401:13:1401:16 | self | | file://:0:0:0:0 | & | -| main.rs:1401:13:1401:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1401:13:1401:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1401:13:1401:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1401:13:1401:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1401:23:1401:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1401:13:1401:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1401:23:1401:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1401:23:1401:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1407:16:1407:19 | SelfParam | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1407:22:1407:24 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1407:41:1412:9 | { ... } | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1408:13:1411:13 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1409:20:1409:23 | self | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1407:16:1407:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1407:22:1407:24 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1407:41:1412:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1408:13:1411:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1409:20:1409:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1409:20:1409:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1409:20:1409:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1409:29:1409:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1409:20:1409:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1409:29:1409:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1409:29:1409:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1410:20:1410:23 | self | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1410:20:1410:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1410:20:1410:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1410:20:1410:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1410:29:1410:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1410:20:1410:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1410:29:1410:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1410:29:1410:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1416:23:1416:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1416:23:1416:31 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1416:34:1416:36 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1416:23:1416:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1416:34:1416:36 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1417:13:1417:16 | self | | file://:0:0:0:0 | & | -| main.rs:1417:13:1417:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1417:13:1417:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1417:13:1417:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1417:13:1417:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1417:23:1417:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1417:13:1417:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1417:23:1417:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1417:23:1417:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1418:13:1418:16 | self | | file://:0:0:0:0 | & | -| main.rs:1418:13:1418:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1418:13:1418:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1418:13:1418:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1418:13:1418:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1418:23:1418:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1418:13:1418:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1418:23:1418:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1418:23:1418:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1424:19:1424:22 | SelfParam | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1424:25:1424:27 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1424:44:1429:9 | { ... } | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1425:13:1428:13 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1426:20:1426:23 | self | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1424:16:1424:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1424:22:1424:24 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1424:41:1429:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1425:13:1428:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1426:20:1426:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1426:20:1426:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1426:20:1426:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1426:29:1426:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1426:20:1426:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1426:29:1426:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1426:29:1426:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1427:20:1427:23 | self | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1427:20:1427:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1427:20:1427:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1427:20:1427:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1427:29:1427:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1427:20:1427:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1427:29:1427:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1427:29:1427:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1433:26:1433:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1433:26:1433:34 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1433:37:1433:39 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1433:23:1433:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1433:23:1433:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1433:34:1433:36 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1434:13:1434:16 | self | | file://:0:0:0:0 | & | -| main.rs:1434:13:1434:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1434:13:1434:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1434:13:1434:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1434:13:1434:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1434:23:1434:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1434:13:1434:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1434:23:1434:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1434:23:1434:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1435:13:1435:16 | self | | file://:0:0:0:0 | & | -| main.rs:1435:13:1435:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1435:13:1435:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1435:13:1435:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1435:13:1435:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1435:23:1435:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1435:13:1435:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1435:23:1435:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1435:23:1435:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1441:18:1441:21 | SelfParam | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1441:24:1441:26 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1441:43:1446:9 | { ... } | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1442:13:1445:13 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1443:20:1443:23 | self | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1441:16:1441:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1441:22:1441:24 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1441:41:1446:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1442:13:1445:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1443:20:1443:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1443:20:1443:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1443:20:1443:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1443:29:1443:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1443:20:1443:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1443:29:1443:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1443:29:1443:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1444:20:1444:23 | self | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1444:20:1444:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1444:20:1444:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1444:20:1444:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1444:29:1444:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1444:20:1444:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1444:29:1444:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1444:29:1444:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1450:25:1450:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1450:25:1450:33 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1450:36:1450:38 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1450:23:1450:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1450:23:1450:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1450:34:1450:36 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1451:13:1451:16 | self | | file://:0:0:0:0 | & | -| main.rs:1451:13:1451:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1451:13:1451:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1451:13:1451:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1451:13:1451:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1451:23:1451:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1451:13:1451:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1451:23:1451:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1451:23:1451:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1452:13:1452:16 | self | | file://:0:0:0:0 | & | -| main.rs:1452:13:1452:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1452:13:1452:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1452:13:1452:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1452:13:1452:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1452:23:1452:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1452:13:1452:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1452:23:1452:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1452:23:1452:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1458:19:1458:22 | SelfParam | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1458:25:1458:27 | rhs | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1458:44:1463:9 | { ... } | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1459:13:1462:13 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1460:20:1460:23 | self | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1458:19:1458:22 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1458:25:1458:27 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1458:44:1463:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1459:13:1462:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1460:20:1460:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1460:20:1460:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1460:20:1460:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1460:29:1460:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1460:20:1460:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1460:29:1460:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1460:29:1460:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1461:20:1461:23 | self | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1461:20:1461:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1461:20:1461:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1461:20:1461:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1461:29:1461:31 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1461:20:1461:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1461:29:1461:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1461:29:1461:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1467:26:1467:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1467:26:1467:34 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1467:37:1467:39 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1467:26:1467:34 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1467:37:1467:39 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1468:13:1468:16 | self | | file://:0:0:0:0 | & | -| main.rs:1468:13:1468:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1468:13:1468:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1468:13:1468:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1468:13:1468:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1468:23:1468:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1468:13:1468:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1468:23:1468:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1468:23:1468:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1469:13:1469:16 | self | | file://:0:0:0:0 | & | -| main.rs:1469:13:1469:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1469:13:1469:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1469:13:1469:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1469:13:1469:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1469:23:1469:25 | rhs | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1469:13:1469:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1469:23:1469:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1469:23:1469:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1475:16:1475:19 | SelfParam | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1475:22:1475:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1475:40:1480:9 | { ... } | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1476:13:1479:13 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1477:20:1477:23 | self | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1475:18:1475:21 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1475:24:1475:26 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1475:43:1480:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1476:13:1479:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1477:20:1477:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1477:20:1477:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1477:20:1477:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1477:30:1477:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1478:20:1478:23 | self | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1477:20:1477:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1477:29:1477:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1477:29:1477:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1478:20:1478:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1478:20:1478:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1478:20:1478:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1478:30:1478:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1484:23:1484:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1484:23:1484:31 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1484:34:1484:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1478:20:1478:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1478:29:1478:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1478:29:1478:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1484:25:1484:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1484:25:1484:33 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1484:36:1484:38 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1485:13:1485:16 | self | | file://:0:0:0:0 | & | -| main.rs:1485:13:1485:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1485:13:1485:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1485:13:1485:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1485:13:1485:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1485:24:1485:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1485:13:1485:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1485:23:1485:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1485:23:1485:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1486:13:1486:16 | self | | file://:0:0:0:0 | & | -| main.rs:1486:13:1486:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1486:13:1486:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1486:13:1486:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1486:13:1486:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1486:24:1486:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1492:16:1492:19 | SelfParam | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1492:22:1492:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1492:40:1497:9 | { ... } | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1493:13:1496:13 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1494:20:1494:23 | self | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1486:13:1486:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1486:23:1486:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1486:23:1486:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1492:19:1492:22 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1492:25:1492:27 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1492:44:1497:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1493:13:1496:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1494:20:1494:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1494:20:1494:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1494:20:1494:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1494:30:1494:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1495:20:1495:23 | self | | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1494:20:1494:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1494:29:1494:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1494:29:1494:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1495:20:1495:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1495:20:1495:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1495:20:1495:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1495:30:1495:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1501:23:1501:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1501:23:1501:31 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1501:34:1501:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1495:20:1495:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1495:29:1495:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1495:29:1495:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1501:26:1501:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1501:26:1501:34 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1501:37:1501:39 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1502:13:1502:16 | self | | file://:0:0:0:0 | & | -| main.rs:1502:13:1502:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1502:13:1502:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1502:13:1502:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1502:13:1502:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1502:24:1502:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1502:13:1502:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1502:23:1502:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1502:23:1502:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1503:13:1503:16 | self | | file://:0:0:0:0 | & | -| main.rs:1503:13:1503:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | +| main.rs:1503:13:1503:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1503:13:1503:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1503:13:1503:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1503:24:1503:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1509:16:1509:19 | SelfParam | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1509:30:1514:9 | { ... } | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1510:13:1513:13 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1511:20:1511:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1511:21:1511:24 | self | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1511:21:1511:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1512:20:1512:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1512:21:1512:24 | self | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1512:21:1512:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1519:16:1519:19 | SelfParam | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1519:30:1524:9 | { ... } | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1520:13:1523:13 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1521:20:1521:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1521:21:1521:24 | self | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1521:21:1521:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1522:20:1522:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1522:21:1522:24 | self | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1522:21:1522:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1528:15:1528:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1528:15:1528:19 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1528:22:1528:26 | other | | file://:0:0:0:0 | & | -| main.rs:1528:22:1528:26 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1528:44:1530:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1529:13:1529:16 | self | | file://:0:0:0:0 | & | -| main.rs:1529:13:1529:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1529:13:1529:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1529:13:1529:29 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1529:13:1529:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1529:23:1529:27 | other | | file://:0:0:0:0 | & | -| main.rs:1529:23:1529:27 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1529:23:1529:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1529:34:1529:37 | self | | file://:0:0:0:0 | & | -| main.rs:1529:34:1529:37 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1529:34:1529:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1529:34:1529:50 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1529:44:1529:48 | other | | file://:0:0:0:0 | & | -| main.rs:1529:44:1529:48 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1529:44:1529:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1532:15:1532:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1532:15:1532:19 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1532:22:1532:26 | other | | file://:0:0:0:0 | & | -| main.rs:1532:22:1532:26 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1532:44:1534:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1533:13:1533:16 | self | | file://:0:0:0:0 | & | -| main.rs:1533:13:1533:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1533:13:1533:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1533:13:1533:29 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1533:13:1533:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1533:23:1533:27 | other | | file://:0:0:0:0 | & | -| main.rs:1533:23:1533:27 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1533:23:1533:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1533:34:1533:37 | self | | file://:0:0:0:0 | & | -| main.rs:1533:34:1533:37 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1533:34:1533:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1533:34:1533:50 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1533:44:1533:48 | other | | file://:0:0:0:0 | & | -| main.rs:1533:44:1533:48 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1533:44:1533:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1538:24:1538:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1538:24:1538:28 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1538:31:1538:35 | other | | file://:0:0:0:0 | & | -| main.rs:1538:31:1538:35 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1538:75:1540:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:1538:75:1540:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1539:13:1539:29 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1539:13:1539:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:1539:13:1539:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1539:14:1539:17 | self | | file://:0:0:0:0 | & | -| main.rs:1539:14:1539:17 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1539:14:1539:19 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1539:14:1539:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1539:23:1539:26 | self | | file://:0:0:0:0 | & | -| main.rs:1539:23:1539:26 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1539:23:1539:28 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1539:43:1539:62 | &... | | file://:0:0:0:0 | & | -| main.rs:1539:43:1539:62 | &... | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1539:44:1539:62 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1539:45:1539:49 | other | | file://:0:0:0:0 | & | -| main.rs:1539:45:1539:49 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1539:45:1539:51 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1539:45:1539:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1539:55:1539:59 | other | | file://:0:0:0:0 | & | -| main.rs:1539:55:1539:59 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1539:55:1539:61 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1542:15:1542:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1542:15:1542:19 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1542:22:1542:26 | other | | file://:0:0:0:0 | & | -| main.rs:1542:22:1542:26 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1542:44:1544:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1543:13:1543:16 | self | | file://:0:0:0:0 | & | -| main.rs:1543:13:1543:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1543:13:1543:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1543:13:1543:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1543:13:1543:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1543:22:1543:26 | other | | file://:0:0:0:0 | & | -| main.rs:1543:22:1543:26 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1543:22:1543:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1543:33:1543:36 | self | | file://:0:0:0:0 | & | -| main.rs:1543:33:1543:36 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1543:33:1543:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1543:33:1543:48 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1543:42:1543:46 | other | | file://:0:0:0:0 | & | -| main.rs:1543:42:1543:46 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1543:42:1543:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1546:15:1546:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1546:15:1546:19 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1546:22:1546:26 | other | | file://:0:0:0:0 | & | -| main.rs:1546:22:1546:26 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1546:44:1548:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1547:13:1547:16 | self | | file://:0:0:0:0 | & | -| main.rs:1547:13:1547:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1547:13:1547:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1547:13:1547:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1547:13:1547:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1547:23:1547:27 | other | | file://:0:0:0:0 | & | -| main.rs:1547:23:1547:27 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1547:23:1547:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1547:34:1547:37 | self | | file://:0:0:0:0 | & | -| main.rs:1547:34:1547:37 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1547:34:1547:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1547:34:1547:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1547:44:1547:48 | other | | file://:0:0:0:0 | & | -| main.rs:1547:44:1547:48 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1547:44:1547:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1550:15:1550:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1550:15:1550:19 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1550:22:1550:26 | other | | file://:0:0:0:0 | & | -| main.rs:1550:22:1550:26 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1550:44:1552:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1551:13:1551:16 | self | | file://:0:0:0:0 | & | -| main.rs:1551:13:1551:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1551:13:1551:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1551:13:1551:28 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1551:13:1551:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1551:22:1551:26 | other | | file://:0:0:0:0 | & | -| main.rs:1551:22:1551:26 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1551:22:1551:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1551:33:1551:36 | self | | file://:0:0:0:0 | & | -| main.rs:1551:33:1551:36 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1551:33:1551:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1551:33:1551:48 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1551:42:1551:46 | other | | file://:0:0:0:0 | & | -| main.rs:1551:42:1551:46 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1551:42:1551:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1554:15:1554:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1554:15:1554:19 | SelfParam | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1554:22:1554:26 | other | | file://:0:0:0:0 | & | -| main.rs:1554:22:1554:26 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1554:44:1556:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1555:13:1555:16 | self | | file://:0:0:0:0 | & | -| main.rs:1555:13:1555:16 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1555:13:1555:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1555:13:1555:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1555:13:1555:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1555:23:1555:27 | other | | file://:0:0:0:0 | & | -| main.rs:1555:23:1555:27 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1555:23:1555:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1555:34:1555:37 | self | | file://:0:0:0:0 | & | -| main.rs:1555:34:1555:37 | self | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1555:34:1555:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1555:34:1555:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1555:44:1555:48 | other | | file://:0:0:0:0 | & | -| main.rs:1555:44:1555:48 | other | &T | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1555:44:1555:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1562:13:1562:18 | i64_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:1562:22:1562:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1562:23:1562:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1562:23:1562:34 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1562:31:1562:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1563:13:1563:18 | i64_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:1563:22:1563:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1563:23:1563:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1563:23:1563:34 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1563:31:1563:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1564:13:1564:18 | i64_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:1564:22:1564:34 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1564:23:1564:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1564:23:1564:33 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1564:30:1564:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1565:13:1565:18 | i64_le | | {EXTERNAL LOCATION} | bool | -| main.rs:1565:22:1565:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1565:23:1565:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1565:23:1565:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1565:31:1565:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1566:13:1566:18 | i64_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:1566:22:1566:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1566:23:1566:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1566:23:1566:34 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1566:30:1566:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1567:13:1567:18 | i64_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:1567:22:1567:37 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1567:23:1567:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1567:23:1567:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1567:32:1567:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1570:13:1570:19 | i64_add | | {EXTERNAL LOCATION} | i64 | -| main.rs:1570:23:1570:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1570:23:1570:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1570:31:1570:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1571:13:1571:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | -| main.rs:1571:23:1571:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1571:23:1571:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1571:31:1571:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1572:13:1572:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | -| main.rs:1572:23:1572:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1572:23:1572:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1572:31:1572:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1573:13:1573:19 | i64_div | | {EXTERNAL LOCATION} | i64 | -| main.rs:1573:23:1573:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1573:23:1573:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1573:31:1573:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1574:13:1574:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | -| main.rs:1574:23:1574:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1574:23:1574:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1574:31:1574:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1577:13:1577:30 | mut i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1577:34:1577:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1578:9:1578:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1578:9:1578:31 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1578:27:1578:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1580:13:1580:30 | mut i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1580:34:1580:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1581:9:1581:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1581:9:1581:31 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1581:27:1581:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1583:13:1583:30 | mut i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1583:34:1583:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1584:9:1584:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1584:9:1584:31 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1584:27:1584:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1586:13:1586:30 | mut i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1586:34:1586:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1587:9:1587:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1587:9:1587:31 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1587:27:1587:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1589:13:1589:30 | mut i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1589:34:1589:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1590:9:1590:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1590:9:1590:31 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1590:27:1590:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1593:13:1593:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | -| main.rs:1593:26:1593:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1593:26:1593:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1593:34:1593:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1594:13:1594:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | -| main.rs:1594:25:1594:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1594:25:1594:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1594:33:1594:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1595:13:1595:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | -| main.rs:1595:26:1595:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1595:26:1595:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1595:34:1595:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1596:13:1596:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | -| main.rs:1596:23:1596:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1596:23:1596:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1596:32:1596:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1597:13:1597:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | -| main.rs:1597:23:1597:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1597:23:1597:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1597:32:1597:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1600:13:1600:33 | mut i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1600:37:1600:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1601:9:1601:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1601:9:1601:34 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1601:30:1601:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1603:13:1603:32 | mut i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1603:36:1603:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1604:9:1604:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1604:9:1604:33 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1604:29:1604:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1606:13:1606:33 | mut i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1606:37:1606:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1607:9:1607:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1607:9:1607:34 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1607:30:1607:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1609:13:1609:30 | mut i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1609:34:1609:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1610:9:1610:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1610:9:1610:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1610:28:1610:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1612:13:1612:30 | mut i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1612:34:1612:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1613:9:1613:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1613:9:1613:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1613:28:1613:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1615:13:1615:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | -| main.rs:1615:23:1615:28 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1615:24:1615:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1616:13:1616:19 | i64_not | | {EXTERNAL LOCATION} | i64 | -| main.rs:1616:23:1616:28 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1616:24:1616:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1619:13:1619:14 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1619:18:1619:36 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1619:28:1619:28 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1619:28:1619:28 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1619:34:1619:34 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1619:34:1619:34 | 2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1620:13:1620:14 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1620:18:1620:36 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1620:28:1620:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1620:28:1620:28 | 3 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1620:34:1620:34 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1620:34:1620:34 | 4 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1623:13:1623:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:1623:23:1623:24 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1623:23:1623:30 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1623:29:1623:30 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1624:13:1624:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:1624:23:1624:24 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1624:23:1624:30 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1624:29:1624:30 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1625:13:1625:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:1625:23:1625:24 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1625:23:1625:29 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1625:28:1625:29 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1626:13:1626:19 | vec2_le | | {EXTERNAL LOCATION} | bool | -| main.rs:1626:23:1626:24 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1626:23:1626:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1626:29:1626:30 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1627:13:1627:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:1627:23:1627:24 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1627:23:1627:29 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1627:28:1627:29 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1628:13:1628:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:1628:23:1628:24 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1628:23:1628:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1628:29:1628:30 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1631:13:1631:20 | vec2_add | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1631:24:1631:25 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1631:24:1631:30 | ... + ... | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1631:29:1631:30 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1632:13:1632:20 | vec2_sub | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1632:24:1632:25 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1632:24:1632:30 | ... - ... | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1632:29:1632:30 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1633:13:1633:20 | vec2_mul | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1633:24:1633:25 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1633:24:1633:30 | ... * ... | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1633:29:1633:30 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1634:13:1634:20 | vec2_div | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1634:24:1634:25 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1634:24:1634:30 | ... / ... | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1634:29:1634:30 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1635:13:1635:20 | vec2_rem | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1635:24:1635:25 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1635:24:1635:30 | ... % ... | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1635:29:1635:30 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1638:13:1638:31 | mut vec2_add_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1638:35:1638:36 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1639:9:1639:23 | vec2_add_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1639:9:1639:29 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1639:28:1639:29 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1641:13:1641:31 | mut vec2_sub_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1641:35:1641:36 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1642:9:1642:23 | vec2_sub_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1642:9:1642:29 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1642:28:1642:29 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1644:13:1644:31 | mut vec2_mul_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1644:35:1644:36 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1645:9:1645:23 | vec2_mul_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1645:9:1645:29 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1645:28:1645:29 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1647:13:1647:31 | mut vec2_div_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1647:35:1647:36 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1648:9:1648:23 | vec2_div_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1648:9:1648:29 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1648:28:1648:29 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1650:13:1650:31 | mut vec2_rem_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1650:35:1650:36 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1651:9:1651:23 | vec2_rem_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1651:9:1651:29 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1651:28:1651:29 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1654:13:1654:23 | vec2_bitand | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1654:27:1654:28 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1654:27:1654:33 | ... & ... | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1654:32:1654:33 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1655:13:1655:22 | vec2_bitor | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1655:26:1655:27 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1655:26:1655:32 | ... \| ... | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1655:31:1655:32 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1656:13:1656:23 | vec2_bitxor | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1656:27:1656:28 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1656:27:1656:33 | ... ^ ... | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1656:32:1656:33 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1657:13:1657:20 | vec2_shl | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1657:24:1657:25 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1657:24:1657:33 | ... << ... | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1657:30:1657:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1658:13:1658:20 | vec2_shr | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1658:24:1658:25 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1658:24:1658:33 | ... >> ... | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1658:30:1658:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1661:13:1661:34 | mut vec2_bitand_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1661:38:1661:39 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1662:9:1662:26 | vec2_bitand_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1662:9:1662:32 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1662:31:1662:32 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1664:13:1664:33 | mut vec2_bitor_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1664:37:1664:38 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1665:9:1665:25 | vec2_bitor_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1665:9:1665:31 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1665:30:1665:31 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1667:13:1667:34 | mut vec2_bitxor_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1667:38:1667:39 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1668:9:1668:26 | vec2_bitxor_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1668:9:1668:32 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1668:31:1668:32 | v2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1670:13:1670:31 | mut vec2_shl_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1670:35:1670:36 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1671:9:1671:23 | vec2_shl_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1671:9:1671:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1671:29:1671:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1673:13:1673:31 | mut vec2_shr_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1673:35:1673:36 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1674:9:1674:23 | vec2_shr_assign | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1674:9:1674:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1674:29:1674:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1677:13:1677:20 | vec2_neg | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1677:24:1677:26 | - ... | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1677:25:1677:26 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1678:13:1678:20 | vec2_not | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1678:24:1678:26 | ! ... | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1678:25:1678:26 | v1 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1681:13:1681:24 | default_vec2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1681:28:1681:45 | ...::default(...) | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1682:13:1682:26 | vec2_zero_plus | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1682:30:1682:48 | Vec2 {...} | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1682:30:1682:63 | ... + ... | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1682:40:1682:40 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1682:40:1682:40 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1682:46:1682:46 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1682:46:1682:46 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1682:52:1682:63 | default_vec2 | | main.rs:1322:5:1327:5 | Vec2 | -| main.rs:1692:18:1692:21 | SelfParam | | main.rs:1689:5:1689:14 | S1 | -| main.rs:1695:25:1697:5 | { ... } | | main.rs:1689:5:1689:14 | S1 | -| main.rs:1696:9:1696:10 | S1 | | main.rs:1689:5:1689:14 | S1 | -| main.rs:1699:41:1701:5 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1699:41:1701:5 | { ... } | | main.rs:1699:16:1699:39 | ImplTraitTypeRepr | -| main.rs:1699:41:1701:5 | { ... } | Output | main.rs:1689:5:1689:14 | S1 | -| main.rs:1700:9:1700:20 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1700:9:1700:20 | { ... } | | main.rs:1699:16:1699:39 | ImplTraitTypeRepr | -| main.rs:1700:9:1700:20 | { ... } | Output | main.rs:1689:5:1689:14 | S1 | -| main.rs:1700:17:1700:18 | S1 | | main.rs:1689:5:1689:14 | S1 | -| main.rs:1709:13:1709:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | -| main.rs:1709:13:1709:42 | SelfParam | Ptr | file://:0:0:0:0 | & | -| main.rs:1709:13:1709:42 | SelfParam | Ptr.&T | main.rs:1703:5:1703:14 | S2 | -| main.rs:1710:13:1710:15 | _cx | | file://:0:0:0:0 | & | -| main.rs:1710:13:1710:15 | _cx | &T | {EXTERNAL LOCATION} | Context | -| main.rs:1711:44:1713:9 | { ... } | | {EXTERNAL LOCATION} | Poll | -| main.rs:1711:44:1713:9 | { ... } | T | main.rs:1689:5:1689:14 | S1 | -| main.rs:1712:13:1712:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | -| main.rs:1712:13:1712:38 | ...::Ready(...) | T | main.rs:1689:5:1689:14 | S1 | -| main.rs:1712:36:1712:37 | S1 | | main.rs:1689:5:1689:14 | S1 | -| main.rs:1716:41:1718:5 | { ... } | | main.rs:1703:5:1703:14 | S2 | -| main.rs:1716:41:1718:5 | { ... } | | main.rs:1716:16:1716:39 | ImplTraitTypeRepr | -| main.rs:1717:9:1717:10 | S2 | | main.rs:1703:5:1703:14 | S2 | -| main.rs:1717:9:1717:10 | S2 | | main.rs:1716:16:1716:39 | ImplTraitTypeRepr | -| main.rs:1721:9:1721:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1721:9:1721:12 | f1(...) | Output | main.rs:1689:5:1689:14 | S1 | -| main.rs:1721:9:1721:18 | await ... | | main.rs:1689:5:1689:14 | S1 | -| main.rs:1722:9:1722:12 | f2(...) | | main.rs:1699:16:1699:39 | ImplTraitTypeRepr | -| main.rs:1722:9:1722:18 | await ... | | main.rs:1689:5:1689:14 | S1 | -| main.rs:1723:9:1723:12 | f3(...) | | main.rs:1716:16:1716:39 | ImplTraitTypeRepr | -| main.rs:1723:9:1723:18 | await ... | | main.rs:1689:5:1689:14 | S1 | -| main.rs:1724:9:1724:10 | S2 | | main.rs:1703:5:1703:14 | S2 | -| main.rs:1724:9:1724:16 | await S2 | | main.rs:1689:5:1689:14 | S1 | -| main.rs:1725:13:1725:13 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1725:13:1725:13 | b | Output | main.rs:1689:5:1689:14 | S1 | -| main.rs:1725:17:1725:28 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1725:17:1725:28 | { ... } | Output | main.rs:1689:5:1689:14 | S1 | -| main.rs:1725:25:1725:26 | S1 | | main.rs:1689:5:1689:14 | S1 | -| main.rs:1726:9:1726:9 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1726:9:1726:9 | b | Output | main.rs:1689:5:1689:14 | S1 | -| main.rs:1726:9:1726:15 | await b | | main.rs:1689:5:1689:14 | S1 | -| main.rs:1735:15:1735:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1735:15:1735:19 | SelfParam | &T | main.rs:1734:5:1736:5 | Self [trait Trait1] | -| main.rs:1739:15:1739:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1739:15:1739:19 | SelfParam | &T | main.rs:1738:5:1740:5 | Self [trait Trait2] | -| main.rs:1743:15:1743:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1743:15:1743:19 | SelfParam | &T | main.rs:1731:5:1731:14 | S1 | -| main.rs:1747:15:1747:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1747:15:1747:19 | SelfParam | &T | main.rs:1731:5:1731:14 | S1 | -| main.rs:1750:37:1752:5 | { ... } | | main.rs:1731:5:1731:14 | S1 | -| main.rs:1750:37:1752:5 | { ... } | | main.rs:1750:16:1750:35 | ImplTraitTypeRepr | -| main.rs:1751:9:1751:10 | S1 | | main.rs:1731:5:1731:14 | S1 | -| main.rs:1751:9:1751:10 | S1 | | main.rs:1750:16:1750:35 | ImplTraitTypeRepr | -| main.rs:1755:18:1755:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1755:18:1755:22 | SelfParam | &T | main.rs:1754:5:1756:5 | Self [trait MyTrait] | -| main.rs:1759:18:1759:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1759:18:1759:22 | SelfParam | &T | main.rs:1731:5:1731:14 | S1 | -| main.rs:1759:31:1761:9 | { ... } | | main.rs:1732:5:1732:14 | S2 | -| main.rs:1760:13:1760:14 | S2 | | main.rs:1732:5:1732:14 | S2 | -| main.rs:1764:45:1766:5 | { ... } | | main.rs:1731:5:1731:14 | S1 | -| main.rs:1764:45:1766:5 | { ... } | | main.rs:1764:28:1764:43 | ImplTraitTypeRepr | -| main.rs:1765:9:1765:10 | S1 | | main.rs:1731:5:1731:14 | S1 | -| main.rs:1765:9:1765:10 | S1 | | main.rs:1764:28:1764:43 | ImplTraitTypeRepr | -| main.rs:1768:41:1768:41 | t | | main.rs:1768:26:1768:38 | B | -| main.rs:1768:52:1770:5 | { ... } | | main.rs:1768:23:1768:23 | A | -| main.rs:1769:9:1769:9 | t | | main.rs:1768:26:1768:38 | B | -| main.rs:1769:9:1769:17 | t.get_a() | | main.rs:1768:23:1768:23 | A | -| main.rs:1772:26:1772:26 | t | | main.rs:1772:29:1772:43 | ImplTraitTypeRepr | -| main.rs:1772:51:1774:5 | { ... } | | main.rs:1772:23:1772:23 | A | -| main.rs:1773:9:1773:9 | t | | main.rs:1772:29:1772:43 | ImplTraitTypeRepr | -| main.rs:1773:9:1773:17 | t.get_a() | | main.rs:1772:23:1772:23 | A | -| main.rs:1777:13:1777:13 | x | | main.rs:1750:16:1750:35 | ImplTraitTypeRepr | -| main.rs:1777:17:1777:20 | f1(...) | | main.rs:1750:16:1750:35 | ImplTraitTypeRepr | -| main.rs:1778:9:1778:9 | x | | main.rs:1750:16:1750:35 | ImplTraitTypeRepr | -| main.rs:1779:9:1779:9 | x | | main.rs:1750:16:1750:35 | ImplTraitTypeRepr | -| main.rs:1780:13:1780:13 | a | | main.rs:1764:28:1764:43 | ImplTraitTypeRepr | -| main.rs:1780:17:1780:32 | get_a_my_trait(...) | | main.rs:1764:28:1764:43 | ImplTraitTypeRepr | -| main.rs:1781:13:1781:13 | b | | main.rs:1732:5:1732:14 | S2 | -| main.rs:1781:17:1781:33 | uses_my_trait1(...) | | main.rs:1732:5:1732:14 | S2 | -| main.rs:1781:32:1781:32 | a | | main.rs:1764:28:1764:43 | ImplTraitTypeRepr | -| main.rs:1782:13:1782:13 | a | | main.rs:1764:28:1764:43 | ImplTraitTypeRepr | -| main.rs:1782:17:1782:32 | get_a_my_trait(...) | | main.rs:1764:28:1764:43 | ImplTraitTypeRepr | -| main.rs:1783:13:1783:13 | c | | main.rs:1732:5:1732:14 | S2 | -| main.rs:1783:17:1783:33 | uses_my_trait2(...) | | main.rs:1732:5:1732:14 | S2 | -| main.rs:1783:32:1783:32 | a | | main.rs:1764:28:1764:43 | ImplTraitTypeRepr | -| main.rs:1784:13:1784:13 | d | | main.rs:1732:5:1732:14 | S2 | -| main.rs:1784:17:1784:34 | uses_my_trait2(...) | | main.rs:1732:5:1732:14 | S2 | -| main.rs:1784:32:1784:33 | S1 | | main.rs:1731:5:1731:14 | S1 | -| main.rs:1795:16:1795:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1795:16:1795:20 | SelfParam | &T | main.rs:1791:5:1792:13 | S | -| main.rs:1795:31:1797:9 | { ... } | | main.rs:1791:5:1792:13 | S | -| main.rs:1796:13:1796:13 | S | | main.rs:1791:5:1792:13 | S | -| main.rs:1806:26:1808:9 | { ... } | | main.rs:1800:5:1803:5 | MyVec | -| main.rs:1806:26:1808:9 | { ... } | T | main.rs:1805:10:1805:10 | T | -| main.rs:1807:13:1807:38 | MyVec {...} | | main.rs:1800:5:1803:5 | MyVec | -| main.rs:1807:13:1807:38 | MyVec {...} | T | main.rs:1805:10:1805:10 | T | -| main.rs:1807:27:1807:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:1807:27:1807:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:1807:27:1807:36 | ...::new(...) | T | main.rs:1805:10:1805:10 | T | -| main.rs:1810:17:1810:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1810:17:1810:25 | SelfParam | &T | main.rs:1800:5:1803:5 | MyVec | -| main.rs:1810:17:1810:25 | SelfParam | &T.T | main.rs:1805:10:1805:10 | T | -| main.rs:1810:28:1810:32 | value | | main.rs:1805:10:1805:10 | T | -| main.rs:1811:13:1811:16 | self | | file://:0:0:0:0 | & | -| main.rs:1811:13:1811:16 | self | &T | main.rs:1800:5:1803:5 | MyVec | -| main.rs:1811:13:1811:16 | self | &T.T | main.rs:1805:10:1805:10 | T | -| main.rs:1811:13:1811:21 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:1811:13:1811:21 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:1811:13:1811:21 | self.data | T | main.rs:1805:10:1805:10 | T | -| main.rs:1811:28:1811:32 | value | | main.rs:1805:10:1805:10 | T | -| main.rs:1819:18:1819:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1819:18:1819:22 | SelfParam | &T | main.rs:1800:5:1803:5 | MyVec | -| main.rs:1819:18:1819:22 | SelfParam | &T.T | main.rs:1815:10:1815:10 | T | -| main.rs:1819:25:1819:29 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:1819:56:1821:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1819:56:1821:9 | { ... } | &T | main.rs:1815:10:1815:10 | T | -| main.rs:1820:13:1820:29 | &... | | file://:0:0:0:0 | & | -| main.rs:1820:13:1820:29 | &... | &T | main.rs:1815:10:1815:10 | T | -| main.rs:1820:14:1820:17 | self | | file://:0:0:0:0 | & | -| main.rs:1820:14:1820:17 | self | &T | main.rs:1800:5:1803:5 | MyVec | -| main.rs:1820:14:1820:17 | self | &T.T | main.rs:1815:10:1815:10 | T | -| main.rs:1820:14:1820:22 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:1820:14:1820:22 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:1820:14:1820:22 | self.data | T | main.rs:1815:10:1815:10 | T | -| main.rs:1820:14:1820:29 | ...[index] | | main.rs:1815:10:1815:10 | T | -| main.rs:1820:24:1820:28 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:1824:22:1824:26 | slice | | file://:0:0:0:0 | & | -| main.rs:1824:22:1824:26 | slice | &T | file://:0:0:0:0 | [] | -| main.rs:1824:22:1824:26 | slice | &T.[T] | main.rs:1791:5:1792:13 | S | -| main.rs:1825:13:1825:13 | x | | main.rs:1791:5:1792:13 | S | -| main.rs:1825:17:1825:21 | slice | | file://:0:0:0:0 | & | -| main.rs:1825:17:1825:21 | slice | &T | file://:0:0:0:0 | [] | -| main.rs:1825:17:1825:21 | slice | &T.[T] | main.rs:1791:5:1792:13 | S | -| main.rs:1825:17:1825:24 | slice[0] | | main.rs:1791:5:1792:13 | S | -| main.rs:1825:17:1825:30 | ... .foo() | | main.rs:1791:5:1792:13 | S | -| main.rs:1825:23:1825:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1829:13:1829:19 | mut vec | | main.rs:1800:5:1803:5 | MyVec | -| main.rs:1829:13:1829:19 | mut vec | T | main.rs:1791:5:1792:13 | S | -| main.rs:1829:23:1829:34 | ...::new(...) | | main.rs:1800:5:1803:5 | MyVec | -| main.rs:1829:23:1829:34 | ...::new(...) | T | main.rs:1791:5:1792:13 | S | -| main.rs:1830:9:1830:11 | vec | | main.rs:1800:5:1803:5 | MyVec | -| main.rs:1830:9:1830:11 | vec | T | main.rs:1791:5:1792:13 | S | -| main.rs:1830:18:1830:18 | S | | main.rs:1791:5:1792:13 | S | -| main.rs:1831:9:1831:11 | vec | | main.rs:1800:5:1803:5 | MyVec | -| main.rs:1831:9:1831:11 | vec | T | main.rs:1791:5:1792:13 | S | -| main.rs:1831:13:1831:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1833:13:1833:14 | xs | | file://:0:0:0:0 | [] | -| main.rs:1833:13:1833:14 | xs | | file://:0:0:0:0 | [] | -| main.rs:1833:13:1833:14 | xs | [T;...] | main.rs:1791:5:1792:13 | S | -| main.rs:1833:13:1833:14 | xs | [T] | main.rs:1791:5:1792:13 | S | -| main.rs:1833:21:1833:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1833:26:1833:28 | [...] | | file://:0:0:0:0 | [] | -| main.rs:1833:26:1833:28 | [...] | | file://:0:0:0:0 | [] | -| main.rs:1833:26:1833:28 | [...] | [T;...] | main.rs:1791:5:1792:13 | S | -| main.rs:1833:26:1833:28 | [...] | [T] | main.rs:1791:5:1792:13 | S | -| main.rs:1833:27:1833:27 | S | | main.rs:1791:5:1792:13 | S | -| main.rs:1834:13:1834:13 | x | | main.rs:1791:5:1792:13 | S | -| main.rs:1834:17:1834:18 | xs | | file://:0:0:0:0 | [] | -| main.rs:1834:17:1834:18 | xs | | file://:0:0:0:0 | [] | -| main.rs:1834:17:1834:18 | xs | [T;...] | main.rs:1791:5:1792:13 | S | -| main.rs:1834:17:1834:18 | xs | [T] | main.rs:1791:5:1792:13 | S | -| main.rs:1834:17:1834:21 | xs[0] | | main.rs:1791:5:1792:13 | S | -| main.rs:1834:17:1834:27 | ... .foo() | | main.rs:1791:5:1792:13 | S | -| main.rs:1834:20:1834:20 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1836:23:1836:25 | &xs | | file://:0:0:0:0 | & | -| main.rs:1836:23:1836:25 | &xs | &T | file://:0:0:0:0 | [] | -| main.rs:1836:23:1836:25 | &xs | &T | file://:0:0:0:0 | [] | -| main.rs:1836:23:1836:25 | &xs | &T.[T;...] | main.rs:1791:5:1792:13 | S | -| main.rs:1836:23:1836:25 | &xs | &T.[T] | main.rs:1791:5:1792:13 | S | -| main.rs:1836:24:1836:25 | xs | | file://:0:0:0:0 | [] | -| main.rs:1836:24:1836:25 | xs | | file://:0:0:0:0 | [] | -| main.rs:1836:24:1836:25 | xs | [T;...] | main.rs:1791:5:1792:13 | S | -| main.rs:1836:24:1836:25 | xs | [T] | main.rs:1791:5:1792:13 | S | -| main.rs:1842:25:1842:35 | "Hello, {}" | | {EXTERNAL LOCATION} | str | -| main.rs:1842:25:1842:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | -| main.rs:1842:25:1842:45 | { ... } | | {EXTERNAL LOCATION} | String | -| main.rs:1842:38:1842:45 | "World!" | | {EXTERNAL LOCATION} | str | -| main.rs:1848:19:1848:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1848:19:1848:23 | SelfParam | &T | main.rs:1847:5:1849:5 | Self [trait MyAdd] | -| main.rs:1848:26:1848:30 | value | | main.rs:1847:17:1847:17 | T | -| main.rs:1853:19:1853:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1853:19:1853:23 | SelfParam | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1853:26:1853:30 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:1853:46:1855:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1854:13:1854:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:1860:19:1860:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1860:19:1860:23 | SelfParam | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1860:26:1860:30 | value | | file://:0:0:0:0 | & | -| main.rs:1860:26:1860:30 | value | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1860:26:1860:30 | value | &T | file://:0:0:0:0 | & | -| main.rs:1860:47:1862:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1860:47:1862:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1861:13:1861:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1861:13:1861:18 | * ... | | file://:0:0:0:0 | & | -| main.rs:1861:14:1861:18 | value | | file://:0:0:0:0 | & | -| main.rs:1861:14:1861:18 | value | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1861:14:1861:18 | value | &T | file://:0:0:0:0 | & | -| main.rs:1867:19:1867:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1867:19:1867:23 | SelfParam | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1867:26:1867:30 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:1867:47:1873:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:1867:47:1873:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1868:13:1872:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:1868:13:1872:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | -| main.rs:1868:16:1868:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:1868:22:1870:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:1868:22:1870:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1869:17:1869:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1869:17:1869:17 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1870:20:1872:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:1870:20:1872:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1871:17:1871:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1871:17:1871:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1877:13:1877:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1877:13:1877:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1877:22:1877:23 | 73 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1877:22:1877:23 | 73 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1878:9:1878:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1878:9:1878:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1878:9:1878:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1878:18:1878:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1879:9:1879:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1879:9:1879:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1879:9:1879:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1879:18:1879:22 | &5i64 | | file://:0:0:0:0 | & | -| main.rs:1879:18:1879:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1879:19:1879:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1880:9:1880:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1880:9:1880:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1880:9:1880:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1880:18:1880:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1886:5:1886:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:1887:5:1887:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:1887:20:1887:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:1887:41:1887:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:1903:5:1903:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1503:13:1503:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1503:23:1503:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1503:23:1503:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1509:16:1509:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1509:22:1509:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1509:40:1514:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1510:13:1513:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1511:20:1511:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1511:20:1511:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1511:20:1511:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1511:30:1511:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1512:20:1512:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1512:20:1512:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1512:20:1512:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1512:30:1512:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1518:23:1518:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1518:23:1518:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1518:34:1518:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1519:13:1519:16 | self | | file://:0:0:0:0 | & | +| main.rs:1519:13:1519:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1519:13:1519:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1519:13:1519:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1519:24:1519:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1520:13:1520:16 | self | | file://:0:0:0:0 | & | +| main.rs:1520:13:1520:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1520:13:1520:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1520:13:1520:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1520:24:1520:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1526:16:1526:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1526:22:1526:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1526:40:1531:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1527:13:1530:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1528:20:1528:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1528:20:1528:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1528:20:1528:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1528:30:1528:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1529:20:1529:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1529:20:1529:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1529:20:1529:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1529:30:1529:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1535:23:1535:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1535:23:1535:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1535:34:1535:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1536:13:1536:16 | self | | file://:0:0:0:0 | & | +| main.rs:1536:13:1536:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1536:13:1536:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1536:13:1536:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1536:24:1536:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1537:13:1537:16 | self | | file://:0:0:0:0 | & | +| main.rs:1537:13:1537:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1537:13:1537:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1537:13:1537:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1537:24:1537:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1543:16:1543:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1543:30:1548:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1544:13:1547:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1545:20:1545:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1545:21:1545:24 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1545:21:1545:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1546:20:1546:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1546:21:1546:24 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1546:21:1546:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1553:16:1553:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1553:30:1558:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1554:13:1557:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1555:20:1555:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1555:21:1555:24 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1555:21:1555:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1556:20:1556:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1556:21:1556:24 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1556:21:1556:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1562:15:1562:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1562:15:1562:19 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1562:22:1562:26 | other | | file://:0:0:0:0 | & | +| main.rs:1562:22:1562:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1562:44:1564:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1563:13:1563:16 | self | | file://:0:0:0:0 | & | +| main.rs:1563:13:1563:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1563:13:1563:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1563:13:1563:29 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1563:13:1563:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1563:23:1563:27 | other | | file://:0:0:0:0 | & | +| main.rs:1563:23:1563:27 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1563:23:1563:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1563:34:1563:37 | self | | file://:0:0:0:0 | & | +| main.rs:1563:34:1563:37 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1563:34:1563:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1563:34:1563:50 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1563:44:1563:48 | other | | file://:0:0:0:0 | & | +| main.rs:1563:44:1563:48 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1563:44:1563:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1566:15:1566:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1566:15:1566:19 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1566:22:1566:26 | other | | file://:0:0:0:0 | & | +| main.rs:1566:22:1566:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1566:44:1568:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1567:13:1567:16 | self | | file://:0:0:0:0 | & | +| main.rs:1567:13:1567:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1567:13:1567:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1567:13:1567:29 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1567:13:1567:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1567:23:1567:27 | other | | file://:0:0:0:0 | & | +| main.rs:1567:23:1567:27 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1567:23:1567:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1567:34:1567:37 | self | | file://:0:0:0:0 | & | +| main.rs:1567:34:1567:37 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1567:34:1567:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1567:34:1567:50 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1567:44:1567:48 | other | | file://:0:0:0:0 | & | +| main.rs:1567:44:1567:48 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1567:44:1567:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1572:24:1572:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1572:24:1572:28 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1572:31:1572:35 | other | | file://:0:0:0:0 | & | +| main.rs:1572:31:1572:35 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1572:75:1574:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:1572:75:1574:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1573:13:1573:29 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:13:1573:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:1573:13:1573:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1573:14:1573:17 | self | | file://:0:0:0:0 | & | +| main.rs:1573:14:1573:17 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1573:14:1573:19 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:14:1573:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:23:1573:26 | self | | file://:0:0:0:0 | & | +| main.rs:1573:23:1573:26 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1573:23:1573:28 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:43:1573:62 | &... | | file://:0:0:0:0 | & | +| main.rs:1573:43:1573:62 | &... | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:44:1573:62 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:45:1573:49 | other | | file://:0:0:0:0 | & | +| main.rs:1573:45:1573:49 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1573:45:1573:51 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:45:1573:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:55:1573:59 | other | | file://:0:0:0:0 | & | +| main.rs:1573:55:1573:59 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1573:55:1573:61 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1576:15:1576:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1576:15:1576:19 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1576:22:1576:26 | other | | file://:0:0:0:0 | & | +| main.rs:1576:22:1576:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1576:44:1578:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1577:13:1577:16 | self | | file://:0:0:0:0 | & | +| main.rs:1577:13:1577:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1577:13:1577:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1577:13:1577:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1577:13:1577:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1577:22:1577:26 | other | | file://:0:0:0:0 | & | +| main.rs:1577:22:1577:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1577:22:1577:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1577:33:1577:36 | self | | file://:0:0:0:0 | & | +| main.rs:1577:33:1577:36 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1577:33:1577:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1577:33:1577:48 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1577:42:1577:46 | other | | file://:0:0:0:0 | & | +| main.rs:1577:42:1577:46 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1577:42:1577:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1580:15:1580:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1580:15:1580:19 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1580:22:1580:26 | other | | file://:0:0:0:0 | & | +| main.rs:1580:22:1580:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1580:44:1582:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1581:13:1581:16 | self | | file://:0:0:0:0 | & | +| main.rs:1581:13:1581:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1581:13:1581:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1581:13:1581:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1581:13:1581:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1581:23:1581:27 | other | | file://:0:0:0:0 | & | +| main.rs:1581:23:1581:27 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1581:23:1581:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1581:34:1581:37 | self | | file://:0:0:0:0 | & | +| main.rs:1581:34:1581:37 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1581:34:1581:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1581:34:1581:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1581:44:1581:48 | other | | file://:0:0:0:0 | & | +| main.rs:1581:44:1581:48 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1581:44:1581:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1584:15:1584:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1584:15:1584:19 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1584:22:1584:26 | other | | file://:0:0:0:0 | & | +| main.rs:1584:22:1584:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1584:44:1586:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1585:13:1585:16 | self | | file://:0:0:0:0 | & | +| main.rs:1585:13:1585:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1585:13:1585:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1585:13:1585:28 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1585:13:1585:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1585:22:1585:26 | other | | file://:0:0:0:0 | & | +| main.rs:1585:22:1585:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1585:22:1585:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1585:33:1585:36 | self | | file://:0:0:0:0 | & | +| main.rs:1585:33:1585:36 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1585:33:1585:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1585:33:1585:48 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1585:42:1585:46 | other | | file://:0:0:0:0 | & | +| main.rs:1585:42:1585:46 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1585:42:1585:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1588:15:1588:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1588:15:1588:19 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1588:22:1588:26 | other | | file://:0:0:0:0 | & | +| main.rs:1588:22:1588:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1588:44:1590:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1589:13:1589:16 | self | | file://:0:0:0:0 | & | +| main.rs:1589:13:1589:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1589:13:1589:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1589:13:1589:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1589:13:1589:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1589:23:1589:27 | other | | file://:0:0:0:0 | & | +| main.rs:1589:23:1589:27 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1589:23:1589:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1589:34:1589:37 | self | | file://:0:0:0:0 | & | +| main.rs:1589:34:1589:37 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1589:34:1589:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1589:34:1589:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1589:44:1589:48 | other | | file://:0:0:0:0 | & | +| main.rs:1589:44:1589:48 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1589:44:1589:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1596:13:1596:18 | i64_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1596:22:1596:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1596:23:1596:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1596:23:1596:34 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1596:31:1596:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1597:13:1597:18 | i64_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1597:22:1597:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1597:23:1597:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1597:23:1597:34 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1597:31:1597:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1598:13:1598:18 | i64_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1598:22:1598:34 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1598:23:1598:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1598:23:1598:33 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1598:30:1598:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1599:13:1599:18 | i64_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1599:22:1599:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1599:23:1599:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1599:23:1599:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1599:31:1599:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1600:13:1600:18 | i64_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1600:22:1600:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1600:23:1600:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1600:23:1600:34 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1600:30:1600:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1601:13:1601:18 | i64_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1601:22:1601:37 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1601:23:1601:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1601:23:1601:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1601:32:1601:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1604:13:1604:19 | i64_add | | {EXTERNAL LOCATION} | i64 | +| main.rs:1604:23:1604:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1604:23:1604:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1604:31:1604:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1605:13:1605:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | +| main.rs:1605:23:1605:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1605:23:1605:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1605:31:1605:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1606:13:1606:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | +| main.rs:1606:23:1606:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1606:23:1606:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1606:31:1606:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1607:13:1607:19 | i64_div | | {EXTERNAL LOCATION} | i64 | +| main.rs:1607:23:1607:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1607:23:1607:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1607:31:1607:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1608:13:1608:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | +| main.rs:1608:23:1608:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1608:23:1608:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1608:31:1608:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1611:13:1611:30 | mut i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1611:34:1611:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1612:9:1612:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1612:9:1612:31 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1612:27:1612:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1614:13:1614:30 | mut i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1614:34:1614:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1615:9:1615:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1615:9:1615:31 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1615:27:1615:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1617:13:1617:30 | mut i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1617:34:1617:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1618:9:1618:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1618:9:1618:31 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1618:27:1618:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1620:13:1620:30 | mut i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1620:34:1620:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1621:9:1621:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1621:9:1621:31 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1621:27:1621:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1623:13:1623:30 | mut i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1623:34:1623:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1624:9:1624:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1624:9:1624:31 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1624:27:1624:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1627:13:1627:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | +| main.rs:1627:26:1627:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1627:26:1627:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1627:34:1627:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1628:13:1628:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1628:25:1628:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1628:25:1628:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1628:33:1628:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1629:13:1629:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1629:26:1629:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1629:26:1629:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1629:34:1629:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1630:13:1630:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | +| main.rs:1630:23:1630:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1630:23:1630:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1630:32:1630:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1631:13:1631:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | +| main.rs:1631:23:1631:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1631:23:1631:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1631:32:1631:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1634:13:1634:33 | mut i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1634:37:1634:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1635:9:1635:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1635:9:1635:34 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1635:30:1635:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1637:13:1637:32 | mut i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1637:36:1637:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1638:9:1638:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1638:9:1638:33 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1638:29:1638:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1640:13:1640:33 | mut i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1640:37:1640:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1641:9:1641:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1641:9:1641:34 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1641:30:1641:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1643:13:1643:30 | mut i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1643:34:1643:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1644:9:1644:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1644:9:1644:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1644:28:1644:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1646:13:1646:30 | mut i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1646:34:1646:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1647:9:1647:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1647:9:1647:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1647:28:1647:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1649:13:1649:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | +| main.rs:1649:23:1649:28 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1649:24:1649:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1650:13:1650:19 | i64_not | | {EXTERNAL LOCATION} | i64 | +| main.rs:1650:23:1650:28 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1650:24:1650:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1653:13:1653:14 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1653:18:1653:36 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1653:28:1653:28 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1653:28:1653:28 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1653:34:1653:34 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1653:34:1653:34 | 2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1654:13:1654:14 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1654:18:1654:36 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1654:28:1654:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1654:28:1654:28 | 3 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1654:34:1654:34 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1654:34:1654:34 | 4 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1657:13:1657:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1657:23:1657:24 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1657:23:1657:30 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1657:29:1657:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1658:13:1658:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1658:23:1658:24 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1658:23:1658:30 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1658:29:1658:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1659:13:1659:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1659:23:1659:24 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1659:23:1659:29 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1659:28:1659:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1660:13:1660:19 | vec2_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1660:23:1660:24 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1660:23:1660:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1660:29:1660:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1661:13:1661:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1661:23:1661:24 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1661:23:1661:29 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1661:28:1661:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1662:13:1662:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1662:23:1662:24 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1662:23:1662:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1662:29:1662:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1665:13:1665:20 | vec2_add | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1665:24:1665:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1665:24:1665:30 | ... + ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1665:29:1665:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1666:13:1666:20 | vec2_sub | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1666:24:1666:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1666:24:1666:30 | ... - ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1666:29:1666:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1667:13:1667:20 | vec2_mul | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1667:24:1667:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1667:24:1667:30 | ... * ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1667:29:1667:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1668:13:1668:20 | vec2_div | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1668:24:1668:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1668:24:1668:30 | ... / ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1668:29:1668:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1669:13:1669:20 | vec2_rem | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1669:24:1669:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1669:24:1669:30 | ... % ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1669:29:1669:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1672:13:1672:31 | mut vec2_add_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1672:35:1672:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1673:9:1673:23 | vec2_add_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1673:9:1673:29 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1673:28:1673:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1675:13:1675:31 | mut vec2_sub_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1675:35:1675:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1676:9:1676:23 | vec2_sub_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1676:9:1676:29 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1676:28:1676:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1678:13:1678:31 | mut vec2_mul_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1678:35:1678:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1679:9:1679:23 | vec2_mul_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1679:9:1679:29 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1679:28:1679:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1681:13:1681:31 | mut vec2_div_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1681:35:1681:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1682:9:1682:23 | vec2_div_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1682:9:1682:29 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1682:28:1682:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1684:13:1684:31 | mut vec2_rem_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1684:35:1684:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1685:9:1685:23 | vec2_rem_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1685:9:1685:29 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1685:28:1685:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1688:13:1688:23 | vec2_bitand | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1688:27:1688:28 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1688:27:1688:33 | ... & ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1688:32:1688:33 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1689:13:1689:22 | vec2_bitor | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1689:26:1689:27 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1689:26:1689:32 | ... \| ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1689:31:1689:32 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1690:13:1690:23 | vec2_bitxor | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1690:27:1690:28 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1690:27:1690:33 | ... ^ ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1690:32:1690:33 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1691:13:1691:20 | vec2_shl | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1691:24:1691:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1691:24:1691:33 | ... << ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1691:30:1691:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1692:13:1692:20 | vec2_shr | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1692:24:1692:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1692:24:1692:33 | ... >> ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1692:30:1692:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1695:13:1695:34 | mut vec2_bitand_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1695:38:1695:39 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1696:9:1696:26 | vec2_bitand_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1696:9:1696:32 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1696:31:1696:32 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1698:13:1698:33 | mut vec2_bitor_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1698:37:1698:38 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1699:9:1699:25 | vec2_bitor_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1699:9:1699:31 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1699:30:1699:31 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1701:13:1701:34 | mut vec2_bitxor_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1701:38:1701:39 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1702:9:1702:26 | vec2_bitxor_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1702:9:1702:32 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1702:31:1702:32 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1704:13:1704:31 | mut vec2_shl_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1704:35:1704:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1705:9:1705:23 | vec2_shl_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1705:9:1705:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1705:29:1705:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1707:13:1707:31 | mut vec2_shr_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1707:35:1707:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1708:9:1708:23 | vec2_shr_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1708:9:1708:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1708:29:1708:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1711:13:1711:20 | vec2_neg | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1711:24:1711:26 | - ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1711:25:1711:26 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1712:13:1712:20 | vec2_not | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1712:24:1712:26 | ! ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1712:25:1712:26 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1715:13:1715:24 | default_vec2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1715:28:1715:45 | ...::default(...) | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1716:13:1716:26 | vec2_zero_plus | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1716:30:1716:48 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1716:30:1716:63 | ... + ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1716:40:1716:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1716:40:1716:40 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1716:46:1716:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1716:46:1716:46 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1716:52:1716:63 | default_vec2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1720:13:1720:24 | default_vec2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1720:28:1720:45 | ...::default(...) | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1721:13:1721:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | +| main.rs:1721:30:1721:48 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1721:30:1721:64 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1721:40:1721:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1721:40:1721:40 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1721:46:1721:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1721:46:1721:46 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1721:53:1721:64 | default_vec2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1731:18:1731:21 | SelfParam | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1734:25:1736:5 | { ... } | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1735:9:1735:10 | S1 | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1738:41:1740:5 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1738:41:1740:5 | { ... } | | main.rs:1738:16:1738:39 | ImplTraitTypeRepr | +| main.rs:1738:41:1740:5 | { ... } | Output | main.rs:1728:5:1728:14 | S1 | +| main.rs:1739:9:1739:20 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1739:9:1739:20 | { ... } | | main.rs:1738:16:1738:39 | ImplTraitTypeRepr | +| main.rs:1739:9:1739:20 | { ... } | Output | main.rs:1728:5:1728:14 | S1 | +| main.rs:1739:17:1739:18 | S1 | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1748:13:1748:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | +| main.rs:1748:13:1748:42 | SelfParam | Ptr | file://:0:0:0:0 | & | +| main.rs:1748:13:1748:42 | SelfParam | Ptr.&T | main.rs:1742:5:1742:14 | S2 | +| main.rs:1749:13:1749:15 | _cx | | file://:0:0:0:0 | & | +| main.rs:1749:13:1749:15 | _cx | &T | {EXTERNAL LOCATION} | Context | +| main.rs:1750:44:1752:9 | { ... } | | {EXTERNAL LOCATION} | Poll | +| main.rs:1750:44:1752:9 | { ... } | T | main.rs:1728:5:1728:14 | S1 | +| main.rs:1751:13:1751:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | +| main.rs:1751:13:1751:38 | ...::Ready(...) | T | main.rs:1728:5:1728:14 | S1 | +| main.rs:1751:36:1751:37 | S1 | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1755:41:1757:5 | { ... } | | main.rs:1742:5:1742:14 | S2 | +| main.rs:1755:41:1757:5 | { ... } | | main.rs:1755:16:1755:39 | ImplTraitTypeRepr | +| main.rs:1756:9:1756:10 | S2 | | main.rs:1742:5:1742:14 | S2 | +| main.rs:1756:9:1756:10 | S2 | | main.rs:1755:16:1755:39 | ImplTraitTypeRepr | +| main.rs:1760:9:1760:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1760:9:1760:12 | f1(...) | Output | main.rs:1728:5:1728:14 | S1 | +| main.rs:1760:9:1760:18 | await ... | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1761:9:1761:12 | f2(...) | | main.rs:1738:16:1738:39 | ImplTraitTypeRepr | +| main.rs:1761:9:1761:18 | await ... | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1762:9:1762:12 | f3(...) | | main.rs:1755:16:1755:39 | ImplTraitTypeRepr | +| main.rs:1762:9:1762:18 | await ... | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1763:9:1763:10 | S2 | | main.rs:1742:5:1742:14 | S2 | +| main.rs:1763:9:1763:16 | await S2 | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1764:13:1764:13 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1764:13:1764:13 | b | Output | main.rs:1728:5:1728:14 | S1 | +| main.rs:1764:17:1764:28 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1764:17:1764:28 | { ... } | Output | main.rs:1728:5:1728:14 | S1 | +| main.rs:1764:25:1764:26 | S1 | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1765:9:1765:9 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1765:9:1765:9 | b | Output | main.rs:1728:5:1728:14 | S1 | +| main.rs:1765:9:1765:15 | await b | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1774:15:1774:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1774:15:1774:19 | SelfParam | &T | main.rs:1773:5:1775:5 | Self [trait Trait1] | +| main.rs:1778:15:1778:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1778:15:1778:19 | SelfParam | &T | main.rs:1777:5:1779:5 | Self [trait Trait2] | +| main.rs:1782:15:1782:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1782:15:1782:19 | SelfParam | &T | main.rs:1770:5:1770:14 | S1 | +| main.rs:1786:15:1786:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1786:15:1786:19 | SelfParam | &T | main.rs:1770:5:1770:14 | S1 | +| main.rs:1789:37:1791:5 | { ... } | | main.rs:1770:5:1770:14 | S1 | +| main.rs:1789:37:1791:5 | { ... } | | main.rs:1789:16:1789:35 | ImplTraitTypeRepr | +| main.rs:1790:9:1790:10 | S1 | | main.rs:1770:5:1770:14 | S1 | +| main.rs:1790:9:1790:10 | S1 | | main.rs:1789:16:1789:35 | ImplTraitTypeRepr | +| main.rs:1794:18:1794:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1794:18:1794:22 | SelfParam | &T | main.rs:1793:5:1795:5 | Self [trait MyTrait] | +| main.rs:1798:18:1798:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1798:18:1798:22 | SelfParam | &T | main.rs:1770:5:1770:14 | S1 | +| main.rs:1798:31:1800:9 | { ... } | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1799:13:1799:14 | S2 | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1803:45:1805:5 | { ... } | | main.rs:1770:5:1770:14 | S1 | +| main.rs:1803:45:1805:5 | { ... } | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1804:9:1804:10 | S1 | | main.rs:1770:5:1770:14 | S1 | +| main.rs:1804:9:1804:10 | S1 | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1807:41:1807:41 | t | | main.rs:1807:26:1807:38 | B | +| main.rs:1807:52:1809:5 | { ... } | | main.rs:1807:23:1807:23 | A | +| main.rs:1808:9:1808:9 | t | | main.rs:1807:26:1807:38 | B | +| main.rs:1808:9:1808:17 | t.get_a() | | main.rs:1807:23:1807:23 | A | +| main.rs:1811:26:1811:26 | t | | main.rs:1811:29:1811:43 | ImplTraitTypeRepr | +| main.rs:1811:51:1813:5 | { ... } | | main.rs:1811:23:1811:23 | A | +| main.rs:1812:9:1812:9 | t | | main.rs:1811:29:1811:43 | ImplTraitTypeRepr | +| main.rs:1812:9:1812:17 | t.get_a() | | main.rs:1811:23:1811:23 | A | +| main.rs:1816:13:1816:13 | x | | main.rs:1789:16:1789:35 | ImplTraitTypeRepr | +| main.rs:1816:17:1816:20 | f1(...) | | main.rs:1789:16:1789:35 | ImplTraitTypeRepr | +| main.rs:1817:9:1817:9 | x | | main.rs:1789:16:1789:35 | ImplTraitTypeRepr | +| main.rs:1818:9:1818:9 | x | | main.rs:1789:16:1789:35 | ImplTraitTypeRepr | +| main.rs:1819:13:1819:13 | a | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1819:17:1819:32 | get_a_my_trait(...) | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1820:13:1820:13 | b | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1820:17:1820:33 | uses_my_trait1(...) | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1820:32:1820:32 | a | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1821:13:1821:13 | a | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1821:17:1821:32 | get_a_my_trait(...) | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1822:13:1822:13 | c | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1822:17:1822:33 | uses_my_trait2(...) | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1822:32:1822:32 | a | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1823:13:1823:13 | d | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1823:17:1823:34 | uses_my_trait2(...) | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1823:32:1823:33 | S1 | | main.rs:1770:5:1770:14 | S1 | +| main.rs:1834:16:1834:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1834:16:1834:20 | SelfParam | &T | main.rs:1830:5:1831:13 | S | +| main.rs:1834:31:1836:9 | { ... } | | main.rs:1830:5:1831:13 | S | +| main.rs:1835:13:1835:13 | S | | main.rs:1830:5:1831:13 | S | +| main.rs:1845:26:1847:9 | { ... } | | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1845:26:1847:9 | { ... } | T | main.rs:1844:10:1844:10 | T | +| main.rs:1846:13:1846:38 | MyVec {...} | | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1846:13:1846:38 | MyVec {...} | T | main.rs:1844:10:1844:10 | T | +| main.rs:1846:27:1846:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:1846:27:1846:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:1846:27:1846:36 | ...::new(...) | T | main.rs:1844:10:1844:10 | T | +| main.rs:1849:17:1849:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1849:17:1849:25 | SelfParam | &T | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1849:17:1849:25 | SelfParam | &T.T | main.rs:1844:10:1844:10 | T | +| main.rs:1849:28:1849:32 | value | | main.rs:1844:10:1844:10 | T | +| main.rs:1850:13:1850:16 | self | | file://:0:0:0:0 | & | +| main.rs:1850:13:1850:16 | self | &T | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1850:13:1850:16 | self | &T.T | main.rs:1844:10:1844:10 | T | +| main.rs:1850:13:1850:21 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:1850:13:1850:21 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:1850:13:1850:21 | self.data | T | main.rs:1844:10:1844:10 | T | +| main.rs:1850:28:1850:32 | value | | main.rs:1844:10:1844:10 | T | +| main.rs:1858:18:1858:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1858:18:1858:22 | SelfParam | &T | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1858:18:1858:22 | SelfParam | &T.T | main.rs:1854:10:1854:10 | T | +| main.rs:1858:25:1858:29 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:1858:56:1860:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1858:56:1860:9 | { ... } | &T | main.rs:1854:10:1854:10 | T | +| main.rs:1859:13:1859:29 | &... | | file://:0:0:0:0 | & | +| main.rs:1859:13:1859:29 | &... | &T | main.rs:1854:10:1854:10 | T | +| main.rs:1859:14:1859:17 | self | | file://:0:0:0:0 | & | +| main.rs:1859:14:1859:17 | self | &T | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1859:14:1859:17 | self | &T.T | main.rs:1854:10:1854:10 | T | +| main.rs:1859:14:1859:22 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:1859:14:1859:22 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:1859:14:1859:22 | self.data | T | main.rs:1854:10:1854:10 | T | +| main.rs:1859:14:1859:29 | ...[index] | | main.rs:1854:10:1854:10 | T | +| main.rs:1859:24:1859:28 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:1863:22:1863:26 | slice | | file://:0:0:0:0 | & | +| main.rs:1863:22:1863:26 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:1863:22:1863:26 | slice | &T.[T] | main.rs:1830:5:1831:13 | S | +| main.rs:1864:13:1864:13 | x | | main.rs:1830:5:1831:13 | S | +| main.rs:1864:17:1864:21 | slice | | file://:0:0:0:0 | & | +| main.rs:1864:17:1864:21 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:1864:17:1864:21 | slice | &T.[T] | main.rs:1830:5:1831:13 | S | +| main.rs:1864:17:1864:24 | slice[0] | | main.rs:1830:5:1831:13 | S | +| main.rs:1864:17:1864:30 | ... .foo() | | main.rs:1830:5:1831:13 | S | +| main.rs:1864:23:1864:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1868:13:1868:19 | mut vec | | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1868:13:1868:19 | mut vec | T | main.rs:1830:5:1831:13 | S | +| main.rs:1868:23:1868:34 | ...::new(...) | | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1868:23:1868:34 | ...::new(...) | T | main.rs:1830:5:1831:13 | S | +| main.rs:1869:9:1869:11 | vec | | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1869:9:1869:11 | vec | T | main.rs:1830:5:1831:13 | S | +| main.rs:1869:18:1869:18 | S | | main.rs:1830:5:1831:13 | S | +| main.rs:1870:9:1870:11 | vec | | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1870:9:1870:11 | vec | T | main.rs:1830:5:1831:13 | S | +| main.rs:1870:13:1870:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1872:13:1872:14 | xs | | file://:0:0:0:0 | [] | +| main.rs:1872:13:1872:14 | xs | | file://:0:0:0:0 | [] | +| main.rs:1872:13:1872:14 | xs | [T;...] | main.rs:1830:5:1831:13 | S | +| main.rs:1872:13:1872:14 | xs | [T] | main.rs:1830:5:1831:13 | S | +| main.rs:1872:21:1872:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1872:26:1872:28 | [...] | | file://:0:0:0:0 | [] | +| main.rs:1872:26:1872:28 | [...] | | file://:0:0:0:0 | [] | +| main.rs:1872:26:1872:28 | [...] | [T;...] | main.rs:1830:5:1831:13 | S | +| main.rs:1872:26:1872:28 | [...] | [T] | main.rs:1830:5:1831:13 | S | +| main.rs:1872:27:1872:27 | S | | main.rs:1830:5:1831:13 | S | +| main.rs:1873:13:1873:13 | x | | main.rs:1830:5:1831:13 | S | +| main.rs:1873:17:1873:18 | xs | | file://:0:0:0:0 | [] | +| main.rs:1873:17:1873:18 | xs | | file://:0:0:0:0 | [] | +| main.rs:1873:17:1873:18 | xs | [T;...] | main.rs:1830:5:1831:13 | S | +| main.rs:1873:17:1873:18 | xs | [T] | main.rs:1830:5:1831:13 | S | +| main.rs:1873:17:1873:21 | xs[0] | | main.rs:1830:5:1831:13 | S | +| main.rs:1873:17:1873:27 | ... .foo() | | main.rs:1830:5:1831:13 | S | +| main.rs:1873:20:1873:20 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1875:23:1875:25 | &xs | | file://:0:0:0:0 | & | +| main.rs:1875:23:1875:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:1875:23:1875:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:1875:23:1875:25 | &xs | &T.[T;...] | main.rs:1830:5:1831:13 | S | +| main.rs:1875:23:1875:25 | &xs | &T.[T] | main.rs:1830:5:1831:13 | S | +| main.rs:1875:24:1875:25 | xs | | file://:0:0:0:0 | [] | +| main.rs:1875:24:1875:25 | xs | | file://:0:0:0:0 | [] | +| main.rs:1875:24:1875:25 | xs | [T;...] | main.rs:1830:5:1831:13 | S | +| main.rs:1875:24:1875:25 | xs | [T] | main.rs:1830:5:1831:13 | S | +| main.rs:1881:25:1881:35 | "Hello, {}" | | {EXTERNAL LOCATION} | str | +| main.rs:1881:25:1881:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | +| main.rs:1881:25:1881:45 | { ... } | | {EXTERNAL LOCATION} | String | +| main.rs:1881:38:1881:45 | "World!" | | {EXTERNAL LOCATION} | str | +| main.rs:1887:19:1887:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1887:19:1887:23 | SelfParam | &T | main.rs:1886:5:1888:5 | Self [trait MyAdd] | +| main.rs:1887:26:1887:30 | value | | main.rs:1886:17:1886:17 | T | +| main.rs:1892:19:1892:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1892:19:1892:23 | SelfParam | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1892:26:1892:30 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:1892:46:1894:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1893:13:1893:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:1899:19:1899:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1899:19:1899:23 | SelfParam | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1899:26:1899:30 | value | | file://:0:0:0:0 | & | +| main.rs:1899:26:1899:30 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1899:47:1901:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1899:47:1901:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1899:47:1901:9 | { ... } | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1900:13:1900:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1900:13:1900:18 | * ... | | file://:0:0:0:0 | & | +| main.rs:1900:13:1900:18 | * ... | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1900:14:1900:18 | value | | file://:0:0:0:0 | & | +| main.rs:1900:14:1900:18 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1906:19:1906:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1906:19:1906:23 | SelfParam | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1906:26:1906:30 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:1906:47:1912:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:1906:47:1912:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1907:13:1911:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:1907:13:1911:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| main.rs:1907:16:1907:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:1907:22:1909:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:1907:22:1909:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1908:17:1908:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1908:17:1908:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1909:20:1911:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:1909:20:1911:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1910:17:1910:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1910:17:1910:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1916:13:1916:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1916:13:1916:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1916:22:1916:23 | 73 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1916:22:1916:23 | 73 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1917:9:1917:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1917:9:1917:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1917:9:1917:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1917:18:1917:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1918:9:1918:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1918:9:1918:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1918:9:1918:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1918:18:1918:22 | &5i64 | | file://:0:0:0:0 | & | +| main.rs:1918:18:1918:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1918:19:1918:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1919:9:1919:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1919:9:1919:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1919:9:1919:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1919:18:1919:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1927:5:1927:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:1928:5:1928:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:1928:20:1928:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:1928:41:1928:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:1944:5:1944:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | testFailures diff --git a/rust/ql/test/query-tests/security/CWE-022/options.yml b/rust/ql/test/query-tests/security/CWE-022/options.yml index 5277d967cc09..e0b9bbfb5cf1 100644 --- a/rust/ql/test/query-tests/security/CWE-022/options.yml +++ b/rust/ql/test/query-tests/security/CWE-022/options.yml @@ -1,2 +1,3 @@ +qltest_use_nightly: true qltest_dependencies: - poem = { version = "3.1.7" } diff --git a/rust/ql/test/query-tests/security/CWE-022/rust-toolchain.toml b/rust/ql/test/query-tests/security/CWE-022/rust-toolchain.toml deleted file mode 100644 index bd988b083968..000000000000 --- a/rust/ql/test/query-tests/security/CWE-022/rust-toolchain.toml +++ /dev/null @@ -1,8 +0,0 @@ -# This file specifies the Rust version used to develop and test the -# extractors written in rust. It is set to the lowest version of Rust -# we want to support. - -[toolchain] -channel = "nightly" -profile = "minimal" -components = [ ] diff --git a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected index 767f33660084..4c01286c489c 100644 --- a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected @@ -1,30 +1,30 @@ multiplePathResolutions | main.rs:218:14:218:17 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:218:14:218:17 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:218:14:218:17 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:218:14:218:25 | ...::malloc | file://:0:0:0:0 | fn malloc | | main.rs:218:14:218:25 | ...::malloc | file://:0:0:0:0 | fn malloc | | main.rs:219:13:219:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:219:13:219:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:219:13:219:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:219:13:219:24 | ...::malloc | file://:0:0:0:0 | fn malloc | | main.rs:219:13:219:24 | ...::malloc | file://:0:0:0:0 | fn malloc | | main.rs:220:13:220:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:220:13:220:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:220:13:220:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:220:13:220:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | | main.rs:220:13:220:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | | main.rs:221:13:221:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:221:13:221:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:221:13:221:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:221:13:221:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | | main.rs:221:13:221:31 | ...::aligned_alloc | file://:0:0:0:0 | fn aligned_alloc | | main.rs:222:13:222:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:222:13:222:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:222:13:222:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:222:13:222:24 | ...::calloc | file://:0:0:0:0 | fn calloc | | main.rs:222:13:222:24 | ...::calloc | file://:0:0:0:0 | fn calloc | | main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:223:13:223:24 | ...::calloc | file://:0:0:0:0 | fn calloc | | main.rs:223:13:223:24 | ...::calloc | file://:0:0:0:0 | fn calloc | | main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | -| main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | +| main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.174) | | main.rs:224:13:224:25 | ...::realloc | file://:0:0:0:0 | fn realloc | | main.rs:224:13:224:25 | ...::realloc | file://:0:0:0:0 | fn realloc | | main.rs:229:13:229:37 | ...::with_capacity | file://:0:0:0:0 | fn with_capacity | diff --git a/rust/ql/test/query-tests/security/CWE-770/Cargo.lock b/rust/ql/test/query-tests/security/CWE-770/Cargo.lock index af842b2d7e42..444f7a92c563 100644 --- a/rust/ql/test/query-tests/security/CWE-770/Cargo.lock +++ b/rust/ql/test/query-tests/security/CWE-770/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "libc" -version = "0.2.173" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8cfeafaffdbc32176b64fb251369d52ea9f0a8fbc6f8759edffef7b525d64bb" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "test" diff --git a/rust/ql/test/query-tests/security/CWE-770/options.yml b/rust/ql/test/query-tests/security/CWE-770/options.yml index 95a17a53b431..5a0244bf92b8 100644 --- a/rust/ql/test/query-tests/security/CWE-770/options.yml +++ b/rust/ql/test/query-tests/security/CWE-770/options.yml @@ -1,3 +1,3 @@ -qltest_cargo_check: true +qltest_use_nightly: true qltest_dependencies: - - libc = { version = "0.2.11" } + - libc = { version = "0.2.174" } diff --git a/rust/ql/test/query-tests/security/CWE-770/rust-toolchain.toml b/rust/ql/test/query-tests/security/CWE-770/rust-toolchain.toml deleted file mode 100644 index 5d56faf9ae08..000000000000 --- a/rust/ql/test/query-tests/security/CWE-770/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "nightly" diff --git a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected index d326b510db4c..c3a7f4451fb2 100644 --- a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected @@ -1,13 +1,13 @@ multiplePathResolutions -| deallocation.rs:106:16:106:19 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| deallocation.rs:106:16:106:19 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | deallocation.rs:106:16:106:19 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | deallocation.rs:106:16:106:27 | ...::malloc | file://:0:0:0:0 | fn malloc | | deallocation.rs:106:16:106:27 | ...::malloc | file://:0:0:0:0 | fn malloc | -| deallocation.rs:112:3:112:6 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| deallocation.rs:112:3:112:6 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | deallocation.rs:112:3:112:6 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | deallocation.rs:112:3:112:12 | ...::free | file://:0:0:0:0 | fn free | | deallocation.rs:112:3:112:12 | ...::free | file://:0:0:0:0 | fn free | -| deallocation.rs:112:29:112:32 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | +| deallocation.rs:112:29:112:32 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | deallocation.rs:112:29:112:32 | libc | file://:0:0:0:0 | Crate(libc@0.2.173) | | deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | | deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | diff --git a/rust/ql/test/query-tests/security/CWE-825/options.yml b/rust/ql/test/query-tests/security/CWE-825/options.yml index 95a17a53b431..46c4e09d1210 100644 --- a/rust/ql/test/query-tests/security/CWE-825/options.yml +++ b/rust/ql/test/query-tests/security/CWE-825/options.yml @@ -1,3 +1,3 @@ -qltest_cargo_check: true +qltest_use_nightly: true qltest_dependencies: - libc = { version = "0.2.11" } diff --git a/rust/ql/test/query-tests/security/CWE-825/rust-toolchain.toml b/rust/ql/test/query-tests/security/CWE-825/rust-toolchain.toml deleted file mode 100644 index afeb59293258..000000000000 --- a/rust/ql/test/query-tests/security/CWE-825/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "nightly-2025-03-17"